#!/usr/bin/make -f

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

include /usr/share/dpatch/dpatch.make

# some default definitions, important!
#
# Name of the source packages
psource:=virtualbox-ose-source
gsource:=virtualbox-ose-guest-source

# The short upstream name
sname:=virtualbox-ose
gname:=virtualbox-ose-guest
uname:=virtualbox-ose-guest-utils

MAKE:=kmk

upstreamversion := $(shell dpkg-parsechangelog | sed -n 's/^Version: *\([^-]\+\)-.\+/\1/p')

DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)

VBOX_WITH_X11_ADDITIONS :=
ifeq ($(filter-out amd64 i386 lpia,$(DEB_HOST_ARCH)),)
VBOX_WITH_X11_ADDITIONS := 1
endif

VBOX_WITH_64_BITS_GUESTS :=
ifeq ($(filter-out amd64,$(DEB_HOST_ARCH)),)
VBOX_WITH_64_BITS_GUESTS := 1
endif

# Generate README.Debian as text/html ...
debian/README.Debian.html: debian/virtualbox-ose.README.Debian.xml
	xsltproc --nonet --stringparam section.autolabel 1 \
	-o $@ \
	/usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl \
	$<

# ... and text/plain
debian/virtualbox-ose.README.Debian: debian/README.Debian.html
	chmod 755 debian/lynx-dump-postprocess
	(LANG=C; lynx -force_html -dump $< | ./debian/lynx-dump-postprocess > $@.tmp)
	mv $@.tmp $@

env.sh: patch-stamp
	dh_testdir
	./configure --with-linux="/usr" --disable-kmods --with-gcc=/usr/bin/gcc-4.2 --with-g++=/usr/bin/g++-4.2 --disable-qt3
ifeq ($(VBOX_WITH_X11_ADDITIONS),)
	echo "VBOX_WITH_X11_ADDITIONS=" >> LocalConfig.kmk
else
	echo "VBOX_WITH_X11_ADDITIONS=1" >> LocalConfig.kmk
endif

ifeq ($(VBOX_WITH_64_BITS_GUESTS),)
	echo "VBOX_WITH_64_BITS_GUESTS=" >> LocalConfig.kmk
else
	echo "VBOX_WITH_64_BITS_GUESTS=1" >> LocalConfig.kmk
endif

build: build-stamp
build-stamp: env.sh
	dh_testdir

	# Building package
	$(MAKE) \
		BUILD_TYPE=release \
		PATH_OUT=$(abspath out)
	# make sure VBoxAddIF.sh is built, too
	$(MAKE) -C src/VBox/Installer/linux $(abspath out/bin/VBoxAddIF.sh) \
		PATH_OUT=$(abspath out)
	# and vboxnet.sh
	$(MAKE) -C src/VBox/Installer/linux $(abspath out/obj/src/VBox/Installer/linux/vboxnet.sh) \
		PATH_OUT=$(abspath out)

	touch build-stamp

clean: unpatch
	dh_testdir
	dh_testroot

	# Cleaning package
	rm -rf out
	rm -f AutoConfig.kmk configure.log env.sh
	rm -f debian/$(sname).init debian/$(sname).preinst
	rm -f debian/virtualbox-ose.README.Debian debian/README.Debian.html
	rm -f debian/{$(psource),$(gsource)}.files/dkms.conf
	rm -f debian/{$(psource),$(gsource)}.{install,dirs}
	rm -f debian/$(gsource).links

	dh_clean

#Rebuild the orig.tar.gz
dfsg-free: clean
	rm -rf ./kBuild
	rm -rf ./tools
	rm -rf ./src/VBox/Additions/os2
	rm -rf ./src/VBox/Additions/WINNT
	rm -f ./src/VBox/HostDrivers/VBoxTAP/VBoxTAP.rc
	rm -f ./src/VBox/HostDrivers/Support/darwin/load.sh
	rm -f ./include/VBox/VBoxGuest.inc
	rm -f ./include/VBox/VBoxGuest16.h
	rm -f ./include/VBox/VBoxGuest.mac
	rm -f ./src/libs/xpcom18a4/xpcom/MoreFiles/FSCopyObject.c
	rm -f ./src/libs/xpcom18a4/xpcom/MoreFiles/FSCopyObject.h
	rm -rf ./src/libs/ffmpeg-20060710
	rm -rf ./src/libs/libpng*
	rm -rf ./src/libs/libxml2*
	rm -rf ./src/libs/libxslt*
	rm -rf ./src/libs/zlib*
	rm -f ./src/VBox/HostServices/SharedClipboard/linux-stub.cpp
	rm -f ./src/VBox/Additions/linux/xmouse/Imakefile
	rm -rf ./src/VBox/Additions/linux/selinux-fedora

	(cd ..; mv $(CURDIR) virtualbox-ose-$(upstreamversion)-dfsg; \
	 tar --exclude .svn --exclude '.git*' --exclude debian \
		-czf virtualbox-ose_$(upstreamversion)-dfsg.orig.tar.gz \
		virtualbox-ose-$(upstreamversion)-dfsg)

# install: DH_OPTIONS=
install: build debian/virtualbox-ose.README.Debian debian/README.Debian.html
	dh_testdir
	dh_testroot
	dh_clean -k

	sed -e 's/CVERSION/$(upstreamversion)/g' < debian/$(gsource).dirs.in > debian/$(gsource).dirs
	sed -e 's/CVERSION/$(upstreamversion)/g' < debian/$(psource).dirs.in > debian/$(psource).dirs
	sed -e 's/CVERSION/$(upstreamversion)/g' < debian/$(gsource).links.in > debian/$(gsource).links

	dh_installdirs

	# This will get installed into the package by dh_installinit
	install -m 644 out/obj/src/VBox/Installer/linux/vboxnet.sh debian/$(sname).init

	# We also need to build a preinst file
	sed -e 's/UPSTREAM/"$(upstreamversion)"/' < debian/$(sname).preinst.in > debian/$(sname).preinst

	# Create DKMS control files
	sed -e 's/CVERSION/$(upstreamversion)/g' < debian/$(psource).files/dkms.conf.in > debian/$(psource).files/dkms.conf
	sed -e 's/CVERSION/$(upstreamversion)/g' < debian/$(gsource).files/dkms.conf.in > debian/$(gsource).files/dkms.conf

	#Build install files for the dkms'ified sources
	sed -e 's/CVERSION/$(upstreamversion)/g' < debian/$(psource).install.in > debian/$(psource).install
	sed -e 's/CVERSION/$(upstreamversion)/g' < debian/$(gsource).install.in > debian/$(gsource).install

	# Install helper scripts for vbox* interfaces
	dh_installifupdown -p${sname}

binary-arch: build install
	dh_testdir -a
	dh_testroot -a
	dh_installchangelogs -a
	dh_installdocs -a
	dh_installmenu -a
	dh_install -s
	chmod 755 debian/$(sname)/usr/share/virtualbox/VBox.sh;
	-chmod 755 debian/$(uname)/usr/share/virtualbox/x11config.pl
	-install -m 644 out/bin/additions/vboxvideo_drv_14.so debian/$(uname)/usr/lib/xorg/modules/drivers/vboxvideo_drv.so
	-install -m 644 out/bin/additions/vboxmouse_drv_14.so debian/$(uname)/usr/lib/xorg/modules/input/vboxmouse_drv.so
	-install -m 755 out/bin/additions/mountvboxsf debian/$(uname)/sbin/mount.vboxsf
	dh_strip -s --dbg-package=$(sname)-dbg -X/usr/share/virtualbox/sdk/bin/xpidl
	dh_link -a
	dh_compress -a
	dh_fixperms -a
	#version 2.0.2 introduces hardening. these binaries will ONLY run suid root.
	chmod +s debian/$(sname)/usr/lib/virtualbox/VirtualBox
	chmod +s debian/$(sname)/usr/lib/virtualbox/VBoxSDL
	chmod +s debian/$(sname)/usr/lib/virtualbox/VBoxBFE
	chmod +s debian/$(sname)/usr/lib/virtualbox/VBoxHeadless
	dh_installudev -a
	dh_installdebconf -a
	dh_installinit -a
	dh_installinit --name=vboxdrv -a
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -s
	dh_md5sums -a
	dh_builddeb -s

binary-indep: build install
	dh_testdir -i
	dh_testroot -i
	dh_installchangelogs -i
	dh_installdocs -i
	dh_install -i
	dh_link -i
	dh_compress -i
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

binary: binary-arch binary-indep
.PHONY: patch unpatch \
	build clean binary-arch binary-indep binary install \
	binary-modules kdist kdist_configure kdist_image kdist_clean
