#!/usr/bin/make -f
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

# resolve DEB_VERSION_UPSTREAM_REVISION DEB_DISTRIBUTION
include /usr/share/dpkg/pkg-info.mk

# resolve DEB_BUILD_ARCH_OS DEB_HOST_MULTIARCH
include /usr/share/dpkg/architecture.mk

# Starting with dpkg-dev >= 1.16.1.1 you can use the new buildflags.mk file
# to set all *FLAGS
# When building programs that handle untrusted data
# (parsers, network listeners, etc.),
#  or run with elevated privileges (PAM, X, etc.),
#  please enable "PIE" and "BINDNOW" in the build.
#  The "all" option enables "PIE" and "BINDNOW" and future hardening flags

%:
	dh $@

export DEB_BUILD_MAINT_OPTIONS = hardening=+all
DPKG_EXPORT_BUILDFLAGS = 1
ifeq (,$(filter noopt,$(DEB_BUILD_OPTIONS)))
DEB_CFLAGS_MAINT_STRIP = -O2
DEB_CFLAGS_MAINT_APPEND = -O3 -fno-partial-inlining
endif
include /usr/share/dpkg/buildflags.mk

# Sanity check for a stable release:
SAVED_ABI_HASH = 1fb7f5c06d7a2052e38d021b3d8ca151

export DEB_HOST_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
export DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
export DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)

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

export PROC := $(shell dpkg-architecture -qDEB_BUILD_GNU_CPU)

# don't let asterisk mess with build flags
BUILDFLAGS += AST_FORTIFY_SOURCE= DEBUG= OPTIMIZE=

# show full gcc arguments unless DEB_BUILD_OPTIONS=terse
ifeq (,$(filter terse,$(DEB_BUILD_OPTIONS)))
BUILDFLAGS += NOISY_BUILD=yes
endif

BUILDFLAGS += ASTDATADIR=/var/lib/asterisk ASTVARRUNDIR=/run/asterisk

ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
	ENABLE_DEBUG += --enable-dev-mode
endif
ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
	INSTALL_PROGRAM += -s
endif

# für Umbau vorgesehen
#ADDONS_ENABLE = app_macro app_voicemail_imap app_voicemail_odbc
#ADDONS_ENABLE += app_mysql res_config_mysql cdr_mysql
#ADDONS_ENABLE += chan_mobile chan_ooh323
#ADDONS_ENABLE += format_mp3 TEST_FRAMEWORK *aelparse smsq*
#ADDONS_DISABLE = BUILD_NATIVE
#ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
#ADDONS_ENABLE += BETTER_BACKTRACES DEBUG_THREADS
#endif

include /usr/share/dpkg/pkg-info.mk
DEBVERSION:=$(DEB_VERSION)
DEB_NOEPOCH_VERSION:=$(shell echo $(DEBVERSION) | cut -d':' -f 2)

# make sure we have 'fetch' . We need to have either wget or fetch
# on the system. However it is generally not a good idea to actually
# get remote tarballs at build time. So if neither wget nor fetch
# happen to be installed, the configure script will find a dummy
# fetch script that always returns an error.
FETCH_ENV = PATH=$$PATH:$(CURDIR)/debian/dummyprogs

# resolve if release is experimental
EXP_RELEASE := $(if $(shell dpkg-parsechangelog | grep '^Distribution: \(experimental\|UNRELEASED\)'),exp)

override_dh_autoreconf:
	if [ ! -r configure.debian_sav -a -r configure ]; then cp -a configure configure.debian_sav; fi
	[ -f .version.debian_sav ] || cp -a .version .version.debian_sav
	echo $(DEB_NOEPOCH_VERSION) > .version
	dh_autoreconf -- ./bootstrap.sh

# Make sure the configure script gets an CFLAGS parameter. Otherwise
# it will build with -march=native
# Pass CPPFLAGS in the CFLAGS as otherwise the build system will
# ignore them.
CFLAGS += $(CPPFLAGS)

LDFLAGS += -Wl,--as-needed

override_dh_auto_configure:
	chmod 755 $(CURDIR)/debian/dummyprogs/fetch
	TMPDIR="$(CURDIR)/debian" $(FETCH_ENV) dh_auto_configure -- \
		--disable-asteriskssl \
		--with-gsm \
		--with-imap=system \
		--with-jansson-bundled \
		--with-pjproject-bundled \
		$(if $(EXP_RELEASE),,--without-sdl) \
		$(if $(findstring debug,$(DEB_BUILD_OPTIONS)),--enable-dev-mode) \
		|| { cat config.log; exit 1; }

#execute_before_dh_auto_build:
#	$(MAKE) menuselect.makeopts BUILD_CFLAGS="$(CFLAGS)" BUILD_LDFLAGS="$(LDFLAGS)"
#	for module in $(ADDONS_ENABLE); do menuselect/menuselect --enable $$module menuselect.makeopts; done
#	for module in $(ADDONS_DISABLE); do menuselect/menuselect --disable $$module menuselect.makeopts; done

override_dh_auto_build:
	$(MAKE) menuselect.makeopts BUILD_CFLAGS="$(CFLAGS)" BUILD_LDFLAGS="$(LDFLAGS)"
#	Addons
	menuselect/menuselect --enable chan_mobile menuselect.makeopts
	menuselect/menuselect --enable chan_ooh323 menuselect.makeopts
	menuselect/menuselect --enable format_mp3 menuselect.makeopts
	menuselect/menuselect --enable res_config_mysql menuselect.makeopts
	menuselect/menuselect --enable app_mysql menuselect.makeopts
	menuselect/menuselect --enable cdr_mysql menuselect.makeopts

#	Codec Translators
#	menuselect/menuselect --enable codec_codec2 menuselect.makeopts

#	Codec Translators External
#	menuselect/menuselect --enable codec_opus_open_source menuselect.makeopts
	menuselect/menuselect --enable codec_opus menuselect.makeopts
	menuselect/menuselect --enable codec_silk menuselect.makeopts
	menuselect/menuselect --enable codec_siren7 menuselect.makeopts
	menuselect/menuselect --enable codec_siren14 menuselect.makeopts

#	Format Interpreters
	menuselect/menuselect --enable format_ogg_speex menuselect.makeopts
	menuselect/menuselect --enable format_vox menuselect.makeopts

#	enable non-core modules
#	Applications
	menuselect/menuselect --enable app_macro menuselect.makeopts
	menuselect/menuselect --enable app_alarmreceiver menuselect.makeopts
	menuselect/menuselect --enable app_amd menuselect.makeopts
	menuselect/menuselect --enable app_attended_transfer menuselect.makeopts
	menuselect/menuselect --enable app_blind_transfer menuselect.makeopts
	menuselect/menuselect --enable app_chanisavail menuselect.makeopts
	menuselect/menuselect --enable app_dictate menuselect.makeopts
	menuselect/menuselect --enable app_externalivr menuselect.makeopts
	menuselect/menuselect --enable app_festival menuselect.makeopts
	menuselect/menuselect --enable app_jack menuselect.makeopts
	menuselect/menuselect --enable app_minivm menuselect.makeopts
	menuselect/menuselect --enable app_morsecode menuselect.makeopts
	menuselect/menuselect --enable app_mp3 menuselect.makeopts
	menuselect/menuselect --enable app_sms menuselect.makeopts
	menuselect/menuselect --enable app_test menuselect.makeopts
	menuselect/menuselect --enable app_waitforring menuselect.makeopts
	menuselect/menuselect --enable app_waitforsilence menuselect.makeopts
	menuselect/menuselect --enable app_zapateller menuselect.makeopts
	menuselect/menuselect --enable app_adsiprog menuselect.makeopts
	menuselect/menuselect --enable app_dahdiras menuselect.makeopts
	menuselect/menuselect --enable app_getcpeid menuselect.makeopts
	menuselect/menuselect --enable app_ices menuselect.makeopts
	menuselect/menuselect --enable app_image menuselect.makeopts
	menuselect/menuselect --enable app_nbscat menuselect.makeopts
	menuselect/menuselect --enable app_url menuselect.makeopts

#	CDR
	menuselect/menuselect --enable cdr_csv menuselect.makeopts
	menuselect/menuselect --enable cdr_odbc menuselect.makeopts
	menuselect/menuselect --enable cdr_pgsql menuselect.makeopts
	menuselect/menuselect --enable cdr_radius menuselect.makeopts
	menuselect/menuselect --enable cdr_sqlite3_custom menuselect.makeopts
	menuselect/menuselect --enable cdr_tds menuselect.makeopts

#	CEL
	menuselect/menuselect --enable cel_pgsql menuselect.makeopts
	menuselect/menuselect --enable cel_radius menuselect.makeopts
	menuselect/menuselect --enable cel_sqlite3_custom menuselect.makeopts
	menuselect/menuselect --enable cel_tds menuselect.makeopts

#	Channel Drivers
	menuselect/menuselect --enable chan_alsa menuselect.makeopts
	menuselect/menuselect --enable chan_console menuselect.makeopts
	menuselect/menuselect --enable chan_mgcp menuselect.makeopts
	menuselect/menuselect --enable chan_sip menuselect.makeopts
	menuselect/menuselect --enable chan_skinny menuselect.makeopts
	menuselect/menuselect --enable chan_unistim menuselect.makeopts
	menuselect/menuselect --enable chan_oss menuselect.makeopts
	menuselect/menuselect --enable chan_phone menuselect.makeopts
#	menuselect/menuselect --enable chan_vpb menuselect.makeopts

#	Dialplan Functions
	menuselect/menuselect --enable func_frame_trace menuselect.makeopts
	menuselect/menuselect --enable func_pitchshift menuselect.makeopts

#	PBX Modules
	menuselect/menuselect --enable pbx_ael menuselect.makeopts
	menuselect/menuselect --enable pbx_dundi menuselect.makeopts
	menuselect/menuselect --enable pbx_lua menuselect.makeopts
	menuselect/menuselect --enable pbx_realtime menuselect.makeopts

#	Resource Modules
	menuselect/menuselect --enable res_timing_pthread menuselect.makeopts
	menuselect/menuselect --enable res_phoneprov menuselect.makeopts
#	menuselect/menuselect --enable res_pjsip menuselect.makeopts
	menuselect/menuselect --enable res_pjsip_history menuselect.makeopts
	menuselect/menuselect --enable res_pjsip_phoneprov_provider menuselect.makeopts
	menuselect/menuselect --enable res_hep menuselect.makeopts
	menuselect/menuselect --enable res_hep_pjsip menuselect.makeopts
	menuselect/menuselect --enable res_hep_rtcp menuselect.makeopts

#	Compiler Flags
	menuselect/menuselect --disable BUILD_NATIVE menuselect.makeopts
#	Debug Functions
	@if [ "x${ENABLE_DEBUG}" != "x" ] ; then \
		menuselect/menuselect --enable BETTER_BACKTRACES menuselect.makeopts ; \
		menuselect/menuselect --enable DEBUG_THREADS menuselect.makeopts ; \
	fi

	$(FETCH_ENV) dh_auto_build -- $(BUILDFLAGS)
	# Sanity check: don't break the ABI for modules:
	@abi_hash=`awk -F'"' '/AST_BUILDOPT_SUM/ {print $$2}' include/asterisk/buildopts.h`; \
	  if [ "$$abi_hash" != "$(SAVED_ABI_HASH)" ]; then \
	    echo "Debian packaging problem: ABI checksum changed."; \
	    echo "  Was: $(SAVED_ABI_HASH)"; \
	    echo "  Now: $$abi_hash"; \
	    echo "Check include/asterisk/buildopts.h"; \
	    [ -n "$(EXP_RELEASE)" ] || exit 1; \
	  fi

SND_FILE=asterisk-core-sounds-en-gsm-1.4.20.tar.gz
override_dh_clean:
	if [ -r sounds/$(SND_FILE) ]; then mv sounds/$($SND_FILE) debian/; fi
	GREP=grep AWK=awk $(MAKE) distclean
	if [ -r debian/$(SND_FILE) ]; then mv debian/$(SND_FILE) sounds/; fi

	[ ! -f .version.debian_sav ] || mv .version.debian_sav .version
	if [ -f configure.debian_sav ]; then mv configure.debian_sav configure; fi
	if [ ! -d third-party/pjproject/source ]; then \
		mkdir third-party/pjproject/source; \
	fi
	if [ ! -d third-party/jansson/source ]; then \
		mkdir third-party/jansson/source; \
	fi
	if [ -d third-party/jansson/dest ]; then \
		rm -r third-party/jansson/dest; \
	fi

	dh_clean

override_dh_gencontrol:
	AST_BUILDOPT_SUM=`grep AST_BUILDOPT_SUM include/asterisk/buildopts.h  | sed -e 's/.\+ "\(.\+\)\"/\1/g'`; \
		dh_gencontrol -- -Vasterisk:ABI=$$AST_BUILDOPT_SUM

REMOVED_PROTO_CONFS = dundi mgcp skinny unistim
REMOVED_PROTO_FILES = $(REMOVED_PROTO_CONFS:%=$(CURDIR)/debian/tmp/etc/asterisk/%.conf)
SUBPACKS_EXTRA = ooh323 mysql mp3
ifeq (linux,$(DEB_BUILD_ARCH_OS))
SUBPACKS_EXTRA += dahdi mobile tests
endif
SUBPACKS_EXTRA_DIRS = $(SUBPACKS_EXTRA:%=$(CURDIR)/debian/asterisk-cert-%)
SUBPACKS_EXTRA_DIRS_MOD = $(SUBPACKS_EXTRA_DIRS:%=%/usr/lib/$(DEB_HOST_MULTIARCH)/asterisk/modules)

override_dh_auto_install:
	$(FETCH_ENV) dh_auto_install -- $(BUILDFLAGS) -j1 config samples
	cp -a configs $(CURDIR)/debian/tmp/var/lib/asterisk/conf
	# copying missing headers and modules
	mkdir -p $(CURDIR)/debian/tmp/usr/include/asterisk
	cp include/asterisk.h $(CURDIR)/debian/tmp/usr/include
	cp -a include/asterisk $(CURDIR)/debian/tmp/usr/include
	cp apps/app_dahdiras.so addons/chan_ooh323.so addons/format_mp3.so addons/chan_mobile.so $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/asterisk/modules
	cp addons/app_mysql.so addons/cdr_mysql.so addons/res_config_mysql.so $(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/asterisk/modules
	$(RM) -f $(REMOVED_PROTO_FILES)
	mkdir -p $(CURDIR)/debian/tmp/usr/bin/
	mkdir -p $(CURDIR)/debian/tmp/usr/share/man/man1
	mkdir -p $(CURDIR)/debian/tmp/var/lib/dahdi/span_config.d
	cp -a debian/asterisk-config-custom $(CURDIR)/debian/tmp/usr/bin/
	cp -a debian/asterisk-config-custom $(CURDIR)/debian/tmp/usr/share/man/man1/
	cp -a debian/50-asterisk $(CURDIR)/debian/tmp/var/lib/dahdi/span_config.d/
	$(RM) -f $(CURDIR)/debian/tmp/usr/sbin/conf2ael
	$(RM) -f $(CURDIR)/debian/tmp/usr/sbin/muted
	$(RM) -f $(CURDIR)/debian/tmp/usr/sbin/streamplayer
	$(RM) -f $(CURDIR)/debian/tmp/usr/sbin/stereorize
	$(RM) -f $(CURDIR)/debian/tmp/usr/sbin/hashtest*
	$(RM) -f $(CURDIR)/debian/tmp/usr/sbin/refcounter
	$(RM) -f $(CURDIR)/debian/tmp/var/lib/asterisk/moh/.asterisk-moh-opsound-wav-2.03
	$(RM) -f $(CURDIR)/debian/tmp/var/lib/asterisk/sounds/en/.asterisk-core-sounds-en-gsm-1.6.1

#override_dh_install-arch:
#	dh_install
#	extra_packs=`find $(SUBPACKS_EXTRA_DIRS_MOD) -name '*.so' -printf '%f\n'`\
#		    ; cd $(CURDIR)/debian/asterisk-cert-modules/usr/lib/$(DEB_HOST_MULTIARCH)/asterisk/modules \
#		    && rm -f $$extra_packs

execute_after_dh_install-arch:
	extra_packs=$$(find $(SUBPACKS_EXTRA_DIRS_MOD) -name '*.so' -printf '%f\n');\
	  cd debian/asterisk-cert-modules/usr/lib/$(DEB_HOST_MULTIARCH)/asterisk/modules \
	  && rm -f $$extra_packs

override_dh_fixperms:
	dh_fixperms
	# should follow dh_fixperms; asterisk configurations may contain
	# sensitive information, such as passwords
	if [ -d $(CURDIR)/debian/asterisk-config ]; then \
		chmod o-rwx $(CURDIR)/debian/asterisk-cert-config/etc/asterisk/*; \
		chmod o+rx  $(CURDIR)/debian/asterisk-cert-config/etc/asterisk/manager.d; \
	fi

override_dh_installinit:
	dh_installinit --name asterisk

override_dh_installlogrotate:
	dh_installlogrotate --name asterisk
