#!/usr/bin/make -f

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

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

%:
	dh $@ --with javahelper --with python2

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
	# the upstream build file includes .java files in the jars. Let's create the jars ourselves.
	# see: https://issues.apache.org/jira/browse/ZOOKEEPER-537
	ant -Dversion=$(DEB_UPSTREAM_VERSION) -DlastRevision=-1 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
	cd src/contrib && \
		ant -Dversion=$(DEB_UPSTREAM_VERSION) \
			-propertyfile ../../debian/ant.properties \
			-Dcontribfilesetincludes="zooinspector/build.xml"

	# 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
	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
	ant -Dversion=$(DEB_UPSTREAM_VERSION) -DlastRevision=-1 test-core-java
endif
endif

override_dh_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

# the original build.xml deletes too much
override_dh_auto_clean:
	dh_testdir
	rm -rf .revision
	rm -rf build
	rm -rf src/c/generated
	rm -rf src/java/generated
	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 -d
