#!/usr/bin/make -f

DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/default.mk
include /usr/share/dpkg/architecture.mk

DEB_SOURCE_PACKAGE := $(strip $(shell egrep '^Source: ' debian/control | cut -f 2 -d ':'))
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 )) )

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

# Allow test programs that use OpenMPI to run
export OMPI_MCA_plm_rsh_agent=/bin/false
export OMPI_MCA_btl_base_warn_component_unused=0

include /usr/share/mpi-default-dev/debian_defaults
ENABLE_MPI=ON
ifeq ($(findstring $(DEB_BUILD_ARCH),$(OPENMPI_ARCHITECTURES)),)
MPIEXEC_PARAMS=
else
MPIEXEC_PARAMS=--oversubscribe
endif

DOLFINX_HOME = $(CURDIR)/$(DEB_SRCDIR)
USCAN_DESTDIR := $(CURDIR)
PY3VERS := $(shell py3versions --requested debian/control | tac -s' ')
PYVERS = $(PY3VERS)

BUILDDIR_REAL = $(CURDIR)/obj-$(DEB_HOST_GNU_TYPE)-real
BUILDDIR_COMPLEX = $(CURDIR)/obj-$(DEB_HOST_GNU_TYPE)-complex

NPROC := $(shell nproc)
PARALLEL = $(subst parallel=,,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
N_CPU    = $(or $(PARALLEL),$(NPROC),1)
# MPI tests are set up to run on 3 processes. Spread them leanly over the available processors (don't have more than 2 tests using one processor).
# e.g. run 1 MPI test at a time over 1-3 processors, or 2 tests at a time over 4-6 processors, or 3 tests over 7-9 processors, etc.
N_MPI := 3
N_MPI_TESTS = $(shell echo $$(( ($(N_CPU)+$(N_MPI)-1)/$(N_MPI) )) )

ifeq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
  RUNTEST=no
endif

# hyperelasticity fails (diverges) on all arches (pivot factors too large, not enough memory assigned)
# elastodynamics passes with dpkg-buildpackage but fails with pdebuild (on amd64). Unreliable, so skip.
ARCH_ALL_SKIP_MPI_TEST = demo_hyperelasticity_mpi demo_elastodynamics_mpi

# Some arches fail the same MPI tests
# e.g. cahn-hilliard, navier-stokes, elasticity, fails or exceeds allowed time
# So skip these tests on the failing arches
ARCH_SKIP_MPI_TEST_LIST = i386 ppc64el ia64
ARCH_SKIP_MPI_TEST = demo_cahn-hilliard_mpi demo_navier-stokes_mpi demo_elasticity_mpi

# skip more MPI tests for some specific arches
ifeq (arm64, $(DEB_HOST_ARCH))
  ARCH_SPECIFIC_SKIP_MPI_TEST = demo_navier-stokes_mpi
else ifeq (mips, $(DEB_HOST_ARCH))
  ARCH_SPECIFIC_SKIP_MPI_TEST = demo_cahn-hilliard_mpi demo_stokes-iterative_mpi demo_ale_mpi demo_poisson-disc_mpi
else ifeq (mipsel, $(DEB_HOST_ARCH))
  ARCH_SPECIFIC_SKIP_MPI_TEST = demo_cahn-hilliard_mpi demo_stokes-iterative_mpi demo_ale_mpi demo_poisson-disc_mpi
else ifeq (ppc64el, $(DEB_HOST_ARCH))
  ARCH_SPECIFIC_SKIP_MPI_TEST = demo_poisson_mpi demo_singular-poisson_mpi demo_sym-dirichlet-bc_mpi
else ifeq (ia64, $(DEB_HOST_ARCH))
  ARCH_SPECIFIC_SKIP_MPI_TEST = demo_bcs_mpi demo_biharmonic_mpi demo_built-in-meshes_mpi demo_eigenvalue_mpi
else
  ARCH_SPECIFIC_SKIP_MPI_TEST =
endif

# m68k and mips need some help to pass serial tests
ifeq (m68k, $(DEB_HOST_ARCH))
  ARCH_SPECIFIC_SKIP_SERIAL_TEST = demo_auto-adaptive-poisson_serial demo_elasticity_serial
else ifeq (mips, $(DEB_HOST_ARCH))
  ARCH_SPECIFIC_SKIP_SERIAL_TEST = demo_cahn-hilliard_serial demo_hyperelasticity_serial
else
  ARCH_SPECIFIC_SKIP_SERIAL_TEST =
endif

# skip slow tests (> 500-1000 sec to complete)
ifeq (armel, $(DEB_HOST_ARCH))
  ARCH_SKIP_SLOW_TEST = demo_stokes-iterative_serial demo_auto-adaptive-navier-stokes_serial demo_hyperelasticity_serial demo_cahn-hilliard_serial
else ifeq (mips, $(DEB_HOST_ARCH))
  ARCH_SKIP_SLOW_TEST = demo_eigenvalue_serial demo_navier-stokes_serial demo_auto-adaptive-poisson_serial demo_stokes-taylor-hood_serial demo_auto-adaptive-navier-stokes_serial demo_curl-curl_serial demo_elasticity_serial demo_stokes-iterative_serial demo_eval_serial demo_sym-dirichlet-bc_serial demo_elastodynamics_serial demo_eigenvalue_mpi demo_navier-stokes_mpi demo_curl-curl_mpi demo_elasticity_mpi demo_elastodynamics_mpi demo_sym-dirichlet-bc_mpi
else ifeq (mipsel, $(DEB_HOST_ARCH))
  ARCH_SKIP_SLOW_TEST = demo_cahn-hilliard_serial demo_hyperelasticity_serial
else ifeq (hppa, $(DEB_HOST_ARCH))
  ARCH_SKIP_SLOW_TEST = demo_cahn-hilliard_serial demo_hyperelasticity_serial
else ifeq (m68k, $(DEB_HOST_ARCH))
  ARCH_SKIP_SLOW_TEST = demo_cahn-hilliard_serial demo_hyperelasticity_serial
else ifeq (riscv64, $(DEB_HOST_ARCH))
  ARCH_SKIP_SLOW_TEST = demo_cahn-hilliard_serial demo_hyperelasticity_serial demo_cahn-hilliard_mpi demo_elastodynamics_mpi
else ifeq (sparc64, $(DEB_HOST_ARCH))
  ARCH_SKIP_SLOW_TEST = demo_cahn-hilliard_serial demo_hyperelasticity_serial demo_stokes-iterative_serial demo_cahn-hilliard_mpi demo_elastodynamics_mpi
else
  ARCH_SKIP_SLOW_TEST =
endif

# other arches fail or time out on too many tests, so skip all their MPI tests
ARCH_SKIP_ALL_MPI_TESTS_LIST=armel armhf i386 hppa m68k powerpc

# some arches just aren't keeping up at all, and fail non-MPI tests
ARCH_SKIP_ALL_TESTS_LIST = mips64el hurd-i386 m68k sh4

# 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_BASE=/usr/lib/petscdir/petsc$(PETSC_VERSION)/$(DEB_HOST_MULTIARCH)
SLEPC_DIR_BASE=/usr/lib/slepcdir/slepc$(SLEPC_VERSION)/$(DEB_HOST_MULTIARCH)
export PETSC_DIR_REAL=$(PETSC_DIR_BASE)-real
SLEPC_DIR_REAL=$(SLEPC_DIR_BASE)-real
export PETSC_DIR_COMPLEX=$(PETSC_DIR_BASE)-complex
SLEPC_DIR_COMPLEX=$(SLEPC_DIR_BASE)-complex


DEB_CXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS)

CMAKE_OPTS := \
	-D CMAKE_BUILD_TYPE:STRING=RelWithDebInfo \
	-D BUILD_SHARED_LIBS:BOOL=ON \
	-D CMAKE_SKIP_RPATH:BOOL=ON \
	-D CMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=OFF \
	-D DOLFINX_ENABLE_TRILINOS:BOOL=OFF \
	-D DOLFINX_ENABLE_HDF5:BOOL=ON \
	-D HDF5_C_COMPILER_EXECUTABLE:FILEPATH=/usr/bin/h5pcc \
	-D DOLFINX_ENABLE_PARMETIS:BOOL=OFF \
	-D DOLFINX_ENABLE_SCOTCH:BOOL=ON \
	-D DOLFINX_ENABLE_DOCS:BOOL=OFF \
	-D DOLFINX_ENABLE_MPI:BOOL=$(ENABLE_MPI) \
	-D MPIEXEC_PARAMS:STRING="$(MPIEXEC_PARAMS)" \
	-D CMAKE_CXX_FLAGS:STRING="-fpermissive" \
	-D DOLFINX_EXTRA_CXX_FLAGS:STRING="$(DEB_CXXFLAGS)"

%:
	dh $@ --buildsystem=cmake --with python3,sphinxdoc

override_dh_compress:
	dh_compress -X.py -X.cpp -X.h -X.pdf -X.ufl

override_dh_auto_clean:
	dh_auto_clean --builddir=$(BUILDDIR_REAL)
	dh_auto_clean --builddir=$(BUILDDIR_COMPLEX)
	rm -f cpp/dolfinx/common/version.h \
	     cpp/demo/hyperelasticity/CMakeLists.txt \
	     cpp/demo/poisson/CMakeLists.txt

override_dh_auto_configure:
	PETSC_DIR=$(PETSC_DIR_REAL) SLEPC_DIR=$(SLEPC_DIR_REAL) dh_auto_configure --builddir=$(BUILDDIR_REAL) -- $(CMAKE_OPTS) $(CURDIR)/cpp
	PETSC_DIR=$(PETSC_DIR_COMPLEX) SLEPC_DIR=$(SLEPC_DIR_COMPLEX) dh_auto_configure --builddir=$(BUILDDIR_COMPLEX) -- $(CMAKE_OPTS) $(CURDIR)/cpp

override_dh_auto_build:
	PETSC_DIR=$(PETSC_DIR_REAL) SLEPC_DIR=$(SLEPC_DIR_REAL) dh_auto_build --builddir=$(BUILDDIR_REAL)
	PETSC_DIR=$(PETSC_DIR_COMPLEX) SLEPC_DIR=$(SLEPC_DIR_COMPLEX) dh_auto_build --builddir=$(BUILDDIR_COMPLEX)

override_dh_auto_test-arch:
	echo "Tests must be run after installation"

override_dh_auto_test-indep:

override_dh_auto_install-real:
	dh_auto_install --builddir=$(BUILDDIR_REAL) --destdir=debian/tmp-real
	for build in real; do \
	  for v in $(PYVERS); do \
	      cd python; \
	      PATH=$(CURDIR)/debian/tmp-$${build}/usr/bin:$$PATH \
	      PETSC_DIR=$(PETSC_DIR_BASE)-$${build} SLEPC_DIR=$(SLEPC_DIR_BASE)-$${build} \
	      CXXFLAGS="$(DEB_CXXFLAGS) -isystem $(CURDIR)/debian/tmp-$${build}/usr/include" \
	      VERBOSE=1 \
	      $$v setup.py build --build-base=build-$${build} install --root=$(CURDIR)/debian/tmp-$${build} --install-layout=deb; \
	      cd ..; \
	  done; \
	done

override_dh_auto_install-indep: override_dh_auto_install-real
	dh_auto_install -i --builddir=$(BUILDDIR_COMPLEX) --destdir=debian/tmp-complex
	(cd cpp/doc; doxygen)
	(cd python/doc; \
	  python3 ../demo/generate-demo-files.py; \
	  mkdir -p build/pkgconfig; \
	  cp $(CURDIR)/debian/tmp-real/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig/dolfinx_real.pc build/pkgconfig; \
	  sed "s|prefix=/usr|prefix=$(CURDIR)/debian/tmp-real/usr|" -i build/pkgconfig/dolfinx_real.pc; \
	  PYTHONPATH=$(CURDIR)/debian/tmp-real/usr/lib/python3/dist-packages \
	    PKG_CONFIG_PATH=`pwd`/build/pkgconfig:$${PKG_CONFIG_PATH} \
	    LD_LIBRARY_PATH=$(CURDIR)/debian/tmp-real/usr/lib/$(DEB_HOST_MULTIARCH)/:$${LD_LIBRARY_PATH} \
	    RDMAV_FORK_SAFE=1 \
	    make html; \
	  find ../demo/ -name *.py.rst | xargs rm)
	dh_numpy3 -i

override_dh_auto_install-arch: override_dh_auto_install-real
	dh_auto_install -a --builddir=$(BUILDDIR_COMPLEX) --destdir=debian/tmp-complex
	dh_numpy3 -a
	for build in complex; do \
	  for v in $(PYVERS); do \
	      cd python; \
	      PATH=$(CURDIR)/debian/tmp-$${build}/usr/bin:$$PATH \
	      PETSC_DIR=$(PETSC_DIR_BASE)-$${build} SLEPC_DIR=$(SLEPC_DIR_BASE)-$${build} \
	      CXXFLAGS="$(DEB_CXXFLAGS) -isystem $(CURDIR)/debian/tmp-$${build}/usr/include" \
	      VERBOSE=1 \
	      $$v setup.py build --build-base=build-$${build} install --root=$(CURDIR)/debian/tmp-$${build} --install-layout=deb; \
	      cd ..; \
	  done; \
	done
	chrpath -d $(CURDIR)/debian/tmp*/usr/lib/python*/dist-packages/dolfinx/*.so
	sed -i "s/-D_FORTIFY_SOURCE=2//g" $(CURDIR)/debian/tmp*/usr/lib/$(DEB_BUILD_MULTIARCH)/pkgconfig/dolfinx*.pc
	sed -i "s|-DNDEBUG||g" $(CURDIR)/debian/tmp*/usr/lib/$(DEB_BUILD_MULTIARCH)/pkgconfig/dolfinx*.pc
	
	if [ "x$(RUNTEST)" != "xno" ]; then \
	  case " $(ARCH_SKIP_ALL_TESTS_LIST) " in \
	    *\ $(DEB_HOST_ARCH)\ *) echo "ALL tests have been disabled on $(DEB_HOST_ARCH)";; \
	    *) set -e; \
	       export CTEST_OUTPUT_ON_FAILURE=1; \
	       for build in real complex; do \
	         echo "== testing $$build number build =="; \
	         builddir=$(CURDIR)/obj-$(DEB_HOST_GNU_TYPE)-$${build}; \
	         for mytest in test/unit  demo; do \
	           echo "running tests from $$mytest for $$build build"; \
	           test_srcdir=$${builddir}/$${mytest}; \
	           testdir=$${builddir}/runtests-`basename $$mytest`-$${build}; \
	           rm -rf $$testdir; mkdir $$testdir; \
	           cd $$testdir; \
	           PETSC_DIR=$(PETSC_DIR_BASE)-$${build} SLEPC_DIR=$(SLEPC_DIR_BASE)-$${build}  cmake  -DCMAKE_MODULE_PATH=$(CURDIR)/debian/tmp-$${build}/usr/lib/$(DEB_BUILD_MULTIARCH)/cmake/dolfinx \
	                                                                                               -DDOLFINX_DIR=$(CURDIR)/debian/tmp-$${build}/usr/lib/$(DEB_BUILD_MULTIARCH)/cmake/dolfinx \
	                                                                                               -DMPIEXEC_PARAMS:STRING="$(MPIEXEC_PARAMS)" \
	                                                                                               $${test_srcdir} ; \
	           make all  VERBOSE=1; \
	           OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 make test VERBOSE=1; \
	         done; \
	         cd $(CURDIR); \
	       done; \
	  esac; \
	fi

override_dh_install-indep:
	dh_install -i
	sed "s|/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/dolfinx|/usr/share/dolfinx/cmake|g" \
          -i debian/libdolfinx-dev/usr/share/dolfinx/cmake/DOLFINXConfig.cmake debian/libdolfinx-dev/usr/share/dolfinx/cmake/DOLFINXTargets.cmake
	sed "0,/^get_filename_component(_IMPORT_PREFIX \"\$${_IMPORT_PREFIX}\" PATH)/{/^get_filename_component(_IMPORT_PREFIX \"\$${_IMPORT_PREFIX}\" PATH)/d}" \
          -i debian/libdolfinx-dev/usr/share/dolfinx/cmake/DOLFINXTargets.cmake
	sed "s/set(CMAKE_IMPORT_FILE_VERSION 1)/set(CMAKE_IMPORT_FILE_VERSION 1)\n\nif(PETSC_SCALAR_COMPLEX)\n  set(LIB_NAME_EXT \"_complex\")\nelse()\n  set(LIB_NAME_EXT \"_real\")\nendif()/; \
          s/libdolfinx_real.so/libdolfinx\$${LIB_NAME_EXT}.so/g; s/$(DEB_HOST_MULTIARCH)/\$${CMAKE_LIBRARY_ARCHITECTURE}/g" \
          -i debian/libdolfinx-dev/usr/share/dolfinx/cmake/DOLFINXTargets-relwithdebinfo.cmake
	sed "s/$(DEB_HOST_MULTIARCH)/\$${CMAKE_LIBRARY_ARCHITECTURE}/g" \
          -i debian/libdolfinx-dev/usr/share/dolfinx/cmake/DOLFINXTargets.cmake
	sed "/^# if the installed project requested no architecture check, don't perform the check/ {  n; s/if(\"FALSE\")/if(\"TRUE\")/  }" \
          -i debian/libdolfinx-dev/usr/share/dolfinx/cmake/DOLFINXConfigVersion.cmake

override_dh_python3-arch:
	dh_python3 -a
	dh_numpy3 -a
	mkdir -p debian/python3-dolfinx-real/$(PETSC_DIR_REAL)/lib
	mv debian/python3-dolfinx-real/usr/lib/python3  debian/python3-dolfinx-real/$(PETSC_DIR_REAL)/lib
	rm -rf debian/python3-dolfinx-real/$(PETSC_DIR_REAL)/lib/python3/dist-packages/dolfinx_utils
	mkdir -p debian/python3-dolfinx-complex/$(PETSC_DIR_COMPLEX)/lib
	mv debian/python3-dolfinx-complex/usr/lib/python3  debian/python3-dolfinx-complex/$(PETSC_DIR_COMPLEX)/lib
	rm -rf debian/python3-dolfinx-complex/$(PETSC_DIR_COMPLEX)/lib/python3/dist-packages/dolfinx_utils

# set petsc:Depends to something like "libpetsc-real3.8-dev, libslepc-real3.8-dev, python-petsc4py (>= 3.8), python-petsc4py (<< 3.9), python-slepc4py (>= 3.8), python-slepc4py (<< 3.9)"
PETSC_DEV_DEPENDS="libpetsc-real$(PETSC_VERSION)-dev, libslepc-real$(SLEPC_VERSION)-dev"
PETSC_COMPLEX_DEV_DEPENDS="libpetsc-complex$(PETSC_VERSION)-dev, libslepc-complex$(SLEPC_VERSION)-dev"
# slepc4py version must match petsc4py (using the PETSc minor version, not the patch release)
PETSC4PY_DEPENDS_PY3=python3-petsc4py, python3-slepc4py, python3-petsc4py-real (>= $(PETSC_VERSION)), python3-petsc4py-real (<< $(PETSC_VERSION_NEXT)), python3-slepc4py-real (>= $(SLEPC_VERSION)), python3-slepc4py-real (<< $(SLEPC_VERSION_NEXT))
PETSC4PY_COMPLEX_DEPENDS_PY3=python3-petsc4py, python3-slepc4py, python3-petsc4py-complex (>= $(PETSC_VERSION)), python3-petsc4py-complex (<< $(PETSC_VERSION_NEXT)), python3-slepc4py-complex (>= $(SLEPC_VERSION)), python3-slepc4py-complex (<< $(SLEPC_VERSION_NEXT))
override_dh_gencontrol:
	echo "python3-petsc4py-real:Depends=$(PETSC4PY_DEPENDS_PY3)" >> debian/python3-dolfinx-real.substvars
	echo "python3-petsc4py-complex:Depends=$(PETSC4PY_COMPLEX_DEPENDS_PY3)" >> debian/python3-dolfinx-complex.substvars
	echo "python-petsc4py-alt:Depends=$(PETSC4PY_DEPENDS_PY3)" >> debian/libdolfinx-dev.substvars
	dh_gencontrol -- -Vpetsc:Depends=$(PETSC_DEV_DEPENDS) -Vpetsc-complex:Depends=$(PETSC_COMPLEX_DEV_DEPENDS) -Vfenics:Upstream-Version=$(FENICS_VERSION).0~git20210116 -Vfenics:Next-Upstream-Version=$(FENICS_NEXT_VERSION)~ \
	    -Vpybind11:Upstream-Version=$(PYBIND11_VERSION) -Vpybind11:Next-Upstream-Version=$(PYBIND11_NEXT_VERSION)

# dbgsym-migration was introduced for dolfin 2017.2 (don't update the version to a later version)
override_dh_strip:
	dh_strip --package=libdolfinx-real$(FENICS_VERSION) -Xcomplex -Xpython
	dh_strip --package=libdolfinx-complex$(FENICS_VERSION) -Xreal -Xpython
	dh_strip --package=python3-dolfinx-real

override_dh_sphinxdoc-indep:
	dh_sphinxdoc -i
	grep "https://cdn.mathjax.org/mathjax/latest/MathJax.js" debian/dolfinx-doc/usr/share/doc/dolfinx-doc/* -r --files-with-matches | xargs sed "s|src=\"https://cdn.mathjax.org/mathjax/latest/MathJax.js|src=\"file:///usr/share/javascript/mathjax/MathJax.js|g" -i
	grep "https://cdnjs.cloudflare.com/ajax/libs/mathjax/.*/latest.js" debian/dolfinx-doc/usr/share/doc/dolfinx-doc/* -r --files-with-matches | xargs sed "s|src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/.*/latest.js|src=\"file:///usr/share/javascript/mathjax/unpacked/latest.js|g" -i

# python module so files are already stripped by setup.py (setuptools)
override_dh_dwz:
	dh_dwz -Xcpp.cpython

# https://stackoverflow.com/a/18793112/353337
override_dh_shlibdeps:
	dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info


.PHONY: get-orig-source override_dh_strip
get-orig-source:
	uscan --force-download --verbose --destdir $(USCAN_DESTDIR)
