#!/usr/bin/make -f

export DH_VERBOSE=1
export DH_OPTIONS=-v

include /usr/share/dpkg/architecture.mk

DEBIAN_DIR = $(CURDIR)/debian
BUILD_DIR = $(DEBIAN_DIR)/build
INSTALL_DIR = $(BUILD_DIR)

# 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)

PROTEOWIZ_LIB_PACKAGE = libpwiz3t64
PROTEOWIZ_LIB_VERSION = 3.0.0
PROTEOWIZ_SOFT_VERSION = 3.0.9393
PROTEOWIZ_PACK_VERSION = $(PROTEOWIZ_SOFT_VERSION)-1

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

$(info "---------------------------------------")
$(info DEB_HOST_GNU_TYPE: $(DEB_HOST_GNU_TYPE))
$(info DEB_BUILD_GNU_TYPE $(DEB_BUILD_GNU_TYPE))
$(info DEB_BUILD_OPTIONS: $(DEB_BUILD_OPTIONS))
$(info DEB_HOST_MULTIARCH: $(DEB_HOST_MULTIARCH))
$(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)

ifneq (,$(filter $(DEB_BUILD_ARCH),mips mipsel))
 CXXFLAGS += --param ggc-min-expand=5
endif

.NOTPARALLEL:

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

	rm -f debian/msconvert.1
	rm -f debian/idconvert.1
	rm -f debian/mscat.1
	rm -f debian/txt2mzml.1

# Remove the configure script that is shipped with the source tarball
	rm -f autools/conf.log autools/config.status

	rm -rf $(BUILD_DIR)

# Remove the generated includes directory:
	rm -rf debian/includes

# Remove the generated doc/dox/html directory:
	rm -rf doc/dox/html

	rm -f configure-stamp
	rm -f build-arch-stamp
	rm -f build-indep-stamp

	dh_clean

.PHONY: configure
configure: 
	@echo "entering the configure target"
	dh_testdir
	dh_prep -a

	mkdir -p $(BUILD_DIR)

# Duplicate the source tree, since it is not easy to build the
# software in a separate build directory.
	cp -rpf autotools libraries pwiz pwiz_tools $(BUILD_DIR)

# Craft a modified version of Makefile.am with a correct -L <>
# statement for the BOOST_LDPATH flag to the linker.

	echo "BOOST_LDPATH = /usr/lib/$(DEB_HOST_MULTIARCH)" > $(BUILD_DIR)/autotools/Makefile.am-tmp

	cat $(BUILD_DIR)/autotools/Makefile.am >> $(BUILD_DIR)/autotools/Makefile.am-tmp

  # Now add the path to the eigen3 include dir
	sed -i '/^AM_CPPFLAGS/ s|$$| -I "/usr/include/eigen3/Eigen"|' $(BUILD_DIR)/autotools/Makefile.am-tmp

  # Now add the path to the local eigen3 include dir (for the nnls.h file)
	sed -i '/^AM_CPPFLAGS/ s|$$| -I "$(BUILD_DIR)/libraries/Eigen"|' $(BUILD_DIR)/autotools/Makefile.am-tmp

  # Now add the path to the libsvm include dir
	sed -i '/^AM_CPPFLAGS/ s|$$| -I "$(BUILD_DIR)/libraries/libsvm-3.0"|' $(BUILD_DIR)/autotools/Makefile.am-tmp

	mv $(BUILD_DIR)/autotools/Makefile.am-tmp $(BUILD_DIR)/autotools/Makefile.am

# Remove parts of boost_aux now integrated in boost
	rm -f $(BUILD_DIR)/libraries/boost_aux/boost/interprocess/detail/*

# Regenerate the configure script
	cd $(BUILD_DIR)/autotools && autoreconf --force -i && cd .. && \
	autotools/configure --prefix=/usr --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)

configure-stamp: configure
	@echo "entering the configure-stamp target"
	touch configure-stamp

build-arch-stamp: configure-stamp
	@echo "entering the build-arch-stamp target"

	cd $(BUILD_DIR) && \
	VERBOSE=1 BOOST_LDPATH=/usr/lib/$(DEB_HOST_MULTIARCH) $(MAKE) && \
	VERBOSE=1 DESTDIR=$(INSTALL_DIR) $(MAKE) install

# Now that the build is fine and the built files installed,
# remove all the RPATH stuff from these binaries.
	@echo "Removing the RPATH datum from the binaries." 
	sh debian/remove-rpath-from-binaries.sh

# Prepare a mirroring hierarchy for all the header files of the
# project. The mirror is in debian/includes/pwiz.
	@echo $(shell pwd)
	sh debian/make-included-headers-hierarchy.sh

# Produce the man pages for both libpwiz-tools binaries
	docbook-to-man debian/msconvert.sgml > debian/msconvert.1
	docbook-to-man debian/idconvert.sgml > debian/idconvert.1
	docbook-to-man debian/mscat.sgml > debian/mscat.1
	docbook-to-man debian/txt2mzml.sgml > debian/txt2mzml.1

	touch build-arch-stamp

# Build the documentation with doxygen in doc/dox. That creates an
# html file. Note that we need the binary-arch build because the files
# that go in the documentation are produced by the arch targets.
build-indep-stamp: build-arch-stamp
	@echo "entering the build-indep-stamp target"
	cd doc/dox && doxygen

# Remove the jquery.js file, since it is shipped in its own Debian package
	rm -f doc/dox/html/jquery.js

	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
	dh_installdocs -i
	dh_install -i
	dh_installman -i
	dh_compress -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
	dh_installdocs -a
	dh_install -a
	dh_installmenu -a
	dh_installman -a
	dh_strip -a
# Do not compress the example source and binary files.
	dh_compress -av -Xexample-files

# Ensure that ldconfig is called.
	dh_makeshlibs -a

	dh_installdeb -a

# Generate the symbols for libs so that the call to dh_shlibdeps -a
# can work finding the dependencies upon
# $(PROTEOWIZ_LIB_PACKAGE). Specify the version
# $(PROTEOWIZ_LIB_VERSION) of the lib because otherwise,
# dpkg-gensymbols provides the full version with debian package
# version $(PROTEOWIZ_LIB_VERSION)-1, which we do not want.
	dpkg-gensymbols -P$(DEBIAN_DIR) -p$(PROTEOWIZ_LIB_PACKAGE) \
	-v$(PROTEOWIZ_LIB_VERSION) -c2 -d \
	-e$(BUILD_DIR)/usr/lib/libpwiz.so.$(PROTEOWIZ_LIB_VERSION) \
	-O$(DEBIAN_DIR)/$(PROTEOWIZ_LIB_PACKAGE)/DEBIAN/symbols

# Send the proper shared libs details for the library:
	echo "libpwiz 3 libpwiz3t64 (>= $(PROTEOWIZ_PACK_VERSION))" > \
	$(DEBIAN_DIR)/$(PROTEOWIZ_LIB_PACKAGE)/DEBIAN/shlibs

# Run the fixperms after generating the symbols and shlibs files so
# that the correct permissions are set for them also. Lintian was
# complaining.
	dh_fixperms -a
	dh_lintian -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a


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