#!/usr/bin/make -f include /usr/share/dpkg/architecture.mk MSHR_HOME = $(CURDIR)/$(DEB_SRCDIR) USCAN_DESTDIR := $(CURDIR) PY3VERS := $(shell py3versions --requested debian/control | tac -s' ') PYVERS = $(PY3VERS) DEB_VERSION := $(shell dpkg-parsechangelog | egrep '^Version:' | cut -f 2 -d ' ') DEB_NOEPOCH_VERSION := $(shell echo $(DEB_VERSION) | cut -d: -f2-) DEB_UPSTREAM_VERSION := $(shell echo $(DEB_NOEPOCH_VERSION) | sed 's/-[^-]*$$//') DEB_STRIPPED_UPSTREAM_VERSION = $(shell echo $(DEB_UPSTREAM_VERSION) | sed -e 's/\+dfsg.*$$//p') FENICS_RELEASE_VERSION=$(DEB_STRIPPED_UPSTREAM_VERSION) FENICS_MAJOR_VERSION=$(shell echo $(FENICS_RELEASE_VERSION) | sed "s/^\([^.]*\)\..*$$/\1/") FENICS_MINOR_VERSION=$(shell echo $(FENICS_RELEASE_VERSION) | sed "s/^\([^.]*\)\.\([^.]*\)\..*$$/\2/") FENICS_VERSION=$(FENICS_MAJOR_VERSION).$(FENICS_MINOR_VERSION) FENICS_NEXT_VERSION=$(FENICS_MAJOR_VERSION).$(shell echo $$(( $(FENICS_MINOR_VERSION) + 1 )) ) # dolfin depends on the pybind11 version it was built against, # if pybind11.h will be used in C++ code fragments in python scripts. # But pybind11 follows semantic versioning, so should have backwards compatibility # with minor and patch version updates. # Extract pybind11 version from pybind11-dev PYBIND11_DEB_VERSION=$(shell dpkg -s pybind11-dev | awk '/Version:/ {print $$2}') # extract the current pybind11 version X.Y.Z (drop epoch and debian package version) PYBIND11_UPSTREAM_VERSION=$(shell echo $(PYBIND11_DEB_VERSION) | sed "s/^.[^:]*://; s/-[^-]*$$//") PYBIND11_X_VERSION=$(shell echo $(PYBIND11_UPSTREAM_VERSION) | sed "s/^\([^.]*\).*/\1/") PYBIND11_X_Y_VERSION=$(shell echo $(PYBIND11_UPSTREAM_VERSION) | sed "s/^\(.*\)\.\([^.]*\)$$/\1/") PYBIND11_VERSION=$(PYBIND11_X_Y_VERSION) PYBIND11_NEXT_VERSION=$(shell echo $$(( $(PYBIND11_X_VERSION) + 1 )) ) # extract PETSc version from petsc-dev PETSC_DEB_VERSION=$(shell dpkg -s petsc-dev | awk '/Version:/ {print $2}') # extract the current PETSc version PETSC_UPSTREAM_VERSION=$(shell pkg-config --modversion PETSc) # "Major" version is the first number in the upstream version (major.minor.release) PETSC_MAJOR_VERSION=$(shell echo $(PETSC_UPSTREAM_VERSION) | sed "s/^\([^.]*\)\..*$$/\1/") # "Minor" version is the second number in the upstream version (major.minor.release) PETSC_MINOR_VERSION=$(shell echo $(PETSC_UPSTREAM_VERSION) | sed "s/^\([^.]*\)\.\([^.]*\)\..*$$/\2/") PETSC_VERSION=$(PETSC_MAJOR_VERSION).$(PETSC_MINOR_VERSION) PETSC_VERSION_NEXT=$(shell echo $(PETSC_MAJOR_VERSION).$$(($(PETSC_MINOR_VERSION)+1))) SLEPC_UPSTREAM_VERSION=$(shell pkg-config --modversion SLEPc) # SLEPc version must match PETSc SLEPC_VERSION=$(PETSC_VERSION) SLEPC_VERSION_NEXT=$(PETSC_VERSION_NEXT) PETSC_DIR=/usr/lib/petscdir/petsc$(PETSC_VERSION)/$(DEB_HOST_MULTIARCH)-real SLEPC_DIR=/usr/lib/slepcdir/slepc$(SLEPC_VERSION)/$(DEB_HOST_MULTIARCH)-real PETSC64_DIR=/usr/lib/petscdir/petsc64-$(PETSC_VERSION)/$(DEB_HOST_MULTIARCH)-real SLEPC64_DIR=/usr/lib/slepcdir/slepc64-$(SLEPC_VERSION)/$(DEB_HOST_MULTIARCH)-real BUILDDIR = obj-$(DEB_HOST_GNU_TYPE) BUILDDIR_64 = obj-$(DEB_HOST_GNU_TYPE)-64 MSHR_LIBDIR = /usr/lib/mshr MSHR64_LIBDIR = /usr/lib/mshr64 # some arches (mostly 32 bit) don't provide enough memory to build with debug symbols ARCH_NO_DEBUG_SYMBOLS := armhf i386 mips64el mipsel hppa m68k powerpc x32 ifeq ($(findstring $(DEB_BUILD_ARCH),$(ARCH_NO_DEBUG_SYMBOLS)),) MSHR_BUILDFLAGS := $(shell dpkg-buildflags --get CXXFLAGS ) else # remove -g from build flags on weak arches MSHR_BUILDFLAGS := $(shell dpkg-buildflags --get CXXFLAGS | sed 's/-g //' ) endif CMAKE_OPTS := \ -D CMAKE_BUILD_TYPE:STRING=Release \ -D BUILD_SHARED_LIBS:BOOL=ON \ -D USE_SYSTEM_CGAL:BOOL=ON \ -D USE_SYSTEM_TETGEN:BOOL=ON \ -D ENABLE_MSHRABLE:BOOL=ON \ -D CMAKE_SKIP_RPATH:BOOL=ON \ -D CMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=OFF \ -D INSTALL_LIB_DIR:PATH=lib/$(DEB_BUILD_MULTIARCH) \ -D CMAKE_CXX_FLAGS:STRING="-fpermissive $(MSHR_BUILDFLAGS)" \ $(MSHR_HOME) ifeq (,$(DISTRIBUTION)) DISTRIBUTION := $(shell dpkg-parsechangelog --format rfc822 | sed -ne "s/^Distribution: //p") endif ifneq ($(DISTRIBUTION),$(findstring $(DISTRIBUTION),"squeeze wheezy lucid maverick natty oneiric precise quantal raring saucy trusty")) DISTRIBUTION := sid endif %: dh $@ --buildsystem=cmake \ --with python3 \ --no-parallel override_dh_auto_clean: dh_auto_clean rm -rf python/build* rm -rf python/mshr.egg-info rm -rf debian/tmp64 rm -rf $(BUILDDIR) $(BUILDDIR_64) override_dh_auto_configure: PETSC_DIR=$(PETSC_DIR) SLEPC_DIR=$(SLEPC_DIR) dh_auto_configure --builddir=$(BUILDDIR) -- $(CMAKE_OPTS) PETSC_DIR=$(PETSC64_DIR) SLEPC_DIR=$(SLEPC64_DIR) dh_auto_configure --builddir=$(BUILDDIR_64) -- $(CMAKE_OPTS) -DLIB_NAME_EXT="64" -DDOLFIN_LIB_NAME_EXT="64" override_dh_auto_build: PETSC_DIR=$(PETSC_DIR) SLEPC_DIR=$(SLEPC_DIR) dh_auto_build --builddir=$(BUILDDIR) PETSC_DIR=$(PETSC64_DIR) SLEPC_DIR=$(SLEPC64_DIR) dh_auto_build --builddir=$(BUILDDIR_64) override_dh_auto_install: dh_auto_install --builddir=$(BUILDDIR) --destdir=debian/tmp dh_auto_install --builddir=$(BUILDDIR_64) --destdir=debian/tmp64 set -e; \ for v in $(PYVERS); do \ cd python; \ PETSC_DIR=$(PETSC_DIR) SLEPC_DIR=$(SLEPC_DIR) \ CMAKE_PREFIX_PATH=$(CURDIR)/debian/tmp/usr \ $$v setup.py build --build-base=$(CURDIR)/python/build-$$v install --root=$(CURDIR)/debian/tmp --install-layout=deb; \ PETSC_DIR=$(PETSC64_DIR) SLEPC_DIR=$(SLEPC64_DIR) \ CMAKE_PREFIX_PATH=$(CURDIR)/debian/tmp64/usr MSHR_LIB_NAME_EXT="64" DOLFIN_LIB_NAME_EXT="64" \ $$v setup.py build --build-base=$(CURDIR)/python/build64-$$v install --root=$(CURDIR)/debian/tmp64 --install-layout=deb; \ cd ..; \ done dh_numpy3 override_dh_python3-arch: dh_python3 -a dh_numpy3 -a mkdir -p debian/python3-mshr-real/$(MSHR_LIBDIR) mv debian/python3-mshr-real/usr/lib/python3 debian/python3-mshr-real/$(MSHR_LIBDIR) mkdir -p debian/python3-mshr64-real/$(MSHR64_LIBDIR) mv debian/python3-mshr64-real/usr/lib/python3 debian/python3-mshr64-real/$(MSHR64_LIBDIR) override_dh_gencontrol: dh_gencontrol -- -Vfenics:Upstream-Version=$(FENICS_VERSION) \ -Vpybind11:Upstream-Version=$(PYBIND11_VERSION) -Vpybind11:Next-Upstream-Version=$(PYBIND11_NEXT_VERSION) # debug symbols (-g) have been switched off in CMAKE_OPTS for some arches, so no point building dbgsym packages override_dh_strip: case " $(ARCH_NO_DEBUG_SYMBOLS) " in \ *\ $(DEB_HOST_ARCH)\ *) dh_strip --no-automatic-dbgsym;; \ *) dh_strip;; \ esac override_dh_dwz: case " $(ARCH_NO_DEBUG_SYMBOLS) " in \ *\ $(DEB_HOST_ARCH)\ *) echo "skipping dh_dwz since debug symbols (-g) have been switched off for $(DEB_HOST_ARCH)";; \ *) dh_dwz;; \ esac #override_dh_shlibdeps: # dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info .PHONY: get-orig-source get-orig-source: uscan --force-download --verbose --destdir $(USCAN_DESTDIR)