#!/usr/bin/make -f
# -*- makefile -*-

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

# This has to be exported to make some magic below work.
export DH_OPTIONS

# Enable hardening build flags
export DEB_BUILD_MAINT_OPTIONS=hardening=+all

include /usr/share/dpkg/pkg-info.mk

# These are used for cross-compiling and for saving the configure script
# from having to guess our platform (since we know it already)
DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
DEB_BUILD_ARCH      ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
DEB_BUILD_MULTIARCH ?= $(shell dpkg-architecture -qDEB_BUILD_MULTIARCH)
QT_PLUGIN_DIR = usr/lib/$(DEB_BUILD_MULTIARCH)/qt4/plugins

DEB_TEST_TARGET ?= Experimental
QGIS_BUILDDIR ?= debian/build

QGIS_VERSION=$(shell echo $(DEB_VERSION_UPSTREAM) | sed -e 's/\+.*//')

ifeq (,$(DIST))
	DISTRIBUTION := $(DEB_DISTRIBUTION)
else
	DISTRIBUTION := $(DIST)
endif

ifneq (,$(findstring -oracle,$(DISTRIBUTION)))
	DISTRIBUTION := $(subst -oracle,,$(DISTRIBUTION))
	WITH_ORACLE=1
endif

ifneq ($(DISTRIBUTION),$(findstring $(DISTRIBUTION),"sid buster jessie stretch stretch-backports trusty xenial yakkety zesty artful bionic"))
	DISTRIBUTION := sid
endif

DEB_BUILD_NAME ?= $(DISTRIBUTION)-$(DEB_BUILD_ARCH)

ifeq (,$(DISPLAY))
TESTMAKE=xvfb-run -a -n 1 -s "-screen 0 1280x1024x24 -dpi 96" $(MAKE)
else
TESTMAKE=$(MAKE)
endif

# Don't build tests, running them requires network
DEB_BUILD_OPTIONS += nocheck

QGIS_MAJOR=$(shell sed -ne 's/SET(CPACK_PACKAGE_VERSION_MAJOR "\([0-9]*\)")/\1/p' CMakeLists.txt)
QGIS_MINOR=$(shell sed -ne 's/SET(CPACK_PACKAGE_VERSION_MINOR "\([0-9]*\)")/\1/p' CMakeLists.txt)
QGIS_PATCH=$(shell sed -ne 's/SET(CPACK_PACKAGE_VERSION_PATCH "\([0-9]*\)")/\1/p' CMakeLists.txt)
QGIS_ABI=$(QGIS_MAJOR).$(QGIS_MINOR).$(QGIS_PATCH)
GRASS=grass$(subst .,,$(shell pkg-config --modversion grass|cut -d. -f1,2))
GRASSVER=$(subst .,,$(shell pkg-config --modversion grass|cut -d. -f1))
GRASSABI=$(subst .,,$(shell pkg-config --modversion grass|cut -d. -f1,2,3|sed -e 's/RC/-/'))

CMAKE_OPTS := \
	-DCMAKE_VERBOSE_MAKEFILE=1 \
	-DCMAKE_INSTALL_PREFIX=/usr \
	-DBINDINGS_GLOBAL_INSTALL=TRUE \
	-DPEDANTIC=TRUE \
	-DWITH_QSPATIALITE=TRUE \
	-DWITH_SERVER=TRUE \
	-DWITH_SERVER_PLUGINS=TRUE \
	-DSERVER_SKIP_ECW=TRUE \
	-DQGIS_CGIBIN_SUBDIR=/usr/lib/cgi-bin \
	-DWITH_APIDOC=TRUE \
	-DGENERATE_QHP=TRUE \
	-DSUPPRESS_SIP_WARNINGS=TRUE \
	-DWITH_CUSTOM_WIDGETS=TRUE \
	-DWITH_GLOBE=FALSE \
	-DQT_TAG_FILE=/usr/share/qt4/doc/html/qt.tags \
	-DQT_DOC_URL=/usr/share/qt4/doc/html/

ifneq (,$(findstring $(DISTRIBUTION),"trusty"))
	CMAKE_OPTS += \
		-DWITH_INTERNAL_MARKUPSAFE=TRUE \
		-DWITH_INTERNAL_DATEUTIL=TRUE \
		-DWITH_INTERNAL_NOSE2=TRUE \
		-DWITH_INTERNAL_YAML=TRUE
else
	CMAKE_OPTS += \
		-DWITH_INTERNAL_MARKUPSAFE=FALSE \
		-DWITH_INTERNAL_DATEUTIL=FALSE \
		-DWITH_INTERNAL_NOSE2=FALSE \
		-DWITH_INTERNAL_YAML=FALSE
endif

ifneq (,$(findstring $(DISTRIBUTION),"jessie trusty"))
	CMAKE_OPTS += \
		-DWITH_INTERNAL_FUTURE=TRUE \
		-DWITH_INTERNAL_PYTZ=TRUE \
		-DWITH_INTERNAL_SIX=TRUE
else
	CMAKE_OPTS += \
		-DWITH_INTERNAL_FUTURE=FALSE \
		-DWITH_INTERNAL_PYTZ=FALSE \
		-DWITH_INTERNAL_SIX=FALSE
endif

ifneq (,$(findstring $(DISTRIBUTION),"jessie trusty xenial"))
	CMAKE_OPTS += -DWITH_INTERNAL_OWSLIB=TRUE
else
	CMAKE_OPTS += -DWITH_INTERNAL_OWSLIB=FALSE
endif


ifneq ($(SHA),)
	CMAKE_OPTS += -DSHA=$(SHA)
endif

ifeq ($(GRASSVER),7)
	CMAKE_OPTS += \
		-DWITH_GRASS=TRUE \
		-DWITH_GRASS7=TRUE \
		-DGRASS_PREFIX7=/usr/lib/$(GRASS)
else
	CMAKE_OPTS += \
		-DWITH_GRASS=TRUE \
		-DWITH_GRASS6=TRUE \
		-DGRASS_PREFIX=/usr/lib/$(GRASS)
endif

ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	MAKEFLAGS += -j$(NUMJOBS)
endif

ifneq (,$(findstring $(DISTRIBUTION),"sid buster stretch stretch-backports"))
	CMAKE_OPTS += -DPOSTGRES_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libpq.so
endif

ifneq (,$(findstring $(DISTRIBUTION),"sid"))
	CMAKE_OPTS += -DWITH_QTWEBKIT=FALSE
endif

ifneq (,$(findstring $(DISTRIBUTION),"stretch stretch-backports yakkety zesty artful bionic"))
	CMAKE_OPTS += -DWITH_INTERNAL_WEBKIT_BINDINGS=TRUE
endif

ifneq (,$(findstring $(DISTRIBUTION),"sid buster"))
	CMAKE_OPTS += -DGEOS_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libgeos_c.so
endif

ifneq (,$(findstring $(DISTRIBUTION),"sid buster stretch stretch-backports jessie trusty xenial yakkety zesty artful bionic"))
	CMAKE_OPTS += -DPYTHON_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libpython2.7.so
endif

ifneq (,$(WITH_ORACLE))
ifeq ($(DEB_BUILD_ARCH),amd64)
	ORACLE_INCLUDEDIR=/usr/include/oracle/12.1/client64/
	ORACLE_LIBDIR=/usr/lib/oracle/12.1/client64/lib/
endif
ifeq ($(DEB_BUILD_ARCH),i386)
	ORACLE_INCLUDEDIR=/usr/include/oracle/12.1/client/
	ORACLE_LIBDIR=/usr/lib/oracle/12.1/client/lib/
endif

	CMAKE_OPTS += \
		-DWITH_ORACLE=TRUE \
		-DORACLE_LIBDIR=$(ORACLE_LIBDIR) \
		-DORACLE_INCLUDEDIR=$(ORACLE_INCLUDEDIR)
endif

ifneq (,$(findstring $(DISTRIBUTION),"sid buster stretch stretch-backports"))
	CMAKE_OPTS += -DFCGI_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libfcgi.so
endif

ifneq (,$(findstring $(DISTRIBUTION),"sid buster stretch stretch-backports jessie"))
	CMAKE_OPTS += -DSPATIALINDEX_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libspatialindex.so
endif

ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
	CMAKE_OPTS += -DCMAKE_BUILD_TYPE=Debug
else
ifneq (,$(findstring $(DISTRIBUTION),"trusty"))
	CMAKE_OPTS += -DKEEP_GLOBE_CXX_FLAGS=TRUE
endif
endif

ifneq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	CMAKE_OPTS += -DENABLE_TESTS=FALSE
else
	CMAKE_OPTS += -DENABLE_TESTS=TRUE
endif

ifneq (,$(findstring $(DISTRIBUTION),"sid buster jessie stretch stretch-backports trusty"))
CPPFLAGS := $(shell dpkg-buildflags --get CPPFLAGS)
CFLAGS   := $(shell dpkg-buildflags --get CFLAGS) $(CPPFLAGS)
CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS) $(CPPFLAGS)
LDFLAGS  := $(shell dpkg-buildflags --get LDFLAGS)
endif

ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
	INSTALL_PROGRAM += -s
endif

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

ifneq (,$(findstring profile,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -pg
	CXXFLAGS += -pg
	LDFLAGS += -pg
endif

%:
	dh $@ --with pkgkde_symbolshelper,python2 --parallel --builddirectory=$(QGIS_BUILDDIR)

override_dh_clean:
	dh_clean qgis.bin.1 qbrowser.bin.1 build-arch-stamp install-arch-stamp

	-$(RM) -r $(CURDIR)/$(QGIS_BUILDDIR)/

override_dh_auto_configure:
	dh_auto_configure -- $(CMAKE_OPTS)

override_dh_auto_build-arch: build-arch-stamp
build-arch-stamp:
	dh_auto_build
	touch $@

override_dh_auto_build-indep: build-arch-stamp
	(cd $(QGIS_BUILDDIR) && doxygen doc/Doxyfile)

override_dh_auto_test:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	# Code to run the package test suite - and ignore the outcome for now
	mkdir -p debian/tmp/locale/
	localedef -f UTF-8 -i en_US ./debian/tmp/locale/en_US.UTF-8/
	-LOCPATH=$(CURDIR)/debian/tmp/locale/ \
	LC_ALL=en_US.UTF-8 \
	LD_LIBRARY_PATH=$(CURDIR)/$(QGIS_BUILDDIR)/output/lib:$(LD_LIBRARY_PATH) \
	PATH=/usr/sbin:$(PATH) \
	$(TESTMAKE) -C $(QGIS_BUILDDIR) $(DEB_TEST_TARGET)
else
	@echo Skipping tests.
endif

override_dh_auto_install-arch: install-arch-stamp
install-arch-stamp:
	dh_auto_install

	# remove unwanted files
	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/doc/api/installdox

	# Don't include a copy of the world.tif also included in osgearth-data
	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/globe/world.tif

	# remove extra license files
	-find $(CURDIR)/debian/tmp/usr/share/qgis/resources/cpt-city-qgis-min/ -name COPYING.xml -delete
	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/doc/LICENSE
	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/python/plugins/db_manager/LICENSE
	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/python/plugins/MetaSearch/LICENSE.txt

	# remove documentation outside usr/share/doc
	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/python/plugins/db_manager/README
	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/python/plugins/db_manager/TODO

	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/resources/cpt-city-qgis-min/README-qgis.txt
	$(RM) $(CURDIR)/debian/tmp/usr/share/qgis/resources/cpt-city-qgis-min/README.txt

	# Man pages are installed by dh_installman
	$(RM) $(CURDIR)/debian/tmp/usr/man/man1/qgis.1
	$(RM) $(CURDIR)/debian/tmp/usr/man/man1/qbrowser.1

	# Don't ship srs.db, automatically updated in postinst with crssync
	mv $(CURDIR)/debian/tmp/usr/share/qgis/resources/srs.db $(CURDIR)/debian/tmp/usr/share/qgis/resources/srs-template.db

	# Install menu pixmap
	install -o root -g root -d $(CURDIR)/debian/tmp/usr/share/pixmaps
	install -o root -g root -m 644 $(CURDIR)/images/icons/qgis_icon.svg $(CURDIR)/debian/tmp/usr/share/pixmaps/qgis.svg
	install -o root -g root -m 644 $(CURDIR)/images/icons/qbrowser_icon.svg $(CURDIR)/debian/tmp/usr/share/pixmaps/qbrowser.svg
	install -o root -g root -m 644 $(CURDIR)/images/icons/qgis-icon.png $(CURDIR)/debian/tmp/usr/share/pixmaps/qgis.png
	install -o root -g root -m 644 $(CURDIR)/images/icons/qbrowser-icon.png $(CURDIR)/debian/tmp/usr/share/pixmaps/qbrowser.png
	install -o root -g root -m 644 $(CURDIR)/images/icons/qgis-mime-icon.png $(CURDIR)/debian/tmp/usr/share/pixmaps/qgis-mime.png

	# Install MIME type icon
	for size in 8x8 16x16 22x22 24x24 32x32 36x36 42x42 48x48 64x64 72x72 80x80 96x96 128x128 192x192 256x256 512x512; do \
		install -o root -g root -d $(CURDIR)/debian/tmp/usr/share/icons/hicolor/$${size}/mimetypes ; \
		install -o root -g root -m 644 $(CURDIR)/debian/icons/qgis-mime-icon$${size}.png $(CURDIR)/debian/tmp/usr/share/icons/hicolor/$${size}/mimetypes/qgis-mime.png ; \
	done

	# Install QGIS file formats icons
	for file_type in qgs qlr qml qpt; do \
		for size in 8x8 16x16 22x22 24x24 32x32 36x36 42x42 48x48 64x64 72x72 80x80 96x96 128x128 192x192 256x256 512x512; do \
			install -o root -g root -d $(CURDIR)/debian/tmp/usr/share/icons/hicolor/$${size}/mimetypes ; \
			install -o root -g root -m 644 \
				$(CURDIR)/debian/icons/qgis-$${file_type}$${size}.png \
				$(CURDIR)/debian/tmp/usr/share/icons/hicolor/$${size}/mimetypes/qgis-$${file_type}.png ; \
		done ; \
	done

	# Install application icon
	for size in 8x8 16x16 22x22 24x24 32x32 36x36 42x42 48x48 64x64 72x72 80x80 96x96 128x128 192x192 256x256 512x512; do \
		install -o root -g root -d $(CURDIR)/debian/tmp/usr/share/icons/hicolor/$${size}/apps ; \
		install -o root -g root -m 644 $(CURDIR)/debian/icons/qgis-icon$${size}.png $(CURDIR)/debian/tmp/usr/share/icons/hicolor/$${size}/apps/qgis.png ; \
		install -o root -g root -m 644 $(CURDIR)/debian/icons/qbrowser-icon$${size}.png $(CURDIR)/debian/tmp/usr/share/icons/hicolor/$${size}/apps/qbrowser.png ; \
	done
	
	install -o root -g root -d $(CURDIR)/debian/tmp/usr/share/icons/hicolor/scalable/apps
	install -o root -g root -m 644 $(CURDIR)/images/icons/qgis_icon.svg $(CURDIR)/debian/tmp/usr/share/icons/hicolor/scalable/apps/qgis.svg
	install -o root -g root -m 644 $(CURDIR)/images/icons/qbrowser_icon.svg $(CURDIR)/debian/tmp/usr/share/icons/hicolor/scalable/apps/qbrowser.svg

	# Install desktop files
	install -o root -g root -d $(CURDIR)/debian/tmp/usr/share/applications
	install -o root -g root -m 644 $(CURDIR)/debian/qgis.desktop $(CURDIR)/debian/tmp/usr/share/applications
	install -o root -g root -m 644 $(CURDIR)/debian/qbrowser.desktop $(CURDIR)/debian/tmp/usr/share/applications

	# Mime info
	install -o root -g root -d $(CURDIR)/debian/tmp/usr/share/mime/packages
	install -o root -g root -m 644 $(CURDIR)/debian/qgis.xml $(CURDIR)/debian/tmp/usr/share/mime/packages

	# qgis binaries
	install -o root -g root -m 755 -d $(CURDIR)/debian/qgis/usr/bin
	install -o root -g root -m 755 $(CURDIR)/debian/tmp/usr/bin/qgis $(CURDIR)/debian/qgis/usr/bin/qgis.bin
	install -o root -g root -m 755 $(CURDIR)/debian/tmp/usr/bin/qbrowser $(CURDIR)/debian/qgis/usr/bin/qbrowser.bin

	$(RM) $(CURDIR)/debian/tmp/usr/bin/qgis
	$(RM) $(CURDIR)/debian/tmp/usr/bin/qbrowser

	# qgis binary wrappers
	install -o root -g root -m 755 $(CURDIR)/debian/qgis.sh $(CURDIR)/debian/qgis/usr/bin/qgis
	install -o root -g root -m 755 $(CURDIR)/debian/qgis.sh $(CURDIR)/debian/qgis/usr/bin/qbrowser

	# default options for wrappers
	install -o root -g root -m 755 -d $(CURDIR)/debian/qgis/etc/default
	install -o root -g root -m 644 $(CURDIR)/debian/qgis.default $(CURDIR)/debian/qgis/etc/default/qgis

	touch $@

override_dh_auto_install-indep: install-arch-stamp
	install -o root -g root -m 755 -d $(CURDIR)/debian/tmp/usr/share/qgis/doc
	mv -v $(QGIS_BUILDDIR)/doc/api/html $(CURDIR)/debian/tmp/usr/share/qgis/doc/api

	install -o root -g root -m 644 $(CURDIR)/images/icons/qgis-icon-60x60.png $(CURDIR)/debian/tmp/usr/share/qgis/doc/api/
	install -o root -g root -m 644 $(QGIS_BUILDDIR)/doc/api/qch/qgis.qch $(CURDIR)/debian/tmp/usr/share/qgis/doc/api/

override_dh_install:
	dh_install --autodest --list-missing

override_dh_installchangelogs:
	dh_installchangelogs ChangeLog

override_dh_installman:
	cp qgis.1 qgis.bin.1
	cp qbrowser.1 qbrowser.bin.1

	dh_installman -pqgis qgis.1 qbrowser.1 qgis.bin.1 qbrowser.bin.1

override_dh_installmime:
	dh_installmime -pqgis

override_dh_python2:
	dh_python2 --no-guessing-versions
	dh_python2 --no-guessing-versions usr/share/qgis/grass/scripts
	dh_sip -ppython-qgis

override_dh_compress:
	dh_compress --exclude=pdf

override_dh_makeshlibs:
ifneq (,$(WITH_ORACLE))
	dh_makeshlibs -Xqgis-plugin-grass -Xlibqgis-customwidgets -Xqgis-provider-oracle -- -c0 -v$(QGIS_VERSION)
else
	dh_makeshlibs -Xqgis-plugin-grass -Xlibqgis-customwidgets -- -c0 -v$(QGIS_VERSION)
endif

override_dh_shlibdeps:
ifneq (,$(WITH_ORACLE))
	dh_shlibdeps -l/usr/lib/$(GRASS)/lib -l$(ORACLE_LIBDIR)
else
	dh_shlibdeps -l/usr/lib/$(GRASS)/lib
endif

override_dh_strip:
	dh_strip --dbgsym-migration='qgis-dbg (<< 2.14.21+dfsg)'

override_dh_gencontrol:
	dh_gencontrol -- -Vgrass:Depends="grass$(GRASSABI)"
