# CryptoAPI top level Makefile

KDIR := /usr/src/linux

LOOP := iv

PACKAGE := cryptoapi
VERSION := 0.1.0-pre4

COMPILE := $(MAKE) -f Makefile.modules KDIR=$(KDIR) 

TARGETS :=

CIPHERS = $(shell ls kernel/crypto/ciphers | \
	egrep 'cipher-.*\.c$$' | sed -e 's/\.c//g' -e 's/cipher-//g')

DIGESTS = $(shell ls kernel/crypto/digests | \
	egrep 'digest-.*\.c$$' | sed -e 's/\.c//g' -e 's/digest-//g')

HEADERS = \
	crypto.h wordops.h

KERNEL_HEADERS = \
	$(patsubst %, kernel/include/linux/%, $(HEADERS))

CRYPTO_MODULES = \
	kernel/crypto/cryptoapi.o \
	$(patsubst %,kernel/crypto/ciphers/cipher-%.o,$(CIPHERS)) \
	$(patsubst %,kernel/crypto/digests/digest-%.o,$(DIGESTS)) \
	kernel/crypto/cryptoloop/cryptoloop.o 

default:
	@echo \
"try \`make (modules or patch-kernel) KDIR=(kernelsrcdir) LOOP=(iv or jari)'"

Rules.make: $(KDIR)/Rules.make
	cp -pf $(KDIR)/Rules.make .

arch: $(KDIR)/arch
	rm -f arch/
	ln -s $(KDIR)/arch .

include: $(KDIR)/include
	rm -f include/
	ln -s $(KDIR)/include .

patch-kernel-noloop: version
	cp -R kernel/crypto $(KDIR)
	cp -R kernel/Documentation/cryptoapi $(KDIR)/Documentation
	cp $(KERNEL_HEADERS) $(KDIR)/include/linux
	cp patches/linux-$(KPATCHLEVEL)/kbuild-$(KSUBLEVEL) $(KDIR)

	cp $(KDIR)/Documentation/Configure.help \
		$(KDIR)/Documentation/.Configure.help
	cat kernel/crypto/Config.help \
		>>$(KDIR)/Documentation/Configure.help
	cat kernel/crypto/ciphers/Config.help \
		>>$(KDIR)/Documentation/Configure.help
	cat kernel/crypto/digests/Config.help \
		>>$(KDIR)/Documentation/Configure.help

	cd $(KDIR) && \
		patch -p1 <kbuild-$(KSUBLEVEL)


unpatch-kernel-noloop: version
	rm -rf $(KDIR)/crypto $(KDIR)/Documentation/cryptoapi
	rm -rf \
		$(patsubst %, $(KDIR)/include/linux/%, $(HEADERS))
	
	cd $(KDIR) && \
		patch -R -p1 <kbuild-$(KSUBLEVEL)
	
	mv $(KDIR)/Documentation/.Configure.help \
		$(KDIR)/Documentation/Configure.help
	rm -f $(KDIR)/kbuild-$(KSUBLEVEL)


patch-kernel: 
	make patch-kernel-noloop $(KDIR)
	make patch-loop

unpatch-kernel: 
	make unpatch-kernel-noloop $(KDIR)
	make unpatch-loop

patch-loop: version
	cd patches && \
		./findpatch.pl $(KDIR) $(LOOP)

unpatch-loop: version	
	cd patches && \
		./findpatch.pl $(KDIR) $(LOOP) -R

modules: Rules.make arch include version
ifneq ($(KVERSION),$(KLOCALVERSION))
		@echo "Warning: $KVERSION and uname -r differ:"
		@echo "modules are being installed in /lib/modules/$(KVERSION)"
endif

	$(COMPILE) $(CRYPTO_MODULES)

install_modules: modules
	mkdir -p --verbose /lib/modules/$(KVERSION)/cryptoapi
	cp -v $(CRYPTO_MODULES) /lib/modules/$(KVERSION)/cryptoapi

version Makefile.version: Rules.make arch include $(KDIR)/Makefile
	$(COMPILE) $@

KVERSION = $(shell cat version)
KSUBLEVEL = $(shell cat version | cut -f 1 -d '-')
KPATCHLEVEL = $(shell cat version | cut -f -2 -d '.')
KLOCALVERSION = $(shell uname -r)
DISTDIR := $(PACKAGE)-$(VERSION)
DISTFILES := Makefile Makefile.modules ChangeLog

clean:
	rm -fv Makefile.version Rules.make arch include version Configure.help*
	rm -fv $(CRYPTO_MODULES)
	find -type f -name '.*.o.flags' -exec rm -fv {} \;

dist: clean
	-rm -f $(DISTDIR).tar.gz	
	-rm -rf $(DISTDIR)	
	mkdir $(DISTDIR)
	cp -v $(DISTFILES) $(DISTDIR)
	cp -Rv kernel patches utils $(DISTDIR)
	find $(DISTDIR)/ -type d -name 'CVS' | xargs rm -rfv 
	find $(DISTDIR)/ -type f -name '*~' | xargs rm -rfv 
	tar cvf $(DISTDIR).tar $(DISTDIR)
	gzip -9v $(DISTDIR).tar
	rm -rf $(DISTDIR)
