#!/usr/bin/make -f
# debian/rules for the dpkg suite.
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>

WFLAGS := -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers

# Use the in-tree dpkg-buildflags
dpkg_buildflags = DEB_CFLAGS_MAINT_APPEND="$(WFLAGS)" DEB_CXXFLAGS_MAINT_APPEND="$(WFLAGS)" PERL5LIB=$(CURDIR)/scripts DPKG_DATADIR=$(CURDIR) perl $(CURDIR)/scripts/dpkg-buildflags.pl

# These are used for cross-compiling and for saving the configure script
# from having to guess our platform (since we know it already)
DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)

ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
	confflags += --build=$(DEB_HOST_GNU_TYPE)
else
	confflags += --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
endif

# Don't enable everything on all platforms
DEB_HOST_ARCH_OS  ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)

ifeq ($(DEB_HOST_ARCH_OS),linux)
	confflags += --with-selinux
endif
ifeq (,$(filter maintainer-build,$(DEB_BUILD_OPTIONS)))
	confflags += --disable-silent-rules
endif

# Create configure script if necessary, automake handles rebuilding it.
configure:
	dh_testdir

	autoreconf -v -i

# Configure the build tree
build-tree/config.status: configure
	dh_testdir

	install -d build-tree
	cd build-tree && ../configure $(confflags) \
		$(shell $(dpkg_buildflags) --export=configure) \
		--prefix=/usr \
		--mandir=\$${datadir}/man \
		--infodir=\$${datadir}/info \
		--sysconfdir=/etc \
		--localstatedir=/var \
		--with-zlib \
		--with-bz2

# Build the package in build-tree
build-indep build-arch build: build-tree/config.status
	dh_testdir

	cd build-tree && $(MAKE)

# Run the test suites
check: build
	dh_testdir

ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	cd build-tree && $(MAKE) check
endif

# Install the package underneath debian/tmp
install: check
	dh_testdir
	dh_testroot
	dh_prep
	dh_installdirs

	cd build-tree && $(MAKE) DESTDIR="$(CURDIR)/debian/tmp" install

ifeq (yes,$(shell dpkg-vendor --derives-from Ubuntu && echo yes))
	# Ubuntu's «i386» architecture is built for i686 (the Debian default
	# is i486).
	sed -ri 's/^(i386[[:space:]]+)[^[:space:]]+/\1i686/' \
	        $(CURDIR)/debian/tmp/usr/share/dpkg/cputable
endif

# Put together the dpkg and dselect packages
binary-arch: install
	dh_testdir -a
	dh_testroot -a
	dh_install --sourcedir=debian/tmp -a
	dh_installcron -a
	dh_installlogrotate -a

	install -d debian/dpkg/sbin
	mv debian/dpkg/usr/sbin/start-stop-daemon debian/dpkg/sbin

	dh_installchangelogs -a ChangeLog*
	dh_installdocs -a
	dh_link -a
	dh_lintian -a
	dh_strip -a
	dh_compress -a
	dh_fixperms -a
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

# Put together the dpkg-dev package
binary-indep: install
	dh_testdir -i
	dh_testroot -i
	dh_install --sourcedir=debian/tmp -i
	dh_installcron -i
	dh_installchangelogs -i ChangeLog*
	dh_installdocs -i
	dh_link -i
	dh_lintian -i
	dh_strip -i
	dh_compress -i
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

binary: binary-arch binary-indep


# Clean up the mess we made
clean:
	dh_testdir

	[ ! -f Makefile ] || $(MAKE) distclean
	rm -rf build-tree
	dh_clean


.PHONY: build check install binary-arch binary-indep binary clean
