Bug#990290: petsc: add support for 64-bit integer lapack/blas

Giacomo Mulas giacomo.mulas at inaf.it
Thu Jun 24 18:05:23 BST 2021


Source: petsc
Version: 3.14.5+dfsg1-4
Severity: wishlist
Tags: patch

Dear Maintainer,

I am the developer of a quantum chemistry code that deals with very large
matrices.  As such, it uses at the same time slepc/petsc, scalapack, and
elpa libraries.  Since matrices may easily become larger than the maximum
size that can be indexed by standard scalapack (and underlying blas/lapack),
I need to use the versions with long integer indices (i.e.  lapack64,
blas64, mkl scalapack with ilp64 interface), as well as a custom compiled
version of elpa, also with support for the same versions of lapack/blas
(i.e.  compiled with the --64bit-integer-math-support configure option).  Of
course, I cannot link the same code with two different versions of
lapack/blas, so I also need to compile petsc so that it uses the same
versions of lapack/blas.  Luckily, recent versions of the upstream package
do support this, with the --with-64-bit-indices and
--with-64-bit-blas-indices configure options.

Now, since the current debian/rules already has all the machinery to produce
the "petsc64" versions of all packages, using only the --with-64-bit-indices
option, I thought I might hack it to also produce additional real packages
also with the --with-64-bit-blas-indices option, producing additional
packages that can coexist smootly with the other ones.

The quick (and partial) hack that I put together successfully did the trick,
producing real interface petsc libraries that passed all the tests and
appear to work without problems.  I am sending you all the modified/added
files, in case you may want to add official support for this in debian, in
some future.  The hacked version also enables cuda in my custom compiled
packages (not the 64bit blas ones), which would be a welcome addition as
well (for me).

Let me know if this is of any use, and/or if I may help producing a more
complete and cleaner version of this.


Best regards, and thanks for all the great work.
Giacomo Mulas

-- System Information:
Debian Release: 11.0
  APT prefers unstable
  APT policy: (401, 'unstable'), (10, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 5.10.0-7-amd64 (SMP w/12 CPU threads)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=it_IT.UTF-8, LC_CTYPE=it_IT.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

debian/rules:

#!/usr/bin/make -f
# See debhelper(7) (uncomment to enable)
# output every command that modifies files on the build system.
#export DH_VERBOSE = 1

# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/*
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/default.mk

DEB_SOURCE_PACKAGE := $(strip $(shell egrep '^Source: ' debian/control | cut -f 2 -d ':'))
DEB_VERSION := $(shell dpkg-parsechangelog -S Version)
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.*$$//' )

# see FEATURE AREAS in dpkg-buildflags(1)
#export DEB_BUILD_MAINT_OPTIONS = hardening=+all

# see ENVIRONMENT in dpkg-buildflags(1)
# package maintainers to append FLAGS
export DEB_CFLAGS_MAINT_APPEND  = -fPIC
export DEB_CXXFLAGS_MAINT_APPEND  = -fPIC
export DEB_FFLAGS_MAINT_APPEND  = -fPIC -ffree-line-length-0
export DEB_FCFLAGS_MAINT_APPEND  = $(DEB_FFLAGS_MAINT_APPEND)
export DEB_LDFLAGS_MAINT_APPEND = -fPIC

# keep the build dir (in the -fdebug-prefix-map flag) out of the installed config files,
# by applying the flag only at build time not configure time
export CFLAGS_NO_DEBUG_PREFIX_MAP := $(shell echo $(CFLAGS) | sed "s/ -fdebug-prefix-map=[^ ]* / /" )
export CFLAGS_DEBUG_PREFIX_MAP := $(shell echo $(CFLAGS) | sed -n "s/^.*\(-fdebug-prefix-map=[^ ]*\) .*$$/\1/p" )
export CXXFLAGS_NO_DEBUG_PREFIX_MAP := $(shell echo $(CXXFLAGS) | sed "s/ -fdebug-prefix-map=[^ ]* / /" )
export CXXFLAGS_DEBUG_PREFIX_MAP := $(shell echo $(CXXFLAGS) | sed -n "s/^.*\(-fdebug-prefix-map=[^ ]*\) .*$$/\1/p" )
export FCFLAGS_NO_DEBUG_PREFIX_MAP := $(shell echo $(FCFLAGS) | sed "s/ -fdebug-prefix-map=[^ ]* / /" )
export FCFLAGS_DEBUG_PREFIX_MAP := $(shell echo $(FCFLAGS) | sed -n "s/^.*\(-fdebug-prefix-map=[^ ]*\) .*$$/\1/p" )
export FFLAGS_NO_DEBUG_PREFIX_MAP := $(shell echo $(FFLAGS) | sed "s/ -fdebug-prefix-map=[^ ]* / /" )
export FFLAGS_DEBUG_PREFIX_MAP := $(shell echo $(FFLAGS) | sed -n "s/^.*\(-fdebug-prefix-map=[^ ]*\) .*$$/\1/p" )

# Overriding this with "contrib" attempts to link with parmetis (unimplemented).
DEBIAN_DIST=main

export DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)

# On Alpha, override this with debian/rules PETSC_ARCH=linux_alpha_dec binary
# to build PETSc libs with the Compaq compilers, though that requires at least:
# libots, cpml-ev(5|6), cxml-ev(5|6), cfal and ccc.
# Note that only arch-dependent .debs are generated when you do this.
PETSC_ARCH=$(DEB_HOST_MULTIARCH)

CPU_COUNT := $(shell /usr/bin/nproc )
export DEB_BUILD_OPTIONS ?= parallel=$(CPU_COUNT)

# This defines the MPI implementation to use.  The easiest way to override this
# default is to specify while building, e.g. debian/rules PETSC_MPI=lam binary.
# Again, only arch-dependent .debs are generated when you do this.
# Note that as of PETSc 2.3.0 this only specifies the name of the PETSc
# packages, the implementation is chosen by BuildSystem according to what's
# available at build time.
include /usr/share/mpi-default-dev/debian_defaults
PETSC_MPI=$(ARCH_DEFAULT_MPI_IMPL)

# PETSc has a tight dependency on the MPI minor version:
# the Major.Minor version of the current MPI must match the one that
# PETSc was built against, see /usr/lib/petscdir/*/x86_64-linux-gnu-real/include/petscsys.h
# Define the required version here:
MPI_DEPENDS=$(shell debian/extract_MPI_dependency)


# facilitate build-time testing (invoking OpenMPI) when building in a chroot (pbuilder or sbuild)
export OMPI_MCA_plm_rsh_agent=/bin/false
export OMPI_MCA_btl_base_warn_component_unused=0

HDF5_INCLUDE_DIR=$(shell for i in `pkg-config hdf5-mpi --cflags-only-I`; do echo $$i | grep "include/hdf5"; done | sed "s/-I//")
HDF5_LIBS=$(shell pkg-config hdf5-mpi --libs)
PETSC_HDF5_FLAGS=--with-hdf5-include=$(HDF5_INCLUDE_DIR) --with-hdf5-lib="$(HDF5_LIBS)"

PETSC_REAL_BUILD_DIR=$(PETSC_ARCH)-real
PETSC_REAL_DEBUG_BUILD_DIR=$(PETSC_ARCH)-real-debug
PETSC_COMPLEX_BUILD_DIR=$(PETSC_ARCH)-complex
PETSC_COMPLEX_DEBUG_BUILD_DIR=$(PETSC_ARCH)-complex-debug

PETSC64_REAL_BUILD_DIR=$(PETSC_ARCH)-real-64
PETSC64_REAL_DEBUG_BUILD_DIR=$(PETSC_ARCH)-real-debug-64
PETSC64_COMPLEX_BUILD_DIR=$(PETSC_ARCH)-complex-64
PETSC64_COMPLEX_DEBUG_BUILD_DIR=$(PETSC_ARCH)-complex-debug-64

PETSC64B_REAL_BUILD_DIR=$(PETSC_ARCH)-real-64b

# PETSC_VERSION is used for the package names, library sonames, and
# /usr/lib/petscdir subdirectory names.
export PETSC_VERSION=$(DEB_STRIPPED_UPSTREAM_VERSION)$(PETSC_EXT)
# use only major.minor as general soname (rather than major.minor.patch.build)
export PETSC_SONAME_VERSION=$(shell echo $(PETSC_VERSION) | awk 'BEGIN { FS="."}; {print $$1"."$$2 }')

# PETSC_NAME is the install dir under /usr/lib and the base for package names
PETSC_NAME=petsc$(PETSC_SONAME_VERSION)
PETSC_REAL_SONAME=petsc-real$(PETSC_SONAME_VERSION)
PETSC_COMPLEX_SONAME=petsc-complex$(PETSC_SONAME_VERSION)

PETSC64_NAME=petsc64-$(PETSC_SONAME_VERSION)
PETSC64_REAL_SONAME=petsc64-real$(PETSC_SONAME_VERSION)
PETSC64_COMPLEX_SONAME=petsc64-complex$(PETSC_SONAME_VERSION)

PETSC64B_NAME=petsc64b-$(PETSC_SONAME_VERSION)
PETSC64B_REAL_SONAME=petsc64b-real$(PETSC_SONAME_VERSION)

# debian binary package names
PETSC_REAL_DEV_PACKAGE=lib$(PETSC_REAL_SONAME)-dev
PETSC_REAL_PACKAGE=lib$(PETSC_REAL_SONAME)
PETSC_REAL_DEBUG_PACKAGE=lib$(PETSC_REAL_SONAME)-dbg
PETSC_COMPLEX_DEV_PACKAGE=lib$(PETSC_COMPLEX_SONAME)-dev
PETSC_COMPLEX_PACKAGE=lib$(PETSC_COMPLEX_SONAME)
PETSC_COMPLEX_DEBUG_PACKAGE=lib$(PETSC_COMPLEX_SONAME)-dbg

PETSC64_REAL_DEV_PACKAGE=lib$(PETSC64_REAL_SONAME)-dev
PETSC64_REAL_PACKAGE=lib$(PETSC64_REAL_SONAME)
PETSC64_REAL_DEBUG_PACKAGE=lib$(PETSC64_REAL_SONAME)-dbg
PETSC64_COMPLEX_DEV_PACKAGE=lib$(PETSC64_COMPLEX_SONAME)-dev
PETSC64_COMPLEX_PACKAGE=lib$(PETSC64_COMPLEX_SONAME)
PETSC64_COMPLEX_DEBUG_PACKAGE=lib$(PETSC64_COMPLEX_SONAME)-dbg

PETSC64B_REAL_DEV_PACKAGE=libpetsc64i64b-real$(PETSC_SONAME_VERSION)-dev
PETSC64B_REAL_PACKAGE=libpetsc64i64b-real$(PETSC_SONAME_VERSION)

PETSC_DEV_COMMON_PACKAGE=lib$(PETSC_NAME)-dev-common
export PETSC_DOC_PACKAGE=petsc$(PETSC_SONAME_VERSION)-doc
export PETSC_DEV_EXAMPLE_PACKAGE=lib$(PETSC_NAME)-dev-examples

# install into /usr/lib/petscdir rather than /usr/lib/petsc
# to allow /usr/lib/petsc to be configured by alternatives
export PETSC_REAL_DIR_PREFIX=/usr/lib/petscdir/$(PETSC_NAME)/$(PETSC_ARCH)-real
export PETSC_REAL_DEBUG_DIR_PREFIX=/usr/lib/petscdir/$(PETSC_NAME)/$(PETSC_ARCH)-real-debug
export PETSC_COMPLEX_DIR_PREFIX=/usr/lib/petscdir/$(PETSC_NAME)/$(PETSC_ARCH)-complex
export PETSC_COMPLEX_DEBUG_DIR_PREFIX=/usr/lib/petscdir/$(PETSC_NAME)/$(PETSC_ARCH)-complex-debug

export PETSC64_REAL_DIR_PREFIX=/usr/lib/petscdir/$(PETSC64_NAME)/$(PETSC_ARCH)-real
export PETSC64_REAL_DEBUG_DIR_PREFIX=/usr/lib/petscdir/$(PETSC64_NAME)/$(PETSC_ARCH)-real-debug
export PETSC64_COMPLEX_DIR_PREFIX=/usr/lib/petscdir/$(PETSC64_NAME)/$(PETSC_ARCH)-complex
export PETSC64_COMPLEX_DEBUG_DIR_PREFIX=/usr/lib/petscdir/$(PETSC64_NAME)/$(PETSC_ARCH)-complex-debug

export PETSC64B_REAL_DIR_PREFIX=/usr/lib/petscdir/$(PETSC64B_NAME)/$(PETSC_ARCH)-real

PACKAGE_REAL_INSTALL_DIR=debian/tmp/$(PETSC_NAME)-real
export PACKAGE_REAL_DEBUG_INSTALL_DIR=debian/tmp/$(PETSC_NAME)-real-debug
PACKAGE_COMPLEX_INSTALL_DIR=debian/tmp/$(PETSC_NAME)-complex
PACKAGE_COMPLEX_DEBUG_INSTALL_DIR=debian/tmp/$(PETSC_NAME)-complex-debug

PACKAGE_64_REAL_INSTALL_DIR=debian/tmp/$(PETSC64_NAME)-real
export PACKAGE_64_REAL_DEBUG_INSTALL_DIR=debian/tmp/$(PETSC64_NAME)-real-debug
PACKAGE_64_COMPLEX_INSTALL_DIR=debian/tmp/$(PETSC64_NAME)-complex
PACKAGE_64_COMPLEX_DEBUG_INSTALL_DIR=debian/tmp/$(PETSC64_NAME)-complex-debug

PACKAGE_64B_REAL_INSTALL_DIR=debian/tmp/$(PETSC64B_NAME)-real

CONFIGURATION_OPTIONS=--with-shared-libraries --with-pic=1 \
	  --with-cc=mpicc --with-cxx=mpicxx --with-fc=mpif90 \
	  --with-cxx-dialect=C++11 \
	  --with-opencl=1 \
	  --with-ptscotch=1 --with-ptscotch-include=/usr/include/scotch --with-ptscotch-lib="-lptesmumps -lptscotch -lptscotcherr" \
	  $(PETSC_HDF5_FLAGS) --CXX_LINKER_FLAGS="-Wl,--no-as-needed"


MKL_OPTIONS=--with-blas-lib="-lmkl_blas95_lp64 -lmkl_cdft_core -lmkl_gf_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm" --with-lapack-lib="-lmkl_blas95_lp64 -lmkl_lapack95_lp64 -lmkl_cdft_core -lmkl_gf_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm" --with-scalapack=1 --with-scalapack-lib="-lmkl_blas95_lp64 -lmkl_lapack95_lp64 -lmkl_scalapack_lp64 -lmkl_cdft_core -lmkl_blacs_openmpi_lp64 -lmkl_gf_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm"

MKL64B_OPTIONS=--with-blas-lib="-lmkl_blas95_ilp64 -lmkl_cdft_core -lmkl_gf_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm" --with-lapack-lib="-lmkl_blas95_ilp64 -lmkl_lapack95_ilp64 -lmkl_cdft_core -lmkl_gf_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm"

FFTW_OPTIONS=--with-fftw=1 --with-fftw-include=[] --with-fftw-lib="-lfftw3 -lfftw3_mpi"
FFTW64B_OPTIONS=

CUDA_OPTIONS=--with-cuda=1 --with-cuda-lib="-lcufft -lcublas -lcudart -lcusparse -lcusolver -lcuda" --with-cuda-include=/usr/include
CUDA64B_OPTIONS=

# hypre is only supported with real numbers, not complex
HYPRE_CONFIG=--with-hypre=1 --with-hypre-include=/usr/include/hypre \
	  --with-hypre-lib="-lHYPRE_core"

# --with-64-bit-indices option requires Hypre built with --enable-bigint or --enable-mixedint (not yet available)
HYPRE64_CONFIG=
HYPRE64B_CONFIG=

# standard MUMPS (32 bit)
MUMPS_CONFIG=--with-mumps=1 --with-mumps-include=[] --with-mumps-lib="-ldmumps -lzmumps -lsmumps -lcmumps -lmumps_common -lpord"

# 64-bit MUMPS
MUMPS64_CONFIG=--with-mumps=1 --with-mumps-include=[] --with-mumps-lib="-ldmumps_64 -lzmumps_64 -lsmumps_64 -lcmumps_64 -lmumps_common_64 -lpord_64"
MUMPS64B_CONFIG=

# Cannot use SuperLU with 64 bit integers, it is not coded for this capability
SUPERLU_CONFIG=--with-superlu=1 --with-superlu-include=/usr/include/superlu --with-superlu-lib=-lsuperlu
SUPERLU64B_CONFIG=--with-superlu=0
SUPERLUDIST_CONFIG=--with-superlu_dist=1 --with-superlu_dist-include=/usr/include/superlu-dist --with-superlu_dist-lib=-lsuperlu_dist
SUPERLUDIST64_CONFIG=--with-superlu_dist=1 --with-superlu_dist-include=/usr/include/superlu-dist --with-superlu_dist-lib=-lsuperlu_dist


PETSC64_CONFIG=--with-64-bit-indices
PETSC64B_CONFIG=--with-64-bit-indices --with-64-bit-blas-indices

SUITESPARSE_CONFIG=--with-suitesparse=1 --with-suitesparse-include=/usr/include/suitesparse --with-suitesparse-lib="-lumfpack -lamd -lcholmod -lklu"

# SuiteSparse does not support 64-bit indices on 32-bit architectures, so drop it in that case.
32BIT_ARCH_LIST := armel armhf i386 mipsel hppa hurd-i386 m68k powerpc sh4 x32
ifneq (,$(findstring $(space)$(DEB_HOST_ARCH)$(space), $(space)$(32BIT_ARCH_LIST)$(space)))
  SUITESPARSE64_CONFIG=
else
  SUITESPARSE64_CONFIG=$(SUITESPARSE_CONFIG)
endif
SUITESPARSE64B_CONFIG=


# main packaging script based on dh7 syntax
%:
	dh $@ --with python3,fortran_mod,sphinxdoc

override_dh_auto_clean:
	if [ -d $(PETSC_REAL_DEBUG_BUILD_DIR) -a -f $(PETSC_REAL_DEBUG_BUILD_DIR)/lib/petsc/conf/petscrules ]; then \
	  dh_auto_clean -p$(PETSC_REAL_DEBUG_PACKAGE) -p$(PETSC_DOC_PACKAGE) -- \
	    PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_REAL_DEBUG_BUILD_DIR); \
	fi
	if [ -d $(PETSC_REAL_BUILD_DIR) -a -f $(PETSC_REAL_BUILD_DIR)/lib/petsc/conf/petscrules ]; then \
	dh_auto_clean -p$(PETSC_REAL_DEV_PACKAGE) -- \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_REAL_BUILD_DIR); \
	fi
	if [ -d $(PETSC_COMPLEX_BUILD_DIR) -a -f $(PETSC_COMPLEX_BUILD_DIR)/lib/petsc/conf/petscrules ]; then \
	dh_auto_clean -p$(PETSC_COMPLEX_DEV_PACKAGE) -- \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_COMPLEX_BUILD_DIR); \
	fi
	if [ -d $(PETSC_COMPLEX_DEBUG_BUILD_DIR) -a -f $(PETSC_COMPLEX_DEBUG_BUILD_DIR)/lib/petsc/conf/petscrules ]; then \
	dh_auto_clean -p$(PETSC_COMPLEX_DEBUG_PACKAGE) -- \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_COMPLEX_DEBUG_BUILD_DIR); \
	fi
	if [ -d $(PETSC_REAL_DEBUG_BUILD_DIR) -a -f $(PETSC_REAL_DEBUG_BUILD_DIR)/lib/petsc/conf/petscrules ]; then \
	  dh_auto_clean -p$(PETSC_REAL_DEBUG_PACKAGE) -p$(PETSC_DOC_PACKAGE) -- \
	    PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_REAL_DEBUG_BUILD_DIR); \
	fi
	if [ -d $(PETSC64_REAL_BUILD_DIR) -a -f $(PETSC64_REAL_BUILD_DIR)/lib/petsc/conf/petscrules ]; then \
	dh_auto_clean -p$(PETSC64_REAL_DEV_PACKAGE) -- \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_REAL_BUILD_DIR); \
	fi
	if [ -d $(PETSC64_COMPLEX_BUILD_DIR) -a -f $(PETSC64_COMPLEX_BUILD_DIR)/lib/petsc/conf/petscrules ]; then \
	dh_auto_clean -p$(PETSC64_COMPLEX_DEV_PACKAGE) -- \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_COMPLEX_BUILD_DIR); \
	fi
	if [ -d $(PETSC64_COMPLEX_DEBUG_BUILD_DIR) -a -f $(PETSC64_COMPLEX_DEBUG_BUILD_DIR)/lib/petsc/conf/petscrules ]; then \
	dh_auto_clean -p$(PETSC64_COMPLEX_DEBUG_PACKAGE) -- \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_COMPLEX_DEBUG_BUILD_DIR); \
	fi
	if [ -d $(PETSC64B_REAL_BUILD_DIR) -a -f $(PETSC64B_REAL_BUILD_DIR)/lib/petsc/conf/petscrules ]; then \
	dh_auto_clean -p$(PETSC64B_REAL_DEV_PACKAGE) -- \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64B_REAL_BUILD_DIR); \
	fi

override_dh_clean: override_dh_auto_clean
	dh_clean
	rm -f *.log *.log.bkp configtest.mod
	rm -f src/vec/vec/tests/x.h5
	rm -f lib/petsc/conf/petscvariables
	rm -f reconfigure-*.py
	find config -name *.pyc | xargs rm -f
	rm -f CMakeLists.txt
	rm -rf $(PETSC_REAL_BUILD_DIR) $(PETSC_REAL_DEBUG_BUILD_DIR) $(PETSC_COMPLEX_BUILD_DIR) $(PETSC_COMPLEX_DEBUG_BUILD_DIR) \
          $(PETSC64_REAL_BUILD_DIR) $(PETSC64_REAL_DEBUG_BUILD_DIR) $(PETSC64_COMPLEX_BUILD_DIR) $(PETSC64_COMPLEX_DEBUG_BUILD_DIR) \
          $(PETSC64B_REAL_BUILD_DIR)

override_dh_auto_configure:
	@echo ===================== $(PETSC_REAL_DEBUG_PACKAGE) =====================
	if dh_auto_configure -p$(PETSC_REAL_DEBUG_PACKAGE) -p$(PETSC_DOC_PACKAGE) --  \
          --with-debugging=1  \
          --shared-library-extension=_real \
          $(CONFIGURATION_OPTIONS)  \
          $(HYPRE_CONFIG)  \
          $(MUMPS_CONFIG)  \
          $(SUITESPARSE_CONFIG) \
          $(SUPERLU_CONFIG)  \
          $(SUPERLUDIST_CONFIG)  \
          $(MKL_OPTIONS) \
          $(FFTW_OPTIONS) \
          $(CUDA_OPTIONS) \
           --prefix=$(PETSC_REAL_DEBUG_DIR_PREFIX)  \
          --PETSC_ARCH=$(PETSC_REAL_DEBUG_BUILD_DIR) \
            CFLAGS="$(CFLAGS_NO_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_NO_DEBUG_PREFIX_MAP)" \
            FCFLAGS="$(FCFLAGS_NO_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_NO_DEBUG_PREFIX_MAP)"  \
            CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" MAKEFLAGS="$(MAKEFLAGS)"; then \
	  : ; \
	else \
	  cat configure.log; \
	  false; \
	fi
	@echo ===================== $(PETSC_REAL_DEV_PACKAGE) =====================
	if dh_auto_configure -p$(PETSC_REAL_DEV_PACKAGE) --  \
          --with-debugging=0  \
          --shared-library-extension=_real \
          $(CONFIGURATION_OPTIONS)  \
          $(HYPRE_CONFIG)  \
          $(MUMPS_CONFIG)  \
          $(SUITESPARSE_CONFIG) \
          $(SUPERLU_CONFIG)  \
          $(SUPERLUDIST_CONFIG)  \
          $(MKL_OPTIONS) \
          $(FFTW_OPTIONS) \
          $(CUDA_OPTIONS) \
          --prefix=$(PETSC_REAL_DIR_PREFIX)  \
          --PETSC_ARCH=$(PETSC_REAL_BUILD_DIR) \
            CFLAGS="$(CFLAGS_NO_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_NO_DEBUG_PREFIX_MAP)" \
            FCFLAGS="$(FCFLAGS_NO_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_NO_DEBUG_PREFIX_MAP)"  \
            CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" MAKEFLAGS="$(MAKEFLAGS)"; then \
	  : ; \
	else \
	  cat configure.log; \
	  false; \
	fi
	@echo ===================== $(PETSC_COMPLEX_DEV_PACKAGE) =====================
	if dh_auto_configure -p$(PETSC_COMPLEX_DEV_PACKAGE) --  \
          --with-debugging=0  \
          --with-scalar-type=complex --shared-library-extension=_complex \
          $(CONFIGURATION_OPTIONS)  \
          $(MUMPS_CONFIG)  \
          $(SUITESPARSE_CONFIG) \
          $(SUPERLU_CONFIG)  \
          $(SUPERLUDIST_CONFIG)  \
          $(MKL_OPTIONS) \
          $(FFTW_OPTIONS) \
          $(CUDA_OPTIONS) \
          --prefix=$(PETSC_COMPLEX_DIR_PREFIX)  \
          --PETSC_ARCH=$(PETSC_COMPLEX_BUILD_DIR) \
            CFLAGS="$(CFLAGS_NO_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_NO_DEBUG_PREFIX_MAP)" \
            FCFLAGS="$(FCFLAGS_NO_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_NO_DEBUG_PREFIX_MAP)"  \
            CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" MAKEFLAGS="$(MAKEFLAGS)"; then \
	  : ; \
	else \
	  cat configure.log; \
	  false; \
	fi
	@echo ===================== $(PETSC_COMPLEX_DEBUG_PACKAGE) =====================
	if dh_auto_configure -p$(PETSC_COMPLEX_DEBUG_PACKAGE) --  \
          --with-debugging=1  \
          --with-scalar-type=complex --shared-library-extension=_complex \
          $(CONFIGURATION_OPTIONS)  \
          $(MUMPS_CONFIG)  \
          $(SUITESPARSE_CONFIG) \
          $(SUPERLU_CONFIG)  \
          $(SUPERLUDIST_CONFIG)  \
          $(MKL_OPTIONS) \
          $(FFTW_OPTIONS) \
          $(CUDA_OPTIONS) \
          --prefix=$(PETSC_COMPLEX_DEBUG_DIR_PREFIX)  \
          --PETSC_ARCH=$(PETSC_COMPLEX_DEBUG_BUILD_DIR) \
            CFLAGS="$(CFLAGS_NO_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_NO_DEBUG_PREFIX_MAP)" \
            FCFLAGS="$(FCFLAGS_NO_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_NO_DEBUG_PREFIX_MAP)"  \
            CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" MAKEFLAGS="$(MAKEFLAGS)"; then \
	  : ; \
	else \
	  cat configure.log; \
	  false; \
	fi
	@echo ===================== $(PETSC64_REAL_DEBUG_PACKAGE) =====================
	if dh_auto_configure -p$(PETSC64_REAL_DEBUG_PACKAGE) --  \
          $(PETSC64_CONFIG)  \
          --with-debugging=1  \
          --shared-library-extension=64_real \
          $(CONFIGURATION_OPTIONS)  \
          $(HYPRE64_CONFIG)  \
          $(MUMPS64_CONFIG)  \
          $(SUITESPARSE64_CONFIG) \
          $(SUPERLUDIST_CONFIG)  \
          $(MKL_OPTIONS) \
          $(FFTW_OPTIONS) \
          $(CUDA_OPTIONS) \
          --prefix=$(PETSC64_REAL_DEBUG_DIR_PREFIX)  \
          --PETSC_ARCH=$(PETSC64_REAL_DEBUG_BUILD_DIR) \
            CFLAGS="$(CFLAGS_NO_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_NO_DEBUG_PREFIX_MAP)" \
            FCFLAGS="$(FCFLAGS_NO_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_NO_DEBUG_PREFIX_MAP)"  \
            CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" MAKEFLAGS="$(MAKEFLAGS)"; then \
	  : ; \
	else \
	  cat configure.log; \
	  false; \
	fi
	@echo ===================== $(PETSC64_REAL_DEV_PACKAGE) =====================
	if dh_auto_configure -p$(PETSC64_REAL_DEV_PACKAGE) --  \
          $(PETSC64_CONFIG)  \
          --with-debugging=0  \
          --shared-library-extension=64_real \
          $(CONFIGURATION_OPTIONS)  \
          $(HYPRE64_CONFIG)  \
          $(MUMPS64_CONFIG)  \
          $(SUITESPARSE64_CONFIG) \
          $(SUPERLUDIST_CONFIG)  \
          $(MKL_OPTIONS) \
          $(FFTW_OPTIONS) \
          $(CUDA_OPTIONS) \
          --prefix=$(PETSC64_REAL_DIR_PREFIX)  \
          --PETSC_ARCH=$(PETSC64_REAL_BUILD_DIR) \
            CFLAGS="$(CFLAGS_NO_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_NO_DEBUG_PREFIX_MAP)" \
            FCFLAGS="$(FCFLAGS_NO_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_NO_DEBUG_PREFIX_MAP)"  \
            CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" MAKEFLAGS="$(MAKEFLAGS)"; then \
	  : ; \
	else \
	  cat configure.log; \
	  false; \
	fi
	@echo ===================== $(PETSC64_COMPLEX_DEV_PACKAGE) =====================
	if dh_auto_configure -p$(PETSC64_COMPLEX_DEV_PACKAGE) --  \
          $(PETSC64_CONFIG)  \
          --with-debugging=0  \
          --with-scalar-type=complex --shared-library-extension=64_complex \
          $(CONFIGURATION_OPTIONS)  \
          $(MUMPS64_CONFIG)  \
          $(SUITESPARSE64_CONFIG) \
          $(SUPERLUDIST_CONFIG)  \
          $(MKL_OPTIONS) \
          $(FFTW_OPTIONS) \
          $(CUDA_OPTIONS) \
          --prefix=$(PETSC64_COMPLEX_DIR_PREFIX)  \
          --PETSC_ARCH=$(PETSC64_COMPLEX_BUILD_DIR) \
            CFLAGS="$(CFLAGS_NO_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_NO_DEBUG_PREFIX_MAP)" \
            FCFLAGS="$(FCFLAGS_NO_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_NO_DEBUG_PREFIX_MAP)"  \
            CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" MAKEFLAGS="$(MAKEFLAGS)"; then \
	  : ; \
	else \
	  cat configure.log; \
	  false; \
	fi
	@echo ===================== $(PETSC64_COMPLEX_DEBUG_PACKAGE) =====================
	if dh_auto_configure -p$(PETSC64_COMPLEX_DEBUG_PACKAGE) --  \
          $(PETSC64_CONFIG)  \
          --with-debugging=1  \
          --with-scalar-type=complex --shared-library-extension=64_complex \
          $(CONFIGURATION_OPTIONS)  \
          $(MUMPS64_CONFIG)  \
          $(SUITESPARSE64_CONFIG) \
          $(SUPERLUDIST_CONFIG)  \
          $(MKL_OPTIONS) \
          $(FFTW_OPTIONS) \
          $(CUDA_OPTIONS) \
          --prefix=$(PETSC64_COMPLEX_DEBUG_DIR_PREFIX)  \
          --PETSC_ARCH=$(PETSC64_COMPLEX_DEBUG_BUILD_DIR) \
            CFLAGS="$(CFLAGS_NO_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_NO_DEBUG_PREFIX_MAP)" \
            FCFLAGS="$(FCFLAGS_NO_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_NO_DEBUG_PREFIX_MAP)"  \
            CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" MAKEFLAGS="$(MAKEFLAGS)"; then \
	  : ; \
	else \
	  cat configure.log; \
	  false; \
	fi
	@echo ===================== $(PETSC64B_REAL_DEV_PACKAGE) =====================
	@echo sticazzi9
	if dh_auto_configure -p$(PETSC64B_REAL_DEV_PACKAGE) --  \
          $(PETSC64B_CONFIG)  \
          --with-debugging=0  \
          --shared-library-extension=64i64b_real \
          $(CONFIGURATION_OPTIONS)  \
          $(SUPERLU64B_CONFIG)  \
          $(HYPRE64_CONFIG)  \
          $(MKL64B_OPTIONS) \
          --prefix=$(PETSC64B_REAL_DIR_PREFIX)  \
          --PETSC_ARCH=$(PETSC64B_REAL_BUILD_DIR) \
            CFLAGS="$(CFLAGS_NO_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_NO_DEBUG_PREFIX_MAP)" \
            FCFLAGS="$(FCFLAGS_NO_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_NO_DEBUG_PREFIX_MAP)"  \
            CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" MAKEFLAGS="$(MAKEFLAGS)"; then \
	  : ; \
	else \
	  cat configure.log; \
	  false; \
	fi


override_dh_auto_build:
	dh_auto_build -p$(PETSC_REAL_DEBUG_PACKAGE) -p$(PETSC_DOC_PACKAGE) -p$(PETSC_DEV_EXAMPLE_PACKAGE) -- V=1 \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_REAL_DEBUG_BUILD_DIR) \
	  CFLAGS="$(CFLAGS_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_DEBUG_PREFIX_MAP)" \
	  FCFLAGS="$(FCFLAGS_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_DEBUG_PREFIX_MAP)"
	dh_auto_build -p$(PETSC_REAL_DEV_PACKAGE)  -- V=1 \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_REAL_BUILD_DIR) \
	  CFLAGS="$(CFLAGS_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_DEBUG_PREFIX_MAP)" \
	  FCFLAGS="$(FCFLAGS_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_DEBUG_PREFIX_MAP)"
	dh_auto_build -p$(PETSC_COMPLEX_DEV_PACKAGE)  -- V=1 \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_COMPLEX_BUILD_DIR) \
	  CFLAGS="$(CFLAGS_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_DEBUG_PREFIX_MAP)" \
	  FCFLAGS="$(FCFLAGS_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_DEBUG_PREFIX_MAP)"
	dh_auto_build -p$(PETSC_COMPLEX_DEBUG_PACKAGE)  -- V=1 \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_COMPLEX_DEBUG_BUILD_DIR) \
	  CFLAGS="$(CFLAGS_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_DEBUG_PREFIX_MAP)" \
	  FCFLAGS="$(FCFLAGS_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_DEBUG_PREFIX_MAP)"
	dh_auto_build -p$(PETSC64_REAL_DEBUG_PACKAGE) -- V=1 \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_REAL_DEBUG_BUILD_DIR) \
	  CFLAGS="$(CFLAGS_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_DEBUG_PREFIX_MAP)" \
	  FCFLAGS="$(FCFLAGS_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_DEBUG_PREFIX_MAP)"
	dh_auto_build -p$(PETSC64_REAL_DEV_PACKAGE)  -- V=1 \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_REAL_BUILD_DIR) \
	  CFLAGS="$(CFLAGS_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_DEBUG_PREFIX_MAP)" \
	  FCFLAGS="$(FCFLAGS_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_DEBUG_PREFIX_MAP)"
	dh_auto_build -p$(PETSC64_COMPLEX_DEV_PACKAGE)  -- V=1 \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_COMPLEX_BUILD_DIR) \
	  CFLAGS="$(CFLAGS_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_DEBUG_PREFIX_MAP)" \
	  FCFLAGS="$(FCFLAGS_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_DEBUG_PREFIX_MAP)"
	dh_auto_build -p$(PETSC64_COMPLEX_DEBUG_PACKAGE)  -- V=1 \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_COMPLEX_DEBUG_BUILD_DIR) \
	  CFLAGS="$(CFLAGS_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_DEBUG_PREFIX_MAP)" \
	  FCFLAGS="$(FCFLAGS_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_DEBUG_PREFIX_MAP)"
	dh_auto_build -p$(PETSC64B_REAL_DEV_PACKAGE)  -- V=1 \
	  PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64B_REAL_BUILD_DIR) \
	  CFLAGS="$(CFLAGS_DEBUG_PREFIX_MAP)" CXXFLAGS="$(CXXFLAGS_DEBUG_PREFIX_MAP)" \
	  FCFLAGS="$(FCFLAGS_DEBUG_PREFIX_MAP)"  FFLAGS="$(FFLAGS_DEBUG_PREFIX_MAP)"


# these arches started failing to complete tests in PETSc 3.9
# so skip their tests until a workaround or fix is known
ARCH_NO_TEST_LIST = armel armhf i386 mips64el hppa ia64 powerpc x32

empty :=
space := $(empty)$(empty)

# run tests, or not
RUNTEST=yes
ifneq (,$(findstring $(space)$(DEB_HOST_ARCH)$(space), $(space)$(ARCH_NO_TEST_LIST)$(space)))
  RUNTEST=no
endif
ifeq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
  RUNTEST=no
endif

override_dh_auto_test-indep:
	echo "Tests are run with arch-any builds".

override_dh_auto_test-arch:
	set -e; \
	if [ "$(RUNTEST)" = "no" ]; then \
	   echo Tests have been disabled on $(DEB_HOST_ARCH); \
	else make -j$(CPU_COUNT) check_build VERBOSE=1 V=1 \
	    PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_REAL_DEBUG_BUILD_DIR) \
	    LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(CURDIR)/$(PETSC_REAL_DEBUG_BUILD_DIR)/lib; \
	  make -j$(CPU_COUNT) check_build VERBOSE=1 V=1 \
	    PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_REAL_BUILD_DIR) \
	    LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(CURDIR)/$(PETSC_REAL_BUILD_DIR)/lib; \
	  make -j$(CPU_COUNT) check_build VERBOSE=1 V=1 \
	    PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_COMPLEX_BUILD_DIR) \
	    LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(CURDIR)/$(PETSC_COMPLEX_BUILD_DIR)/lib; \
	  make -j$(CPU_COUNT) check_build VERBOSE=1 V=1 \
	    PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_COMPLEX_DEBUG_BUILD_DIR) \
	    LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(CURDIR)/$(PETSC_COMPLEX_DEBUG_BUILD_DIR)/lib; \
	  make -j$(CPU_COUNT) check_build VERBOSE=1 V=1 \
	    PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_REAL_DEBUG_BUILD_DIR) \
	    LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(CURDIR)/$(PETSC64_REAL_DEBUG_BUILD_DIR)/lib; \
	  make -j$(CPU_COUNT) check_build VERBOSE=1 V=1 \
	    PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_REAL_BUILD_DIR) \
	    LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(CURDIR)/$(PETSC64_REAL_BUILD_DIR)/lib; \
	  make -j$(CPU_COUNT) check_build VERBOSE=1 V=1 \
	    PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_COMPLEX_BUILD_DIR) \
	    LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(CURDIR)/$(PETSC64_COMPLEX_BUILD_DIR)/lib; \
	  make -j$(CPU_COUNT) check_build VERBOSE=1 V=1 \
	    PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_COMPLEX_DEBUG_BUILD_DIR) \
	    LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(CURDIR)/$(PETSC64_COMPLEX_DEBUG_BUILD_DIR)/lib; \
	  make -j$(CPU_COUNT) check_build VERBOSE=1 V=1 \
	    PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64B_REAL_BUILD_DIR) \
	    LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):$(CURDIR)/$(PETSC64B_REAL_BUILD_DIR)/lib; \
	fi

override_dh_auto_install:
	dh_auto_install -p$(PETSC_REAL_DEBUG_PACKAGE) -p$(PETSC_DOC_PACKAGE) -p$(PETSC_DEV_EXAMPLE_PACKAGE) --destdir=$(PACKAGE_REAL_DEBUG_INSTALL_DIR) --  \
          PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_REAL_DEBUG_BUILD_DIR)
	dh_auto_install -p$(PETSC_REAL_DEV_PACKAGE) --destdir=$(PACKAGE_REAL_INSTALL_DIR) --  \
          PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_REAL_BUILD_DIR)
	dh_auto_install -p$(PETSC_COMPLEX_DEV_PACKAGE) --destdir=$(PACKAGE_COMPLEX_INSTALL_DIR) --  \
          PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_COMPLEX_BUILD_DIR)
	dh_auto_install -p$(PETSC_COMPLEX_DEBUG_PACKAGE) --destdir=$(PACKAGE_COMPLEX_DEBUG_INSTALL_DIR) --  \
          PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC_COMPLEX_DEBUG_BUILD_DIR)
	dh_auto_install -p$(PETSC64_REAL_DEBUG_PACKAGE) --destdir=$(PACKAGE_64_REAL_DEBUG_INSTALL_DIR) --  \
          PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_REAL_DEBUG_BUILD_DIR)
	dh_auto_install -p$(PETSC64_REAL_DEV_PACKAGE) --destdir=$(PACKAGE_64_REAL_INSTALL_DIR) --  \
          PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_REAL_BUILD_DIR)
	dh_auto_install -p$(PETSC64_COMPLEX_DEV_PACKAGE) --destdir=$(PACKAGE_64_COMPLEX_INSTALL_DIR) --  \
          PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_COMPLEX_BUILD_DIR)
	dh_auto_install -p$(PETSC64_COMPLEX_DEBUG_PACKAGE) --destdir=$(PACKAGE_64_COMPLEX_DEBUG_INSTALL_DIR) --  \
          PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64_COMPLEX_DEBUG_BUILD_DIR)
	dh_auto_install -p$(PETSC64B_REAL_DEV_PACKAGE) --destdir=$(PACKAGE_64B_REAL_INSTALL_DIR) --  \
          PETSC_DIR=$(CURDIR) PETSC_ARCH=$(PETSC64B_REAL_BUILD_DIR)

override_dh_install:
	dh_install -p$(PETSC_REAL_PACKAGE) --sourcedir $(PACKAGE_REAL_INSTALL_DIR)  $(PETSC_REAL_DIR_PREFIX)/lib/libpetsc_real.so.$(PETSC_VERSION)  usr/lib/$(DEB_HOST_MULTIARCH)
	dh_install -p$(PETSC_REAL_DEV_PACKAGE) --sourcedir $(PACKAGE_REAL_INSTALL_DIR) --autodest --exclude='include/*.mod' --exclude=*html --exclude=conf/uninstall.py --exclude=libpetsc_real.so.$(PETSC_VERSION) --exclude=share/ --exclude=include/petsc/ --exclude=lib/petsc/bin/  usr
	
	dh_install -p$(PETSC_REAL_DEBUG_PACKAGE) --sourcedir $(PACKAGE_REAL_DEBUG_INSTALL_DIR) --autodest --exclude='include/*.mod' --exclude=*html --exclude=conf/uninstall.py --exclude=share/ --exclude=include/petsc/ --exclude=lib/petsc/bin/  usr
	
	dh_install -p$(PETSC_COMPLEX_PACKAGE) --sourcedir $(PACKAGE_COMPLEX_INSTALL_DIR)  $(PETSC_COMPLEX_DIR_PREFIX)/lib/libpetsc_complex.so.$(PETSC_VERSION)  usr/lib/$(DEB_HOST_MULTIARCH)
	dh_install -p$(PETSC_COMPLEX_DEV_PACKAGE) --sourcedir $(PACKAGE_COMPLEX_INSTALL_DIR) --autodest --exclude='include/*.mod' --exclude=*html --exclude=conf/uninstall.py --exclude=libpetsc_complex.so.$(PETSC_VERSION) --exclude=share/ --exclude=include/petsc/ --exclude=lib/petsc/bin/  usr
	
	dh_install -p$(PETSC_COMPLEX_DEBUG_PACKAGE) --sourcedir $(PACKAGE_COMPLEX_DEBUG_INSTALL_DIR) --autodest --exclude='include/*.mod' --exclude=*html --exclude=conf/uninstall.py --exclude=share/ --exclude=include/petsc/ --exclude=lib/petsc/bin/  usr
	
	dh_install -p$(PETSC64_REAL_PACKAGE) --sourcedir $(PACKAGE_64_REAL_INSTALL_DIR)  $(PETSC64_REAL_DIR_PREFIX)/lib/libpetsc64_real.so.$(PETSC_VERSION)  usr/lib/$(DEB_HOST_MULTIARCH)
	dh_install -p$(PETSC64_REAL_DEV_PACKAGE) --sourcedir $(PACKAGE_64_REAL_INSTALL_DIR) --autodest --exclude='include/*.mod' --exclude=*html --exclude=conf/uninstall.py --exclude=libpetsc64_real.so.$(PETSC_VERSION) --exclude=share/ --exclude=include/petsc/ --exclude=lib/petsc/bin/  usr
	
	dh_install -p$(PETSC64_REAL_DEBUG_PACKAGE) --sourcedir $(PACKAGE_64_REAL_DEBUG_INSTALL_DIR) --autodest --exclude='include/*.mod' --exclude=*html --exclude=conf/uninstall.py --exclude=share/ --exclude=include/petsc/ --exclude=lib/petsc/bin/  usr
	
	dh_install -p$(PETSC64_COMPLEX_PACKAGE) --sourcedir $(PACKAGE_64_COMPLEX_INSTALL_DIR)  $(PETSC64_COMPLEX_DIR_PREFIX)/lib/libpetsc64_complex.so.$(PETSC_VERSION)  usr/lib/$(DEB_HOST_MULTIARCH)
	dh_install -p$(PETSC64_COMPLEX_DEV_PACKAGE) --sourcedir $(PACKAGE_64_COMPLEX_INSTALL_DIR) --autodest --exclude='include/*.mod' --exclude=*html --exclude=conf/uninstall.py --exclude=libpetsc64_complex.so.$(PETSC_VERSION) --exclude=share/ --exclude=include/petsc/ --exclude=lib/petsc/bin/  usr
	
	dh_install -p$(PETSC64_COMPLEX_DEBUG_PACKAGE) --sourcedir $(PACKAGE_64_COMPLEX_DEBUG_INSTALL_DIR) --autodest --exclude='include/*.mod' --exclude=*html --exclude=conf/uninstall.py --exclude=share/ --exclude=include/petsc/ --exclude=lib/petsc/bin/  usr
	
	dh_install -p$(PETSC64B_REAL_PACKAGE) --sourcedir $(PACKAGE_64B_REAL_INSTALL_DIR)  $(PETSC64B_REAL_DIR_PREFIX)/lib/libpetsc64i64b_real.so.$(PETSC_VERSION)  usr/lib/$(DEB_HOST_MULTIARCH)
	dh_install -p$(PETSC64B_REAL_DEV_PACKAGE) --sourcedir $(PACKAGE_64B_REAL_INSTALL_DIR) --autodest --exclude='include/*.mod' --exclude=*html --exclude=conf/uninstall.py --exclude=libpetsc64i64b_real.so.$(PETSC_VERSION) --exclude=share/ --exclude=include/petsc/ --exclude=lib/petsc/bin/  usr
	
	dh_install -p$(PETSC_DEV_COMMON_PACKAGE) --sourcedir $(PACKAGE_REAL_DEBUG_INSTALL_DIR)/$(PETSC_REAL_DEBUG_DIR_PREFIX) --exclude=share/petsc/examples/ --exclude=share/petsc/datafiles/  share  usr/share/petsc/$(PETSC_SONAME_VERSION)
	dh_install -p$(PETSC_DEV_COMMON_PACKAGE) --sourcedir $(PACKAGE_REAL_DEBUG_INSTALL_DIR)/$(PETSC_REAL_DEBUG_DIR_PREFIX) --exclude=*html  include/petsc  usr/share/petsc/$(PETSC_SONAME_VERSION)/include
	dh_install -p$(PETSC_DEV_COMMON_PACKAGE) --sourcedir $(PACKAGE_REAL_DEBUG_INSTALL_DIR)/$(PETSC_REAL_DEBUG_DIR_PREFIX)  lib/petsc/bin  usr/share/petsc/$(PETSC_SONAME_VERSION)/lib/petsc
	
	dh_install -p$(PETSC_DEV_EXAMPLE_PACKAGE)
	# use local MathJax.js
	if [ -d debian/$(PETSC_DEV_EXAMPLE_PACKAGE)/usr/share/petsc/$(PETSC_SONAME_VERSION) ]; then \
	  find debian/$(PETSC_DEV_EXAMPLE_PACKAGE)/usr/share/petsc/$(PETSC_SONAME_VERSION) -name "*html" | \
	     xargs sed -i "s|https://cdn.mathjax.org/mathjax/latest/MathJax.js|file:///usr/share/javascript/mathjax/MathJax.js|" ; \
	fi

override_dh_installdocs-indep:
	dh_installdocs -i
	rm -rf ./debian/$(PETSC_DOC_PACKAGE)/usr/share/doc/$(PETSC_DOC_PACKAGE)/docs/sphinx_docs
	# dh_install can't install .html while preserving directory structure
	# so first install all include files to docs...
	dh_install -p$(PETSC_DOC_PACKAGE) --sourcedir $(PACKAGE_REAL_DEBUG_INSTALL_DIR)  $(PETSC_REAL_DEBUG_DIR_PREFIX)/include usr/share/doc/$(PETSC_DOC_PACKAGE)
	# test if header docs were installed (in a binary-only build they won't be)
	if [ -d ./debian/$(PETSC_DOC_PACKAGE)/usr/share/doc/$(PETSC_DOC_PACKAGE)/include ]; then  \
	# then remove non-html files  \
	  find ./debian/$(PETSC_DOC_PACKAGE)/usr/share/doc/$(PETSC_DOC_PACKAGE)/include/ -type f -not -name "*.html" -delete ;  \
	# make header docs "generic" (pointing to headers in preferred alternative /usr/include/petsc)  \
	  for hdoc in `find ./debian/$(PETSC_DOC_PACKAGE)/usr/share/doc/$(PETSC_DOC_PACKAGE)/include/ -name "*.html"`; do  \
	    h=`echo $${hdoc} | xargs basename | sed "s/.html//"`; \
	    hdir=`echo $${hdoc} | xargs dirname | sed "s|^.*/include||"`; \
	    sed "s|href=\"$${h}\"|href=\"/usr/include/petsc$${hdir}/$${h}\"|" -i $${hdoc};  \
	  done  \
	fi

override_dh_sphinxdoc-indep:
	# various js scripts provided with upstream source were built with a different sphinx version not recognized by dh_sphinxdoc
	dh_sphinxdoc -i -Xjquery -Xsearchtools -Xunderscore -Xdoctools
	for j in jquery searchtools underscore doctools; do \
	    rm -rf debian/$(PETSC_DOC_PACKAGE)/usr/share/doc/$(PETSC_DOC_PACKAGE)/html/_static/$${j}.js ; \
	    ln -s /usr/share/sphinx/themes/basic/static/$${j}.js debian/$(PETSC_DOC_PACKAGE)/usr/share/doc/$(PETSC_DOC_PACKAGE)/html/_static/$${j}.js ; \
	done
	rm -rf debian/$(PETSC_DOC_PACKAGE)/usr/share/doc/$(PETSC_DOC_PACKAGE)/html/_static/jquery-?.?.?.js
	rm -rf debian/$(PETSC_DOC_PACKAGE)/usr/share/doc/$(PETSC_DOC_PACKAGE)/html/_static/underscore-?.?.?.js
	# change external references to local js scripts (avoid privacy breaches)
	for j in contrib/auto-render.min.js katex.min.js katex.min.css; do \
	    grep -ls "https://cdn.jsdelivr.net/npm/.*/dist/$$j" debian/$(PETSC_DOC_PACKAGE)/usr/share/doc/$(PETSC_DOC_PACKAGE)/* -R \
	      | xargs sed -i "s|https://cdn.jsdelivr.net/npm/.*/dist/$$j|/usr/share/doc/$(PETSC_DOC_PACKAGE)/html/js/`basename $$j`|g";  \
	done
	if [ -d debian/$(PETSC_DEV_COMMON_PACKAGE)/usr/share/petsc/$(PETSC_SONAME_VERSION)/share/petsc/saws ]; then \
	  find debian/$(PETSC_DEV_COMMON_PACKAGE)/usr/share/petsc/$(PETSC_SONAME_VERSION)/share/petsc/saws -name "*html" | \
	     xargs sed -i "s|https://www.mcs.anl.gov/research/projects/saws/js/jquery-.*[^custom].js|file://usr/share/sphinx/themes/basic/static/jquery.js|; \
	        s|https://www.mcs.anl.gov/research/projects/saws/js/jquery-ui.*.js|file://usr/share/javascript/jquery-ui/jquery-ui.js|; \
		s|http://cdn.mathjax.org/mathjax/latest/MathJax.js|file:///usr/share/javascript/mathjax/MathJax.js|" ; \
	fi

# dh_installchangelogs can't handle a directory of changelog files, so skip them here
override_dh_installchangelogs:
	dh_installchangelogs --exclude=docs/changes

override_dh_fixperms-indep:
	dh_fixperms
	chmod a-x debian/$(PETSC_DEV_EXAMPLE_PACKAGE)/usr/share/petsc/$(PETSC_SONAME_VERSION)/share/petsc/datafiles/matrices/*
	chmod a-x debian/$(PETSC_DEV_EXAMPLE_PACKAGE)/usr/share/petsc/$(PETSC_SONAME_VERSION)/share/petsc/examples/config/example_template.py
	chmod a+x debian/$(PETSC_DEV_EXAMPLE_PACKAGE)/usr/share/petsc/$(PETSC_SONAME_VERSION)/share/petsc/examples/src/ts/tutorials/hybrid/run.sh
	# python auxiliary modules and support files need not be executable
	# let PetscBinaryIO_tests.py remain executable, but add hashbang
	chmod a-x debian/$(PETSC_DEV_COMMON_PACKAGE)/usr/share/petsc/$(PETSC_SONAME_VERSION)/lib/petsc/bin/petsc_conf.py
	chmod a-x debian/$(PETSC_DEV_COMMON_PACKAGE)/usr/share/petsc/$(PETSC_SONAME_VERSION)/lib/petsc/bin/PetscBinaryIO.py
	sed '1 s|^|#!/usr/bin/python3\n|' -i debian/$(PETSC_DEV_COMMON_PACKAGE)/usr/share/petsc/$(PETSC_SONAME_VERSION)/lib/petsc/bin/PetscBinaryIO_tests.py
	# matlab scripts should not be executable
	for matlabdir in `find debian/*/usr -name matlab | grep "petsc/matlab" `; do \
	  find $$matlabdir -name *.m | xargs chmod a-x; \
	  chmod a-x $$matlabdir/laplacianlicense.txt; \
	done

override_dh_python3-indep:
	for p in configureTAS.py extract.py; do chmod a+x debian/$(PETSC_DEV_COMMON_PACKAGE)/usr/share/petsc/$(PETSC_SONAME_VERSION)/lib/petsc/bin/$$p; done
	dh_python3 -i --shebang=/usr/bin/python3
	dh_python3 --shebang=/usr/bin/python3 -p$(PETSC_DEV_COMMON_PACKAGE) /usr/share/petsc/$(PETSC_SONAME_VERSION)/lib/petsc/bin
	dh_python3 --shebang=/usr/bin/python3 -p$(PETSC_DEV_EXAMPLE_PACKAGE) /usr/share/petsc/$(PETSC_SONAME_VERSION)/share/petsc/examples
	dh_python3 --shebang=/usr/bin/python3 -p$(PETSC_DEV_EXAMPLE_PACKAGE) /usr/share/petsc/$(PETSC_SONAME_VERSION)/share/petsc/datafiles

override_dh_python3-arch:
	dh_python3 -a --shebang=/usr/bin/python3

override_dh_installdeb:
	dh_installdeb
	for pkg in $$(dh_listpackages -a); do \
	  sed -i -e 's/__PETSC_SONAME_VERSION__/$(PETSC_SONAME_VERSION)/; s/__PETSC_VERSION__/$(PETSC_VERSION)/; s/__DEB_HOST_MULTIARCH__/$(DEB_HOST_MULTIARCH)/' debian/$$pkg/DEBIAN/*; \
	done

override_dh_gencontrol:
	dh_gencontrol -- -VMPI:Depends="$(MPI_DEPENDS)"

override_dh_strip:
	dh_strip --dbg-package=$(PETSC_REAL_DEBUG_PACKAGE)
	dh_strip --dbg-package=$(PETSC_COMPLEX_DEBUG_PACKAGE)
	dh_strip --dbg-package=$(PETSC64_REAL_DEBUG_PACKAGE)
	dh_strip --dbg-package=$(PETSC64_COMPLEX_DEBUG_PACKAGE)

# a sample binary build is made to build docs, but those binaries are not installed in an arch-indep build
override_dh_missing-indep:
	dh_missing --list-missing

USCAN_DESTDIR := $(CURDIR)

get-orig-source:
	uscan --no-conf --download-current-version --repack --compression xz


debian/control:

Source: petsc
Section: devel
Priority: optional
Maintainer: Debian Science Maintainers <debian-science-maintainers at lists.alioth.debian.org>
Uploaders: "Adam C. Powell, IV" <hazelsct at debian.org>, Drew Parsons <dparsons at debian.org>
Standards-Version: 4.5.1
Build-Depends: debhelper-compat (= 13), python3, gfortran,
 pkg-config, dh-python,
 dh-fortran-mod,
 gdb,
 mpi-default-dev (>= 1.0.2),
 ocl-icd-opencl-dev | opencl-dev,
 libblas-dev | libopenblas-dev | libatlas-base-dev | libblas.so,
 liblapack-dev | libopenblas-dev | libatlas-base-dev | liblapack.so,
 libsuitesparse-dev (>= 1:5.6.0),
 libhypre-dev (>= 2.15.1), libptscotch-dev,
 libhdf5-mpi-dev (>= 1.10.6+repack-1),
 libscalapack-mpi-dev,
 libmumps-dev, libmumps64-dev,
 libfftw3-dev, libfftw3-mpi-dev, libssl-dev,
 libsuperlu-dev (>= 5.2.1), libsuperlu-dist-dev (>= 6.1.1),
 sphinx-common | python3-sphinx | dh-sequence-sphinxdoc
Build-Depends-Indep: libjs-mathjax,
 libjs-jquery, libjs-jquery-ui
Vcs-Git: https://salsa.debian.org/science-team/petsc.git
Vcs-Browser: https://salsa.debian.org/science-team/petsc
Homepage: http://www.mcs.anl.gov/petsc

Package: petsc-dev
Architecture: all
Multi-Arch: foreign
Section: libdevel
Depends: libpetsc-real-dev, ${misc:Depends}
Description: Virtual package depending on latest PETSc development package
 PETSc is the "Portable Extensible Toolkit for Scientific Computation", a suite
 of data structures and routines for the scalable (parallel) solution of
 scientific applications modeled by partial differential equations.  It employs
 the MPI standard for all message-passing communication.  Several sample
 scientific applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This metapackage installs libpetsc-real-dev, which will always depend
 on the most recent version of PETSc with real number support. So if
 you install it then you will get upgrades automatically.

Package: libpetsc-real-dev
Architecture: all
Multi-Arch: foreign
Section: libdevel
Depends: libpetsc-real3.14-dev, ${misc:Depends}
Description: Virtual package depending on latest PETSc development package
 PETSc is the "Portable Extensible Toolkit for Scientific Computation", a suite
 of data structures and routines for the scalable (parallel) solution of
 scientific applications modeled by partial differential equations.  It employs
 the MPI standard for all message-passing communication.  Several sample
 scientific applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This is a dummy package which depends on the most recent version of
 libpetsc-realX-dev with real number support (X=version).

Package: libpetsc-complex-dev
Architecture: all
Multi-Arch: foreign
Section: libdevel
Depends: libpetsc-complex3.14-dev, ${misc:Depends}
Description: Virtual package depending on latest PETSc development package
 PETSc is the "Portable Extensible Toolkit for Scientific Computation", a suite
 of data structures and routines for the scalable (parallel) solution of
 scientific applications modeled by partial differential equations.  It employs
 the MPI standard for all message-passing communication.  Several sample
 scientific applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This is a dummy package which depends on the most recent version of
 libpetsc-complexX-dev with complex number support (X=version).

Package: libpetsc-real3.14-dev
Multi-Arch: same
Architecture: any
Section: libdevel
Depends: libpetsc-real3.14 (= ${binary:Version}),
 libpetsc3.14-dev-common (= ${source:Version}),
 ${MPI:Depends},
 libsuitesparse-dev,
 libhypre-dev (>= 2.15.1), libptscotch-dev, libscalapack-mpi-dev,
 libmumps-dev, libfftw3-dev, libfftw3-mpi-dev, libssl-dev,
 ocl-icd-opencl-dev | opencl-dev,
 gfortran,
 libhdf5-mpi-dev (>= 1.8.8), libsuperlu-dev (>= 5.2), libsuperlu-dist-dev,
 ${misc:Depends}, python3, ${python3:Depends}
Conflicts: libpetsc3.6.3-dev (<< 3.6.3.dfsg2-2), libpetsc-complex-3.6.3-dev (<< 3.6.3.dfsg2-2),
 libpetsc3.6.2-dev (<= 3.6.2.dfsg1-3), libpetsc-complex-3.6.2-dev (<= 3.6.2.dfsg1-3)
Recommends: libpetsc3.14-dev-examples, ksh | mksh | pdksh | zsh
Suggests: petsc-dev, libpetsc-real3.14-dbg (= ${binary:Version}), petsc3.14-doc, libluminate-dev
Description: Static libraries, shared links, header files for PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package provides the development files for building applications
 using PETSc 3.14 with real numbers.

Package: libpetsc-real3.14
Architecture: any
Multi-Arch: same
Section: libs
Provides: libpetsc3.14
Pre-Depends: ${misc:Pre-Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}
Conflicts: libpetsc3.6 (<< 3.6.2.dfsg1-4)
Breaks: libpetsc-real3.10, libslepc-real3.10, libpetsc3.10-dev-common, libpetsc3.10-dev-examples
Replaces: libpetsc3.6 (<< 3.6.2.dfsg1-4)
Description: Shared libraries for version 3.14 of PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package contains the PETSc 3.14 shared library for real numbers.
 .
 It provides soname libpetsc-real3.14

Package: libpetsc3.14-dev-common
Architecture: all
Multi-Arch: foreign
Section: libdevel
Depends: libjs-jquery, libjs-jquery-ui,
 libjs-mathjax,
 ${misc:Depends}, ${python3:Depends},
 ${sphinxdoc:Depends}
Recommends: libpetsc-real3.14-dev | libpetsc-complex3.14-dev
Description: Common header and support dev files for PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package provides header and other support files common to the
 various dev packages (with real or complex number support) for PETSc 3.14.

Package: libpetsc3.14-dev-examples
Architecture: all
Multi-Arch: foreign
Section: libdevel
Depends: ${misc:Depends}, ${python3:Depends},
 libjs-mathjax
Recommends: ksh | mksh | pdksh | zsh,
 libpetsc-real3.14-dev | libpetsc-complex3.14-dev | libpetsc-real3.14-dbg | libpetsc-complex3.14-dbg
Suggests: petsc3.14-doc
Description: Static libraries, shared links, header files for PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package provides example, test, and tutorial scripts for PETSc 3.14.

Package: libpetsc-real3.14-dbg
Architecture: any
Multi-Arch: same
Section: debug
Pre-Depends: ${misc:Pre-Depends}
Depends: libpetsc-real3.14-dev (= ${binary:Version}),
 libpetsc3.14-dev-common (= ${source:Version}),
 ${misc:Depends}, ${shlibs:Depends},
 python3, ${python3:Depends}
Recommends: libpetsc3.14-dev-examples, ksh | mksh | pdksh | zsh
Provides: petsc3.14-dbg
Description: Debugging libraries for PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package provides the development files and debugging libraries for
 debugging applications using PETSc 3.14 with real numbers.
 .
 Libraries include unstripped symbols, but this package is also built with
 internal PETSc debugging activated.

Package: petsc3.14-doc
Architecture: all
Multi-Arch: foreign
Section: doc
Depends: sphinx-common, ${misc:Depends}, ${sphinxdoc:Depends}
Suggests: libpetsc-real3.14-dev (= ${binary:Version}), illuminator-doc
Description: Documentation and examples for PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package contains documentation for developing with PETSc 3.14.

Package: libpetsc-complex3.14-dev
Architecture: any
Multi-Arch: same
Section: libdevel
Depends: libpetsc-complex3.14 (= ${binary:Version}),
 libpetsc3.14-dev-common (= ${source:Version}),
 ${MPI:Depends},
 libsuitesparse-dev,
 libptscotch-dev, libscalapack-mpi-dev,
 libmumps-dev, libfftw3-dev, libfftw3-mpi-dev, libssl-dev,
 ocl-icd-opencl-dev | opencl-dev,
 gfortran,
 libhdf5-mpi-dev (>= 1.8.8), libsuperlu-dev (>= 5.2), libsuperlu-dist-dev,
 ${misc:Depends}, python3, ${python3:Depends}
Conflicts: libpetsc-complex-3.6.3-dev (<< 3.6.3.dfsg2-2), libpetsc3.6.3-dev (<< 3.6.3.dfsg2-2),
 libpetsc3.6.2-dev (<= 3.6.2.dfsg1-3), libpetsc-complex-3.6.2-dev (<= 3.6.2.dfsg1-3)
Recommends: libpetsc3.14-dev-examples, ksh | mksh | pdksh | zsh
Suggests: petsc-dev, libpetsc-complex3.14-dbg (= ${binary:Version}), petsc3.14-doc, libluminate-dev
Description: Static libraries, shared links, header files for PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package provides the development files for building applications
 using PETSc 3.14 with support for complex numbers.
 .
 Note HYPRE is not supported with PETSc complex.

Package: libpetsc-complex3.14
Architecture: any
Multi-Arch: same
Section: libs
Pre-Depends: ${misc:Pre-Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}
Conflicts: libpetsc-complex-3.6 (<< 3.6.2.dfsg1-4)
Breaks: libpetsc-complex3.10, libslepc-complex3.10, libpetsc3.10-dev-common, libpetsc3.10-dev-examples
Replaces: libpetsc-complex-3.6 (<< 3.6.2.dfsg1-4)
Description: Shared libraries for version 3.14 of PETSc with Complex Numbers
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package contains the PETSc 3.14 shared library, supporting
 complex numbers.
 .
 It provides soname libpetsc-complex3.14

Package: libpetsc-complex3.14-dbg
Architecture: any
Multi-Arch: same
Section: debug
Pre-Depends: ${misc:Pre-Depends}
Depends: libpetsc-complex3.14-dev (= ${binary:Version}),
 libpetsc3.14-dev-common (= ${source:Version}),
 ${misc:Depends}, ${shlibs:Depends},
 python3, ${python3:Depends}
Recommends: libpetsc3.14-dev-examples, ksh | mksh | pdksh | zsh
Provides: petsc-complex3.14-dbg
Description: Debugging libraries for PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package provides the development files and debugging libraries for
 debugging applications using PETSc 3.14 with complex number support.
 .
 Libraries include unstripped symbols, but this package is also built with
 internal PETSc debugging activated.

Package: petsc64-dev
Architecture: all
Multi-Arch: foreign
Section: libdevel
Depends: libpetsc64-real-dev, ${misc:Depends}
Description: Virtual package depending on latest 64-bit PETSc development package
 PETSc is the "Portable Extensible Toolkit for Scientific Computation", a suite
 of data structures and routines for the scalable (parallel) solution of
 scientific applications modeled by partial differential equations.  It employs
 the MPI standard for all message-passing communication.  Several sample
 scientific applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This metapackage installs libpetsc64-real-dev, which will always
 depend on the most recent version of PETSc with real number support
 and 64-bit indexing. So if you install it then you will get upgrades
 automatically.

Package: libpetsc64-real-dev
Architecture: all
Multi-Arch: foreign
Section: libdevel
Depends: libpetsc64-real3.14-dev, ${misc:Depends}
Description: Virtual package depending on latest 64-bit PETSc development package
 PETSc is the "Portable Extensible Toolkit for Scientific Computation", a suite
 of data structures and routines for the scalable (parallel) solution of
 scientific applications modeled by partial differential equations.  It employs
 the MPI standard for all message-passing communication.  Several sample
 scientific applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This is a dummy package which depends on the most recent version of
 libpetsc64-realX-dev with real number support and 64-bit indexing
 (X=version).

Package: libpetsc64-complex-dev
Architecture: all
Multi-Arch: foreign
Section: libdevel
Depends: libpetsc64-complex3.14-dev, ${misc:Depends}
Description: Latest 64-bit PETSc development package with complex numbers
 PETSc is the "Portable Extensible Toolkit for Scientific Computation", a suite
 of data structures and routines for the scalable (parallel) solution of
 scientific applications modeled by partial differential equations.  It employs
 the MPI standard for all message-passing communication.  Several sample
 scientific applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This is a dummy package which depends on the most recent version of
 libpetsc64-complexX-dev with complex number support and 64-bit
 indexing (X=version).

Package: libpetsc64-real3.14-dev
Multi-Arch: same
Architecture: any
Section: libdevel
Depends: libpetsc64-real3.14 (= ${binary:Version}),
 libpetsc3.14-dev-common (= ${source:Version}),
 ${MPI:Depends},
 libsuitesparse-dev,
 libhypre-dev (>= 2.15.1), libptscotch-dev, libscalapack-mpi-dev,
 libmumps64-dev, libfftw3-dev, libfftw3-mpi-dev, libssl-dev,
 ocl-icd-opencl-dev | opencl-dev,
 gfortran,
 libhdf5-mpi-dev (>= 1.8.8), libsuperlu-dev (>= 5.2), libsuperlu-dist-dev,
 ${misc:Depends}, python3, ${python3:Depends}
Recommends: libpetsc3.14-dev-examples, ksh | mksh | pdksh | zsh
Suggests: petsc64-dev, libpetsc64-real3.14-dbg (= ${binary:Version}), petsc3.14-doc, libluminate-dev
Description: Static libraries, shared links, header files for 64-bit PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package provides the development files for building applications
 using PETSc 3.14 with real numbers and 64-bit indexing.

Package: libpetsc64-real3.14
Architecture: any
Multi-Arch: same
Section: libs
Provides: libpetsc64-3.14
Pre-Depends: ${misc:Pre-Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Shared libraries for version 3.14 of 64-bit PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package contains the PETSc 3.14 shared library for real numbers
 and 64-bit indexing.
 .
 It provides soname libpetsc-real3.14

Package: libpetsc64i64b-real3.14-dev
Multi-Arch: same
Architecture: any
Section: libdevel
Depends: libpetsc64i64b-real3.14 (= ${binary:Version}),
 libpetsc3.14-dev-common (= ${source:Version}),
 ${MPI:Depends},
 libptscotch-dev, libscalapack-mpi-dev,
 libssl-dev,
 ocl-icd-opencl-dev | opencl-dev,
 gfortran,
 libhdf5-mpi-dev (>= 1.8.8),
 ${misc:Depends}, python3, ${python3:Depends}
Recommends: libpetsc3.14-dev-examples, ksh | mksh | pdksh | zsh
Suggests: petsc64-dev, petsc3.14-doc, libluminate-dev
Description: Static libraries, shared links, header files for 64-bit PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package provides the development files for building applications
 using PETSc 3.14 with real numbers, 64-bit indexing, and 64-bit LAPACK/BLAS.

Package: libpetsc64i64b-real3.14
Architecture: any
Multi-Arch: same
Section: libs
Provides: libpetsc64i64b-3.14
Pre-Depends: ${misc:Pre-Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Shared libraries for version 3.14 of 64-bit PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package contains the PETSc 3.14 shared library for real numbers,
 64-bit indexing, and 64-bit LAPACK/BLAS..
 .
 It provides soname libpetsc-real3.14

Package: libpetsc64-real3.14-dbg
Architecture: any
Multi-Arch: same
Section: debug
Pre-Depends: ${misc:Pre-Depends}
Depends: libpetsc-real3.14-dev (= ${binary:Version}),
 libpetsc3.14-dev-common (= ${source:Version}),
 ${misc:Depends}, ${shlibs:Depends},
 python3, ${python3:Depends}
Recommends: libpetsc3.14-dev-examples, ksh | mksh | pdksh | zsh
Provides: petsc64-3.14-dbg
Description: Debugging libraries for PETSc
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package provides the development files and debugging libraries for
 debugging applications using PETSc 3.14 with real numbers and 64-bit indexing.
 .
 Libraries include unstripped symbols, but this package is also built with
 internal PETSc debugging activated.

Package: libpetsc64-complex3.14-dev
Architecture: any
Multi-Arch: same
Section: libdevel
Depends: libpetsc64-complex3.14 (= ${binary:Version}),
 libpetsc3.14-dev-common (= ${source:Version}),
 ${MPI:Depends},
 libsuitesparse-dev,
 libptscotch-dev, libscalapack-mpi-dev,
 libmumps64-dev, libfftw3-dev, libfftw3-mpi-dev, libssl-dev,
 ocl-icd-opencl-dev | opencl-dev,
 gfortran,
 libhdf5-mpi-dev (>= 1.8.8), libsuperlu-dev (>= 5.2), libsuperlu-dist-dev,
 ${misc:Depends}, python3, ${python3:Depends}
Recommends: libpetsc3.14-dev-examples, ksh | mksh | pdksh | zsh
Suggests: petsc64-dev, libpetsc64-complex3.14-dbg (= ${binary:Version}), petsc3.14-doc, libluminate-dev
Description: Development files for 64-bit PETSc with complex numbers
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package provides the development files for building applications
 using PETSc 3.14 with support for complex numbers and 64-bit
 indexing.
 .
 Note HYPRE is not supported with PETSc complex.

Package: libpetsc64-complex3.14
Architecture: any
Multi-Arch: same
Section: libs
Pre-Depends: ${misc:Pre-Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Shared libraries for version 3.14 of 64-bit PETSc with Complex Numbers
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package contains the PETSc 3.14 shared library, supporting
 complex numbers and 64-bit indexing.
 .
 It provides soname libpetsc64-complex3.14

Package: libpetsc64-complex3.14-dbg
Architecture: any
Multi-Arch: same
Section: debug
Pre-Depends: ${misc:Pre-Depends}
Depends: libpetsc64-complex3.14-dev (= ${binary:Version}),
 libpetsc3.14-dev-common (= ${source:Version}),
 ${misc:Depends}, ${shlibs:Depends},
 python3, ${python3:Depends}
Recommends: libpetsc3.14-dev-examples, ksh | mksh | pdksh | zsh
Provides: petsc64-complex3.14-dbg
Description: Debugging libraries for 64-bit PETSc with Complex Numbers
 PETSc is the "Portable Extensible Toolkit for Scientific
 Computation", a suite of data structures and routines for the
 scalable (parallel) solution of scientific applications modeled by
 partial differential equations.  It employs the MPI standard for all
 message-passing communication.  Several sample scientific
 applications, as well as various papers and talks, demonstrate the
 features of the PETSc libraries.
 .
 This package provides the development files and debugging libraries
 for debugging applications using PETSc 3.14 with complex number
 support and 64-bit indexing.
 .
 Libraries include unstripped symbols, but this package is also built
 with internal PETSc debugging activated.


debian/libpetsc64i64b-real3.14-dev.dirs:

/usr/share/octave/site/m


debian/libpetsc64i64b-real3.14-dev.docs:

debian/README.Debian


debian/libpetsc64i64b-real3.14-dev.fortran-mod:

#! /bin/sh
for modpath in debian/tmp/petsc64b-${PETSC_SONAME_VERSION}-real/${PETSC64B_REAL_DIR_PREFIX}/include/*.mod; do
  modfile=$(basename $modpath)
  echo ${modpath} ${PETSC64B_REAL_DIR_PREFIX}/include
done


debian/libpetsc64i64b-real3.14-dev.links:

#! /bin/sh
echo usr/lib/${DEB_HOST_MULTIARCH}/libpetsc64i64b_real.so.${PETSC_VERSION}  ${PETSC64B_REAL_DIR_PREFIX}/lib/libpetsc64i64b_real.so.${PETSC_VERSION}
for common in include/petsc lib/petsc/bin share; do
  echo usr/share/petsc/${PETSC_SONAME_VERSION}/${common} ${PETSC64B_REAL_DIR_PREFIX}/${common}
done
echo ${PETSC64B_REAL_DIR_PREFIX}/lib/pkgconfig/petsc.pc ${PETSC64B_REAL_DIR_PREFIX}/lib/pkgconfig/petsc64.pc
echo ${PETSC64B_REAL_DIR_PREFIX}/lib/pkgconfig/PETSc.pc ${PETSC64B_REAL_DIR_PREFIX}/lib/pkgconfig/PETSc64.pc


debian/libpetsc64i64b-real3.14-dev.lintian-overrides:

# False positive: the copyright notice is somewhat buried in the upstream text
copyright-without-copyright-notice
# common arch-indep files are installed in usr/share/petsc
breakout-link usr/lib/petscdir/petsc* -> usr/share/petsc/*
# link actual libraries in PETSC_DIR to usr/lib/<arch>
breakout-link usr/lib/petscdir/petsc* -> usr/lib/*


debian/libpetsc64i64b-real3.14-dev.postinst:

#!/bin/sh -e

DEB_HOST_MULTIARCH=__DEB_HOST_MULTIARCH__

SONAME=__PETSC_SONAME_VERSION__

PETSC_VERSION=__PETSC_VERSION__
PETSC_ARCH=${DEB_HOST_MULTIARCH}
PETSC_REAL_ARCH=${PETSC_ARCH}-real
PETSC_VERSION_NUMBER=$( echo ${PETSC_VERSION} | sed "s/\.//g" )
PETSC_SONAME_VERSION=__PETSC_SONAME_VERSION__
PETSC64B_NAME=petsc64b-${PETSC_SONAME_VERSION}

PETSC64B_DIR_REAL=/usr/lib/petscdir/${PETSC64B_NAME}/${PETSC_REAL_ARCH}

# Make alternatives links
if [ "$1" = "configure" ]; then

# alternative default petsc (e.g. real or complex)
update-alternatives --install /usr/lib/petsc64b petsc64b ${PETSC64B_DIR_REAL} ${PETSC_VERSION_NUMBER}75 \
  --slave /usr/lib/${DEB_HOST_MULTIARCH}/libpetsc64i64b.so libpetsc64i64b.so /usr/lib/${DEB_HOST_MULTIARCH}/libpetsc64i64b_real.so.${PETSC_VERSION} \
  --slave /usr/include/petsc64b petsc64binclude ${PETSC64B_DIR_REAL}/include \
  --slave /usr/share/octave/site/m/petsc64b petsc64b-octave ${PETSC64B_DIR_REAL}/share/petsc/matlab

# alternative base version of petsc real
update-alternatives --install /usr/lib/${DEB_HOST_MULTIARCH}/libpetsc64i64b_real.so libpetsc64i64b_real.so /usr/lib/${DEB_HOST_MULTIARCH}/libpetsc64i64b_real.so.${PETSC_VERSION} ${PETSC_VERSION_NUMBER}77 \
  --slave /usr/lib/petscdir/petsc64b-real petsc64b-real ${PETSC64B_DIR_REAL}

# alternative petsc for this X.Y soname (e.g. real or complex)
update-alternatives --install /usr/lib/petscdir/64b-${SONAME} petsc64b-${SONAME} ${PETSC64B_DIR_REAL} ${PETSC_VERSION_NUMBER}77

fi


#DEBHELPER#


debian/libpetsc64i64b-real3.14-dev.prerm:

#!/bin/sh -e

DEB_HOST_MULTIARCH=__DEB_HOST_MULTIARCH__

SONAME=__PETSC_SONAME_VERSION__

PETSC_VERSION=__PETSC_VERSION__
PETSC_ARCH=${DEB_HOST_MULTIARCH}
PETSC_REAL_ARCH=${PETSC_ARCH}-real
PETSC_SONAME_VERSION=__PETSC_SONAME_VERSION__
PETSC64B_NAME=petsc64b-${PETSC_SONAME_VERSION}

PETSC64B_DIR_REAL=/usr/lib/petscdir/${PETSC64B_NAME}/${PETSC_REAL_ARCH}

# Remove alternatives links
if [ "$1" = "remove" ]; then
  update-alternatives --remove petsc64b ${PETSC64B_DIR_REAL}
  update-alternatives --remove libpetsc64i64b_real.so /usr/lib/${DEB_HOST_MULTIARCH}/libpetsc64i64b_real.so.${PETSC_VERSION}

  # remove general X.Y soname alternatives
  update-alternatives --remove petsc64b-${SONAME} ${PETSC64B_DIR_REAL}

fi

#DEBHELPER#


debian/libpetsc64i64b-real3.14.links:

#! /bin/sh
echo usr/lib/${DEB_HOST_MULTIARCH}/libpetsc64i64b_real.so.${PETSC_VERSION} usr/lib/${DEB_HOST_MULTIARCH}/libpetsc64i64b_real.so.${PETSC_SONAME_VERSION}


debian/libpetsc64i64b-real3.14.lintian-overrides:

# libpetsc64.so.X.Y soname links are managed by alternatives (libpetc64.so.X.Y)
ldconfig-symlink-missing-for-shlib usr/lib/*/libpetsc64i64b.so.* usr/lib/*/libpetsc64i64b-real.so.* libpetsc64i64b.so.*

# libpetsc_real.so is handled by alternatives in libpetsc64-realX.Y-dev
dev-pkg-without-shlib-symlink usr/lib/*/libpetsc64i64b_real.so.* usr/lib/*/libpetsc64i64b_real.so


debian/libpetsc64i64b-real3.14.postinst:

#!/bin/sh -e

DEB_HOST_MULTIARCH=__DEB_HOST_MULTIARCH__

PETSC_VERSION=__PETSC_VERSION__
PETSC_VERSION_NUMBER=$( echo ${PETSC_VERSION} | sed "s/\.//g" )
SONAME=__PETSC_SONAME_VERSION__

# Make alternatives links
if [ "$1" = "configure" ]; then
  # alternative petsc version (for given soname), real or complex
  update-alternatives --install /usr/lib/${DEB_HOST_MULTIARCH}/libpetsc64i64b.so.${SONAME} libpetsc64i64b.so.${SONAME} /usr/lib/${DEB_HOST_MULTIARCH}/libpetsc64i64b_real.so.${PETSC_VERSION} ${PETSC_VERSION_NUMBER}77
fi

#DEBHELPER#


debian/libpetsc64i64b-real3.14.prerm:

#!/bin/sh -e

DEB_HOST_MULTIARCH=__DEB_HOST_MULTIARCH__
PETSC_VERSION=__PETSC_VERSION__
SONAME=__PETSC_SONAME_VERSION__

# Remove alternatives links
if [ "$1" = "remove" ]; then
  update-alternatives --remove libpetsc64i64b.so.${SONAME} /usr/lib/${DEB_HOST_MULTIARCH}/libpetsc64i64b_real.so.${PETSC_VERSION}
fi

#DEBHELPER#



More information about the debian-science-maintainers mailing list