#!/usr/bin/make -f
# Sample debian/rules that uses debhelper.
# GNU copyright 1997 to 1999 by Joey Hess.

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

# These are used for cross-compiling and for saving the configure script
# from having to guess our platform (since we know it already)
DEB_BUILD_GNU_TYPE	:= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
DEB_BUILD_GNU_CPU	:= $(shell dpkg-architecture -qDEB_BUILD_GNU_CPU)
DEB_HOST_ARCH_CPU	:= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)
DEB_HOST_MULTIARCH	:= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
DEB_HOST_ARCH_OS	?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)

ifeq ($(DEB_HOST_ARCH_CPU), mipsel)
MACHINE_ARCH		:= mips
else
MACHINE_ARCH		:= $(DEB_HOST_ARCH_CPU)
endif

ifeq ($(DEB_HOST_MULTIARCH), mipsel)
MACHINE_MULTIARCH	:= mips
else
MACHINE_MULTIARCH	:= $(DEB_HOST_MULTIARCH)
endif

ifneq (,$(filter nostrip,$(DEB_BUILD_OPTIONS)))
    export STRIPFLAG=
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' -e 's/^$(full_version)$$/HEAD/g')
version		:= $(shell echo $(full_version) | sed -e 's/[~+-].*//g')
pversion	:= $(shell echo $(version) | sed -e 's/\./_/g')
major           := $(shell echo $(version) | sed -e 's/\..*//g')
revision	:= $(shell echo $(full_version) | sed -e 's/^[^+-]*//g')

SVN		:= https://svn0.us-west.freebsd.org/base/release/$(version).0
#SVN		:= https://svn0.us-west.freebsd.org/base/releng/$(version)
#SVN		:= https://svn0.us-west.freebsd.org/base/stable/$(major)
#SVN		:= https://svn0.us-west.freebsd.org/base/head

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

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

export CFLAGS = -O2 -g -Wall -D_GNU_SOURCE \
         -DMACHINE_ARCH='"$(MACHINE_ARCH)"' \
         -DMACHINE_MULTIARCH='"$(MACHINE_MULTIARCH)"' \
         -I$(CURDIR)/build-tree/src/sys \
	-D_GNU_SOURCE=1 -isystem /usr/include/freebsd
# disabled due to #630907 (see also 20_libbsd_overlay.diff)
# $(shell pkg-config --cflags libbsd-overlay)
MAKE_BUILD_FLAGS = CC=gcc NO_WERROR=1 NOGCCERROR=1 NOSHARED=NO NO_SHARED=NO

PMAKE_FLAGS = -m $(CURDIR)/src/share/mk
PMAKE = \
	MAKEFLAGS=$(BSD_MAKEFLAGS) \
	bmake $(PMAKE_FLAGS)
YACC = byacc

package = $(SOURCE)

get-orig-source:
	rm -rf $(ORIGDIR)
	mkdir -p $(ORIGDIR)/src/sys/sys $(ORIGDIR)/src/sys/kern/
	for i in \
		share/mk \
		usr.bin/cksum \
		usr.bin/elfdump \
		usr.bin/file2c \
		usr.bin/lex \
		contrib/flex \
		usr.bin/make \
		usr.bin/mkdep \
		usr.bin/brandelf \
		usr.sbin/btxld \
		usr.sbin/config \
		usr.sbin/kgzip \
		usr.sbin/kldxref \
		usr.sbin/mtree \
		sys/dev/aic7xxx/aicasm \
	; do \
		svn export --ignore-keywords -r $(svn_revision) $(SVN)/$$i $(ORIGDIR)/src/$$i ; \
	done
	tar --numeric-owner --owner 0 --group 0 -czf ../$(TARNAME) $(ORIGDIR)
	rm -rf $(ORIGDIR)

unpack: unpack-stamp
unpack-stamp:
	mkdir build-tree
	cp -a src build-tree/

	touch unpack-stamp

build: build-stamp
build-stamp: unpack-stamp
	dh_testdir

	$(PMAKE) $(MAKE_BUILD_FLAGS) -C build-tree/src/usr.bin/make

	$(PMAKE) $(MAKE_BUILD_FLAGS) -C build-tree/src/usr.bin/cksum

	cd build-tree/src/usr.bin/lex ; \
		$(PMAKE) bootstrap ; \
		$(PMAKE) $(MAKE_BUILD_FLAGS) NO_PROFILE=1 NO_INSTALLLIB=1

	$(PMAKE) $(MAKE_BUILD_FLAGS) -C build-tree/src/usr.bin/mkdep
	$(PMAKE) $(MAKE_BUILD_FLAGS) -C build-tree/src/usr.sbin/mtree
	$(PMAKE) $(MAKE_BUILD_FLAGS) -C build-tree/src/usr.bin/file2c
	$(PMAKE) $(MAKE_BUILD_FLAGS) -C build-tree/src/usr.bin/brandelf
	$(PMAKE) $(MAKE_BUILD_FLAGS) -C build-tree/src/sys/dev/aic7xxx/aicasm
ifeq ($(DEB_HOST_ARCH_OS), kfreebsd)
	# Not portable yet. Maybe someday...
	$(PMAKE) $(MAKE_BUILD_FLAGS) -C build-tree/src/usr.sbin/kldxref
endif

	PATH=$(CURDIR)/build-tree/src/usr.bin/file2c:$(PATH) \
		$(PMAKE) $(MAKE_BUILD_FLAGS) -C build-tree/src/usr.sbin/config

	touch build-stamp

install: build
	dh_testdir
	dh_testroot
	dh_prep
	dh_installdirs

	$(PMAKE) -C build-tree/src/usr.bin/file2c install DESTDIR=$(CURDIR)/debian/$(package) BINDIR=/usr/bin
	$(PMAKE) -C build-tree/src/usr.bin/brandelf install DESTDIR=$(CURDIR)/debian/$(package) BINDIR=/usr/bin

	for i in cksum lex mkdep ; do \
	  $(PMAKE) -C $(CURDIR)/build-tree/src/usr.bin/$$i install \
		DESTDIR=$(CURDIR)/debian/$(package) BINDIR=/usr/lib/freebsd ; \
	done
	for i in config ; do \
	  $(PMAKE) -C $(CURDIR)/build-tree/src/usr.sbin/$$i install \
		DESTDIR=$(CURDIR)/debian/$(package) BINDIR=/usr/lib/freebsd ; \
	done
	$(PMAKE) -C build-tree/src/share/mk install \
		DESTDIR=$(CURDIR)/debian/freebsd-mk BINDIR=/usr/share

	$(PMAKE) -C build-tree/src/sys/dev/aic7xxx/aicasm install \
		DESTDIR=$(CURDIR)/debian/$(package) BINDIR=/usr/bin

ifeq ($(DEB_HOST_ARCH_OS), kfreebsd)
	$(PMAKE) -C build-tree/src/usr.sbin/kldxref install \
		DESTDIR=$(CURDIR)/debian/$(package) BINDIR=/usr/bin
endif

	# Legacy make (aka fmake / fmtree)
	$(PMAKE) -C $(CURDIR)/build-tree/src/usr.bin/make install \
		DESTDIR=$(CURDIR)/debian/$(package) BINDIR=/usr/bin
	$(PMAKE) -C $(CURDIR)/build-tree/src/usr.sbin/mtree install \
		DESTDIR=$(CURDIR)/debian/$(package) BINDIR=/usr/bin

	# remove trash
	rm -rf 	$(CURDIR)/debian/$(package)/usr/include \
		$(CURDIR)/debian/$(package)/var
	for i in `find $(CURDIR)/debian/$(package)/usr/share/man -type l` ; do \
		rm $$i ; \
	done
	rm -f $(CURDIR)/debian/$(package)/usr/share/man/man5/mtree.5.gz

	# relocate files
	for i in `cd $(CURDIR)/debian/$(package)/usr/lib/freebsd && ls` ; do \
		ln -s ../lib/freebsd/$$i \
			$(CURDIR)/debian/$(package)/usr/bin/freebsd-$$i ; \
		for m in $(CURDIR)/debian/$(package)/usr/share/man/man[0-9]/$$i.* ; do \
			mv $$m `echo $$m | sed -e 's:\(man[0-9]/\):\1freebsd-:'` ; \
		done ; \
	done
	rmdir $(CURDIR)/debian/$(package)/usr/sbin

	dh_install

clean:
	dh_testdir
	dh_testroot
	rm -rf build-tree
	rm -f *-stamp

	dh_clean


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

# Build architecture-dependent files here.
binary-arch: build install
	dh_testdir
	dh_testroot
#	dh_installdebconf
	dh_installdocs
#	dh_installexamples
#	dh_installmenu
#	dh_installlogrotate
#	dh_installemacsen
#	dh_installpam
#	dh_installmime
#	dh_installinit
#	dh_installcron
	dh_installman
#	dh_installinfo
	dh_installchangelogs
	dh_link
	dh_strip
	dh_compress
	dh_fixperms
#	dh_makeshlibs
	dh_installdeb
#	dh_perl
	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb

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