#!/usr/bin/make -f
# Sample debian/rules that uses cdbs.  Originaly written by Robert Millan.
# This file is public domain.

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

CFLAGS = -Wall -g -pipe -fPIC -I. -D_GNU_SOURCE -D__va_list=__builtin_va_list \
	-isystem /usr/include/tirpc \
	-D__FreeBSD_version=__FreeBSD_kernel_version
CXXFLAGS = $(CFLAGS)

ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -O0
	CXXFLAGS += -O0
else
	CFLAGS += -O2
	CXXFLAGS += -O2
endif

full_version	:= $(shell dpkg-parsechangelog | grep ^Version: | sed -e 's/^.*: //g')
tar_version	:= $(shell echo $(full_version) | sed -e 's/-.*//g')
svn_revision	:= $(shell echo $(full_version) | sed -e 's/.*~svn\([0-9]*\)-[0-9]*/\1/g')
version		:= $(shell echo $(full_version) | sed -e 's/[~+-].*//g')
major           := $(shell echo $(version) | sed -e 's/\..*//g')
revision	:= $(shell echo $(full_version) | sed -e 's/^[^+-]*//g')

SVN		:= http://svn.freebsd.org/base/release/$(version).0
#SVN		:= http://svn.freebsd.org/base/releng/$(version)
#SVN		:= http://svn.freebsd.org/base/stable/$(major)
#SVN		:= http://svn.freebsd.org/base/head

SOURCE = freebsd-utils
ORIGDIR = $(SOURCE)-$(tar_version)
TARNAME = $(SOURCE)_$(tar_version).orig.tar.gz

PATH := /usr/lib/freebsd:$(PATH)
DESTDIR = $(CURDIR)/debian/tmp
PMAKE = COPTS="$(CFLAGS)" CFLAGS="$(CFLAGS) \
        -isystem /usr/include/freebsd -I$(CURDIR)/debian/local/include -I$(CURDIR)/include -lbsd" \
        NO_WERROR=1 NOGCCERROR=1 NOSHARED=NO NO_SHARED=NO \
        DESTDIR=$(DESTDIR) make

RPCHDRS=include/rpcsvc/nfs_prot.h include/rpcsvc/nlm_prot.h \
	include/rpcsvc/mount.h include/rpcsvc/sm_inter.h \
	sys/kgssapi/gssd.h

.SUFFIXES: .x .h

.x.h:
	rpcgen -h -DWANT_NFS3 $< -o $@

build: build-arch build-indep

get-orig-source:
	rm -rf $(ORIGDIR)
	mkdir -p \
		$(ORIGDIR)/sys/kern \
		$(ORIGDIR)/sys/amd64/linux32 \
		$(ORIGDIR)/sys/i386/linux \
		$(ORIGDIR)/sys/dev/usb \
		$(ORIGDIR)/etc \
		$(ORIGDIR)/include/rpcsvc \
		$(ORIGDIR)/sys/kgssapi
	for i in sbin/dmesg sbin/sysctl \
		\
		usr.bin/kdump \
		usr.bin/ktrace \
		sys/kern/syscalls.c \
		sys/kern/makesyscalls.sh \
		sys/amd64/linux32/syscalls.master \
		sys/i386/linux/syscalls.master \
		\
		 usr.sbin/jail bin/chflags \
		 sbin/devd etc/devd.conf etc/devd sys/dev/usb/usbdevs \
		 usr.sbin/acpi/acpiconf \
		 sbin/kldconfig sbin/kldload sbin/kldstat sbin/kldunload \
		 usr.bin/ktrdump usr.bin/vmstat sbin/devfs sbin/fdisk \
		 sbin/ifconfig etc/regdomain.xml \
		 sbin/route usr.bin/netstat usr.sbin/rpc.umntall \
		 usr.sbin/ppp usr.sbin/pppctl usr.sbin/arp usr.bin/mkuzip \
		 sbin/ipfw contrib/pf sbin/pfctl usr.sbin/authpf sys/contrib/pf/net \
		 sbin/mount_std sbin/umount sbin/mount_cd9660 \
		 sbin/mount_ext2fs sbin/mount_hpfs sbin/mount_msdosfs \
		 sbin/mount_ntfs sbin/mount_nullfs sbin/mount_udf sbin/mount_unionfs \
		 sbin/mount_reiserfs sbin/mount \
		 sbin/mdconfig sbin/ccdconfig sbin/swapon sbin/atacontrol sbin/camcontrol \
		 sbin/gbde bin/kenv \
		 sbin/geom sys/geom/eli sys/crypto/sha2 \
		 usr.sbin/kbdcontrol usr.sbin/vidcontrol share/syscons \
		 sbin/savecore sbin/dumpon \
		share/examples/pf etc/pf.os \
		 usr.sbin/mountd usr.sbin/rpc.statd usr.sbin/rpc.lockd \
		 usr.sbin/gssd usr.sbin/nfsd usr.sbin/nfscbd \
		 usr.sbin/nfsdumpstate usr.sbin/nfsuserd usr.sbin/nfsrevoke \
		 sbin/nfsiod \
		 sbin/mount_nfs \
		 include/rpcsvc/nfs_prot.x include/rpcsvc/sm_inter.x \
		 include/rpcsvc/nlm_prot.x include/rpcsvc/mount.x \
		 sys/kgssapi/gssd.x \
		 usr.bin/showmount \
		 usr.sbin/powerd \
	; do \
	    svn export $(SVN)/$$i $(ORIGDIR)/$$i ; \
	done
	tar --numeric-owner --owner 0 --group 0 -czf ../$(TARNAME) $(ORIGDIR)
	rm -rf $(ORIGDIR)

lib: lib-stamp
lib-stamp:
	$(MAKE) -C lib
	touch $@

build-arch: freebsd-utils gbde kbdcontrol vidcontrol kldutils freebsd-net-tools freebsd-nfs-utils freebsd-ppp powerd

freebsd-utils: freebsd-utils-stamp
freebsd-utils-stamp: $(RPCHDRS)
#	$(PMAKE) -C bin/chflags
	$(PMAKE) -C bin/kenv
	$(PMAKE) -C sbin/atacontrol
	$(PMAKE) -C sbin/camcontrol
	$(PMAKE) -C sbin/ccdconfig
	$(PMAKE) -C sbin/devd
	$(PMAKE) -C etc/devd
	$(PMAKE) -C sbin/devfs
	$(PMAKE) -C sbin/dmesg
	$(PMAKE) -C sbin/dumpon
	$(PMAKE) -C sbin/geom
	$(PMAKE) -C sbin/mdconfig
	$(PMAKE) -C sbin/mount
	$(PMAKE) -C sbin/mount_cd9660
	$(PMAKE) -C sbin/mount_ext2fs
	$(PMAKE) -C sbin/mount_hpfs
	$(PMAKE) -C sbin/mount_msdosfs
#	$(PMAKE) -C sbin/mount_nfs
	$(PMAKE) -C sbin/mount_ntfs
	$(PMAKE) -C sbin/mount_nullfs
	$(PMAKE) -C sbin/mount_reiserfs
	$(PMAKE) -C sbin/mount_udf
	$(PMAKE) -C sbin/mount_unionfs
	$(PMAKE) -C sbin/mount_std
	$(PMAKE) -C sbin/savecore
	$(PMAKE) -C sbin/swapon
	$(PMAKE) -C sbin/sysctl
	$(PMAKE) -C sbin/umount
	$(PMAKE) -C usr.bin/kdump
	$(PMAKE) -C usr.bin/ktrace
	$(PMAKE) -C usr.bin/mkuzip
	$(PMAKE) -C usr.sbin/acpi/acpiconf
	$(PMAKE) -C usr.sbin/rpc.umntall
	$(PMAKE) -C usr.sbin/jail
	touch $@

gbde: gbde-stamp
gbde-stamp:
#	$(PMAKE) -C sbin/gbde
	touch $@

kbdcontrol: kbdcontrol-stamp
kbdcontrol-stamp:
	$(PMAKE) -C usr.sbin/kbdcontrol
	touch $@

vidcontrol: vidcontrol-stamp
vidcontrol-stamp:
	$(PMAKE) -C usr.sbin/vidcontrol
	$(PMAKE) -C share/syscons/scrnmaps
	touch $@

kldutils: kldutils-stamp
kldutils-stamp:
	$(PMAKE) -C sbin/kldconfig
	$(PMAKE) -C sbin/kldload
	$(PMAKE) -C sbin/kldstat
	$(PMAKE) -C sbin/kldunload
	touch $@

freebsd-net-tools: freebsd-net-tools-stamp
freebsd-net-tools-stamp: lib-stamp
	$(PMAKE) -C sbin/ifconfig -DWITHOUT_JAIL
	$(PMAKE) -C sbin/pfctl
	$(PMAKE) -C sbin/route
	$(PMAKE) -C usr.bin/netstat
	$(PMAKE) -C usr.sbin/arp
	$(PMAKE) -C usr.sbin/authpf
	touch $@

freebsd-ppp: freebsd-ppp-stamp
freebsd-ppp-stamp:
	$(PMAKE) -C usr.sbin/ppp -DPPP_NO_PAM -DPPP_NO_NAT -DPPP_NO_DES -DPPP_NO_SUID -DPPP_NO_ATM -DPPP_NO_RADIUS
	$(PMAKE) -C usr.sbin/pppctl
	touch $@

freebsd-nfs-utils: freebsd-nfs-utils-stamp
freebsd-nfs-utils-stamp: lib-stamp
#	$(PMAKE) -C usr.bin/showmount
	$(PMAKE) -C sbin/mount_nfs
	$(PMAKE) -C sbin/nfsiod
#	$(PMAKE) -C usr.sbin/gssd
#	$(PMAKE) -C usr.sbin/nfscbd
#	$(PMAKE) -C usr.sbin/nfsuserd
#	$(PMAKE) -C usr.sbin/nfsrevoke
#	$(PMAKE) -C usr.sbin/nfsdumpstate
	$(PMAKE) -C usr.sbin/rpc.statd
	$(PMAKE) -C usr.sbin/rpc.lockd
	$(PMAKE) -C usr.sbin/mountd
	$(PMAKE) -C usr.sbin/nfsd
	touch $@

powerd: powerd-stamp
powerd-stamp:
	$(PMAKE) -C usr.sbin/powerd
	touch $@

build-indep: build-indep-stamp
build-indep-stamp:
	touch $@

clean:
	dh_testdir
	dh_testroot

	[ ! -f lib/Makefile ] || $(MAKE) -C lib clean

	$(PMAKE) -C bin/chflags clean
	$(PMAKE) -C bin/kenv clean
	$(PMAKE) -C sbin/ccdconfig clean
	$(PMAKE) -C sbin/atacontrol clean
	$(PMAKE) -C sbin/camcontrol clean
	$(PMAKE) -C sbin/devd clean
	$(PMAKE) -C etc/devd clean
	$(PMAKE) -C sbin/devfs clean
	$(PMAKE) -C sbin/dmesg clean
	$(PMAKE) -C sbin/dumpon clean
	$(PMAKE) -C sbin/geom clean
	$(PMAKE) -C sbin/mdconfig clean
	$(PMAKE) -C sbin/mount clean
	$(PMAKE) -C sbin/mount_cd9660 clean
	$(PMAKE) -C sbin/mount_ext2fs clean
	$(PMAKE) -C sbin/mount_hpfs clean
	$(PMAKE) -C sbin/mount_msdosfs clean
	$(PMAKE) -C sbin/mount_nfs clean
	$(PMAKE) -C sbin/mount_ntfs clean
	$(PMAKE) -C sbin/mount_nullfs clean
	$(PMAKE) -C sbin/mount_reiserfs clean
	$(PMAKE) -C sbin/mount_udf clean
	$(PMAKE) -C sbin/mount_unionfs clean
	$(PMAKE) -C sbin/mount_std clean
	$(PMAKE) -C sbin/savecore clean
	$(PMAKE) -C sbin/swapon clean
	$(PMAKE) -C sbin/sysctl  clean
	$(PMAKE) -C sbin/umount clean
	$(PMAKE) -C usr.bin/kdump clean
	$(PMAKE) -C usr.bin/ktrace clean
	$(PMAKE) -C usr.bin/mkuzip clean
	$(PMAKE) -C usr.sbin/acpi/acpiconf clean
	$(PMAKE) -C usr.sbin/rpc.umntall clean
	$(PMAKE) -C usr.sbin/jail clean

	$(PMAKE) -C sbin/gbde clean

	$(PMAKE) -C usr.sbin/kbdcontrol clean

	$(PMAKE) -C usr.sbin/vidcontrol clean
	$(PMAKE) -C share/syscons/scrnmaps clean

	$(PMAKE) -C sbin/kldconfig clean
	$(PMAKE) -C sbin/kldload clean
	$(PMAKE) -C sbin/kldstat clean
	$(PMAKE) -C sbin/kldunload clean

	$(PMAKE) -C sbin/ifconfig clean
	$(PMAKE) -C sbin/pfctl clean
	$(PMAKE) -C sbin/route clean
	$(PMAKE) -C usr.bin/netstat clean
	$(PMAKE) -C usr.sbin/arp clean
	$(PMAKE) -C usr.sbin/authpf clean
	$(PMAKE) -C usr.sbin/ppp clean
	$(PMAKE) -C usr.sbin/pppctl clean

	$(PMAKE) -C sbin/nfsiod clean
	$(PMAKE) -C usr.sbin/gssd clean
	$(PMAKE) -C usr.sbin/nfscbd clean
	$(PMAKE) -C usr.sbin/nfsuserd clean
	$(PMAKE) -C usr.sbin/nfsrevoke clean
	$(PMAKE) -C usr.sbin/nfsdumpstate clean
	$(PMAKE) -C usr.sbin/rpc.statd clean
	$(PMAKE) -C usr.sbin/rpc.lockd clean
	$(PMAKE) -C usr.sbin/mountd clean
	$(PMAKE) -C usr.sbin/nfsd clean
	$(PMAKE) -C usr.sbin/powerd clean

	$(RM) $(RPCHDRS)

	rm -f *stamp
	dh_clean

install: install-indep install-arch
install-indep:

install-arch:
	dh_testdir
	dh_testroot
	dh_prep -a
	dh_installdirs -a
	dh_install -a
	mkdir -p debian/freebsd-net-tools/usr/bin
	install -m 2755 -g kmem usr.bin/netstat/netstat debian/freebsd-net-tools/usr/bin/

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

# Build architecture-dependant files that arn't kernel modules here.
binary-arch: build install
	dh_testdir
	dh_testroot
	dh_installchangelogs
	dh_installdocs
	dh_installexamples
#	dh_installmenu
	dh_installdebconf
#	dh_installlogrotate
#	dh_installemacsen
#	dh_installpam
#	dh_installmime
	dh_installinit -pfreebsd-utils -- start 03 S .
	dh_installinit -pdevd -- start 03 S . stop 01 0 1 6 .
	dh_installinit -pkldutils --no-start -- start 12 S .
	dh_installinit -pkbdcontrol -- start 20 S .
	dh_installinit -ppowerd -- start 20 2 3 4 5 S . stop 80 0 1 6 .
	dh_installinit -pfreebsd-ppp -- start 20 2 3 4 5 . stop 80 0 1 6 .
	dh_installinit -pfreebsd-nfs-common --name=rpc.statd -- start 20 2 3 4 5 S . stop 20 0 1 6 .
	dh_installinit -pfreebsd-nfs-common --name=rpc.lockd -- start 20 2 3 4 5 S . stop 20 0 1 6 .
	dh_installinit -pfreebsd-nfs-common --name=nfsiod -- start 20 2 3 4 5 S . stop 20 0 1 6 .
	dh_installinit -pfreebsd-nfs-server --name=mountd -- start 20 2 3 4 5 S . stop 80 0 1 6 .
	dh_installinit -pfreebsd-nfs-server --name=nfsd -- start 20 2 3 4 5 S . stop 80 0 1 6 .
	dh_installinit -pgeom --no-restart-on-upgrade --name=geli -- start 26 S . stop 50 0 6 .
#	dh_installcron
#	dh_installinfo
	dh_installman
	dh_link
	dh_strip
	dh_compress
	dh_fixperms -X/usr/bin/netstat
#	dh_perl
#	dh_python
	dh_makeshlibs
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb

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