#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
SHELL=bash

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

# This has to be exported to make some magic below work.
export DH_OPTIONS

CFLAGS = -Wall -Wno-unknown-pragmas -g -pipe -fPIC -I. \
         -D_GNU_SOURCE -DNEED_SOLARIS_BOOLEAN \
	-isystem /usr/include/freebsd \
	-Werror=implicit-function-declaration \
	$(NULL)

ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -O0
else
	CFLAGS += -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		:= 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 = zfsutils
ORIGDIR = $(SOURCE)-$(tar_version)
TARNAME = $(SOURCE)_$(tar_version).orig.tar.gz

PATH := /usr/lib/freebsd:$(PATH)
DESTDIR = $(CURDIR)/debian/tmp
PMAKE = \
	MAKEFLAGS=$(BSD_MAKEFLAGS) \
	COPTS="$(CFLAGS)" CFLAGS="$(CFLAGS)" NO_WERROR=1 NOGCCERROR=1 \
        NOSHARED=NO NO_SHARED=NO DESTDIR=$(DESTDIR) make
export SHLIB_MAJOR = 2
export SHLIBDIR = ./

get-orig-source:
	rm -rf $(ORIGDIR)
	for i in \
	         cddl/compat/opensolaris \
	         cddl/contrib/opensolaris/head \
	         cddl/contrib/opensolaris/cmd/zdb \
	         cddl/contrib/opensolaris/cmd/zfs \
	         cddl/contrib/opensolaris/cmd/zinject \
	         cddl/contrib/opensolaris/cmd/zpool \
	         cddl/contrib/opensolaris/cmd/ztest \
	         cddl/contrib/opensolaris/lib/libnvpair \
	         cddl/contrib/opensolaris/lib/libuutil \
	         cddl/contrib/opensolaris/lib/libzfs \
		cddl/contrib/opensolaris/lib/libzfs_core \
	         cddl/contrib/opensolaris/lib/libzpool \
		 cddl/contrib/opensolaris/cmd/stat/common/ \
	         sys/cddl/compat/opensolaris \
	         sys/cddl/contrib/opensolaris \
		lib/libmd \
	         cddl/lib/libavl \
	         cddl/lib/libnvpair \
	         cddl/lib/libuutil \
	         cddl/lib/libzpool \
	         cddl/lib/libumem \
	         cddl/lib/libzfs \
		cddl/lib/libzfs_core \
	         cddl/sbin/zpool \
	         cddl/sbin/zfs \
	         cddl/usr.bin/zinject \
	         cddl/usr.bin/ztest \
	         cddl/usr.sbin/zdb \
	         ; do \
	    svn export -r $(svn_revision) $(SVN)/$$i $(ORIGDIR)/$$i ; \
	done
	tar --numeric-owner --owner 0 --group 0 -czf ../$(TARNAME) $(ORIGDIR)
	rm -rf $(ORIGDIR)

build: build-arch build-indep

build-arch: build-libmd build-libuutil build-libnvpair build-libzfs build-libumem build-libzpool build-zfsutils build-libavl

build-indep:
# We have nothing to do by default.


build-libuutil: build-libuutil-stamp
build-libuutil-stamp:
	$(PMAKE) -C $(CURDIR)/cddl/lib/libuutil
	touch $@

build-libnvpair: build-libnvpair-stamp
build-libnvpair-stamp:
	$(PMAKE) -C $(CURDIR)/cddl/lib/libnvpair
	touch $@

build-libumem: build-libumem-stamp
build-libumem-stamp:
	$(PMAKE) -C $(CURDIR)/cddl/lib/libumem
	touch $@


build-libzpool: build-libzpool-stamp
build-libzpool-stamp: build-libavl build-libnvpair-stamp build-libumem build-libmd
	$(PMAKE) -C $(CURDIR)/cddl/lib/libzpool
	touch $@

build-libzfs: build-libzfs-stamp
build-libzfs-stamp: \
		build-libavl \
		build-libnvpair \
		build-libumem \
		build-libuutil \
		build-libzfs_core
	$(PMAKE) -C $(CURDIR)/cddl/lib/libzfs
	touch $@

build-libzfs_core: build-libzfs_core-stamp
build-libzfs_core-stamp: build-libnvpair
	$(PMAKE) -C $(CURDIR)/cddl/lib/libzfs_core
	touch $@

build-libmd: build-libmd-stamp
build-libmd-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libmd
	touch $@

build-libavl: build-libavl-stamp
build-libavl-stamp:
	$(PMAKE) -C $(CURDIR)/cddl/lib/libavl
	touch $@

build-zfsutils: build-zfsutils-stamp
build-zfsutils-stamp: build-libzfs \
		build-libzfs_core \
		build-libnvpair-stamp build-libuutil-stamp build-libumem build-libzpool
	$(PMAKE) -C $(CURDIR)/cddl/sbin/zpool
	$(PMAKE) -C $(CURDIR)/cddl/sbin/zfs -DWITHOUT_JAIL

	$(PMAKE) -C $(CURDIR)/cddl/usr.sbin/zdb
	$(PMAKE) -C $(CURDIR)/cddl/usr.bin/zinject
	$(PMAKE) -C $(CURDIR)/cddl/usr.bin/ztest/
	touch $@

clean:
	dh_testdir
	dh_testroot
	$(PMAKE) -C $(CURDIR)/cddl/lib/libnvpair clean

	$(PMAKE) -C $(CURDIR)/cddl/lib/libuutil clean

	$(PMAKE) -C $(CURDIR)/cddl/lib/libzfs clean
	$(PMAKE) -C $(CURDIR)/cddl/lib/libzfs_core clean

	$(PMAKE) -C $(CURDIR)/cddl/sbin/zpool clean
	$(PMAKE) -C $(CURDIR)/cddl/sbin/zfs clean

	$(PMAKE) -C $(CURDIR)/cddl/lib/libumem clean
	$(PMAKE) -C $(CURDIR)/cddl/lib/libzpool clean
	$(PMAKE) -C $(CURDIR)/cddl/lib/libavl clean
	$(PMAKE) -C $(CURDIR)/cddl/usr.sbin/zdb clean
	$(PMAKE) -C $(CURDIR)/cddl/usr.bin/ztest clean
	$(PMAKE) -C $(CURDIR)/cddl/usr.bin/zinject clean
	$(PMAKE) -C $(CURDIR)/lib/libmd clean

	rm -f *stamp
	dh_clean

install: build
	dh_testdir
	dh_testroot
	dh_prep -s
	dh_installdirs -s
	dh_install -s


binary: binary-arch binary-indep

binary-indep: build install
# We have nothing to do by default.

binary-arch: build install
	dh_testdir
	dh_testroot
	dh_installchangelogs -a
	dh_installdocs -a
#	dh_installexamples
	dh_installinit --no-restart-on-upgrade --name=zfs -- start 26 S . stop 50 0 6 .
	dh_installcron
#	dh_installinfo
	dh_installman
	dh_link -a
	dh_strip -a
	dh_compress -a
	dh_fixperms -a
#	dh_perl
#	dh_python
	dh_makeshlibs -a
	dh_makeshlibs -plibnvpair$(SHLIB_MAJOR) --add-udeb=libnvpair$(SHLIB_MAJOR)-udeb
	dh_makeshlibs -plibuutil$(SHLIB_MAJOR) --add-udeb=libuutil$(SHLIB_MAJOR)-udeb
	dh_makeshlibs -plibzfs$(SHLIB_MAJOR) --add-udeb=libzfs$(SHLIB_MAJOR)-udeb
	dh_makeshlibs -plibzpool$(SHLIB_MAJOR) --add-udeb=libzpool$(SHLIB_MAJOR)-udeb
	dh_makeshlibs -plibumem$(SHLIB_MAJOR) --add-udeb=libumem$(SHLIB_MAJOR)-udeb
	dh_makeshlibs -pzfsutils --add-udeb=zfsutils-udeb
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

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