#!/usr/bin/make -f
# -*- mode: makefile; coding: utf-8 -*-
# Copyright © 2003 Jeff Bailey <jbailey@debian.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# 02111-1307 USA.

include /usr/share/dpkg/architecture.mk
include /usr/share/dpkg/buildtools.mk

export DEB_BUILD_MAINT_OPTIONS = hardening=+all,-pie

DEB_DESTDIR = $(CURDIR)/debian/tmp
DEB_DESTDIR_UDEB = $(CURDIR)/debian/tmp-udeb
DEB_DESTDIR_PROF = $(CURDIR)/debian/tmp-prof

TRANSLATORS_PROF = auth exec ext2fs pci-arbiter pfinet lwip pflocal proc procfs term

CONFIGURE_ARGS = --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
ifeq (,$(filter stage1 stage2,$(DEB_BUILD_PROFILES)))
CONFIGURE_ARGS += --disable-profile --enable-static-progs='ext2fs,iso9660fs,rumpdisk,rumpusbdisk,rumpnet,pci-arbiter,acpi,startup,proc,auth,pfinet,pflocal'
else
CONFIGURE_ARGS += \
		 --disable-ncursesw \
		 --without-libbz2 \
		 --without-libz \
		 --without-parted \
		 --without-libcrypt \
		 --without-acpica \
		 --without-rump \
		 --without-libtirpc
# Skip some checks because they expect
# a working glibc causing a circular dependency.
# TODO: rather disable the corresponding features in configure.ac
export ac_cv_lib_pciaccess_pci_system_init=no
  ifneq (,$(filter stage1,$(DEB_BUILD_PROFILES)))
export ac_cv_search_clnt_create=no
export ac_cv_func_file_exec_paths=no
export ac_cv_func_exec_exec_paths=no
export ac_cv_func__hurd_exec_paths=no
export ac_cv_func__hurd_libc_proc_init=no
export ac_cv_func_file_utimens=no
export LEX=:
export YACC=:
export MIG=:
  endif
endif
CONFIGURE_ARGS += prefix=/usr libdir=/usr/lib/$(DEB_HOST_MULTIARCH) sysconfdir=/etc localstatedir=/var
CONFIGURE_ARGS_deb =
CONFIGURE_ARGS_udeb = libdir=/usr/lib --without-libdaemon --without-libbz2
SUID_PROGRAMS = /usr/bin/ids /usr/bin/login /usr/bin/ps-hurd /usr/bin/w-hurd /usr/sbin/smp

INSTALL_in := $(wildcard debian/*.install.in)
INSTALL_generated := $(patsubst %.in,%,$(INSTALL_in))

BUILT_USING := $(shell dpkg-query -f '$${source:Package} (= $${source:Version}), ' -W libc0.3-dev libparted-dev zlib1g-dev libbz2-dev uuid-dev libblkid-dev)

# for libdde-linux26 ARCH
ifeq ($(DEB_HOST_ARCH_CPU),amd64)
  ARCH = amd64
else
  ARCH = x86
endif

%:
	dh $@ -Bbuild-deb

#UBSAN=-Wl,-as-needed -fsanitize=undefined -fsanitize-address-use-after-scope

# Avoid re-running configure each time. See Bug#966707
override_dh_auto_configure-arch: debian/configure-stamp-arch
debian/configure-stamp-arch:
	dh_auto_configure -Bbuild-deb -- $(CONFIGURE_ARGS) $(CONFIGURE_ARGS_deb) $(shell DEB_CFLAGS_MAINT_APPEND="-fno-omit-frame-pointer $(UBSAN)" dpkg-buildflags --export=configure)
	dh_auto_configure -phurd-prof -Bbuild-prof -- $(CONFIGURE_ARGS) $(CONFIGURE_ARGS_deb) $(shell DEB_CFLAGS_MAINT_APPEND="-fno-omit-frame-pointer -pg" dpkg-buildflags --export=configure)
	dh_auto_configure -phurd-udeb -Bbuild-udeb -- $(CONFIGURE_ARGS) $(CONFIGURE_ARGS_udeb) $(shell dpkg-buildflags --export=configure)
	touch $@
	touch debian/configure-stamp-indep

override_dh_auto_configure-indep: debian/configure-stamp-indep
debian/configure-stamp-indep:
	# Force dumb cross-compilation
	dh_auto_configure -i -- --host i386-gnu MIG=true --without-parted
	touch $@

override_dh_auto_build-arch:
	@echo 'blhc: ignore-line-regexp: .* -o libstore_.*\.a -u .*'
	@echo 'blhc: ignore-line-regexp: .*gen_crc32table.*'
ifeq (,$(filter stage1,$(DEB_BUILD_PROFILES)))
	dh_auto_build -Bbuild-deb
  ifeq (,$(filter stage2 pkg.hurd.noprof,$(DEB_BUILD_PROFILES)))
	dh_auto_build -phurd-prof -Bbuild-prof
	for i in $(TRANSLATORS_PROF) ; do \
		$(MAKE) -C build-prof/$$i $$i.static ; \
	done
  endif
	dh_auto_build -phurd-udeb -Bbuild-udeb
  ifeq (,$(filter stage2,$(DEB_BUILD_PROFILES)))
	install -d $(CURDIR)/libdde-linux26/build/include/x86
	-ln -s x86 $(CURDIR)/libdde-linux26/build/include/amd64
	-ln -s asm-x86 $(CURDIR)/libdde-linux26/build/include/amd64/asm-x86_64
	$(MAKE) -C libdde-linux26 BUILDDIR=$(CURDIR)/build-deb ARCH=$(ARCH) LDFLAGS= CC=$(CC)
  endif
endif

override_dh_auto_build-indep:
	cd build-deb/doc && make
	cd build-deb/doc && make version.texi && makeinfo --html --split=chapter ../../doc/hurd.texi

override_dh_auto_clean:
	dh_auto_clean -Bbuild-deb
	dh_auto_clean -phurd-prof -Bbuild-prof
	dh_auto_clean -phurd-udeb -Bbuild-udeb
	$(MAKE) -C libdde-linux26 ARCH=$(ARCH) cleanall
	rm -f $$(find libdde-linux26 -name \*.d)
	rm -fr libdde-linux26/build
	rm -fr libdde-linux26/lib/src/gen_crc32table libdde-linux26/lib/src/crc32table.h libdde-linux26/lib/src/timeconst.h
	rm -f $(INSTALL_generated)

override_dh_auto_install-arch:
ifneq (,$(filter stage1,$(DEB_BUILD_PROFILES)))
	$(MAKE) -Cbuild-deb DESTDIR=$(DEB_DESTDIR) install-headers no_deps=t
else
	dh_auto_install -Bbuild-deb --destdir=$(DEB_DESTDIR)
  ifeq (,$(filter stage2 pkg.hurd.noprof,$(DEB_BUILD_PROFILES)))
	install -d $(DEB_DESTDIR_PROF)/hurd
	for i in $(TRANSLATORS_PROF) ; do \
		install -m 755 build-prof/$$i/$$i.static $(DEB_DESTDIR_PROF)/hurd/$$i.prof ; \
	done
  endif
	dh_auto_install -phurd-udeb -Bbuild-udeb --destdir=$(DEB_DESTDIR_UDEB)
  ifeq (,$(filter stage2,$(DEB_BUILD_PROFILES)))
	install -d $(CURDIR)/debian/tmp/usr/share/libdde_linux26/build/include
	ln -s x86 $(CURDIR)/debian/tmp/usr/share/libdde_linux26/build/include/amd64
	$(MAKE) -C libdde-linux26 INSTALLDIR=$(CURDIR)/debian/tmp/usr/share/libdde_linux26/build/include ARCH=$(ARCH) install
	ln -s asm-x86 $(CURDIR)/debian/tmp/usr/share/libdde_linux26/build/include/amd64/asm-x86_64
  endif

	# runsystem is managed by update-alternatives
	mv debian/tmp/usr/libexec/runsystem debian/tmp/usr/libexec/runsystem.gnu

	# move away fakeroot, ps, uptime, vmstat and w to not conflict with the
	# ones from other packages
	mkdir -p debian/tmp/usr/bin
	mv debian/tmp/usr/bin/fakeroot debian/tmp/usr/bin/fakeroot-hurd
	mv debian/tmp/usr/bin/ps debian/tmp/usr/bin/ps-hurd
	mv debian/tmp/usr/bin/uptime debian/tmp/usr/bin/uptime-hurd
	mv debian/tmp/usr/bin/vmstat debian/tmp/usr/bin/vmstat-hurd
	mv debian/tmp/usr/bin/w debian/tmp/usr/bin/w-hurd

  ifeq (,$(filter stage2 noudeb,$(DEB_BUILD_PROFILES)))
	mkdir -p debian/tmp-udeb/usr/bin
	mv debian/tmp-udeb/usr/bin/ps debian/tmp-udeb/usr/bin/ps-hurd
	mv debian/tmp-udeb/usr/bin/uptime debian/tmp-udeb/usr/bin/uptime-hurd
	mv debian/tmp-udeb/usr/bin/vmstat debian/tmp-udeb/usr/bin/vmstat-hurd
	mv debian/tmp-udeb/usr/bin/w debian/tmp-udeb/usr/bin/w-hurd
  endif

	# move away halt and reboot to not conflict with sysvinit
	# (they will be handled as alternatives)
	mv debian/tmp/usr/sbin/halt debian/tmp/usr/sbin/halt-hurd
	mv debian/tmp/usr/sbin/reboot debian/tmp/usr/sbin/reboot-hurd

	# remove PIC static libraries
	rm -f debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/*_pic.a
	rm -f debian/tmp-udeb/usr/lib/*_pic.a
endif

override_dh_auto_install-indep:
	$(MAKE) -Cbuild-deb/doc DESTDIR=$(DEB_DESTDIR) install no_deps=t

override_dh_install-arch: $(INSTALL_generated)
ifeq (,$(filter stage1 stage2 noudeb,$(DEB_BUILD_PROFILES)))
	dh_install $(addprefix -p,$(filter %-udeb,$(shell dh_listpackages))) --sourcedir=debian/tmp-udeb
	mkdir -p debian/hurd-udeb/usr/share/lintian/overrides
	install -p -m644 debian/hurd-udeb.lintian-overrides debian/hurd-udeb/usr/share/lintian/overrides/hurd-udeb
	sed -i -e '1s/bash/sh/' debian/hurd-udeb/usr/sbin/MAKEDEV
	# We need /servers/exec and startup at boot time
	touch debian/hurd-udeb/servers/exec
	touch debian/hurd-udeb/servers/startup
endif
	dh_install -phurd-prof --sourcedir=debian/tmp-prof
	dh_install --remaining-packages --sourcedir=debian/tmp

override_dh_installinit:
	dh_installinit -phurd --name=hurd-console
	dh_installinit --remaining-packages

override_dh_installchangelogs:
	dh_installchangelogs -XChangeLog

override_dh_missing:
	dh_missing --list-missing

override_dh_strip:
	dh_strip -Nhurd-prof -Xlibdde

override_dh_fixperms-arch:
	dh_fixperms -a
ifeq (,$(filter stage1,$(DEB_BUILD_PROFILES)))
	chmod u+s $(patsubst %,$(CURDIR)/debian/hurd%,$(SUID_PROGRAMS))
endif

override_dh_makeshlibs:
ifeq (,$(filter stage1 stage2 noudeb,$(DEB_BUILD_PROFILES)))
	dh_makeshlibs -phurd-libs0.3 --add-udeb=hurd-libs0.3-udeb
endif
	dh_makeshlibs --remaining-packages -Xusr/lib/hurd/

override_dh_gencontrol:
	dh_gencontrol -- -V"built-using=$(BUILT_USING)"

override_dh_clean:
	dh_clean
	rm -rf debian/tmp-udeb
	rm -rf debian/tmp-prof
	rm -f debian/configure-stamp-arch
	rm -f debian/configure-stamp-indep

debian/%.install: debian/%.install.in
	cat $^ | sed -e 's/@DEB_HOST_MULTIARCH@/$(DEB_HOST_MULTIARCH)/g' > $@
	[ ! -x $< ] || chmod +x $@
