#! /usr/bin/make -f

#export DH_VERBOSE=1
#export DEB_BUILD_OPTIONS="nostrip"

DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
VERSION = $(shell dpkg-parsechangelog | sed -n -e '/^Version:/s/.*: //p')

ifeq ($(shell dpkg-vendor --query vendor),Ubuntu)
    DEFAULT_NTP_SERVERS = ntp.ubuntu.com
else
    DEFAULT_NTP_SERVERS = 0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
endif

CONFFLAGS = \
	--with-rootprefix= \
	--with-rootlibdir=/lib/$(DEB_HOST_MULTIARCH) \
	--with-zshcompletiondir=/usr/share/zsh/vendor-completions \
	--with-sysvinit-path=/etc/init.d \
	--with-sysvrcnd-path=/etc \
	--with-debug-shell=/bin/bash \
	--with-telinit=/lib/sysvinit/telinit \
	--enable-split-usr \
	--disable-gudev \
	--disable-qrencode \
	--disable-microhttpd \
	--disable-chkconfig \
	--disable-gnutls \
	--disable-libcurl \
	--disable-libidn \
	--disable-elfutils \
	--disable-vconsole \
	--disable-sysusers \
	--disable-firstboot \
	--disable-coredump \
	--disable-xkbcommon \
	--disable-importd \
	--disable-libiptc \
	--disable-silent-rules \
	--with-ntp-servers="$(DEFAULT_NTP_SERVERS)"  \
	--with-system-uid-max=999 \
	--with-system-gid-max=999

ifeq (,$(findstring stage1,$(DEB_BUILD_PROFILES)))
CONFFLAGS += --enable-libcryptsetup
endif

CONFFLAGS_deb = \
	--enable-selinux \
	--enable-apparmor \
	--enable-introspection \
	--enable-gtk-doc \
	--enable-compat-libs \
	--enable-hwdb \
	--enable-efi \
	PYTHON=python3

CONFFLAGS_udeb = \
	--disable-libcryptsetup \
	--disable-pam \
	--disable-audit \
	--disable-selinux \
	--disable-apparmor \
	--disable-smack \
	--disable-ima \
	--disable-introspection \
	--disable-gtk-doc \
	--disable-binfmt \
	--disable-bootchart \
	--disable-quotacheck \
	--disable-tmpfiles \
	--disable-randomseed \
	--disable-backlight \
	--disable-logind \
	--disable-machined \
	--disable-hostnamed \
	--disable-timedated \
	--disable-networkd \
	--disable-timesyncd \
	--disable-localed \
	--disable-myhostname \
	--disable-resolved \
	--disable-polkit \
	--disable-acl \
	--disable-gcrypt \
	--disable-rfkill \
	--disable-hwdb \
	--disable-manpages \
	--disable-efi \
	--disable-seccomp \
	--without-python

override_dh_auto_configure:
	dh_auto_configure --builddirectory=build-deb \
		-- $(CONFFLAGS) $(CONFFLAGS_deb)
	dh_auto_configure --builddirectory=build-udeb \
		-- $(CONFFLAGS) $(CONFFLAGS_udeb)
	# workarounds for broken 220 tarball, see
	# http://lists.freedesktop.org/archives/systemd-devel/2015-May/032148.html
	rm -f src/journal/audit_type-to-name.h
	# http://lists.freedesktop.org/archives/systemd-devel/2015-May/032148.html
	rm -f src/udev/keyboard-keys-from-name.gperf

override_dh_auto_build:
	dh_auto_build --builddirectory=build-deb
	dh_auto_build --builddirectory=build-udeb
	# generate POT file for translators
	cd build-deb/po; srcdir=../../po intltool-update --pot --verbose

override_dh_auto_install:
	dh_auto_install --builddirectory=build-deb \
		--destdir=debian/install/deb
	dh_auto_install --builddirectory=build-udeb \
		--destdir=debian/install/udeb

override_dh_auto_clean:
	dh_auto_clean --builddirectory=build-deb
	dh_auto_clean --builddirectory=build-udeb
	rm -rf debian/install/
	# remove pre-generated man pages so they are rebuilt
	rm -f man/*.[13578]
	# remove pre-generated rules and unit files so they are rebuilt
	rm -f rules/99-systemd.rules \
		units/emergency.service \
		units/systemd-udevd.service \
		units/systemd-udev-settle.service \
		units/systemd-udev-trigger.service
	# remove Python byte code files
	rm -f *.pyc

override_dh_install:
	# remove unnecessary / unused files
	rm -f debian/install/*/usr/share/doc/systemd/LICENSE.*
	rm -f debian/install/*/var/log/README
	rm -f debian/install/*/etc/init.d/README
	rm -f debian/install/*/usr/share/man/man8/kernel-install.8
	rm -f debian/install/*/usr/bin/kernel-install
	rm -f debian/install/*/usr/share/zsh/vendor-completions/_kernel-install
	rm -f debian/install/*/usr/share/bash-completion/completions/kernel-install
	rm -rf debian/install/*/usr/lib/kernel/install.d
	rm -rf debian/install/*/etc/rpm/
	rm -rf debian/install/*/usr/lib/rpm/
	rm -rf debian/install/*/etc/kernel/
	rm -f debian/install/*/usr/lib/sysctl.d/50-default.conf
	find debian/install/ -name '*.la' -delete
	# remove files related to factory-reset feature
	find debian/install/ \( -name 'systemd-update-done*' -o \
		-name systemd-journal-catalog-update.service -o \
		-name systemd-udev-hwdb-update.service -o \
		-name ldconfig.service -o \
		-name etc.conf \) -delete
	rm -rf debian/install/*/usr/share/factory/
	# remove deprecated compatibility libraries
	rm -f debian/install/*/usr/lib/*/libsystemd-*.so
	rm -f debian/install/*/lib/*/libsystemd-*.so.*
	# remove symlinks enabling default-on services
	rm -rf debian/install/*/etc/systemd/system/*.target.wants/
	dh_install -pudev-udeb -plibudev1-udeb --sourcedir=debian/install/udeb
	# still needs to mature a bit, and packaging
	rm -f debian/install/*/usr/lib/*/libnss_resolve*

	# fix location of NSS modules
	cd debian/install/deb/; for f in usr/lib/*/libnss_*; do mv $$f $${f#usr/}; done

	dh_install -Nudev-udeb -Nlibudev1-udeb --sourcedir=debian/install/deb --fail-missing

	# Make sure the runlevel services are known by systemd so their targets
	# get launches. See https://bugzilla.redhat.com/show_bug.cgi?id=1002806
	for t in poweroff rescue multi-user graphical reboot; do \
		mkdir -p debian/systemd/lib/systemd/system/$${t}.target.wants;\
		ln -s ../systemd-update-utmp-runlevel.service \
			debian/systemd/lib/systemd/system/$${t}.target.wants ;\
	done

	# we don't want /tmp to be a tmpfs by default
	mv debian/systemd/lib/systemd/system/tmp.mount debian/systemd/usr/share/systemd/
	printf '\n[Install]\nWantedBy=local-fs.target\n' >> debian/systemd/usr/share/systemd/tmp.mount
	rm debian/systemd/lib/systemd/system/local-fs.target.wants/tmp.mount

	# remove duplicates
	# files shipped by systemd-sysv / sysvinit
	rm debian/systemd/usr/share/man/man1/init.1
	rm debian/systemd/usr/share/man/man8/halt.8
	rm debian/systemd/usr/share/man/man8/poweroff.8
	rm debian/systemd/usr/share/man/man8/reboot.8
	rm debian/systemd/usr/share/man/man8/shutdown.8
	rm debian/systemd/usr/share/man/man8/telinit.8
	rm debian/systemd/usr/share/man/man8/runlevel.8
	# files shipped by libpam-systemd
	rm debian/systemd/usr/share/man/man8/pam_systemd.8
	# files shipped by udev
	rm -r debian/systemd/etc/udev/
	rm debian/systemd/lib/systemd/system/systemd-udev*
	rm debian/systemd/lib/systemd/system/systemd-hwdb*
	rm debian/systemd/lib/systemd/system/*.target.wants/systemd-udev*
	rm debian/systemd/lib/systemd/system/*.target.wants/*hwdb*
	rm debian/systemd/lib/systemd/systemd-udevd
	rm debian/systemd/usr/share/man/man7/udev.7
	rm debian/systemd/usr/share/man/man7/*hwdb*.7
	rm debian/systemd/usr/share/man/man8/*udev*.8
	rm debian/systemd/usr/share/man/man8/*hwdb*.8
	rm debian/systemd/usr/share/bash-completion/completions/udevadm
	# files systemd by cryptsetup
ifeq (,$(findstring stage1,$(DEB_BUILD_PROFILES)))
	rm debian/systemd/usr/share/man/man5/crypttab.5
endif
	# files shipped by systemd
	rm debian/udev/lib/udev/rules.d/70-uaccess.rules
	rm debian/udev/lib/udev/rules.d/73-seat-late.rules
	rm debian/udev/lib/udev/rules.d/71-seat.rules
	rm debian/udev/lib/udev/rules.d/99-systemd.rules

	# Ubuntu specific files
	if dpkg-vendor --is ubuntu; then \
		install -D --mode=644 debian/extra/udev.py debian/udev/usr/share/apport/package-hooks/udev.py; \
		install -D --mode=644 debian/extra/systemd.py debian/systemd/usr/share/apport/package-hooks/systemd.py; \
		install --mode=644 debian/extra/systemd-vconsole-setup.service debian/systemd/lib/systemd/system/; \
		install --mode=644 debian/extra/rules-ubuntu/*.rules debian/udev/lib/udev/rules.d/; \
	fi

# use symlinked doc directories on Debian as the old udev package did; we have
# to manually install udev's README for that
override_dh_installdocs:
	if ! dpkg-vendor --is ubuntu; then \
		dh_installdocs -pudev -plibudev-dev --link-doc=libudev1; \
		install -D --mode 644 debian/udev.README.Debian debian/libudev1/usr/share/doc/libudev1/README.Debian; \
	fi
	dh_installdocs --remaining-packages

override_dh_installinit:
	dh_installinit -R --no-start
	dh_installinit --name=udev-finish --no-start
	dh_installinit --name=lvm2 --no-start
	# the following are only upstart jobs
	dh_installinit --name=udevtrigger --noscripts
	dh_installinit --name=udevmonitor --noscripts
	dh_installinit --name=udev-fallback-graphics --noscripts

# The SysV compat tools (which are symlinks to systemctl) are
# quasi-essential, so add its dependencies to Pre-Depends
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=753589
override_dh_shlibdeps:
	dh_shlibdeps -psystemd -- -dPre-Depends -edebian/systemd/bin/systemctl -dDepends
	dh_shlibdeps --remaining-packages

override_dh_makeshlibs:
	dh_makeshlibs -plibudev1 --add-udeb=libudev1-udeb -- -c4
	dh_makeshlibs --remaining-packages -- -c4

autoreconf:
	gtkdocize --copy --docdir docs/
	intltoolize -f -c
	autoreconf -f -i

override_dh_autoreconf:
	dh_autoreconf debian/rules -- autoreconf

override_dh_strip:
	dh_strip --dbg-package=systemd-dbg

# tests require /etc/machine-id to be present
override_dh_auto_test:
ifeq (, $(findstring nocheck, $(DEB_BUILD_OPTIONS)))
	# some tests hang under fakeroot, so disable fakeroot
	env -u LD_PRELOAD make -C build-deb check || ( \
		cd build-deb; \
		for f in test-*.log; do echo "==== $$f ===="; cat $$f; done; \
		if [ ! -e /etc/machine-id ]; then echo "/etc/machine-id missing, ignoring test failures"; else exit 1; fi; )
endif

%:
	dh $@ --with autoreconf,python3 --parallel
