#!/usr/bin/make -f

include /usr/share/dpkg/architecture.mk

export DH_VERBOSE = 1

cmd := \
	mdb \

man := \
	usr/src/man/man1/adb.1 \
	usr/src/man/man1/kmdb.1 \
	usr/src/man/man1/mdb.1 \
	usr/src/man/man7d/kmdb.7d

ifeq (amd64,$(DEB_HOST_ARCH_CPU))
dirs = usr/src/cmd/mdb/intel/amd64
endif

COMMON_MODULES_PROC = \
dof \
libavl \
libc \
libcmdutils \
libnvpair \
libproc \
libsysevent \
libtopo \
libumem \
libuutil \
libzpool \
mdb_ds \
mdb_test \
svc.configd \
svc.startd \

COMMON_MODULES_KVM = \
arp \
cpc \
crypto	\
dtrace	\
emlxs \
fcip \
fcp \
fctl \
genunix \
hook \
neti \
idm \
ip \
ipc \
ipp \
krtld \
lofs \
logindmux \
mac \
md \
mpt_sas \
mr_sas \
nca \
nsctl \
nsmb \
pmcs \
ptm \
qlc \
random \
rdc \
s1394 \
scsi_vhci \
sctp \
sd \
sdbc \
smbfs \
smbsrv \
sockfs \
specfs \
sppp \
srpt \
stmf \
stmf_sbd \
sv \
ufs \
usba \
zfs \


unpack: unpack-stamp
unpack-stamp:
	dh_testdir
	dh_illumos_gate --build  -- \
		usr/src/common/ctf \
		usr/src/uts/intel/promif \
		usr/src/common/util \
		$(cmd:%=usr/src/cmd/%) \
		$(man) \
		usr/src/uts/common/sys/kmdb.h \
		usr/src/uts/common/kmdb

	# Buggy and unused:
	echo > usr/src/Makefile.msg.targ

	echo 'export YACC=/usr/bin/sgs-yacc' >> usr/env.sh
	echo 'export LEX=/usr/bin/sgs-lex' >> usr/env.sh

	# GCC still does not support -msave-args, and I'm not sure
	# if this option is good at all:
	echo 'export SAVEARGS=' >> usr/env.sh

	echo 'export COMMON_MODULES_PROC="$(COMMON_MODULES_PROC)"' >> usr/env.sh
	echo 'export COMMON_MODULES_KVM="$(COMMON_MODULES_KVM)"' >> usr/env.sh

	touch $@

patch: patch-stamp
patch-stamp: unpack-stamp
	dh_testdir
	[ ! -f debian/patches/series ] || QUILT_PATCHES=debian/patches quilt push -a || test $$? = 2
	touch $@

unpatch:
	dh_testdir
	[ ! -f debian/patches/series ] || QUILT_PATCHES=debian/patches quilt pop -a -f || test $$? = 2
	rm -f patch-stamp

dirs-stamp: unpack-stamp
	. usr/env.sh; mkdir -p \
		debian/tmp/usr/bin \
		debian/tmp/usr/include/sys \
		debian/tmp$$DEB_LIBDIR_32 \
		debian/tmp$$DEB_LIBDIR_64 \
		debian/tmp$$DEB_USRLIBDIR_32 \
		debian/tmp$$DEB_USRLIBDIR_64

ifeq (amd64,$(DEB_HOST_ARCH_CPU))
	mkdir -p debian/tmp/usr/bin/amd64
	ln -sf amd64/mdb debian/tmp/usr/bin/mdb
endif
	touch $@

headers-stamp: patch-stamp dirs-stamp
	dh_illumos_make  -m sunmake usr/src/cmd/mdb/ -t install_h
	cp -f usr/src/uts/common/sys/kmdb.h debian/tmp/usr/include/sys/
	# GCC takes ./usr/src/cmd/mdb/common/modules/genunix/thread.h by accident,
	# we need "real" thread.h
	ln -sf /usr/include/thread.h debian/tmp/usr/include/thread.h
	touch $@

install: install-stamp

install-stamp: build-stamp
	touch $@

build build-arch build-indep: build-stamp
build-stamp: dirs-stamp patch-stamp headers-stamp kmdb
	dh_illumos_make -m sunmake --native \
		usr/src/cmd/mdb/tools
	dh_illumos_make -m sunmake \
		$(dirs)
	touch $@

kmdb: kdrv.o
	sunld -r -dy -Nmisc/kmdbmod -o $@ $<

# XXX yes, -mcmodel=kernel is for amd64 only
# Dyson runs on amd64 only for a while
kdrv.o: usr/src/uts/common/kmdb/kdrv.c
	$(CC) -O2 -D_KERNEL -I usr/src/uts/common -fno-builtin -mcmodel=kernel -c $< -o $@

binary binary-arch binary-indep: binary-stamp
binary-stamp: install-stamp
	dh_testdir
	dh_testroot
	dh_installdirs
	dh_install -p mdb usr/bin/mdb
ifeq (illumos-amd64,$(DEB_HOST_ARCH))
	dh_install -p mdb usr/bin/amd64/mdb
endif
	dh_install --list-missing
	dh_installman
	dh_installdocs
	dh_installexamples
	dh_installchangelogs
	dh_bash-completion
	dh_link
	dh_compress -X /examples/
	dh_fixperms
	dh_installdeb
	dh_shlibdeps -X kernel
	dh_strip -X kernel
	dh_gencontrol
	dh_md5sums
	dh_builddeb
	touch $@

clean: unpatch
	dh_testdir
	dh_testroot
	rm -rf usr .pc
	rm -f kmdb kdrv.o
	dh_clean

