#!/usr/bin/make -f

DEB_RELEASE=$(shell dpkg-parsechangelog -SVersion | sed 's/[^-]\+-//')
DEB_BUILDDATE=$(shell dpkg-parsechangelog -SDate)
DEB_BUILDUSER=$(shell dpkg-parsechangelog -SMaintainer)
NULL=

# If the build environment sets -Bsymbolic-functions, which is often used as
# hardening option, that would break libvirt build time self-testing.
# Therefore let dpkg-buildflag strip that option if present.
export DEB_LDFLAGS_MAINT_STRIP = -Wl,-Bsymbolic-functions

ifneq (,$(findstring $(DEB_HOST_ARCH_OS), linux))
  ifneq (,$(findstring $(DEB_HOST_ARCH), i386 amd64))
    WITH_VBOX         = --with-vbox
  else
    WITH_VBOX         = --without-vbox
  endif
  ifneq (,$(findstring $(DEB_HOST_ARCH), i386 amd64 armhf arm64))
    WITH_LIBXL        = --with-libxl
    XEN_ENABLED       = 1
  else
    WITH_LIBXL        = --without-libxl
  endif
  MAKE_CHECK        = 1
  FAIL_CHECK        = 1
  WITH_STORAGE_LVM    = --with-storage-lvm
  WITH_STORAGE_ISCSI  = --with-storage-iscsi
  WITH_STORAGE_DISK   =	--with-storage-disk
  ifneq (,$(findstring $(DEB_HOST_ARCH), amd64 arm64 armhf i386 ppc64el s390x))
    WITH_STORAGE_RBD  = --with-storage-rbd
    WITH_STORAGE_ZFS  = --with-storage-zfs
  else
    WITH_STORAGE_RBD  = --without-storage-rbd
    WITH_STORAGE_ZFS  = --without-storage-zfs
  endif
  WITH_STORAGE_GLUSTER = --with-storage-gluster
  WITH_UDEV           = --with-udev
  WITH_CAPNG          = --with-capng
  WITH_MACVTAP        = --with-macvtap
  WITH_NETWORK        = --with-network
  WITH_OPENVZ         = --with-openvz
  WITH_NETCF          = --without-netcf
  WITH_SANLOCK        = --with-sanlock
  WITH_INIT_SCRIPT    =	--with-init-script=systemd
  WITH_SYSTEMD        = --with-systemd-daemon
  WITH_FIREWALLD      = --without-firewalld
  WITH_ATTR           = --with-attr
  WITH_AUDIT          = --with-audit
  WITH_SELINUX        = --with-selinux --with-secdriver-selinux --with-selinux-mount=/sys/fs/selinux
  WITH_APPARMOR       = --with-apparmor --with-secdriver-apparmor --with-apparmor-profiles
  WITH_NSS_PLUGIN     = --with-nss-plugin
  ifneq (,$(findstring $(DEB_HOST_ARCH), amd64 armel armhf i386 ia64 powerpc ppc64el s390 s390x))
      WITH_DTRACE     = --with-dtrace
  else
      WITH_DTRACE     = --without-dtrace
  endif
  ifneq (,$(findstring $(DEB_HOST_ARCH), amd64 arm64 i386 ia64 mips mipsel powerpc ppc64el s390x))
      WITH_NUMA       = --with-numactl --with-numad
  else
      WITH_NUMA       = --without-numactl --without-numad
  endif
  ifneq (,$(findstring $(DEB_HOST_ARCH), ia64))
      WITH_LXC        = --without-lxc
  else
      WITH_LXC        = --with-lxc
  endif
else
  ifneq (,$(findstring $(DEB_HOST_ARCH_OS), linux))
    WITH_STORAGE_ZFS  = --with-storage-zfs
  endif
  WITH_STORAGE_LVM    = --without-storage-lvm
  WITH_STORAGE_ISCSI  = --without-storage-iscsi
  WITH_STORAGE_DISK   =	--without-storage-disk
  WITH_STORAGE_RBD    = --without-storage-rbd
  WITH_UDEV           = --without-udev
  WITH_CAPNG          = --without-capng
  WITH_MACVTAP        = --without-macvtap
  WITH_NETWORK        = --without-network
  WITH_LXC            = --without-lxc
  WITH_NUMA           = --without-numactl --without-numad
  WITH_NETCF          = --without-netcf
  WITH_INIT_SCRIPT    =	--with-init-script=none
  WITH_SYSTEMD        = --without-systemd-daemon
  WITH_FIREWALLD      = --without-firewalld
  WITH_ATTR           = --without-attr
  WITH_AUDIT          = --without-audit
  WITH_SELINUX        = --without-selinux
  WITH_APPARMOR       = --without-apparmor
  WITH_NSS_PLUGIN     = --without-nss-plugin
  WITH_DTRACE         = --without-dtrace
  WITH_LIBXL          = --without-libxl
  WITH_VBOX           = --without-vbox
endif

DEB_CONFIGURE_EXTRA_ARGS :=      \
	--libexecdir=/usr/lib/libvirt \
	--with-packager="$(DEB_BUILDUSER) $(DEB_BUILDDATE)" \
	--with-packager-version="$(DEB_RELEASE)" \
	--with-default-editor="sensible-editor" \
	--enable-dependency-tracking \
	--disable-silent-rules   \
	--disable-rpath          \
	--with-qemu		 \
	--with-qemu-user=libvirt-qemu  \
	--with-qemu-group=kvm \
	$(WITH_OPENVZ)		 \
	--with-sasl              \
	--with-yajl              \
	--without-ssh2		 \
	--with-polkit		 \
	$(WITH_UDEV)		 \
	--with-storage-fs        \
	--with-storage-dir       \
	$(WITH_STORAGE_LVM)	 \
	$(WITH_STORAGE_ISCSI)	 \
	$(WITH_STORAGE_DISK)	 \
	--without-storage-sheepdog \
	$(WITH_STORAGE_RBD)      \
	$(WITH_STORAGE_GLUSTER)  \
	$(WITH_STORAGE_ZFS)      \
	$(WITH_INIT_SCRIPT)      \
	$(WITH_NUMA)             \
	$(WITH_SELINUX)          \
	$(WITH_APPARMOR)         \
	--with-esx               \
	$(WITH_CAPNG)		 \
	--enable-debug		 \
	$(WITH_MACVTAP)		 \
	$(WITH_NETWORK)		 \
	$(WITH_NETCF)		 \
	$(WITH_LIBXL)		 \
	$(WITH_VBOX)		 \
	$(WITH_LXC)              \
	$(WITH_DTRACE)           \
	$(WITH_AUDIT)            \
	--without-hal            \
	$(WITH_FIREWALLD)        \
	$(WITH_ATTR)             \
	$(WITH_NSS_PLUGIN)       \
        --with-wireshark-dissector \
        $(NULL)

LIBVIRT_SYSTEM_SERVICES = \
	libvirtd.socket \
	libvirtd-ro.socket \
	libvirtd-admin.socket \
	libvirt-guests.service \
	virtlogd.socket \
	virtlogd-admin.socket \
	virtlogd.service \
	virtlockd.socket \
	virtlockd-admin.socket \
	virtlockd.service \
	$(NULL)


DEB_BUILDDIR := $(CURDIR)/debian/build
LOGROTATE = $(basename $(basename $(notdir $(wildcard src/remote/libvirtd*.logrotate.in))))
SRV_MONOLITHIC = libvirt-guests virtlogd virtlockd libvirtd libvirtd-tcp libvirtd-tls virt-guest-shutdown
# For split daemons later, as of 6.0 the remaining elments are
#SRV_SPLIT = virtnwfilterd virtinterfaced virtlxcd virtnetworkd virtnodedevd virtproxyd virtqemud virtsecretd virtstoraged virtvboxd virtxend virtproxyd-tcp virtproxyd-tls

%:
	dh $@ --builddirectory=$(DEB_BUILDDIR)

override_dh_auto_configure:
	IPTABLES_PATH=/usr/sbin/iptables \
	IP6TABLES_PATH=/usr/sbin/ip6tables \
	EBTABLES_PATH=/usr/sbin/ebtables \
	dh_auto_configure -- $(DEB_CONFIGURE_EXTRA_ARGS) $(shell dpkg-buildflags --export=configure)

override_dh_auto_test:
	export LD_PRELOAD="";     \
	export VIR_TEST_DEBUG=1;  \
	[ -n "$(MAKE_CHECK)" ] || exit 0; \
	if ! dh_auto_test -O--builddirectory=$(DEB_BUILDDIR); then \
	    cat ./debian/build/gnulib/tests/test-suite.log \
	        ./debian/build/tests/test-suite.log; \
	    [ -z "$(FAIL_CHECK)" ] || exit 1; \
	fi

override_dh_install-arch:
	mkdir -p debian/tmp/usr/share/apport/package-hooks
	cp -f debian/libvirt-daemon.apport \
	      debian/tmp/usr/share/apport/package-hooks/source_libvirt.py
	# copy dnsmasq configuration
	mkdir -p debian/tmp/etc/dnsmasq.d-available
	cp debian/libvirt-daemon.dnsmasq \
	   debian/tmp/etc/dnsmasq.d-available/libvirt-daemon
	# Add profile script to automatically set default URI
	mkdir -p debian/tmp/etc/profile.d
	cp -f debian/libvirt-uri.sh debian/tmp/etc/profile.d/

	dh_install

	# Copy upstream files to debian/ so dh_* can find them
	cp debian/tmp/usr/lib/libvirt/libvirt-guests.sh \
	    debian/libvirt-daemon-system-sysv.libvirt-guests.init
	cp tools/libvirt-guests.sysconf \
	    debian/libvirt-daemon-system.libvirt-guests.default
	cp src/logging/virtlogd.sysconf \
	    debian/libvirt-daemon-system.virtlogd.default
	cp src/locking/virtlockd.sysconf \
	    debian/libvirt-daemon-system.virtlockd.default
	# Add our backward compat polkit rule
	cp debian/polkit/60-libvirt.pkla \
	    debian/libvirt-daemon-system/var/lib/polkit-1/localauthority/10-vendor.d/
ifneq (,$(findstring $(DEB_HOST_ARCH_OS), linux))
	# Linux supports more nice things:
	set -e; for f in $(SRV_MONOLITHIC); do \
		dh_install -p libvirt-daemon-system  usr/lib/systemd/system/$${f}* \
			lib/systemd/system/; \
	done
	dh_install -p libvirt-daemon-system usr/lib/libvirt/virt-aa-helper
	dh_install -p libvirt-daemon-system etc/apparmor.d
	dh_apparmor -p libvirt-daemon-system --profile-name=usr.lib.libvirt.virt-aa-helper
	dh_apparmor -p libvirt-daemon-system --profile-name=usr.sbin.libvirtd
	# Not all linux arches have systemtap yet
	mkdir -p debian/tmp/usr/share/systemtap
	dh_install -p libvirt-daemon-system usr/share/systemtap
	dh_install -p libvirt-daemon-system etc/libvirt/lxc.conf
	dh_install -p libvirt-daemon-system etc/libvirt/qemu-sanlock.conf
	dh_install -p libvirt-daemon-system etc/libvirt/qemu/networks/
	dh_install -p libvirt-daemon-system etc/libvirt/nwfilter/
	dh_install -p libvirt-clients etc/libvirt/virt-login-shell.conf
	dh_install -p libnss-libvirt \
                      usr/lib/$(DEB_HOST_MULTIARCH)/libnss_libvirt*.so.2 \
                      lib/$(DEB_HOST_MULTIARCH)/
endif
ifeq ($(XEN_ENABLED), 1)
	dh_install -p libvirt-daemon-system etc/libvirt/libxl.conf
	dh_install -p libvirt-daemon-system etc/libvirt/libxl-lockd.conf
	dh_install -p libvirt-daemon-system etc/libvirt/libxl-sanlock.conf
endif

	set -e; for l in $(LOGROTATE); do \
		mv $(CURDIR)/debian/tmp/etc/logrotate.d/$$l \
	        debian/libvirt-daemon-system.$$l.logrotate; \
		dh_installlogrotate --name=$$l;     \
	done

	# Don't ship any la files
	rm debian/libvirt-wireshark/usr/lib/*/wireshark/plugins/*/*/*.la
	# Don't ship any files that are managed by the user only
	rm debian/libvirt-daemon-system/etc/apparmor.d/local/*
	# executable-not-elf-or-script
	chmod 644 debian/libvirt-daemon/usr/share/bash-completion/completions/vsh

override_dh_installinit:
	dh_installinit -p libvirt-daemon-system-sysv --name=virtlogd --no-stop-on-upgrade
	dh_installinit -p libvirt-daemon-system-sysv --name=virtlockd --no-stop-on-upgrade
	dh_installinit -p libvirt-daemon-system-sysv --name=libvirtd --restart-after-upgrade -- defaults 28 72
	dh_installinit -p libvirt-daemon-system-sysv --name=libvirt-guests --no-stop-on-upgrade -- defaults 29 71
	# install /etc/default/* files that are shared between sysv and systemd packages
	dh_installinit -p libvirt-daemon-system --name=virtlockd --no-scripts
	dh_installinit -p libvirt-daemon-system --name=virtlogd --no-scripts
	dh_installinit -p libvirt-daemon-system --name=libvirt-guests --no-scripts
	dh_installinit -p libvirt-daemon-system --name=libvirtd --no-scripts

override_dh_installsystemd:
	dh_installsystemd -p libvirt-daemon-system --restart-after-upgrade libvirtd.service
	dh_installsystemd -p libvirt-daemon-system --no-stop-on-upgrade --no-restart-after-upgrade $(LIBVIRT_SYSTEM_SERVICES)

override_dh_installdocs:
	dh_installdocs -plibvirt-doc --doc-main-package libvirt-doc
	dh_installdocs -Nlibvirt-doc

override_dh_auto_clean:
	[ ! -f Makefile ] || dh_auto_clean
	rm -f $(CURDIR)/debian/libvirt-daemon-system.libvirt-guests.init \
	      $(CURDIR)/debian/libvirt-daemon-system.libvirt-guests.default \
	      $(CURDIR)/debian/libvirt-daemon-system.*.logrotate \
	      $(CURDIR)/debian/*.service \
	      $(CURDIR)/debian/libvirt-daemon-system.virtlogd.default \
	      $(CURDIR)/debian/libvirt-daemon-system.virtlockd.default \
	      $(NULL)
	rm -rf $(DEB_BUILDDIR)

override_dh_installchangelogs:
	dh_installchangelogs -plibvirt0
	dh_installchangelogs -Nlibvirt0 -XChangeLog
