1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
#!/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)
|