#!/usr/bin/make -f
# debian/rules makefile that uses debhelper.
#
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
CFLAGS = -DUSE_GETTEXT -DNDEBUG -D_FORTIFY_SOURCE=2 -Wall -fomit-frame-pointer $(shell dpkg-buildflags --get CFLAGS)
LDFLAGS= $(shell dpkg-buildflags --get LDFLAGS)
LIBCFLAGS =
LIBLDFLAGS = $(LDFLAGS)
INSTALL_PROGRAM = install -p -m 755
DESTDIR = $(CURDIR)/debian/tmp
LIBRHASH_INC=-I$(DESTDIR)
LIBRHASH_LD=-Wl,--as-needed -L$(DESTDIR)
LD_LIB=$(DESTDIR):$(LD_LIBRARY_PATH)
JAVA_HOME ?= /usr/lib/jvm/default-java
JNI_INCLUDES=$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
JAVADOC_API_URL=/usr/share/doc/default-jdk-doc/api

# see Debian Policy Manual - source packages
ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -g
endif
ifneq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
	INSTALL_PROGRAM += -s
endif
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	MAKEFLAGS += -j$(NUMJOBS)
endif

# by default compile RHash with openssl runtime linking
ifeq (,$(findstring nossl,$(DEB_BUILD_OPTIONS)))
	LIBCFLAGS += -DUSE_OPENSSL
ifneq (,$(findstring ssldynamic,$(DEB_BUILD_OPTIONS)))
	LIBLDFLAGS += -lcrypto
else
	LIBCFLAGS  += -DOPENSSL_RUNTIME -rdynamic
	LIBLDFLAGS += -ldl
endif
endif

# language bindings to build
BINDINGS_ARCH = perl ruby
BINDINGS_INDEP = mono
BINDINGS_COMMON = java python
BINDINGS ?= $(BINDINGS_ARCH) $(BINDINGS_INDEP) $(BINDINGS_COMMON)

# using debhelper >= 8 to build the package
%:
	dh $@ --with=python2

build: build-arch build-indep

binary:
	BINDINGS="$(BINDINGS)" dh $@ --with=python2 --with=cli

binary-arch:
	BINDINGS="$(BINDINGS_ARCH) $(BINDINGS_COMMON)" dh $@ --with=python2

binary-indep:
	BINDINGS="$(BINDINGS_INDEP) $(BINDINGS_COMMON)" dh $@ --with=python2 --with=cli

build-rhash:
	# Compile static/shared libraries and the program.
	+$(MAKE) lib-static lib-shared rhash-shared CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
		LIBCFLAGS="$(LIBCFLAGS)" LIBLDFLAGS="$(LIBLDFLAGS)"
	# Move the rhash_shared binary to be called rhash, so that the tests use that
	# (and also since that is the binary name we will install into /usr/bin)
	cp rhash_shared rhash
	# Compile language bindings.
	mkdir -p $(DESTDIR) && ln -fs $(CURDIR)/librhash $(DESTDIR)/rhash
	ln -fs $(CURDIR)/librhash/librhash.so.0 $(DESTDIR)/ && ln -fs $(DESTDIR)/librhash.so.0 $(DESTDIR)/librhash.so
	+$(MAKE) test-lib test CFLAGS="$(CFLAGS)" LIBLDFLAGS="$(LIBLDFLAGS)" LD_LIBRARY_PATH="$(LD_LIB)"

build-common: build-rhash
	+$(MAKE) -C bindings build CFLAGS="$(CFLAGS)" \
		JAVADOC_API_URL="$(JAVADOC_API_URL)" JNI_INCLUDES="$(JNI_INCLUDES)" \
		LIBRHASH_INC="$(LIBRHASH_INC)" LIBRHASH_LD="$(LIBRHASH_LD) $(LDFLAGS)" BINDINGS="$(BINDINGS_COMMON)"
	+$(MAKE) -C bindings test LD_LIBRARY_PATH="$(LD_LIB)" BINDINGS="$(BINDINGS_COMMON)"

build-indep: build-common
	+$(MAKE) -C bindings build LIBRHASH_INC="$(LIBRHASH_INC)" LIBRHASH_LD="$(LIBRHASH_LD)" BINDINGS="$(BINDINGS_INDEP)"
	+$(MAKE) -C bindings test LD_LIBRARY_PATH="$(LD_LIB)" BINDINGS="$(BINDINGS_INDEP)"

build-arch: build-common
	+$(MAKE) -C bindings build LIBRHASH_INC="$(LIBRHASH_INC)" LIBRHASH_LD="$(LIBRHASH_LD)" BINDINGS="$(BINDINGS_ARCH)"
	chrpath -d bindings/perl/blib/arch/auto/Rhash/Rhash.so
	+$(MAKE) -C bindings test LD_LIBRARY_PATH="$(LD_LIB)" BINDINGS="$(BINDINGS_ARCH)"

override_dh_auto_test:

override_dh_auto_install:
	# Install the program and its translation strings
	$(MAKE) PREFIX=/usr DESTDIR=$(CURDIR)/debian/rhash INSTALL_PROGRAM="$(INSTALL_PROGRAM)" install install-gmo
	# Install static library
	$(MAKE) PREFIX=/usr DESTDIR=$(CURDIR)/debian/librhash-dev install-lib-static
	# Install shared library
	$(MAKE) PREFIX=/usr DESTDIR=$(CURDIR)/debian/librhash0 install-lib-shared
# note: pass empty MAKEFLAGS to 'make install' to overcome ruby1.8 concurrency bug
	# Install language bindings
	MAKEFLAGS= $(MAKE) -C bindings install DESTDIR=$(DESTDIR) PREFIX=/usr BINDINGS="$(BINDINGS)"

override_dh_strip:
	dh_strip -plibrhash0 --dbg-package=librhash0-dbg
	dh_strip

override_dh_auto_clean:
	$(MAKE) distclean
	$(MAKE) -C bindings distclean
