#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
#
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
#
# Modified to make a template file for a multi-binary package with separated
# build-arch and build-indep targets  by Bill Allombert 2001

# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1

# Enable hardening options
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/default.mk
CFLAGS += $(CPPFLAGS)


.NOTPARALLEL:

SHELL           = /bin/bash

package         = freeradius
freeradius_dir  = $(CURDIR)/debian/tmp

mandir          = /usr/share/man
libdir          = /usr/lib/$(package)
logdir          = /var/log/$(package)
pkgdocdir       = /usr/share/doc/$(package)
raddbdir        = /etc/$(package)

modulelist=krb5 ldap sql_mysql sql_iodbc sql_postgresql dhcp redis rest yubikey
pkgs=$(shell dh_listpackages)

# This has to be exported to make some magic below work.
export DH_OPTIONS

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

ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -O0
else
	CFLAGS += -O2
endif

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

# Add dependency on distribution specific version of openssl that fixes Heartbleed (CVE-2014-0160).
ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes)
       SUBSTVARS = -Vdist:Depends="libssl1.0.0 (>= 1.0.1f-1ubuntu2) | libssl1.1"
else
       SUBSTVARS = -Vdist:Depends="libssl1.0.0 (>= 1.0.1e-2+deb7u5) | libssl1.0.2 | libssl1.1"
endif

# Add libsystemd-dev as a Build-Depends to debian/control if it is known to this system
ifeq ($(shell apt-cache show libsystemd-dev &>/dev/null && echo yes),yes)
       CONTROL_BUILDDEPS += libsystemd-dev,
endif

debian/control: debian/control.in
	sed -e 's/@BUILDDEPS@/$(CONTROL_BUILDDEPS)/g' \
	     debian/control.in > debian/control.tmp
	mv debian/control.tmp debian/control

include /usr/share/quilt/quilt.make

config.status: configure
	dh_testdir

ifeq (config.sub.dist,$(wildcard config.sub.dist))
	rm config.sub
else
	mv config.sub config.sub.dist
endif
ifeq (config.guess.dist,$(wildcard config.guess.dist))
	rm config.guess
else
	mv config.guess config.guess.dist
endif
	ln -s /usr/share/misc/config.sub config.sub
	ln -s /usr/share/misc/config.guess config.guess


	./configure $(confflags) \
		--config-cache \
		--disable-developer \
		--disable-openssl-version-check \
		--prefix=/usr \
		--exec-prefix=/usr \
		--mandir=$(mandir) \
		--sysconfdir=/etc \
		--libdir=$(libdir) \
		--datadir=/usr/share \
		--localstatedir=/var \
		--with-raddbdir=$(raddbdir) \
		--with-logdir=/var/log/$(package) \
		--with-large-files \
		--with-udpfromto \
		--without-rlm_eap_tnc \
		--with-rlm_sql_postgresql_lib_dir=`pg_config --libdir` \
		--with-rlm_sql_postgresql_include_dir=`pg_config --includedir` \
		--with-iodbc-include-dir='/usr/include/iodbc' \
		--without-rlm_eap_ikev2 \
		--without-rlm_sql_oracle \
		--without-rlm_sql_unixodbc \
		--with-systemd \
		--enable-reproducible-builds

	rm config.guess
	mv config.guess.dist config.guess
	rm config.sub
	mv config.sub.dist config.sub

#Architecture
build: build-arch build-indep

build-arch: patch build-arch-stamp
build-arch-stamp: config.status
	$(MAKE)
	touch $@

build-indep: patch build-indep-stamp
build-indep-stamp: config.status
	touch $@

clean: debian/control unpatch
	dh_testdir
	dh_testroot
	rm -f build-arch-stamp build-indep-stamp
	rm -f config.cache config.log
	rm -f src/freeradius-devel

	[ ! -d src/modules/lib ] || rm -fr src/modules/lib || true
	[ ! -d src/binary ] || rm -fr src/binary || true

	# Add here commands to clean up after the build process.
ifeq (Make.inc,$(wildcard Make.inc))
	$(MAKE) distclean
endif
ifeq (config.sub.dist,$(wildcard config.sub.dist))
	rm -f config.sub
	mv config.sub.dist config.sub
endif
ifeq (config.guess.dist,$(wildcard config.guess.dist))
	rm -f config.guess
	mv config.guess.dist config.guess
endif
	# distclean destroys debian/control, however we need it for dh_clean
	$(MAKE) -f debian/rules debian/control
	dh_clean

install: install-arch

install-arch: build-arch-stamp
	dh_testdir
	dh_testroot
	dh_installdirs
	test -d $(freeradius_dir)/usr/lib/freeradius || mkdir -p $(freeradius_dir)/usr/lib/freeradius
	ln -fs rlm_sql.so $(freeradius_dir)/usr/lib/freeradius/librlm_sql.so
	$(MAKE) install R=$(freeradius_dir) PACKAGE='debian'

	# rename radius binary to play nicely with others
	mv $(freeradius_dir)/usr/sbin/radiusd $(freeradius_dir)/usr/sbin/$(package)
	mv $(freeradius_dir)/$(mandir)/man8/radiusd.8 $(freeradius_dir)/$(mandir)/man8/$(package).8

	dh_install -i --sourcedir=$(freeradius_dir)
	dh_install --sourcedir=$(freeradius_dir) -p libfreeradius3
	dh_install --sourcedir=$(freeradius_dir) -p libfreeradius-dev
	dh_install --sourcedir=$(freeradius_dir) -p freeradius-config

	for mod in ${modulelist}; do \
	  pkg=$${mod##sql_} ; \
	  dh_install --sourcedir=$(freeradius_dir) -p freeradius-$$pkg ; \
	  rm -f $(freeradius_dir)/usr/lib/freeradius/rlm_$$mod*.so ; \
	done

	dh_install --sourcedir=$(freeradius_dir) -p freeradius-memcached
	rm -f $(freeradius_dir)/usr/lib/freeradius/rlm_cache_memcached.so

	dh_install --sourcedir=$(freeradius_dir) -p freeradius-utils
	dh_install --sourcedir=$(freeradius_dir) -p freeradius

	dh_strip -a --dbg-package=freeradius-dbg

	dh_makeshlibs -a -n
	dh_shlibdeps -l$(freeradius_dir)/usr/lib/freeradius

binary-common:
	dh_testdir
	dh_testroot
	dh_installchangelogs doc/ChangeLog
	dh_installdocs -Xdebian/tmp/usr/share/doc/freeradius/ChangeLog
	dh_installexamples
	dh_installlogrotate
	dh_installpam --name=radiusd
	dh_systemd_enable
	dh_installinit --noscripts
	dh_systemd_start
	dh_installman
	dh_lintian
	dh_link
	dh_compress -Xexamples
	dh_fixperms
	dh_installdeb
	dh_gencontrol -- $(SUBSTVARS)
	dh_md5sums
	dh_builddeb

# Build architecture independant packages using the common target.
binary-indep: build-indep install-indep
	$(MAKE) -f debian/rules DH_OPTIONS=-i binary-common

# Build architecture dependant packages using the common target.
binary-arch: build-arch install-arch
	$(MAKE) -f debian/rules DH_OPTIONS=-s binary-common

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