#!/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) "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 "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)
ARCH=$(shell dpkg --print-architecture)
FILENAME=$(PACKAGE)_$(VERSION)_$(ARCH).udeb
PRIORITY=$(shell grep ^Priority: debian/control | cut -d ' ' -f 2)

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) "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 $(PRIORITY)
	dh_md5sums           -p$@
	dh_builddeb          -p$@ --filename=$(FILENAME)

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