#!/usr/bin/make -f

export JAVA_HOME=/usr/lib/jvm/default-java

PYVERS := $(shell py3versions -vr)
DEB_UPSTREAM_VERSION=$(shell dpkg-parsechangelog | sed -rne 's,^Version: ([^+]+).*,\1,p')
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
DEB_CHANGELOG_DATETIME = $(shell dpkg-parsechangelog --show-field Date)

ANT_ARGS = -Dversion=$(DEB_UPSTREAM_VERSION) \
           -DlastRevision=-1 \
           -Divy.url=file:/usr/share/maven-repo/org/apache/ivy/ivy/ \
           -Divy.version=debian \
           -Dapache-directory-api.version=debian \
           -Divysettings.xml=/usr/share/ivy-debian-helper/ivysettings.xml \
           -Djavac.source=8 \
           -Djavac.target=8

%:
	dh $@ --buildsystem=ivy --with javahelper --with python3

override_dh_auto_build:
	# TODO exclude the fatjar contrib from upstream tarball and include the rest contrib
	mkdir -p build/test/classes
	javacc -OUTPUT_DIRECTORY=src/java/main/org/apache/jute/compiler/generated src/java/main/org/apache/jute/compiler/generated/rcc.jj

	dh_auto_build -- $(ANT_ARGS) '-Dbuild.time=$(DEB_CHANGELOG_DATETIME)' -Dfinal.name=zookeeper javadoc javadoc-dev jar

	# Compile C library
	cd src/c && autoreconf -i
	cd src/c && ./configure --prefix=/usr --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH)
	$(MAKE) -C src/c

	# Compile contribs - zooinspector
	dh_auto_build -- -f src/contrib/build.xml $(ANT_ARGS) -Dcontribfilesetincludes="zooinspector/build.xml"
	# rename JAR file to comply with Debian Java policy
	mv -fv build/contrib/ZooInspector/zookeeper-ZooInspector.jar build/contrib/ZooInspector/zookeeper-zooinspector.jar

	# Build Python Bindings
	cd src/contrib/zkpython && \
	  for pv in $(PYVERS); do \
	    python$$pv src/python/setup.py build --build-base=$(CURDIR)/build ;\
	  done

	# Compile zktreeutil and generate man page
	cd src/contrib/zktreeutil && autoreconf -if && ./configure --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) && make
	LD_LIBRARY_PATH=src/c/.libs help2man -N --version-string=0.0 src/contrib/zktreeutil/src/zktreeutil >zktreeutil.man

override_dh_install:
	$(MAKE) -C src/c install DESTDIR=$(CURDIR)/debian/tmp
	cd src/contrib/zkpython && \
	  for pv in $(PYVERS); do \
	    python$$pv src/python/setup.py build --build-base=$(CURDIR)/build \
	               install --root=$(CURDIR)/debian/tmp --install-layout=deb ;\
	  done
	# Generate install files for Multiarch capability
	for install in libzookeeper-mt2 libzookeeper-st2 \
				   libzookeeper-st-dev libzookeeper-mt-dev; do \
		sed -e 's/__ARCH__/$(DEB_HOST_MULTIARCH)/g' debian/$$install.install.in \
			> debian/$$install.install; \
	done

	# Install the Maven artifacts
	mh_installpom -plibzookeeper-java debian/pom.xml
	mh_installjar -plibzookeeper-java --java-lib --has-package-version debian/pom.xml build/zookeeper.jar
	dh_install

ifeq (,$(findstring nocheck, $(DEB_BUILD_OPTIONS)))
# Limit architectures which execute tests as some
# non x86 archs can be a bit racey.
TEST_ARCH=i386 amd64
ifneq (,$(findstring $(DEB_BUILD_ARCH), $(TEST_ARCH)))
TEST_JARS=jline log4j-1.2 xercesImpl xmlParserAPIs netty slf4j-api slf4j-log4j12
override_dh_auto_test-arch:
	# C testing starts/stops zookeeper
	# this ensures that all the right classes are found
	for jar in $(TEST_JARS); do \
		ln -sf /usr/share/java/$$jar.jar build/lib/$$jar.jar; \
	done;
	# Execute multi-threaded test suite
	# Disable on Ubuntu and Debian due to glibc 2.17 incompatibility
	# https://issues.apache.org/jira/browse/ZOOKEEPER-1646
	if ! dpkg-vendor --derives-from debian; then \
		$(MAKE) -C src/c zktest-mt; \
		cd src/c && ./zktest-mt; \
	fi;
endif
# Only run core Java unit tests on i386 architecture as this is the arch
# that they are built and published on - works around -indep not working
# in Ubuntu.
ifeq (i386, $(DEB_BUILD_ARCH))
override_dh_auto_test-indep:
	# Run core Java test suite against zookeeper
	#dh_auto_build -- $(ANT_ARGS) test-core-java
endif
endif

override_dh_clean:
	mh_clean
	dh_clean --exclude=src/java \
             --exclude=src/docs \
             --exclude=src/c \
             --exclude=src/reciped
	jh_clean
	# Clean generated install files
	for install in libzookeeper-mt2 libzookeeper-st2 \
				   libzookeeper-st-dev libzookeeper-mt-dev; do \
		[ ! -f debian/$$install.install ] || rm debian/$$install.install; \
	done
	rm -rf debian/*debhelper.log

# the original build.xml deletes too much
override_dh_auto_clean:
	dh_auto_clean
	rm -rf .revision
	rm -rf build
	rm -rf src/c/generated
	rm -rf src/java/generated
	rm -rf src/java/lib/*.jar
	rm -rf src/java/main/org/apache/jute/compiler/generated/*.java
	rm -f zookeeper*.jar
	[ ! -f src/c/Makefile ] || $(MAKE) -C src/c distclean
	rm -f src/c/config.log src/c/config.status
	[ ! -f src/contrib/zktreeutil/Makefile ] || $(MAKE) -C src/contrib/zktreeutil distclean
	rm -rf src/contrib/zktreeutil/autom4te.cache
	rm -rf src/contrib/zktreeutil/Makefile.in
	rm -rf src/contrib/zktreeutil/aclocal.m4
	rm -rf src/contrib/zktreeutil/config.h.in
	rm -rf src/contrib/zktreeutil/configure
	rm -rf src/contrib/zktreeutil/depcomp
	rm -rf src/contrib/zktreeutil/install-sh
	rm -rf src/contrib/zktreeutil/missing
	rm -rf src/contrib/zktreeutil/src/Makefile.in
	rm -rf zktreeutil.man
	rm -rf src/c/Makefile.in
	rm -rf src/c/aclocal.m4
	rm -rf src/c/autom4te.cache
	rm -rf src/c/compile
	rm -rf src/c/config.guess
	rm -rf src/c/config.sub
	rm -rf src/c/configure
	rm -rf src/c/ltmain.sh
	rm -rf src/c/TEST-*

override_dh_installinit:
	dh_installinit --name=zookeeper
