# 
# This makefile constructs a new symlinked source tree
# which is then build using the kernel kbuild system.
#
# Different makefiles are used for 2.4 and 2.6 kernels

DEFINE_KERNEL_SOURCE	= yes
include			../../../Makefile.top

KUNAME			= `cat ../build/.kuname`
LV			:= $(shell test -f $(KERNEL_SOURCE)/Rules.make && echo 24 || echo 26)
MP			:= $(shell test -f $(KERNEL_SOURCE)/Rules.make && echo "o" || echo "ko")
MOD_TARGET		:= ../build/mol.$(MP)

BUILD			= SUBDIRS="$$PWD/../build" modules
DEPS_24			= $(MAKE) --no-print-directory -C $(KERNEL_SOURCE) SUBDIRS="$$PWD/../build" depend 
DEPS_26			= true

KILL_WARNING_26		= 2>&1 | sed -e '/\*\*\*.*SUBDIRS/ d' \
				     -e '/\*\*\*.*inconsistencies/ d' \
				     -e '/scripts\/Makefile.*complain if/ d' 1>&2

sanity-test:
	@test -d $(KERNEL_SOURCE) || { \
		echo "Kernel source missing. KERNEL_SOURCE=$(KERNEL_SOURCE)"; exit 1; }

RELBUILD	= ../build/relbuild.pl
make-relbuild:
	@test -d ../build || mkdir ../build
	@rm -f $(RELBUILD) ../build/checker.pl
	@echo "#!/usr/bin/perl -w" > $(RELBUILD)
	@echo '$$'"NM = '$(NM)';" >> $(RELBUILD)
	@cp -f $(RELBUILD) ../build/checker.pl
	@echo '$$'"OBJDUMP = '$(OBJDUMP)';" >> $(RELBUILD)
	@echo '$$'"GCC = '$(CC)';" >> $(RELBUILD)
	@echo '$$'"ARCH = '$(ARCH)';" >> $(RELBUILD)
	@cat relbuild.pl >> $(RELBUILD)
	@cat checker.pl >> ../build/checker.pl
	@chmod +x-w $(RELBUILD) ../build/checker.pl

setup-common: sanity-test make-relbuild
	@cd .. ; for x in *.inc *.c *.S ; do ln -sf ../$$x build || exit 1 ; done
	@for x in *.S ; do ln -sf ../Linux/$$x ../build || exit 1 ; done

	@ln -sf ../../../scripts/asfilter ../build
	@ln -sf ../Linux/Makefile.$(LV) ../build/Makefile
	@for x in *.h *.S ; do ln -sf ../Linux/$$x ../build || exit 1 ; done 
	@for x in *.c ; do ln -sf ../Linux/$$x ../build/_$$x || exit 1 ; done
	@cd ../../shared/ ; for x in *.h *.m4 *.c ; do \
		ln -sf ../../shared/$$x ../kmod/build/$$x || exit 1 ; \
	done
	@cd ../include/ ; for x in *.h ; do \
		ln -sf ../include/$$x ../build/$$x || exit 1 ; \
	done
	@ln -sf $(ARCHINCLUDES)/molversion.h ../build/

all-local: setup-common
	@$(DEPS_$(LV)) > /dev/null 2>&1 || ( echo "$(DEPS_$(LV))" ; $(DEPS_$(LV)) ; exit 1 ; )
	@{ $(MAKE) --no-print-directory -C $(KERNEL_SOURCE) $(BUILD) || exit $$? ; } $(KILL_WARNING_$(LV))
	@../build/checker.pl $(MOD_TARGET) || (echo "checker.pl failed" ; rm $(MOD_TARGET) ; exit 1)
#	$(STRIP) -g build mol.o

	@printf "    %-29s : %s\n" "Kernel source" "$(KERNEL_SOURCE)"
	@printf "    %-29s : %s\n" "Module compiled for" "$(KUNAME)"
	@printf "    %-29s : %s\n" "Running kernel" \
		"`$(top_srcdir)/scripts/mol_uname -p`"

	$(INSTALL) -d $(top_srcdir)/mollib/modules/$(KUNAME)
	ln -f $(MOD_TARGET) $(top_srcdir)/mollib/modules/$(KUNAME)/


clean-local:
	rm -rf ../build

include		$(top_srcdir)/Rules.make
