#!/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

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')

CFLAGS = -Wall -g -pipe -fPIC -I. -I$(CURDIR)/sys -D_GNU_SOURCE \
	-D__FreeBSD_version=__FreeBSD_kernel_version \
	 -I/usr/include/freebsd \
	 -Werror=implicit-function-declaration

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

SOURCE = freebsd-libs
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
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) -I$(CURDIR)/debian/local/include" NO_WERROR=1 NOGCCERROR=1 \
        NOSHARED=NO NO_SHARED=NO NO_PROFILE=1 DESTDIR=$(DESTDIR) make
kernel = $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)

get-orig-source:
	rm -rf $(ORIGDIR)
	mkdir -p $(ORIGDIR)/share/misc
	mkdir -p $(ORIGDIR)/sys/kern
	mkdir -p $(ORIGDIR)/sys/sys
	for i in lib/libcam lib/libdevstat lib/libgeom lib/libipx \
		lib/libelf \
		lib/libdwarf \
	         lib/libkiconv lib/libnetgraph lib/libjail \
	         lib/libkvm lib/libmemstat lib/libsbuf lib/libusb \
	         lib/libusbhid sys/cam \
		lib/libutil \
		lib/libalias sys/netinet/libalias sys/modules/libalias \
	         sys/kern/subr_sbuf.c \
	         sys/sys/sbuf.h \
	         share/misc/usb_hid_usages ; do \
	    svn export $(SVN)/$$i $(ORIGDIR)/$$i ; \
	done
	# Remove unused files with non GPL compatible license (eg BSD 4 clauses)
	rm -f $(ORIGDIR)/sys/cam/scsi/scsi_ch.*
	rm -f $(ORIGDIR)/lib/libkvm/kvm_ia64.c
	rm -f $(ORIGDIR)/lib/libkvm/kvm_powerpc.c

	# Remove all CAM kernel headers to ensure system-wide version is used instead
	find $(ORIGDIR)/sys/cam -name \*.h | xargs rm -f

	tar --numeric-owner --owner 0 --group 0 -czf ../$(TARNAME) $(ORIGDIR)
	rm -rf $(ORIGDIR)

BUILD_ARCH_TARGETS = \
	build-sbuf \
	build-dwarf \
	build-elf \
	build-util \
	$(NULL)

ifeq ($(kernel), kfreebsd)
BUILD_ARCH_TARGETS += \
	build-cam \
	build-geom \
	build-ipx \
	build-kiconv \
	build-kvm \
	build-usbhid \
	build-usb \
	build-devstat \
	build-memstat \
	build-netgraph \
	build-jail \
	build-alias
endif

build: build-indep build-arch
build-indep:
build-arch: $(BUILD_ARCH_TARGETS)

build-cam: build-cam-stamp
build-cam-stamp: build-sbuf
	$(PMAKE) -C $(CURDIR)/lib/libcam SHLIBDIR=./
	touch $@

build-geom: build-geom-stamp
build-geom-stamp: build-sbuf
	$(PMAKE) -C $(CURDIR)/lib/libgeom SHLIBDIR=./
	touch $@

build-netgraph: build-netgraph-stamp
build-netgraph-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libnetgraph SHLIBDIR=./
	touch $@

build-ipx: build-ipx-stamp
build-ipx-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libipx SHLIBDIR=./
	touch $@

build-kiconv: build-kiconv-stamp
build-kiconv-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libkiconv SHLIBDIR=./
	touch $@

build-kvm: build-kvm-stamp
build-kvm-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libkvm SHLIBDIR=./
	touch $@

build-devstat: build-devstat-stamp
build-devstat-stamp: build-kvm
	$(PMAKE) -C $(CURDIR)/lib/libdevstat SHLIBDIR=./
	touch $@

build-elf: build-elf-stamp
build-elf-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libelf SHLIBDIR=./
	touch $@

build-dwarf: build-dwarf-stamp
build-dwarf-stamp: build-elf
	$(PMAKE) -C $(CURDIR)/lib/libdwarf SHLIBDIR=./
	touch $@

build-memstat: build-memstat-stamp
build-memstat-stamp: build-kvm
	$(PMAKE) -C $(CURDIR)/lib/libmemstat SHLIBDIR=./
	touch $@

build-sbuf: build-sbuf-stamp
build-sbuf-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libsbuf SHLIBDIR=./
	touch $@

build-usbhid: build-usbhid-stamp
build-usbhid-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libusbhid SHLIBDIR=./
	touch $@

build-usb: build-usb-stamp
build-usb-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libusb SHLIBDIR=./
	touch $@

build-util: build-util-stamp
build-util-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libutil SHLIBDIR=./
	touch $@

build-jail: build-jail-stamp
build-jail-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libjail SHLIBDIR=./
	touch $@

build-alias: build-alias-stamp
build-alias-stamp:
	$(PMAKE) -C $(CURDIR)/lib/libalias SHLIBDIR=./
	touch $@

clean:
	dh_testdir
	dh_testroot
	$(PMAKE) -C $(CURDIR)/lib/libsbuf clean
	$(PMAKE) -C $(CURDIR)/lib/libdwarf clean
	$(PMAKE) -C $(CURDIR)/lib/libelf clean
	$(PMAKE) -C $(CURDIR)/lib/libutil clean
ifeq ($(kernel), kfreebsd)
	$(PMAKE) -C $(CURDIR)/lib/libcam clean
	$(PMAKE) -C $(CURDIR)/lib/libnetgraph clean
	$(PMAKE) -C $(CURDIR)/lib/libdevstat clean
	$(PMAKE) -C $(CURDIR)/lib/libmemstat clean
	$(PMAKE) -C $(CURDIR)/lib/libgeom clean
	$(PMAKE) -C $(CURDIR)/lib/libipx clean
	$(PMAKE) -C $(CURDIR)/lib/libkiconv clean
	$(PMAKE) -C $(CURDIR)/lib/libkvm clean
	$(PMAKE) -C $(CURDIR)/lib/libusbhid clean
	$(PMAKE) -C $(CURDIR)/lib/libusb clean
	$(PMAKE) -C $(CURDIR)/lib/libjail clean
	$(PMAKE) -C $(CURDIR)/lib/libalias clean
endif
	rm -f *stamp
	dh_clean

install-indep: build-indep
	dh_testdir
	dh_testroot
	dh_prep -i
	dh_installdirs -i

	mkdir -p $(DESTDIR)
	dh_install -i --list-missing

install-arch: build-arch
	dh_testdir
	dh_testroot
	dh_prep -a
	dh_installdirs -a

	mkdir -p $(DESTDIR)/lib $(DESTDIR)/usr/lib $(DESTDIR)/usr/include $(DESTDIR)/usr/share/man/man3
	$(PMAKE) -C $(CURDIR)/lib/libsbuf install SHLIBDIR=/lib
	$(PMAKE) -C $(CURDIR)/lib/libdwarf install SHLIBDIR=/usr/lib
	$(PMAKE) -C $(CURDIR)/lib/libelf install SHLIBDIR=/usr/lib
	$(PMAKE) -C $(CURDIR)/lib/libutil install SHLIBDIR=/lib
ifeq ($(kernel), kfreebsd)
	$(PMAKE) -C $(CURDIR)/lib/libcam install SHLIBDIR=/usr/lib
	$(PMAKE) -C $(CURDIR)/lib/libgeom install SHLIBDIR=/lib
	$(PMAKE) -C $(CURDIR)/lib/libipx install SHLIBDIR=/lib
	$(PMAKE) -C $(CURDIR)/lib/libkiconv install SHLIBDIR=/usr/lib
	$(PMAKE) -C $(CURDIR)/lib/libkvm install SHLIBDIR=/lib
	$(PMAKE) -C $(CURDIR)/lib/libdevstat install SHLIBDIR=/usr/lib
	$(PMAKE) -C $(CURDIR)/lib/libmemstat install SHLIBDIR=/usr/lib
	$(PMAKE) -C $(CURDIR)/lib/libnetgraph install SHLIBDIR=/usr/lib
	$(PMAKE) -C $(CURDIR)/lib/libusbhid install SHLIBDIR=/usr/lib
	$(PMAKE) -C $(CURDIR)/lib/libusb install SHLIBDIR=/lib
	$(PMAKE) -C $(CURDIR)/lib/libjail install SHLIBDIR=/lib
	$(PMAKE) -C $(CURDIR)/lib/libalias install SHLIBDIR=/usr/lib

	mkdir -p $(CURDIR)/debian/tmp/usr/lib/pkgconfig
	install -m644 debian/libusb*.pc $(CURDIR)/debian/tmp/usr/lib/pkgconfig
	mkdir -p $(CURDIR)/debian/tmp/usr/bin
	install -m755 debian/libusb-config $(CURDIR)/debian/tmp/usr/bin
endif

	dh_install -a --list-missing

# Build architecture-independent files here.
binary-indep: install-indep
	dh_testdir
	dh_testroot
	dh_installchangelogs -i
	dh_installdocs -i
	dh_link -i
	dh_compress -i
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

# Build architecture-dependent files here.
binary-arch: install-arch
	dh_testdir
	dh_testroot
	dh_installchangelogs -a
	dh_installdocs -a
#	dh_installexamples
#	dh_installinit
#	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
ifeq ($(kernel), kfreebsd)
	dh_makeshlibs -plibgeom1 --add-udeb=libgeom1-udeb
	dh_makeshlibs -plibipx2 --add-udeb=libipx2-udeb
	dh_makeshlibs -plibsbuf6 --add-udeb=libsbuf6-udeb
	dh_makeshlibs -plibusb3 --add-udeb=libusb3-udeb
endif
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

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