#!/usr/bin/make -f

# This is a bit unusual, in that I have to completely recompile everything
# for each package I build (obviously static and dynamic builds require
# things to be recompiled...)

# This is the debhelper compatability version to use.
#export DH_COMPAT=1

bbbd=debian/busybox_builddir
bb=debian/tmp
bbsbd=debian/busybox_static_builddir
bbs=debian/busybox-static
bbubd=debian/busybox_udeb_builddir
bbu=debian/busybox-udeb

clean:
	dh_testdir
	dh_testroot
	rm -f debian/build-stamp-busybox debian/build-stamp-busybox-static debian/build-stamp-busybox-udeb
	-$(MAKE) clean
	-rm -rf $(bb) $(bbbd) $(bbs) $(bbsbd) $(bbubd) $(bbu)
	dh_clean

build: debian/build-stamp-busybox
debian/build-stamp-busybox:
	dh_testdir
	mkdir -p $(bbbd)
	cp Makefile $(bbbd)
	cp debian/Config.h-deb $(bbbd)/Config.h
	-(cd $(bbbd); $(MAKE) "BB_SRC_DIR=../../" applet_source_list)
	(cd $(bbbd); $(MAKE) USE_SYSTEM_PWD_GRP=false "BB_SRC_DIR=../../")
	touch debian/build-stamp-busybox

install: build
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs
	# Do not run 'make install', since we do not want all the symlinks. 
	# This just installes the busybox binary...
	#(cd $(bbbd); $(MAKE) "BB_SRC_DIR=../../" "PREFIX=../../$(bb)" install)
	mkdir -p $(bb)/bin/
	cp $(bbbd)/busybox $(bb)/bin/busybox
	mkdir -p $(bb)/usr/share/doc/busybox/busybox.lineo.com
	cp $(bbbd)/docs/busybox.lineo.com/BusyBox.html $(bb)/usr/share/doc/busybox/busybox.lineo.com/
	mkdir -p $(bb)/usr/share/man/man1
	cp $(bbbd)/docs/BusyBox.1 $(bb)/usr/share/man/man1/busybox.1

# Now for the statically linked stuff
build-static: debian/build-stamp-busybox-static
debian/build-stamp-busybox-static:
	dh_testdir
	mkdir -p $(bbsbd)
	cp Makefile $(bbsbd)
	cp debian/Config.h-static $(bbsbd)/Config.h
	(cd $(bbsbd); $(MAKE) DOSTATIC=true USE_SYSTEM_PWD_GRP=false "BB_SRC_DIR=../../")
	touch debian/build-stamp-busybox-static

install-static: build
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs
	# Do not run 'make install', since we do not want all the symlinks. 
	# This just installes the busybox binary...
	#(cd $(bbsbd); $(MAKE) "BB_SRC_DIR=../../" "PREFIX=../../$(bbs)" install)
	mkdir -p $(bbs)/bin/
	cp $(bbsbd)/busybox $(bbs)/bin/busybox
	mkdir -p $(bbs)/usr/share/doc/busybox-static/busybox.lineo.com
	cp $(bbsbd)/docs/busybox.lineo.com/BusyBox.html $(bbs)/usr/share/doc/busybox-static/busybox.lineo.com/
	mkdir -p $(bbs)/usr/share/man/man1/
	cp $(bbsbd)/docs/BusyBox.1 $(bbs)/usr/share/man/man1/busybox.1

half_clean:
	dh_testdir
	dh_testroot
	rm -rf $(bbs) debian/build-stamp-busybox-static
	-$(MAKE) clean

do_static: half_clean build-static install-static



# Now for the .udeb stuff
PACKAGE=busybox-udeb
VERSION=$(shell dpkg-parsechangelog | grep ^Version: | cut -d ' ' -f 2 | sed -e s/[0-9]://g)
ARCH=$(shell dpkg --print-architecture)
FILENAME=$(PACKAGE)_$(VERSION)_$(ARCH).udeb

build-udeb: debian/build-stamp-busybox-udeb
debian/build-stamp-busybox-udeb:
	dh_testdir
	mkdir -p $(bbubd)
	cp Makefile $(bbubd)
	cp debian/Config.h-udeb $(bbubd)/Config.h
	(cd $(bbubd); $(MAKE) USE_SYSTEM_PWD_GRP=false "BB_SRC_DIR=../../")
	touch debian/build-stamp-busybox-udeb

install-udeb: build
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs
	(cd $(bbubd); $(MAKE) "BB_SRC_DIR=../../" "PREFIX=../../$(bbu)" install)
	mkdir -p $(bbu)/usr/share/man/man1/
	cp $(bbubd)/docs/BusyBox.1 $(bbu)/usr/share/man/man1/busybox.1

three_quarter_clean:
	dh_testdir
	dh_testroot
	rm -rf $(bbu) debian/build-stamp-busybox-udeb
	-$(MAKE) clean

do_udeb: three_quarter_clean build-udeb install-udeb



# Build architecture-independent files here.
binary-indep:
# We have nothing to do by default.

# Build architecture-dependent files here.
binary-arch: busybox busybox-static busybox-udeb

busybox: install
	@echo "--- Building: $@"
	dh_testdir
	dh_testroot
	dh_installdirs
	dh_installdocs       -p$@  $(bbbd)/docs/BusyBox.txt \
		$(bbbd)/docs/BusyBox.html docs/style-guide.txt \
		docs/busybox.lineo.com AUTHORS README TODO
	rm -rf `find $(bb) -name CVS`
	rm -f `find $(bb) -name .cvsignore`
	dh_installchangelogs -p$@ Changelog
	dh_undocumented      -p$@
	dh_strip             -p$@
	dh_compress          -p$@
	dh_fixperms          -p$@
	dh_installdeb        -p$@
	dh_shlibdeps         -p$@
	dh_gencontrol        -p$@
	dh_md5sums           -p$@
	dh_builddeb          -p$@


busybox-static: do_static
	@echo "--- Building: $@"
	dh_testdir
	dh_testroot
	dh_installdirs
	dh_installdocs       -p$@  $(bbsbd)/docs/BusyBox.txt \
		$(bbsbd)/docs/BusyBox.html docs/style-guide.txt \
		docs/busybox.lineo.com AUTHORS README TODO
	rm -rf `find $(bbs) -name CVS`
	rm -f `find $(bbs) -name .cvsignore`
	dh_installchangelogs -p$@ Changelog
	dh_undocumented      -p$@
	dh_strip             -p$@
	dh_compress          -p$@
	dh_fixperms          -p$@
	dh_installdeb        -p$@
	dh_shlibdeps         -p$@
	dh_gencontrol        -p$@
	dh_md5sums           -p$@
	dh_builddeb          -p$@


# Note that this builds a .udeb, which is not policy compliant or anything.
#
busybox-udeb: do_udeb
	@echo "--- Building: $@"
	dh_testdir
	dh_testroot
	dh_installdirs
	dh_strip             -p$@
	dh_compress          -p$@
	dh_fixperms          -p$@
	dh_installdeb        -p$@
	dh_shlibdeps         -p$@
	#Make _very_ sure there are no docs lurking about.
	rm -rf $(bbu)/usr/share/man
	#dh_gencontrol        -p$@
	# Don't write your stupid guesses to debian/files.
	dh_gencontrol        -p$@ -- -fdebian/files~
	# Register file manually.
	dpkg-distaddfile $(FILENAME) debian-installer standard
	dh_md5sums           -p$@
	dh_builddeb          -p$@ --filename=$(FILENAME)

binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install
