#! /usr/bin/make -f
# Copyright © 2010-2018 Richard Kettlewell.
#
# 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.

INSTALL=install
VERSION=5.0
STRIPARGS=--strip-unneeded --remove-section=.comment --remove-section=.note

export DEB_BUILD_MAINT_OPTIONS = hardening=+all
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk

export SOURCE_DATE_EPOCH = $(shell date -d "$$(dpkg-parsechangelog --count 1 -SDate)" +%s)

# Debian apparently wants reproducible builds but won't execute them
# in a consistent environment, so every project has to clean up after
# it.
export LC_ALL=C.UTF-8

build-arch: build
build-indep: build
build:
	[ -e configure ] || autoreconf -si
	./configure --prefix=/usr --mandir=/usr/share/man --disable-silent-rules ${CONFIGURE_EXTRA}
	$(MAKE)

clean-rsbackup:
	rm -rf debian/rsbackup

binary-rsbackup: build
	rm -rf debian/rsbackup
	mkdir -p debian/rsbackup/DEBIAN
	mkdir -p debian/rsbackup/etc/rsbackup/hosts.d
	mkdir -p debian/rsbackup/etc/cron.hourly
	mkdir -p debian/rsbackup/etc/cron.daily
	mkdir -p debian/rsbackup/etc/cron.weekly
	mkdir -p debian/rsbackup/etc/cron.monthly
	mkdir -p debian/rsbackup/usr/share/doc/rsbackup
	mkdir -p debian/rsbackup/var/log/backup
	mkdir -p debian/rsbackup/usr/share/doc-base
	mkdir -p debian/rsbackup/usr/bin
	mkdir -p debian/rsbackup/usr/share/man/man1
	mkdir -p debian/rsbackup/usr/share/man/man5
	cp debian/rsbackup.conffiles debian/rsbackup/DEBIAN/conffiles
	install debian/rsbackup.postinst debian/rsbackup/DEBIAN/postinst
	install debian/rsbackup.postrm debian/rsbackup/DEBIAN/postrm
	install -m 755 tools/rsbackup.hourly debian/rsbackup/etc/cron.hourly/rsbackup
	install -m 755 tools/rsbackup.daily debian/rsbackup/etc/cron.daily/rsbackup
	install -m 755 tools/rsbackup.weekly debian/rsbackup/etc/cron.weekly/rsbackup
	install -m 755 tools/rsbackup.monthly debian/rsbackup/etc/cron.monthly/rsbackup
	cp tools/rsbackup.config debian/rsbackup/etc/rsbackup/config
	cp tools/rsbackup.defaults debian/rsbackup/etc/rsbackup/defaults
	cp tools/rsbackup.devices debian/rsbackup/etc/rsbackup/devices
	cp debian/changelog debian/rsbackup/usr/share/doc/rsbackup/changelog.Debian
	cp debian/doc.rsbackup debian/rsbackup/usr/share/doc-base/rsbackup
	cp README.md debian/rsbackup/usr/share/doc/rsbackup/.
	lynx -dump -nolist doc/CHANGES.html > debian/rsbackup/usr/share/doc/rsbackup/changelog
	gzip -9nv debian/rsbackup/usr/share/doc/rsbackup/*
	cp doc/*.html doc/*.css debian/rsbackup/usr/share/doc/rsbackup/.
	cp debian/copyright debian/rsbackup/usr/share/doc/rsbackup/.
	$(INSTALL) -m 755 src/rsbackup debian/rsbackup/usr/bin/rsbackup
	$(MAKE) -C tools install DESTDIR=$(shell pwd)/debian/rsbackup
	$(INSTALL) -m 644 doc/rsbackup.1 \
			doc/rsbackup.cron.1 \
			doc/rsbackup-mount.1 \
			doc/rsbackup-snapshot-hook.1 \
		debian/rsbackup/usr/share/man/man1/
	$(INSTALL) -m 644 doc/rsbackup.5 debian/rsbackup/usr/share/man/man5/
	strip $(STRIPARGS) debian/rsbackup/usr/bin/rsbackup
	gzip -9nv debian/rsbackup/usr/share/man/man*/*
	dpkg-shlibdeps -Tdebian/substvars.rsbackup \
		debian/rsbackup/usr/bin/*
	cd debian/rsbackup && \
	  find -name DEBIAN -prune -o -type f -print \
	    | sed 's/^\.\///' \
			| sort | xargs md5sum > DEBIAN/md5sums
	dpkg-gencontrol -isp -prsbackup -Pdebian/rsbackup \
		-Tdebian/substvars.rsbackup
	chown -R root:root debian/rsbackup
	chmod -R g-ws debian/rsbackup
	find debian/rsbackup -newermt "@$$SOURCE_DATE_EPOCH" -print0 | \
		xargs -0r touch --no-dereference --date="@$$SOURCE_DATE_EPOCH"
	dpkg --build debian/rsbackup ..

clean-rsbackup-graph:
	rm -rf debian/rsbackup-graph

binary-rsbackup-graph: build
	rm -rf debian/rsbackup-graph
	mkdir -p debian/rsbackup-graph/DEBIAN
	mkdir -p debian/rsbackup-graph/usr/bin
	mkdir -p debian/rsbackup-graph/usr/share/man/man1
	mkdir -p debian/rsbackup-graph/usr/share/doc
	ln -s rsbackup \
		debian/rsbackup-graph/usr/share/doc/rsbackup-graph
	$(INSTALL) -m 755 src/rsbackup-graph \
		debian/rsbackup-graph/usr/bin/rsbackup-graph
	$(INSTALL) -m 644 doc/rsbackup-graph.1 \
		debian/rsbackup-graph/usr/share/man/man1/
	strip $(STRIPARGS) debian/rsbackup-graph/usr/bin/rsbackup-graph
	gzip -9nv debian/rsbackup-graph/usr/share/man/man*/*
	dpkg-shlibdeps -Tdebian/substvars.rsbackup-graph \
		debian/rsbackup-graph/usr/bin/*
	cd debian/rsbackup-graph && \
	  find -name DEBIAN -prune -o -type f -print \
	    | sed 's/^\.\///' \
			| xargs md5sum > DEBIAN/md5sums
	dpkg-gencontrol -isp -prsbackup-graph -Pdebian/rsbackup-graph \
		-Tdebian/substvars.rsbackup-graph
	chown -R root:root debian/rsbackup-graph
	chmod -R g-ws debian/rsbackup-graph
	find debian/rsbackup-graph -newermt "@$$SOURCE_DATE_EPOCH" -print0 | \
		xargs -0r touch --no-dereference --date="@$$SOURCE_DATE_EPOCH"
	dpkg --build debian/rsbackup-graph ..

binary: binary-arch binary-indep
binary-arch: binary-rsbackup binary-rsbackup-graph
binary-indep:

clean: clean-rsbackup clean-rsbackup-graph
	rm -f debian/files
	rm -f debian/debhelper.log
	[ ! -f Makefile ] || $(MAKE) distclean

distcheck:
	$(MAKE) dist
	gzip -cd rsbackup-${VERSION}.tar.gz | tar xf -
	debian/rules -C rsbackup-${VERSION} build
	fakeroot debian/rules -C rsbackup-${VERSION} binary
	rm -rf rsbackup-${VERSION}
	ls -l rsbackup_${VERSION}_all.deb rsbackup-${VERSION}.tar.gz
