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

export SHELL = bash

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

CFLAGS = -Wall -g -pipe -fPIC -D_GNU_SOURCE \
	-isystem /usr/include/tirpc \
	-Werror=implicit-function-declaration \
	-isystem /usr/include/freebsd -I$(CURDIR)/debian/local/include -I$(CURDIR)/src/include -lbsd \
	$(NULL)
CXXFLAGS = $(CFLAGS)

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

ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))

	# Do not mess with MAKEFLAGS until we transfer control to BSD make (see below)
#	BSD_MAKEFLAGS += -j$(NUMJOBS)
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_BASE	:= https://svn0.us-west.freebsd.org/base
#SVN		:= $(SVN_BASE)/release/$(version).0
SVN		:= $(SVN_BASE)/releng/$(version)
#SVN		:= $(SVN_BASE)/stable/$(major)
#SVN		:= $(SVN_BASE)/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 = \
	MAKEFLAGS=$(BSD_MAKEFLAGS) \
	MAKEOBJDIRPREFIX=$(CURDIR)/obj-deb \
	CFLAGS="$(CFLAGS)" \
	NO_WERROR=1 NOGCCERROR=1 NOSHARED=NO NO_SHARED=NO WITHOUT_TESTS=yes \
	DESTDIR="$(DESTDIR)" \
	make -C src $(PMAKE_FLAGS)
PMAKE_UDEB = \
	MAKEFLAGS=$(BSD_MAKEFLAGS) \
	MAKEOBJDIRPREFIX=$(CURDIR)/obj-udeb \
	CFLAGS="$(CFLAGS) -Os" \
	NO_WERROR=1 NOGCCERROR=1 NOSHARED=NO NO_SHARED=NO \
	DESTDIR="$(DESTDIR)-udeb" \
	make -C src $(PMAKE_FLAGS) \
	-DRESCUE=yes \
	-DWITHOUT_JAIL \
	-DWITHOUT_IPX_SUPPORT \
	$(NULL)

# for ppp
PMAKE_FLAGS += -DPPP_NO_PAM -DPPP_NO_NAT -DPPP_NO_DES -DPPP_NO_SUID -DPPP_NO_ATM -DPPP_NO_RADIUS

RPCHDRS= \
	src/include/rpcsvc/nfs_prot.h \
	src/include/rpcsvc/nlm_prot.h \
	src/include/rpcsvc/mount.h \
	src/include/rpcsvc/sm_inter.h \
	src/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)/src/sys/kern \
		$(ORIGDIR)/src/sys/amd64/linux32 \
		$(ORIGDIR)/src/sys/i386/linux \
		$(ORIGDIR)/src/sys/dev/usb \
		$(ORIGDIR)/src/sys/kgssapi \
		$(ORIGDIR)/src/etc/rc.d \
		$(ORIGDIR)/src/include/rpcsvc \
		$(ORIGDIR)/src/{bin,sbin,usr.bin,usr.sbin} \
		$(ORIGDIR)/src/share/man/man5 \
		$(NULL)
	for i in sbin/dmesg \
		sbin/sysctl etc/sysctl.conf \
		\
		bin/Makefile.inc \
		sbin/Makefile.inc \
		usr.bin/Makefile.inc \
		usr.sbin/Makefile.inc \
		\
		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 \
		usr.sbin/acpi/Makefile \
		usr.sbin/acpi/Makefile.inc \
		sys/contrib/dev/acpica/include \
		 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 sbin/pflogd usr.sbin/authpf sys/netpfil/pf \
		 sbin/umount sbin/mount_cd9660 \
		 sbin/mount_msdosfs \
		sbin/mount_fusefs \
		sbin/mount_nullfs sbin/mount_udf sbin/mount_unionfs \
		sbin/mount \
		 sbin/mdconfig sbin/ccdconfig sbin/swapon sbin/camcontrol \
		 sbin/gbde bin/kenv \
		 sbin/geom sys/geom/eli sys/crypto/sha2 \
		 usr.sbin/kbdcontrol usr.sbin/vidcontrol share/syscons \
		etc/rc.d/syscons \
		 sbin/savecore sbin/dumpon \
		share/examples/pf etc/pf.os \
		share/man/man5/pf.conf.5 share/man/man5/pf.os.5 \
		 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 --ignore-keywords -r $(svn_revision) $(SVN)/$$i $(ORIGDIR)/src/$$i || exit ; \
	done
	tar --numeric-owner --owner 0 --group 0 -czf ../$(TARNAME) $(ORIGDIR)
	rm -rf $(ORIGDIR)

build-arch: build-deb build-udeb
build-indep:
	:

build-deb: build-deb-stamp
build-deb-stamp:$(RPCHDRS)
	$(PMAKE) obj
	$(PMAKE)
	touch $@

build-udeb: build-udeb-stamp
build-udeb-stamp:
	$(PMAKE_UDEB) obj
	$(PMAKE_UDEB)
	touch $@

clean:
	dh_testdir
	dh_testroot

	rm -rf obj{-deb,-udeb} debian/tmp-udeb

	$(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

	rm -rf debian/tmp-udeb

	mkdir -p debian/tmp{,-udeb}/{{,usr/}{bin,sbin},usr/share/man/man{1,5,8},lib/geom,etc/devd,usr/share/syscons/scrnmaps}

	$(PMAKE) install
	$(PMAKE_UDEB) install

	dh_install -a

# 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
