#!/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) DEB_TEST_TARGET ?= Experimental QGIS_BUILDDIR ?= debian/build export QT_SELECT=5 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 QT_PLUGINS_DIR = usr/lib/$(DEB_BUILD_MULTIARCH)/qt5/plugins ifneq ($(DISTRIBUTION),$(findstring $(DISTRIBUTION),"buster bionic eoan focal")) DISTRIBUTION := sid endif DEB_BUILD_NAME ?= $(DISTRIBUTION)-$(DEB_BUILD_ARCH) # 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/-/')) PYTHON_GE_38=$(shell python3 -c 'import sys; print(1) if(sys.version_info[0] > 3 or (sys.version_info[0] == 3 and sys.version_info[1] >= 8)) else print(0)') # Include percentage of started edges export NINJA_STATUS=[%f/%t %p] ifeq (,$(filter terse,$(DEB_BUILD_OPTIONS))) NINJA_OPTS += -v endif ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) MAKEFLAGS += -j$(NUMJOBS) NINJA_OPTS += -j$(NUMJOBS) endif ifeq (,$(DISPLAY)) TESTMAKE=xvfb-run -a -n 1 -s "-screen 0 1280x1024x24 -dpi 96" ninja $(NINJA_OPTS) else TESTMAKE=ninja $(NINJA_OPTS) endif CMAKE_OPTS := \ -G Ninja \ -DBUILDNAME=$(DEB_BUILD_NAME) \ -DCMAKE_VERBOSE_MAKEFILE=1 \ -DCMAKE_INSTALL_PREFIX=/usr \ -DBINDINGS_GLOBAL_INSTALL=TRUE \ -DPEDANTIC=TRUE \ -DSERVER_SKIP_ECW=TRUE \ -DQGIS_CGIBIN_SUBDIR=/usr/lib/cgi-bin \ -DWITH_APIDOC=TRUE \ -DGENERATE_QHP=TRUE \ -DWITH_CUSTOM_WIDGETS=TRUE \ -DWITH_GLOBE=FALSE \ -DWITH_SERVER=TRUE \ -DWITH_SERVER_PLUGINS=TRUE \ -DWITH_QSPATIALITE=TRUE \ -DWITH_QWTPOLAR=FALSE \ -DQT_PLUGINS_DIR=$(QT_PLUGINS_DIR) ifeq ($(PYTHON_GE_38),1) CMAKE_OPTS += -DPYTHON_LIBRARY=$(shell python3-config --ldflags --embed | sed -e 's@-L\(.*\) -L/usr/lib -l\([^ ]*\) .*$$@\1/lib\2.so@') else CMAKE_OPTS += -DPYTHON_LIBRARY=$(shell python3-config --ldflags | sed -e 's@-L\(.*\) -L/usr/lib -l\([^ ]*\) .*$$@\1/lib\2.so@') endif ifneq ($(SHA),) CMAKE_OPTS += -DSHA=$(SHA) endif ifeq ($(GRASSVER),7) CMAKE_OPTS += \ -DWITH_GRASS=TRUE \ -DWITH_GRASS7=TRUE \ -DGRASS_PREFIX7=/usr/lib/$(GRASS) endif ifneq (,$(findstring $(DISTRIBUTION),"sid buster")) CMAKE_OPTS += -DPOSTGRES_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libpq.so endif ifneq (,$(findstring $(DISTRIBUTION),"sid buster bionic eoan focal")) CMAKE_OPTS += \ -DWITH_3D=TRUE \ -DGEOS_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libgeos_c.so ifneq (,$(findstring $(DISTRIBUTION),"sid buster eoan focal")) # Qt3DExtras intentionally removed from debian (#895386) and in turn ubuntu ifeq (0,$(shell ls /usr/include/$(DEB_BUILD_MULTIARCH)/qt5/Qt3DExtras/qt3dextrasversion.h 2> /dev/null | grep -c qt3dextrasversion.h)) CMAKE_OPTS += \ -DCMAKE_PREFIX_PATH=$(realpath external/qt3dextra-headers/cmake) \ -DQT5_3DEXTRA_INCLUDE_DIR=$(realpath external/qt3dextra-headers) \ -DQT5_3DEXTRA_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libQt53DExtras.so endif endif 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")) CMAKE_OPTS += -DSPATIALINDEX_LIBRARY=/usr/lib/$(DEB_BUILD_MULTIARCH)/libspatialindex.so endif ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) CMAKE_OPTS += -DCMAKE_BUILD_TYPE=Debug endif ifneq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) CMAKE_OPTS += -DENABLE_TESTS=FALSE else CMAKE_OPTS += -DENABLE_TESTS=TRUE -DDART_TESTING_TIMEOUT=60 endif 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) 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 ifeq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) CFLAGS += -DNDEBUG CXXFLAGS += -DNDEBUG endif ifeq ($(DEB_BUILD_ARCH),mips64el) CXXFLAGS += -mxgot endif %: dh $@ --with pkgkde_symbolshelper,python3 --builddirectory=$(QGIS_BUILDDIR) override_dh_clean: dh_clean qgis.bin.1 -$(RM) -r $(CURDIR)/$(QGIS_BUILDDIR)/ override_dh_auto_configure: dh_auto_configure -- $(CMAKE_OPTS) override_dh_auto_build: ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) ninja $(NINJA_OPTS) -C $(QGIS_BUILDDIR) $(DEB_TEST_TARGET)Build ! grep -q "" $(QGIS_BUILDDIR)/Testing/$$(head -1 $(QGIS_BUILDDIR)/Testing/TAG)/Build.xml || { \ cat $(QGIS_BUILDDIR)/Testing/Temporary/LastBuild_$$(head -1 $(QGIS_BUILDDIR)/Testing/TAG).log; \ ninja $(NINJA_OPTS) -C $(QGIS_BUILDDIR) $(DEB_TEST_TARGET)Submit; \ false; } else ninja $(NINJA_OPTS) -C $(QGIS_BUILDDIR) endif override_dh_auto_test: ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) # Code to run the package test suite rm -f $(QGIS_BUILDDIR)/.error 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)Test || touch $(QGIS_BUILDDIR)/.error # ignore submission errors -$(TESTMAKE) -C $(QGIS_BUILDDIR) $(DEB_TEST_TARGET)Submit # ignore the test outcome for now # ! [ -f $(QGIS_BUILDDIR)/.error ] else @echo Skipping tests. endif override_dh_auto_install: DESTDIR=$(CURDIR)/debian/tmp ninja $(NINJA_OPTS) -C $(QGIS_BUILDDIR) 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 $(RM) $(CURDIR)/debian/tmp/usr/bin/qgis_wcstest $(RM) $(CURDIR)/debian/tmp/usr/bin/qgis_bench $(RM) $(CURDIR)/debian/tmp/usr/share/qgis/resources/wcs-servers.json # 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 # 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 # 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 $(RM) $(CURDIR)/debian/tmp/usr/bin/qgis # qgis binary wrappers install -o root -g root -m 755 $(CURDIR)/debian/qgis.sh $(CURDIR)/debian/qgis/usr/bin/qgis # 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 override_dh_install: dh_install --autodest --list-missing override_dh_installchangelogs: dh_installchangelogs ChangeLog override_dh_installman: cp qgis.1 qgis.bin.1 dh_installman -pqgis qgis.1 qgis.bin.1 override_dh_installmime: dh_installmime -pqgis override_dh_python3: dh_python3 dh_python3 usr/share/qgis/grass/scripts dh_sip3 -ppython3-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)"