#!/usr/bin/make -f
# See debhelper(7) (uncomment to enable)
# output every command that modifies files on the build system.
export SHELL := /bin/bash
.SHELLFLAGS := -c
export DH_VERBOSE = 1
export DH_OPTIONS = -v

OS_NAME := $(shell cat /etc/os-release | grep '^ID=' | cut -d'=' -f2 | sed -e 's@"@@g')
OS_VER  := $(shell cat /etc/os-release | grep '^VERSION_ID=' | cut -d'=' -f2 | sed -e 's@"@@g')

PHPVERSION := 74
PHPDOTVER := 7.4
altdir := /opt/alt/php$(PHPVERSION)

# see FEATURE AREAS in dpkg-buildflags(1)
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
# export DEB_BUILD_MAINT_OPTIONS = hardening=+all
#export DEB_CPPFLAGS_MAINT_STRIP = -Wformat -Werror=format-security
#export DEB_CFLAGS_MAINT_STRIP = -Wformat -Werror=format-security
# DPKG_EXPORT_BUILDFLAGS = 1
# see ENVIRONMENT in dpkg-buildflags(1)
# package maintainers to append CFLAGS
# export DEB_CFLAGS_MAINT_APPEND  = -Wall -pedantic
# package maintainers tm append LDFLAGS
CPPFLAGS = $(shell dpkg-buildflags --get CFLAGS | sed -e "s/-Wformat//;s/-Werror=format-security//")
export CPPFLAGS := $(CPPFLAGS) -I/opt/alt/pdflib-lite/usr/include
export CFLAGS := $(CPPFLAGS)
export CXXFLAGS := $(CPPFLAGS)
LDFLAGS = $(shell dpkg-buildflags --get LDFLAGS)
export LDFLAGS := $(LDFLAGS) -L/opt/alt/pdflib-lite/usr/lib/$(DEB_HOST_MULTIARCH) -Wl,-rpath=/opt/alt/pdflib-lite/usr/lib/$(DEB_HOST_MULTIARCH)
export PATH := $(altdir)/usr/bin:${PATH}
export OAUTH_SHARED_LIBADD := -lcurl
ifeq ($(shell [[ "$(OS_NAME)" == "ubuntu" && $$(expr $(OS_VER) \<= 16.04) == 1 ]] || [[ "$(OS_NAME)" == "debian" && $$(expr $(OS_VER) \<= 9) == 1 ]] && echo 0), 0)
LIBICU=/opt/alt/libicu/usr/lib/$(DEB_HOST_MULTIARCH)
export CPPFLAGS := $(CPPFLAGS) -I/opt/alt/pcre2/usr/include
export LDFLAGS := $(LDFLAGS) -L/opt/alt/pcre2/usr/lib/$(DEB_HOST_MULTIARCH) -Wl,-rpath=/opt/alt/pcre2/usr/lib/$(DEB_HOST_MULTIARCH)
export APCU_SHARED_LIBADD := -L$(LIBICU) -Wl,-rpath=$(LIBICU) -lpcre2-8
else
export APCU_SHARED_LIBADD := -lpcre2-8
endif

ifeq ($(shell [[ "$(OS_NAME)" == "debian" && $$(expr $(OS_VER) \>= 12) == 1 ]] && echo 0), 0)
CPPFLAGS += -Wno-error=array-bounds
endif

export EXTRA_LDFLAGS=$(LDFLAGS)
export EXTRA_CFLAGS=$(CPPFLAGS)

redis_config_opts=--enable-redis
ifeq ($(shell [[ "$(OS_NAME)" == "debian" && $$(expr $(OS_VER) \>= 10) == 1 ]] && echo 0), 0)
redis_config_opts+=--enable-redis-zstd
endif
memcached_config_opts=--enable-memcached-sasl
ifndef bootstrap
redis_config_opts+=--enable-redis-igbinary
memcached_config_opts+=--enable-memcached-igbinary
endif


# list all modules
export MODS := $(shell ls -d */ | sed -e "/debian/d;/oci8/d")
buildroot := $(CURDIR)/debian/tmp
_sourcedir := debian/src
_prefix := /usr
_libdir := $(_prefix)/lib/$(DEB_HOST_MULTIARCH)
_sysconfdir := /etc
_unitdir := /lib/systemd/system

NJOBS := -j$(shell getconf _NPROCESSORS_ONLN)

%:
	dh $@

override_dh_auto_configure:
	for i in $(shell ls -1 $(_sourcedir)); do \
		tar xzf $(_sourcedir)/$${i}; \
	done
	pushd amqp-*; patch -p1 < ../debian/patches/96cd5cb5eddd3db2faaa3643dad2fe4677d7c438.patch
	pushd amqp-*; patch -p1 < ../debian/patches/383.patch
	pushd solr-*; patch -p1 < ../debian/patches/solr-2.5.1-fix-build.patch
	# remove old and failing tests
	rm -f apcu-*/tests/apc_entry_003.phpt
	rm -f eio-*/tests/eio_fallocate_basic.phpt
	rm -f eio-*/tests/eio_readdir.phpt
	rm -f eio-*/tests/fork.phpt
	rm -f geoip-*/tests/019.phpt
	rm -f gmagick-*/tests/*
	rm -f grpc-*/tests/grpc-basic.phpt
	rm -f igbinary-*/tests/igbinary_019.phpt
	rm -f igbinary-*/tests/igbinary_061.phpt
	rm -f igbinary-*/tests/igbinary_unserialize_v1_compatible.phpt
	rm -f imagick-*/tests/*
	rm -f mongodb-*/tests/bson-corpus/code_w_scope-decodeError-011.phpt
	rm -f mongodb-*/tests/bson-corpus/code_w_scope-valid-005.phpt
	rm -f mongodb-*/tests/bson-corpus/double-valid-00{5,6}.phpt
	rm -f mongodb-*/tests/bson-corpus/int64-valid-00{1,2,3,4,5}.phpt
	rm -f mongodb-*/tests/bson-corpus/multi-type-deprecated-valid-001.phpt
	rm -f mongodb-*/tests/bson-corpus/multi-type-valid-001.phpt
	rm -f mongodb-*/tests/bson-corpus/top-parseError-031.phpt
	rm -f mongodb-*/tests/bson/bson-decode-001.phpt
	rm -f mongodb-*/tests/bson/bson-javascript-set_state-001.phpt
	rm -f mongodb-*/tests/connect/standalone-plain-0002.phpt
	rm -f mongodb-*/tests/readPreference/readpreference-var_export-001.phpt
	rm -f mongodb-*/tests/session/session_error-001.phpt
	rm -f mongodb-*/tests/manager/manager*
	rm -f oauth-*/tests/bug16946.phpt
	rm -f oauth-*/tests/bug_64308.phpt
	rm -f oauth-*/tests/oauth_sbs.phpt
	rm -f oauth-*/tests/overflow_redir.phpt
	rm -f oauth-*/tests/reqtoken_php.phpt
	rm -f oauth-*/tests/rsa.phpt
	rm -f oauth-*/tests/sbs.phpt
	rm -f php-geos-*/tests/*
	rm -f rar-*/tests/{026,066,075}.phpt
	rm -f vips-*/tests/026.phpt
	rm -f zmq-*/tests/019-callbackinvalidsignature.phpt
ifeq ($(shell [[ "$(OS_NAME)" == "ubuntu" && $$(expr $(OS_VER) \<= 16.04) == 1 ]] || [[ "$(OS_NAME)" == "debian" && $$(expr $(OS_VER) \<= 8) == 1 ]] && echo 0), 0)
	rm -rf solr-* 
endif
	# Create postinst scripts
	for i in $(shell grep 'Package' debian/control | awk '{print $$2}'); do \
		if [ ! -f debian/$${i}.postinst ]; then \
			echo "#!/bin/bash" > debian/$${i}.postinst; \
			if [ "${PHP_VER}" == "-internal" ]; then \
				echo "chmod -Rc og-rwx /opt/alt/php-internal" >> debian/$${i}.postinst; \
			else \
				echo "[ -x /usr/bin/cl-linksafe-apply-group ] && /usr/bin/cl-linksafe-apply-group $${i} || :" >> debian/$${i}.postinst; \
			fi; \
		fi; \
	done


override_dh_auto_build:
	for i in $(MODS); do \
		config_opts=""; \
		mod=$$(echo $${i} | sed -e "s#-[0-9][/0-9.a-zA-Z-]*##"); \
		echo "mod: $${mod}"; \
		if [ "$${mod}" = "newrelic-php5" ]; then \
			mod="newrelic"; \
		fi; \
		if [ "$${mod}" = "php-xhprof-extension" ]; then \
			mod="tideways_xhprof"; \
		fi; \
		modname=$$(echo $${mod} | tr [A-Z] [a-z]); \
		if [ "$${modname}" = "pecl_http" -o "$${modname}" = "newrelic" ]; then \
			continue; \
		fi; \
		pushd $${i}; \
		case "$${modname}" in \
			"amqp") sed -e 's/CFLAGS="-I/CFLAGS="-fPIC -I/' -i config.m4;; \
			"apcu") config_opts="--enable-apc-bc --enable-apcu ";; \
			"gnupg") config_opts="--with-gnupg=$(_prefix) ";; \
			"haru") config_opts="--with-zlib-dir=$(_prefix) --with-png-dir=$(_prefix) ";; \
			"memcache") config_opts="--enable-memcache ";; \
			"memcached") config_opts="$(memcached_config_opts)";; \
			"pdflib") config_opts="--with-pdflib=/opt/alt/pdflib-lite/usr ";; \
			"redis") config_opts="$(redis_config_opts)";; \
			"solr") config_opts="--with-curl=$(_libdir) --enable-solr" ;; \
			"sqlsrv"|"pdo_sqlsrv") config_opts="--with-pic " ;; \
			"ssh2") sed -i 's@$SSH2_DIR/lib@$SSH2_DIR/$(DEB_HOST_MULTIARCH)@g' config.m4 ;; \
			"swoole") config_opts="--enable-openssl --enable-brotli" ;; \
		esac; \
		$(altdir)/usr/bin/phpize; \
		./configure --libdir=$(altdir)$(_libdir) \
					--with-php-config=$(altdir)/usr/bin/php-config \
					--with-libdir=lib/$(DEB_HOST_MULTIARCH) $${config_opts}; \
		make ${NJOBS} || exit 1; \
		popd; \
	done
	#-#-#-#-#-#-#
	#pecl_http configure
	# we need already build propro and raphf extensions
	#-#-#-#-#-#-#
	if [ -d pecl_http* ]; then \
		pushd pecl_http*; \
		mkdir ext; \
		ln -s ../../$$(ls ../ | grep propro) ext/propro; \
		ln -s ../../$$(ls ../ | grep raphf) ext/raphf; \
		sed -i 's@$PHP_EXECUTABLE -m |@$PHP_EXECUTABLE -d extension=json.so -d extension=ext/propro/modules/propro.so -d extension=ext/raphf/modules/raphf.so -m |@' autoconf/pecl/pecl.m4; \
		$(altdir)/usr/bin/phpize; \
		./configure --libdir=$(altdir)$(_libdir) \
					--with-http-libcurl-dir=/usr \
					--with-http-libevent-dir=/usr \
					--with-http-libicu-dir=/opt/alt/libicu/usr \
					--with-http-zlib-dir=/usr \
					--with-libdir=lib/$(DEB_HOST_MULTIARCH) \
					--with-php-config=$(altdir)/usr/bin/php-config; \
		make ${NJOBS}; \
		popd; \
	fi


override_dh_auto_install:
	mkdir -p $(buildroot)$(altdir)
	install -d $(buildroot)$(altdir)$(_sysconfdir)/php.d.all

	for i in $(MODS); do \
		mod=$$(echo $${i} | sed -e "s#-[0-9][/0-9.a-zA-Z-]*##"); \
		if [ "$${mod}" = "newrelic-php5" ]; then \
			mod="newrelic"; \
		fi; \
		if [ "$${mod}" = "php-xhprof-extension" ]; then \
			mod="tideways_xhprof"; \
		fi; \
		modname=$$(echo $${mod} | tr [A-Z] [a-z]); \
		pushd $${i}; \
		if [ "$${modname}" = "newrelic" ]; then \
			install -d $(buildroot)$(altdir)/usr/bin; \
			soName=$$(grep -rn "$(PHPDOTVER).*).*pi_modver" newrelic-install | awk -F'"' '{print "newrelic-"$$2".so"}'); \
			cp daemon/newrelic-daemon.x64 $(buildroot)$(altdir)/usr/bin/newrelic-daemon; \
			cp agent/x64/$${soName} $(buildroot)$(altdir)/usr/lib/$(DEB_HOST_MULTIARCH)/php/modules/$${modname}.so; \
			sed -i -e 's#/etc/newrelic#$(altdir)/etc/newrelic#g;s#/usr/bin#$(altdir)/usr/bin#g' scripts/newrelic-daemon.service; \
			mkdir -p $(buildroot)$(_unitdir); \
			install -m 0755 scripts/newrelic-daemon.service $(buildroot)$(_unitdir)/alt-php$(PHPVERSION)-newrelic-daemon.service; \
			sed -i -e 's#/var/log/newrelic#/var/log/alt-php$(PHPVERSION)-newrelic#g' scripts/newrelic.ini.template; \
			sed -i -e 's#.*newrelic.daemon.location.*=.*"/usr/bin/newrelic-daemon"#newrelic.daemon.location = "$(altdir)/usr/bin/newrelic-daemon"#g' scripts/newrelic.ini.template; \
			sed -i -e 's@#pidfile=@pidfile=/var/run/alt-php$(PHPVERSION)-newrelic.pid@g' scripts/newrelic.cfg.template; \
			sed -i -e 's@.*logfile=.*newrelic-daemon.log@logfile=/var/log/alt-php$(PHPVERSION)-newrelic/newrelic-daemon.log@g' scripts/newrelic.cfg.template; \
			sed -i -e 's@.*port=".*newrelic.sock"@port="/tmp/.alt-php$(PHPVERSION)-newrelic.sock"@g' scripts/newrelic.cfg.template; \
			sed -i -e 's#/var/log/newrelic#/var/log/alt-php$(PHPVERSION)-newrelic#g' scripts/newrelic.cfg.template; \
			install -d $(buildroot)$(altdir)/etc/newrelic; \
			install scripts/newrelic.cfg.template $(buildroot)$(altdir)/etc/newrelic/newrelic.cfg; \
			sed -i -e 's#^cfgfile=#cfgfile=$(altdir)/etc/newrelic/newrelic.cfg#g' scripts/newrelic.sysconfig; \
			install -d $(buildroot)$(altdir)$(_sysconfdir)/sysconfig; \
			install -D scripts/newrelic.sysconfig $(buildroot)$(altdir)$(_sysconfdir)/sysconfig/newrelic; \
			sed -i -e 's#/var/log/newrelic#/var/log/alt-php$(PHPVERSION)-newrelic#g' scripts/newrelic-daemon.logrotate; \
			sed -i -e 's#/var/log/newrelic#/var/log/alt-php$(PHPVERSION)-newrelic#g' scripts/newrelic-php5.logrotate; \
			install -d $(buildroot)$(_sysconfdir)/logrotate.d; \
			install scripts/newrelic-daemon.logrotate $(buildroot)$(_sysconfdir)/logrotate.d/alt-php$(PHPVERSION)-newrelic-daemon; \
			install scripts/newrelic-php5.logrotate $(buildroot)$(_sysconfdir)/logrotate.d/alt-php$(PHPVERSION)-newrelic-php5; \
			install scripts/newrelic.xml $(buildroot)$(altdir)$(_sysconfdir); \
			install -d $(buildroot)/var/log/alt-php$(PHPVERSION)-newrelic; \
		else \
			make install INSTALL_ROOT=$(buildroot); \
		fi; \
		if [ "$${modname}" = "mailparse" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=mbstring.so\nextension=$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		elif [ "$${modname}" = "eio" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=sockets.so\nextension=$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		elif [ "$${modname}" = "mongo" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=json.so\nextension=$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		elif [ "$${modname}" = "mongodb" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=json.so\nextension=$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		elif [ "$${modname}" = "apm" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=json.so\nextension=$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		elif [ "$${modname}" = "libevent" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=sockets.so\nextension=$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		elif [ "$${modname}" = "xdebug" ]; then \
			echo -e "; Enable $${modname} extension module\nzend_extension=$(altdir)/usr/lib/$(DEB_HOST_MULTIARCH)/php/modules/$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		elif [ "$${modname}" = "zendopcache" ]; then \
			echo -e "; Enable opcache extension module\nzend_extension=$(altdir)/usr/lib/$(DEB_HOST_MULTIARCH)/php/modules/opcache.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/opcache.ini; \
		elif [ "$${modname}" = "pdflib" ]; then \
			echo -e "; Enable pdf extension module\nextension=pdf.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/pdf.ini; \
		elif [ "$${modname}" = "pecl_http" ]; then \
			echo -e "; Enable http extension module\nextension=propro.so\nextension=raphf.so\nextension=json.so\nextension=http.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/http.ini; \
		elif [ "$${modname}" = "pdo_sqlsrv" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=pdo.so\nextension=pdo_sqlsrv.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		elif [ "$${modname}" = "php-geos" ]; then \
			echo -e "; Enable geos extension module\nextension=geos.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/geos.ini; \
		elif [ "$${modname}" = "solr" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		elif [ "$${modname}" = "amqp" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		elif [ "$${modname}" = "libsodium" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=sodium.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/sodium.ini; \
		elif [ "$${modname}" = "memcached" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=igbinary.so\nextension=$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		elif [ "$${modname}" = "redis" ]; then \
			echo -e "; Enable $${modname} extension module\nextension=igbinary.so\nextension=$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		else \
			echo -e "; Enable $${modname} extension module\nextension=$${modname}.so" > $(buildroot)$(altdir)$(_sysconfdir)/php.d.all/$${modname}.ini; \
		fi; \
		popd; \
	done

	dh_installdirs -palt-php$(PHPVERSION)-pecl-ext -A \
		$(_localstatedir)/log/alt-php$(PHPVERSION)-newrelic

	dh_movefiles -palt-php$(PHPVERSION)-pecl-ext \
		.$(_sysconfdir)/logrotate.d/* \
		.$(_unitdir)/alt-php$(PHPVERSION)-newrelic-daemon.service \
		.$(altdir)$(_sysconfdir)/newrelic.xml \
		.$(altdir)$(_sysconfdir)/php.d.all/*.ini \
		.$(altdir)$(_sysconfdir)/sysconfig/newrelic \
		.$(altdir)/${_prefix}/* \
		.$(altdir)/etc/newrelic/newrelic.cfg \
		.$(altdir)/usr/bin/newrelic-daemon \
		.$(altdir)/usr/include/php/ext/* \
		.$(altdir)/usr/lib/$(DEB_HOST_MULTIARCH)/php/modules/*

override_dh_missing:
	dh_missing --fail-missing
