# LKST Makefile
include lkst.version

# configurable values specified from command line
KSRC =
KBIN =
KPRESRC =
LKCDDIR =

# environments
ORIG_KSRC = /lib/modules/`uname -r`/source
ORIG_KBIN = /lib/modules/`uname -r`/build

SCRDIR = scripts
SUBDIRS = lkstutils lkstaddons
CLEANUPS = lkstutils/lkstutils.spec

TARGETS = $(SUBDIRS) patches LICENSE Makefile Install howto.txt \
	  changelog extras scripts lkst.version
RM_TARGETS = temp scripts/lsm_gen examples/lkst_test_run lkstaddons/monitor \
	   extras/patches
ADJ_TARGETS = lkstutils/cmd.conf lkstaddons/cmd_mod.conf

PKGNAME = lkst-$(VERSION)

ifeq (,$(LKCDDIR))
CONFOPT =
else
CONFOPT = --with-lkcdutils=$(LKCDDIR)
endif
ifeq (,$(KSRC))
KSRC = $(ORIG_KSRC)
KBIN = $(ORIG_KBIN)
endif

.PHONY:	all configure package dist distclean adjustver config patch patch_vmsync help

all: configure
	@( for dir in $(SUBDIRS) ; do \
		( cd $$dir ; \
		[ -f Makefile ] && make all ; \
		cd .. ); \
	done )

package: dist

dist: distclean adjustver
	@mkdir $(PKGNAME)
	@cp -a $(TARGETS) $(PKGNAME)
	@rm -rf `find $(PKGNAME) -name CVS -a -type d`
	@(cd $(PKGNAME); rm -rf $(RM_TARGETS))
	tar czvf $(PKGNAME).tar.gz $(PKGNAME)
	@rm -rf $(PKGNAME)

distclean:
	@( for dir in $(SUBDIRS) ; do \
		( cd $$dir ; \
		[ -f Makefile ] && make distclean ; \
		cd .. ); \
	done )
	rm -rf $(CLEANUPS)

clean:
	@( for dir in $(SUBDIRS) ; do \
		( cd $$dir ; \
		[ -f Makefile ] && make clean ; \
		cd .. ); \
	done )

configure: config

config:
	@( _KSRCOPT=$(KSRC);\
	   _KSRCOPT="--with-ksrc="`$(SCRDIR)/functions rp2ap $$_KSRCOPT`;\
	   _KBINOPT=$(KBIN);\
	   if [ -d "$$_KBINOPT" ] ;\
	   then \
	   _KBINOPT="--with-kbin="`$(SCRDIR)/functions rp2ap $$_KBINOPT` ;\
	   else \
	   _KBINOPT="";\
	   fi;\
	echo configuring with following options ;\
	echo    $$_KSRCOPT $$_KBINOPT $(CONFOPT);\
	for dir in $(SUBDIRS) ; do \
		( cd $$dir ; \
		echo "configuring " $$dir ; \
		[ -f configure ] || autoconf ; \
		[ -x configure -a ! -f .config ] && \
		./configure $$_KSRCOPT $$_KBINOPT $(CONFOPT); \
		echo "done"; \
		cd ..); \
	done )

install:
	@( for dir in $(SUBDIRS) ; do \
		( cd $$dir ; \
		echo "installing " $$dir ; \
		[ -f Makefile ] && make install ; \
		echo "done"; \
		cd ..); \
	done )

uninstall:
	@( for dir in $(SUBDIRS) ; do \
		( cd $$dir ; \
		echo "uninstalling " $$dir ; \
		[ -f Makefile ] && make uninstall ; \
		echo "done"; \
		cd ..); \
	done )

adjustver:
	@( for i in $(ADJ_TARGETS) ; do \
	echo "adjusting "$$i ;\
	TMPFN=`mktemp -p ./ ` ;\
	cat $$i | sed /^LKSTVER/s/.*/LKSTVER=$(VERSION)/ > $$TMPFN ;\
	mv $$TMPFN $$i ;\
	done )

PATCH = patch -d $(KPRESRC) -p1

patch:
	@( if [ -d "$(KPRESRC)" ] ;then \
	$(SCRDIR)/enpatch.sh $(KPRESRC);\
	else \
	echo "please specify KPRESRC=\"original kernel source directory\" "; \
	fi )

help:
	@echo "Building targets:"
	@echo "  all (default) - build all"
	@echo
	@echo "Cleaning targets:"
	@echo "  clean        - remove most generated files but keep the config"
	@echo "  distclean    - remove all generated files + config files"
	@echo 
	@echo "Configuration target:"
	@echo "  config       - generate new config"
	@echo "            (Options) KSRC=<dir>    specify kernel source tree" 
	@echo "                           (default:="/lib/modules/`uname -r`/source")"
	@echo "                      KBIN=<dir>    specify kernel build tree" 
	@echo "                           (default:="/lib/modules/`uname -r`/build")"
	@echo "                      LKCDDIR=<dir> enable LKCD support and"
	@echo "                                    specify lkcdutils source tree"
	@echo "                           (disabled by default)"
	@echo
	@echo "Patching targets:"
	@echo "  patch        - patch a series of patches for LKST and kernelhooks"
	@echo "            (Argument) KPRESRC=<dir> specify kernel source tree before patched"
	@echo 
	@echo "Other targets:"
	@echo "  install      - install all binaries"
	@echo "  uninstall    - uninstall all binaries"
	@echo "  dist/package - generate a package"
	@echo 
