#!/usr/bin/make -f
# -*- makefile -*-

DEB_HOST_ARCH_OS   ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)

LIBDIR = usr/lib/$(DEB_HOST_MULTIARCH)
LIBEXECDIR = $(LIBDIR)/schroot

ifneq ($(DEB_HOST_ARCH_OS),linux)
	LVMSNAP_OPTIONS = -Dlvm-snapshot=OFF
	BTRFSSNAP_OPTIONS = -Dbtrfs-snapshot=OFF
	ZFSSNAP_OPTIONS = -Dzfs-snapshot=OFF
else
	LVMSNAP_OPTIONS = -Dlvm-snapshot=ON
	BTRFSSNAP_OPTIONS = -Dbtrfs-snapshot=ON
	ZFSSNAP_OPTIONS = -Dzfs-snapshot=ON
endif

ifneq ($(DEB_HOST_ARCH_OS),kfreebsd)
	UUID_OPTIONS = -Duuid=ON
else
	UUID_OPTIONS = -Duuid=OFF
endif

export DEB_CFLAGS_MAINT_APPEND := -Wall
export DEB_CXXFLAGS_MAINT_APPEND := -Wall -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
export DEB_BUILD_MAINT_OPTIONS := hardening=+all reproducible=+fixfilepath

DH_OPTIONS = --with systemd --buildsystem=cmake --builddirectory=debian/build --parallel

ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
  NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
  MAKEFLAGS += -j$(NUMJOBS)
endif

DH_INSTALL_FILES = $(basename $(wildcard debian/*.install.in))

# Use debhelper's dh
%:
	dh $@ $(DH_OPTIONS)

%.install: %.install.in
	sed -e 's;@LIBDIR@;$(LIBDIR);g' -e 's;@LIBEXECDIR@;$(LIBEXECDIR);g' <$< >$@

override_dh_auto_configure: debian/build/CMakeCache.txt

debian/build/CMakeCache.txt: CMakeLists.txt
	GTEST_ROOT="$(CURDIR)/debian/build/gtest" \
	CFLAGS="$(CFLAGS) $(CPPFLAGS)" \
	CXXFLAGS="$(CXXFLAGS) $(CPPFLAGS)" \
	dh_auto_configure --builddirectory=$(dir $@) -- \
	        -DCMAKE_INSTALL_LIBEXECDIR=lib \
	        -DSCHROOT_LIBEXEC_DIR=/$(LIBDIR)/schroot \
	        -Ddebug=OFF -Ddchroot=OFF -Ddchroot-dsa=OFF \
	        -Dbash_completion_dir=/usr/share/bash-completion/completions \
	        $(LVMSNAP_OPTIONS) $(BTRFSSNAP_OPTIONS) $(ZFSSNAP_OPTIONS) \
	        -DBTRFS_EXECUTABLE=/sbin/btrfs \
	        -DLVCREATE_EXECUTABLE=/sbin/lvcreate \
	        -DLVREMOVE_EXECUTABLE=/sbin/lvremove \
	        -DZFS_EXECUTABLE=/sbin/zfs \
	        $(CURDIR)
	dh_testdir

override_dh_auto_clean:
	dh_auto_clean
	rm -f $(DH_INSTALL_FILES)
	rm -rf debian/build
	rm -rf debian/install

override_dh_auto_build:
ifneq (,$(shell dh_listpackages -a 2>/dev/null))
	$(MAKE) -C debian/build all VERBOSE=1
endif
ifneq (,$(shell dh_listpackages -i 2>/dev/null))
	$(MAKE) -C debian/build doc VERBOSE=1
endif

override_dh_auto_test:

install-arch: build-arch $(DH_INSTALL_FILES)
	dh $@ $(DH_OPTIONS)
# Setuid executables
	chmod 4755 $(CURDIR)/debian/schroot/usr/bin/schroot
# Lintian overrides
	mkdir -p $(CURDIR)/debian/schroot/usr/share/lintian/overrides
	cp $(CURDIR)/debian/schroot.lintian-overrides $(CURDIR)/debian/schroot/usr/share/lintian/overrides/schroot
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
# Requires fakeroot, so tests need running here.
	$(MAKE) -C debian/build test ARGS=-V
endif

install-indep: build-indep $(DH_INSTALL_FILES)
	dh $@ $(DH_OPTIONS)

install: build $(DH_INSTALL_FILES) install-arch install-indep

override_dh_auto_install:
ifneq (,$(shell dh_listpackages -a 2>/dev/null))
	$(MAKE) -C debian/build install DESTDIR=$(CURDIR)/debian/install PO4A=
endif
ifneq (,$(shell dh_listpackages -i 2>/dev/null))
	$(MAKE) -C debian/build/po install DESTDIR=$(CURDIR)/debian/install PO4A=
endif

override_dh_installchangelogs:
	dh_installchangelogs ChangeLog

override_dh_installinit:
	dh_installinit --no-start --update-rcd-params='defaults'

override_dh_systemd_start:
	dh_systemd_start --no-start

.PHONY: override_dh_auto_configure override_dh_auto_clean override_dh_auto_build override_dh_auto_test override_dh_auto_install override_dh_installchangelogs override_dh_installinit install-arch install-indep