#!/usr/bin/make -f

export DH_VERBOSE=1
export DH_OPTIONS=-v

CMAKE=/usr/bin/cmake

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

DEBIAN_DIR = $(CURDIR)/debian

BUILD_DIR = $(DEBIAN_DIR)/build

# Path to the tools subdirectory in the top source dir to build the
# documentation.
export PATH := $(BUILD_DIR)/bin:$(CURDIR)/tools:$(PATH)
export LD_LIBRARY_PATH := $(BUILD_DIR)/lib/:$(LD_LIBRARY_PATH)

export HOME=$(CURDIR)/debian

LIB_BIN_PACKAGE = libopenms2.4.0
LIB_SOVERSION = 2.4.0
PACK_VERSION = 2.4.0
DEB_PACK_VERSION = $(PACK_VERSION)-1


ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
	CXXFLAGS += -O0
else
	CXXFLAGS += -O2
endif

$(info "---------------------------------------")
$(info NUMJOBS: $(NUMJOBS))
$(info MAKEFLAGS: $(MAKEFLAGS))
$(info DEB_BUILD_OPTIONS: $(DEB_BUILD_OPTIONS))
$(info "---------------------------------------")

# Hardening stuff, see http://wiki.debian.org/Hardening
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk
CFLAGS+=$(CPPFLAGS)
CXXFLAGS+=$(CPPFLAGS)

.NOTPARALLEL: 

.PHONY: clean
clean: 
	@echo "entering the clean target"
	dh_testdir
	dh_testroot

	rm -rf $(BUILD_DIR)
	
	# Remove the generated xpm icon files:
	rm -f debian/TOPPAS.xpm
	rm -f debian/TOPPView.xpm
	
	# Remove the generated topp.1 man page:
	rm -f debian/topp.1
	
	dh_clean


build-arch-stamp:
	dh_testdir
	dh_prep -a

	mkdir -p $(BUILD_DIR)

# On the command line, use 
# -DCONTRIB_LIB_DIR="/usr/lib/$(dpkg-architecture -qDEB_BUILD_GNU_TYPE);/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH);" 
# see debian/changelog for the rationale.

	@echo "DEB_BUILD_GNU_TYPE: $(DEB_BUILD_GNU_TYPE)"
		@echo "DEB_HOST_MULTIARCH: $(DEB_HOST_MULTIARCH)"
	
	cd $(BUILD_DIR) && \
		$(CMAKE) -DCMAKE_FIND_LIBRARY_SUFFIXES=".so" \
		-DCMAKE_INSTALL_PREFIX="/usr" \
		-DOPENMS_CONTRIB_LIBS="/usr/lib;/usr/lib/$(DEB_BUILD_GNU_TYPE);/lib/$(DEB_BUILD_GNU_TYPE);/usr/lib/$(DEB_HOST_MULTIARCH);/lib/$(DEB_HOST_MULTIARCH)" \
		-DCF_OPENMS_DATA_PATH=/usr/share/openms-common/ \
		-DCF_OPENMS_DOC_PATH=/usr/share/doc/openms-doc/ \
		-DCMAKE_BUILD_TYPE=release \
		-DDEBIAN_BUILD=ON -DBOOST_USE_STATIC=OFF ../.. 
	
	# Build the libs and executable binaries
	VERBOSE=1 $(MAKE) -C $(BUILD_DIR) \
					OpenMS GUI OpenSwathAlgo SuperHirn TOPP \
					UTILS Tutorials_build doc_tutorials
	
	# Run the test suite
	#VERBOSE=1 $(MAKE) -C $(BUILD_DIR) test
	
	# Prepare the xpm-formatted pixmaps for the Debian menu system.
	# Setting imagemagick to Build-Depends, for use of convert.
	convert src/openms_gui/source/VISUAL/ICONS/TOPPAS.png -resize 32x32 debian/TOPPAS.xpm
	convert src/openms_gui/source/VISUAL/ICONS/TOPPView.png -resize 32x32 debian/TOPPView.xpm
	
	# Prepare the topp.1 man page with all the one-line description got
	# from calling individually each program in $(BUILD_DIR)/bin with
	# --help switch. The newly built libs need be in the path so that the
	# binaries can execute. Same for the shared data path, because the
	# binaries need it to run. Note the calling in sh ./ with the script
	# shell being itself executable, otherwise git-buildpackage would
	# fail.
	@echo $(shell pwd)
	cd $(DEBIAN_DIR) && \
		OPENMS_DATA_PATH=$(CURDIR)/share/OpenMS/ \
		LD_LIBRARY_PATH=$(BUILD_DIR)/lib/:$(LD_LIBRARY_PATH)\
		sh ./binaries-extract-one-line-man-desc.sh
	
	# Build the documentation, which needs a running XWindow server. We
	# thus use the doc_minimal target.
	
	cd $(BUILD_DIR) && \
		$(CMAKE) -DCMAKE_FIND_LIBRARY_SUFFIXES=".so" \
		-DCMAKE_INSTALL_PREFIX="/usr" \
		-DOPENMS_CONTRIB_LIBS="/usr/lib;/usr/lib/$(DEB_BUILD_GNU_TYPE);/lib/$(DEB_BUILD_GNU_TYPE);/usr/lib/$(DEB_HOST_MULTIARCH);/lib/$(DEB_HOST_MULTIARCH)" \
		-DCF_OPENMS_DATA_PATH=/usr/share/openms-common/ \
		-DCF_OPENMS_DOC_PATH=/usr/share/doc/openms-doc/ \
		-DCMAKE_BUILD_TYPE=release \
		-DDEBIAN_BUILD=ON -DBOOST_USE_STATIC=OFF ../.. 
	
	VERBOSE=1 LD_LIBRARY_PATH=$(BUILD_DIR)/lib/:$(LD_LIBRARY_PATH)\
		PATH=$(BUILD_DIR)/bin:$(CURDIR)/tools:$(PATH)\
		OPENMS_DATA_PATH=$(CURDIR)/share/OpenMS/ \
		$(MAKE) -C $(BUILD_DIR) doc_progs doc_tutorials \
		doc_minimal doc_class_only

	VERBOSE=1 LD_LIBRARY_PATH=$(BUILD_DIR)/lib/:$(LD_LIBRARY_PATH)\
		PATH=$(BUILD_DIR)/bin:$(CURDIR)/tools:$(PATH)\
		OPENMS_DATA_PATH=$(CURDIR)/share/OpenMS/ \
		cd $(BUILD_DIR)/doc/doxygen && doxygen Doxyfile

	# The install/fast target allows installing without having to first make 
	# all the targets, including the target that makes the build fail due
	# to not having a working X session.
	
	VERBOSE=1 LD_LIBRARY_PATH=$(BUILD_DIR)/lib/:$(LD_LIBRARY_PATH)\
		PATH=$(BUILD_DIR)/bin:$(CURDIR)/tools:$(PATH)\
		OPENMS_DATA_PATH=$(CURDIR)/share/OpenMS/ \
		$(MAKE) -C $(BUILD_DIR) install/fast DESTDIR=$(BUILD_DIR)
	
	# There are two files that we do not want to ship because
	# they exist in their own Debian packages.
	
	rm -f $(BUILD_DIR)/usr/share/doc/html/jquery.js
	
	touch build-arch-stamp


#  Note that this requires a build of the binary arch stuff.
build-indep-stamp: build-arch-stamp

	touch build-indep-stamp


.PHONY: build
build: 	build-arch-stamp build-indep-stamp


.PHONY: build-indep
build-indep: build-indep-stamp


.PHONY: build-arch
build-arch: build-arch-stamp


# Build architecture-independent files here.
.PHONY: binary-indep
binary-indep: build-indep
	dh_testdir -i
	dh_testroot -i
	dh_installchangelogs -i CHANGELOG 
	dh_installdocs -i
	dh_install -i
	dh_installman -i
	dh_compress -XOpenMS_tutorial.pdf -XTOPP_tutorial.pdf -i
	dh_fixperms -i
	dh_installdeb -i
	dh_lintian -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i


# Build architecture-dependent files here.
.PHONY: binary-arch
binary-arch: build-arch
	dh_testdir -a
	dh_testroot -a
	dh_link
	dh_installchangelogs -a CHANGELOG
	dh_installdocs -a
	dh_install -a
	# Now that install has been performed, remove all the Tutorial*
	# binaries that will not ship in the topp package, but in the
	# openms-doc package.
	rm -vf $(DEBIAN_DIR)/topp/usr/bin/Tutorial*
	dh_installmenu -a
	dh_installman -a
	dh_strip -p$(LIB_BIN_PACKAGE)
	dh_strip -ptopp
	dh_compress -a
	dh_fixperms -a
	
	dh_makeshlibs -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_installdeb -a

	dpkg-gensymbols -P$(DEBIAN_DIR) -p$(LIB_BIN_PACKAGE) \
		-v$(PACK_VERSION) -c2 -d \
		-e$(BUILD_DIR)/lib/libOpenMS.so.$(LIB_SOVERSION) \
		-e$(BUILD_DIR)/lib/libOpenMS_GUI.so.$(LIB_SOVERSION) \
		-e$(BUILD_DIR)/lib/libOpenSwathAlgo.so.$(LIB_SOVERSION) \
		-e$(BUILD_DIR)/lib/libSuperHirn.so.$(LIB_SOVERSION) \
		-O$(DEBIAN_DIR)/$(LIB_BIN_PACKAGE)/DEBIAN/symbols

	dh_lintian -a
	dh_md5sums -a
	dh_builddeb -a


.PHONY: binary
binary: binary-arch binary-indep
