#!/usr/bin/make -f
SHELL+= -e

D-std := $(CURDIR)/debian/inn2
D-lfs := $(CURDIR)/debian/inn2-lfs
D = $(D-$*)
B = $(CURDIR)/build-$*

##############################################################################
# this code deals with building a second inn2-lfs package from the same
# source, but only on 32 bit architectures
# Ideally new future 32 bit architectures should not bother with inn2-lfs
# and just enable LFS by default.

DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
DEB_HOST_ARCH_BITS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_BITS 2> /dev/null || true)
ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH),alpha arm hppa i386 mips mipsel powerpc s390 sparc))
# 32 bit std package (for backward compatibility) and 32 bit LFS lfs package
FLAVORS := std lfs
lfs_configure_flags = --enable-largefiles
else ifeq ($(DEB_HOST_ARCH_BITS),64)
# 64 bit std package
FLAVORS := std
else ifeq ($(DEB_HOST_ARCH),$(filter $(DEB_HOST_ARCH),amd64 ia64 ppc64 s390x))
# 64 bit std package (when DEB_HOST_ARCH_BITS is not supported)
FLAVORS := std
else
# 32 bit LFS std package
FLAVORS := std
std_configure_flags = --enable-largefiles
endif

std_dh_clean_opts = -pinn2 -pinn2-inews -p inn2-dev
lfs_dh_clean_opts = -pinn2-lfs
std_dh_movefiles_opts = -pinn2 -pinn2-inews -p inn2-dev
lfs_dh_movefiles_opts = -pinn2-lfs -pinn2-lfs-inews -p inn2-lfs-dev

ifeq ($(FLAVORS),std)
no_package := --no-package=inn2-lfs
endif

# the upstream source needs to be copied in the flavor-specific build dirs
src_files := $(shell find . -maxdepth 1 \
	-not -name . -and -not -name debian -and -not -name .pc \
	-and -not -name 'build-*' -and -not -name '.stamp-*')

##############################################################################
DPKG_EXPORT_BUILDFLAGS = 1
DEB_BUILD_MAINT_OPTIONS=hardening=+pie,+bindnow
-include /usr/share/dpkg/buildflags.mk

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))
  configure_flags += --build $(DEB_HOST_GNU_TYPE)
else
  configure_flags += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
endif

clean:
	rm -rf .stamp-* build-*
	[ ! -f Makefile.global ] || $(MAKE) distclean
	# delete packages which are not in control but are built anyway
	rm -rf debian/inn2-lfs-dev/ debian/inn2-lfs-inews/
	# delete generated files which have been changed by a patch to
	# their source to prevent them from appearing in the diff
	cd doc/man/ && rm -f control.ctl.5 inn.conf.5 nnrpd.8 send-uucp.8 sendinpaths.8
	# delete the cloned debhelper configuration and logs
	find debian -maxdepth 1 -name 'inn2-lfs*' -not -type d -print0 \
		| xargs --no-run-if-empty -0 rm
	dh_clean

configure: $(addprefix .stamp-configure-, $(FLAVORS))
.stamp-configure-%:
	dh_testdir
	mkdir -p $B
	for dir in $(src_files); do cp -ldpR $$dir $B; done
	cd $B && \
	_PATH_PERL=/usr/bin/perl \
	ac_cv_path__PATH_AWK=awk \
	ac_cv_path__PATH_EGREP=egrep \
	ac_cv_path__PATH_SED=sed \
	ac_cv_path__PATH_SORT=sort \
	ac_cv_path__PATH_UUX=uux \
	ac_cv_path_GPGV=/usr/bin/gpgv \
	ac_cv_path_GETFTP=wget \
	ac_cv_search_dbm_open=-ldb \
	LDFLAGS="-Wl,--as-needed $(LDFLAGS)" \
	./configure \
		--with-perl \
		--with-openssl \
		--enable-ipv6 \
		--prefix=/usr/lib/news \
		--libdir=/usr/lib/news \
		--mandir=/usr/share/man \
		--sysconfdir=/etc/news \
		--includedir=/usr/include \
		--with-db-dir=/var/lib/news \
		--with-filter-dir=/etc/news/filter \
		--with-log-dir=/var/log/news \
		--with-run-dir=/var/run/news \
		--with-spool-dir=/var/spool/news \
		--with-tmp-dir=/var/spool/news/incoming/tmp \
		--with-http-dir=/var/www/inn \
		--with-libperl-dir=/usr/share/perl5 \
		--with-berkeleydb=/usr \
		--with-kerberos=/usr \
		--with-sasl=/usr \
		--with-sendmail=/usr/sbin/sendmail \
		--with-zlib=/usr \
		$($*_configure_flags) $(configure_flags)
	touch $@

build: build-arch build-indep
build-arch: $(addprefix .stamp-build-, $(FLAVORS))
build-indep: $(addprefix .stamp-build-, $(FLAVORS))
.stamp-build-%: .stamp-configure-%
	dh_testdir
	cd $B && $(MAKE)
	touch $@

install1-%: .stamp-build-%
	dh_testdir
	dh_testroot
	dh_prep $($*_dh_clean_opts)

	cd $B && $(MAKE) install DESTDIR=$D
	sh -e debian/dh_cloneconf inn2 inn2-lfs

	dh_movefiles $($*_dh_movefiles_opts) --sourcedir=$(subst $(CURDIR)/,,$D)

#	move back to the main package these man pages
	mv $D-dev/usr/share/man/man3/uwildmat.3 \
		$D-dev/usr/share/man/man3/INN::Config.3pm \
		$D/usr/share/man/man3/

#	remove assorted crap and
#	make sure we don't ship active, active.times, newsgroups in place!
	cd $D/etc/news/filter && rm -f *.py *.tcl
	rm -rf $D/usr/lib/news/bin/simpleftp $D/usr/share/man/man1/simpleftp.1\
		$D/usr/lib/news/doc/ $D/usr/include/ $D/etc/news/motd.* \
		$D/var/lib/news/* $D/var/run/news/ $D/var/www/

#	compatibility symlink for nnrpd-ssl which was removed in 2.5.2-1
	ln -s nnrpd $D/usr/lib/news/bin/nnrpd-ssl
	install -m 755 extra/buildinnkeyring extra/ginpaths2 \
		$D/usr/lib/news/bin/

	mkdir $D/var/log/news/path

install2: $(addprefix install1-, $(FLAVORS))
	dh_link
	dh_installchangelogs ChangeLog
	dh_installdocs
	dh_installexamples
	dh_installinit --noscripts --init-script=inn2
	dh_installcron
	dh_compress
	dh_fixperms -Xusr/lib/news/bin/innbind
	dh_strip

install3-%: install2
	# these files may contain passwords
	chown root:news $D-inews/etc/news/passwd.nntp $D/etc/news/incoming.conf $D/etc/news/innfeed.conf
	chmod 640 $D-inews/etc/news/passwd.nntp $D/etc/news/incoming.conf $D/etc/news/innfeed.conf

	perl -i -pe 's/^(pathhost:\s+).+/$${1}server.example.net/' \
		$D-inews/etc/news/inn.conf

	chmod -x $D/usr/lib/news/bin/control/*.pl $D/etc/news/*.local

	chmod u+w,o+r $D/usr/lib/news/bin/innbind
	chown news:uucp $D-inews/usr/lib/news/bin/rnews
	chmod 4755 $D-inews/usr/lib/news/bin/rnews

	chown -R news:news $D/var/spool/news/ $D/var/lib/news/ \
		$D/var/log/news/
	chmod -R g+w $D/var/spool/news/ $D/var/lib/news/ \
		$D/var/log/news/

install4-std: install3-std

install4-lfs: install3-lfs
	# lfs-specific: rename some files installed by debhelper
	for file in /etc/cron.d/inn2; do \
		mv $(D-lfs)$$file-lfs $(D-lfs)$$file; \
	done

install5: $(addprefix install4-, $(FLAVORS))
	dh_installdeb
	dh_md5sums
	dh_shlibdeps --exclude=/usr/lib/news/bin/auth/passwd/auth_krb5 -- \
		-dSuggests $(D-std)/usr/lib/news/bin/auth/passwd/auth_krb5 \
		 	   $(D-lfs)/usr/lib/news/bin/auth/passwd/auth_krb5 \
		-dDepends

	dh_gencontrol $(no_package) -- \
	    -VPERLAPI=$$(perl -MConfig -e 'printf("perlapi-%s", $$Config{debian_abi} || $$Config{version})')
	dh_builddeb $(no_package)

binary-arch: install5

binary-indep:

binary: binary-arch

get-orig-source:
	cd $(dir $(firstword $(MAKEFILE_LIST)))../ && \
	uscan --rename --force-download --destdir $(CURDIR)

.PHONY: clean configure build binary-arch binary install%
