summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authoreDgar2021-09-19 20:20:43 -0500
committereDgar2021-09-19 20:20:43 -0500
commit797eae7e2136892b394836ecd75cd45b3fbb1aa1 (patch)
tree34a15b5938ff128312b60505bd965a80e3d1e3f7
parent483c0558a92ca886d9cbaec70948f088f8563101 (diff)
downloadaur-797eae7e2136892b394836ecd75cd45b3fbb1aa1.tar.gz
Squashed commit of the following:
commit b1d62b2e31965eb7aecf2af6aa63b3623cc6ae62 Author: eDgar <eDgar_|at|_openmail.cc> Date: Sat Sep 18 14:59:25 2021 -0500 upd8 SRCINFO commit 76d2570563dac06c24a8b6e1af07a415947b269e Author: eDgar <eDgar_|at|_openmail.cc> Date: Sat Sep 18 14:15:31 2021 -0500 upd8 contribs, move flags to CONFOPTS, rm LD_PRELOAD libfakeroot commit 95a9ee5d8ab02cb266b9987e9c34f043c3f8ebb2 Author: eDgar <eDgar_|at|_openmail.cc> Date: Sat Sep 18 14:15:11 2021 -0500 test_optdepends: use type instead of which where appropriate commit 3cd56907d05db1e243cf5967c3ff6db1e7e13386 Author: eDgar <eDgar_|at|_openmail.cc> Date: Sat Sep 18 00:18:31 2021 -0500 3.15.4; fix petsc4py with patch (SUDO_USER) commit 594139c1e91a1df97b7964b4f829786c43116240 Author: eDgar <edgar@openmail.cc> Date: Fri Sep 17 17:49:39 2021 -0500 disable env flags; enable debug messages (make tests); move sed BlasLapack.py into build commit 91af4923fc0348e2f6e5b46b2ad0e9f2bac873c4 Author: eDgar <eDgar_|at|_openmail.cc> Date: Fri Sep 17 16:40:31 2021 -0500 test_optdepends.sh: GDB, comment out OpenGL (not working) commit e06da72ea7b391d44f45b14135ef414374866440 Author: eDgar <eDgar_|at|_openmail.cc> Date: Fri Sep 17 16:38:42 2021 -0500 3.15.4, get rid of BlasLapack.py (testing) commit 666743cdc9920832e4efee7e4c29bcf2f7da3ce3 Author: eDgar <eDgar_|at|_openmail.cc> Date: Fri Sep 17 16:37:15 2021 -0500 _base, remove _config, clean CONFOPTS commit 52f73e80d4da9f75a1b2f961376c85f2dcd95945 Author: eDgar <eDgar_|at|_openmail.cc> Date: Tue Aug 31 01:08:18 2021 -0500 add pets4py by means of PYTHONPATH commit a08bf9f41335bea69bc68a24d8fd59ff6779a796 Author: eDgar <eDgar_|at|_openmail.cc> Date: Tue Aug 31 01:07:23 2021 -0500 remove cruft (comments) and add legibility commit 878a7afa08083d5ada268ea77a4c2c54570bccd2 Author: eDgar <eDgar_|at|_openmail.cc> Date: Tue Aug 31 01:04:06 2021 -0500 use git release in pkgversion instead of date commit 9b4cc7b57cb785f71344e5a7f46e52f093f1de8b Author: eDgar <eDgar_|at|_openmail.cc> Date: Tue Aug 31 01:03:33 2021 -0500 /usr/local → /usr commit 48647091e2d5d40da337e1c90318d448d65abc72 Author: eDgar <eDgar_|at|_openmail.cc> Date: Tue Aug 31 01:02:47 2021 -0500 change top-legend commit 4cbe05b6a9a2135abde29e8d3b12d795ff851c37 Author: eDgar <eDgar_|at|_openmail.cc> Date: Tue Aug 31 01:02:13 2021 -0500 Make description much shorter commit c43a1d27045c3b4daa920ec07928efa4da38d11f Author: eDgar <edgar@openmail.cc> Date: Sun Aug 29 12:44:09 2021 -0500 silent make, better pkgver, march=native commit cc9bcc54dd9721fdcdc97c0558701309a268968e Author: eDgar <edgar@openmail.cc> Date: Sun Aug 29 12:42:10 2021 -0500 enable X (libX11.so; for ksp_xmonitor) commit b03b8a642ad55fc755111657d5116236a55b1e9d Author: eDgar <edgar@openmail.cc> Date: Mon Aug 16 17:23:58 2021 -0500 remove petsc4py (not working); split package to petsc{,-doc} commit b66ba61a72cb28df67b119e631096a9ea8773111 Author: eDgar <edgar@openmail.cc> Date: Thu Aug 5 09:26:21 2021 -0500 test_optdepends.sh: openblas with pkgconfig commit 2ee1827afab76692742fe23149936e2152c12c75 Author: eDgar <edgar@openmail.cc> Date: Wed Aug 4 22:50:06 2021 -0500 hypre is makedepends, not optdepends commit 28571fb8ce884e009bd84bd7cd1afc414bcda39b Author: eDgar <edgar@openmail.cc> Date: Fri May 21 00:43:24 2021 -0500 flags in multi-lines, set libHYPRE.so directly commit f9eb15bd087212a5eef9a369e22a88d859fce15e Author: eDgar <edgar@openmail.cc> Date: Wed May 19 09:56:06 2021 -0500 use whereis, ldconfig, pkgconf to find optional deps commit 1057e3d5e8db9faaf99a6c397fa186232e3cbcf6 Author: eDgar <edgar@openmail.cc> Date: Tue May 18 13:04:49 2021 -0500 remove petsc4py.patch commit 98e3afef3525b2d44d3ac419adb9c87d47cfdf03 Author: eDgar <edgar@openmail.cc> Date: Tue May 18 12:00:57 2021 -0500 clean flags (add doc), sane petsc4py, resort optdepends, staticlibs commit 12884b165c3017a87a2da2bb40b8b5758b493ac2 Author: eDgar <edgar@openmail.cc> Date: Wed May 12 13:58:54 2021 -0500 use ldconfig with test_optdepends.sh commit 53d06c02010af2da62a7e78475affa60912eba22 Author: eDgar <edgar@openmail.cc> Date: Mon Mar 15 16:21:38 2021 -0600 recover missing directories from AUR; add option for petsc4py commit cc36baddff61dfa2a3bd158301d2729cd45250b9 Author: eDgar <edgar@openmail.cc> Date: Mon Mar 15 00:06:32 2021 -0600 use python instead of python2 commit afe93d89fb79ccc1f1b2647d0351bb2bbabc0d71 Author: Lucas Heitzmann Gabrielli <heitzmann@gmail.com> Date: Wed Feb 3 17:03:02 2021 -0300 Fix petsc4py build commit 1260bb53b9c1ddbe8814504ed46adb8a644a7933 Author: Lucas Heitzmann Gabrielli <heitzmann@gmail.com> Date: Tue May 12 12:13:21 2020 -0300 Changes by eDgar: use test_optdepends, remove patch commit 2a92162ebdef2c5e2fba43eeded92499713927aa Author: eDgar <edgar@openmail.cc> Date: Tue May 12 23:21:34 2020 -0500 improve dependencies (whereis, add zlib); use slepc-maint (heitzmann) commit 92ccc72c2dfa39630e7597917fce3b2b6b6cd0d7 Author: eDgar <edgar@openmail.cc> Date: Mon May 11 21:29:50 2020 -0500 OpenCL > test_optdepends.sh commit bdb874186d686eb8cd9255156cd5a87f49828aff Author: eDgar <edgar@openmail.cc> Date: Sun May 10 18:50:20 2020 -0500 mtune=generic commit 37ec0108f6ccdb87f759c0e1a537d228ab187f17 Author: eDgar <edgar@openmail.cc> Date: Sun May 10 18:21:35 2020 -0500 update deps: sowing,med>=4.0/add FORTIFY-SOURCE=2 to flags commit e3d46fcf98e9f3aad40be3f66913d139f872c518 Author: eDgar <edgar@openmail.cc> Date: Mon Dec 30 15:29:26 2019 +0100 export flags for all functions; del flags also in test_optdepends commit 538517d9ca8e28b4d7263af91ad4eab8834235aa Author: eDgar <edgar@openmail.cc> Date: Wed Dec 25 19:25:01 2019 +0100 Added openblas (hacked BlasLapack.py) commit ed0b0b66dc38da1a2b68be1185ad557d1201c5e6 Author: eDgar <edgar@openmail.cc> Date: Sat Dec 21 22:22:36 2019 +0100 enable openmp, hwloc, opengl, eigen, cgns, libpng commit 05e824313dc9b367bd0d34ee22f5f70da936a4f4 Author: eDgar <edgar@openmail.cc> Date: Fri Dec 20 22:06:17 2019 +0100 generic_flags; future extra packages list commit d623eca1b515d52149ceae860a5c479d60584b7b Author: eDgar <edgar@openmail.cc> Date: Fri Dec 20 10:31:34 2019 +0100 openmpi=4, test_optdepends commit 3fc79265b9729b90846da4cbacc315fe5de62677 Author: eDgar <edgar@openmail.cc> Date: Mon Nov 4 15:52:49 2019 +0100 custom build eDgar
-rw-r--r--.SRCINFO70
-rw-r--r--.gitignore8
-rw-r--r--PKGBUILD363
-rw-r--r--blaslapack_download.patch11
-rw-r--r--petsc4py_newuser.patch11
-rw-r--r--test_optdepends.sh276
6 files changed, 553 insertions, 186 deletions
diff --git a/.SRCINFO b/.SRCINFO
index d92aa7e9191d..19595c3fe45a 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,9 +1,8 @@
pkgbase = petsc-git
- pkgdesc = Portable, extensible toolkit for scientific computation (external downloads enabled)
- pkgver = 20210515
- pkgrel = 1
+ pkgdesc = Portable, extensible toolkit for scientific computation
+ pkgver = 3.15.4.27.g1085e15b135
+ pkgrel = 2
url = https://gitlab.com/petsc/petsc
- install = petsc.install
arch = i686
arch = x86_64
license = BSD
@@ -11,31 +10,60 @@ pkgbase = petsc-git
makedepends = gcc-fortran
makedepends = cmake
makedepends = sowing
- makedepends = python
makedepends = git
makedepends = cython
makedepends = chrpath
+ makedepends = hypre=2.18.2
depends = openmpi
depends = lapack
depends = fftw
- depends = hdf5
- depends = suitesparse
- depends = metis
- depends = parmetis
- depends = superlu
- depends = eigen
+ depends = zlib
depends = cython
depends = python-mpi4py
- optdepends = opencl: GPU computing
- optdepends = hwloc: hardware locality
- optdepends = cgns: CFD data support
- optdepends = libpng: PNG support
- optdepends = libyaml: YAML configuration support
- optdepends = libx11: GUI tools
- provides = petsc
- conflicts = petsc
- source = petsc::git+https://gitlab.com/petsc/petsc.git#branch=release
- sha256sums = SKIP
+ depends = python-numpy
+ depends = eigen>=3
+ depends = openblas
+ options = !staticlibs
+ source = git+https://gitlab.com/petsc/petsc.git#branch=release
+ source = https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-with-docs-3.15.4.tar.gz
+ source = test_optdepends.sh
+ source = petsc4py_newuser.patch
+ source = blaslapack_download.patch
+ sha512sums = SKIP
+ sha512sums = b6a1d48aab1c2639a4c1cbd8b313ace253f1c36eedaa3de3508ffbd6060e1def99e2f516ed9bb509307f614b41791d09342e2c2280c0b2c25dda1092b0e569d2
+ sha512sums = 2c2c48f6b87e24b6f5fccfd2a6eb0889d47385c0be7ba14614c55c774f8b915c33a5d5ec5cc1637d41f7407423b77ac1bcc129bfa3d7967bb917ad8d1de3a6b5
+ sha512sums = 038f4f54cb8771590b528e41666f33095d9381bf07636c53841293a3937faeb8604bfe3cb98fac588b647661ea74602e6c261cf7809e0cec7ed086e8b01b5f01
+ sha512sums = af899ea1d06bf6d4cee1c1fe86902ba2772d1001caf00e89363c6217fed9dd837588ee6f7f827ca8b8fd2a01316fbcd73d98874e28d452af71b9598127b6f179
pkgname = petsc-git
+ optdepends = boost: Free peer-reviewed portable C++ source libraries
+ optdepends = cgns: Recording and recovering computer data
+ optdepends = eigen: Lightweight C++ template library for vector and matrix math
+ optdepends = fftw: Fast-Fourier Transform
+ optdepends = gdb: Debugging
+ optdepends = hdf5: large files
+ optdepends = hwloc: Portable Hardware Locality (abstraction of hierarchical architectures)
+ optdepends = med>=4.0: Data Modelization and Exchanges (meshes)
+ optdepends = metis: Partitioning library (for meshes)
+ optdepends = mumps: Sparse solver library
+ optdepends = openblas: Linear algebra libraries
+ optdepends = opencl-headers: for opencl (GPU computing)
+ optdepends = opencl: GPU computing
+ optdepends = openmp: Parallel distributed tasks
+ optdepends = png
+ optdepends = scalapack: Parallel memory linear algebra
+ optdepends = scotch: Partitioning with sparse matrices
+ optdepends = suitesparse: Sparse matrix library
+ optdepends = superlu: Subroutines for sparsse linear systems
+ optdepends = yaml: configuration files
+ provides = petsc=3.15.4
+ provides = petsc4py=3.15.4
+ conflicts = petsc
+pkgname = petsc-doc
+ pkgdesc = Documentation for PETSc
+ depends =
+ optdepends =
+ provides = petsc-doc
+ conflicts =
+ replaces = petsc-doc
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..08ab33d380f9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+*.pkg.tar.xz
+pkg
+src
+*\~
+*.bak
+*.tar.gz
+
+petsc
diff --git a/PKGBUILD b/PKGBUILD
index f3f71eba69e6..3faeaf62c4b0 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,179 +1,212 @@
-# Maintainer: Lucas H. Gabrielli <heitzmann@gmail.com>
+# Based on AUR petsc and petsc-git package.
-pkgname=petsc-git
-pkgver=20210515
-pkgrel=1
-_config=linux-c-opt
-pkgdesc="Portable, extensible toolkit for scientific computation (external downloads enabled)"
-provides=(petsc)
-conflicts=(petsc)
+# Contributor: Lucas H. Gabrielli <heitzmann@gmail.com>
+# Contributor: Martin Diehl <aur@martin-diehl.net>
+
+_base=petsc
+pkgname=("${_base}"-git "${_base}"-doc)
+pkgver=3.15.4.27.g1085e15b135
+pkgrel=2
+_mainver="${pkgver:0:6}"
+pkgdesc="Portable, extensible toolkit for scientific computation"
arch=('i686' 'x86_64')
-url="https://gitlab.com/petsc/petsc"
+url="https://gitlab.com/petsc/${_base}"
license=('BSD')
-depends=('openmpi' 'lapack' 'fftw' 'hdf5' 'suitesparse' 'metis' 'parmetis' 'superlu' 'eigen' 'cython' 'python-mpi4py')
-makedepends=('gcc' 'gcc-fortran' 'cmake' 'sowing' 'python' 'git' 'cython' 'chrpath')
-optdepends=("opencl: GPU computing"
- "hwloc: hardware locality"
- "cgns: CFD data support"
- "libpng: PNG support"
- "libyaml: YAML configuration support"
- "libx11: GUI tools")
-install=petsc.install
-source=(petsc::git+https://gitlab.com/petsc/petsc.git#branch=release)
-sha256sums=('SKIP')
-
-_petsc_arch="arch-${_config}"
-_petsc_dir='/usr/local/petsc'
-_install_dir="${_petsc_dir}/${_config}"
-
-generic_flags="-fPIC -fopenmp -O3 -march=x86-64 -mtune=generic"
-# generic_flags="-fPIC -fopenmp -O3 -march=amdfam10 -mtune=generic"
-
-export COPTFLAGS=-O3
-export CXXOPTFLAGS=-O3
-export FOPTFLAGS=-O3
-export CPPFLAGS="$generic_flags -O2 -D-FORTIFY-SOURCE=2"
-export CFLAGS="$generic_flags"
-export CXXFLAGS="$generic_flags"
-export FFLAGS="$generic_flags"
-export FCFLAGS="$generic_flags"
-export F90FLAGS="$generic_flags"
-export F77FLAGS="$generic_flags"
-
-
-pkgver() {
- cd petsc
- git log --format="%cd" --date=short -1 | sed 's/-//g'
-}
+options=(!staticlibs)
+depends=('openmpi' 'lapack' 'fftw' 'zlib' 'cython'
+ 'python-mpi4py' "python-numpy" "eigen>=3" "openblas")
+makedepends=('gcc' 'gcc-fortran' 'cmake' 'sowing'
+ 'git' 'cython' 'chrpath' "hypre=2.18.2")
+source=(git+${url}.git#branch=release
+ https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-with-docs-"${_mainver}".tar.gz
+ test_optdepends.sh
+ petsc4py_newuser.patch
+ blaslapack_download.patch)
+sha512sums=('SKIP'
+ 'b6a1d48aab1c2639a4c1cbd8b313ace253f1c36eedaa3de3508ffbd6060e1def99e2f516ed9bb509307f614b41791d09342e2c2280c0b2c25dda1092b0e569d2'
+ '2c2c48f6b87e24b6f5fccfd2a6eb0889d47385c0be7ba14614c55c774f8b915c33a5d5ec5cc1637d41f7407423b77ac1bcc129bfa3d7967bb917ad8d1de3a6b5'
+ '038f4f54cb8771590b528e41666f33095d9381bf07636c53841293a3937faeb8604bfe3cb98fac588b647661ea74602e6c261cf7809e0cec7ed086e8b01b5f01'
+ 'af899ea1d06bf6d4cee1c1fe86902ba2772d1001caf00e89363c6217fed9dd837588ee6f7f827ca8b8fd2a01316fbcd73d98874e28d452af71b9598127b6f179')
+_config=linux-c-opt
+_install_dir="/usr"
+
+# From UPC: Building And Using Static And Shared "C"
+# Libraries.html
+# #+begin_QUOTE
+# we need that all jump calls ("goto", in assembly speak)
+# and subroutine calls will use relative addresses, and not
+# absolute addresses. Thus, we need to use ... ~-fPIC~ or
+# ~-fpic~
+# #+end_QUOTE
+#
+# From makepkg.conf
+# -march (or -mcpu) builds exclusively for an architecture
+# -mtune optimizes for an architecture, but builds for
+# whole processor family
+#
+# -O3 optimises
+#
+# -D-FORTIFY-SOURCE=2
+# | https://stackoverflow.com/a/16604146
+# |- man 7 feature_test_macros
+# checks to be performed to detect some buffer overflow
+# errors when employing various string and memory
+# manipulation functions ... some conforming programs
+# might fail
+#
+# -fcf-protection
+# | Info pages for gcc (gnu compiler collection)
+# intended to protect against such threats as
+# Return-oriented Programming (ROP), and similarly
+# call/jmp-oriented programming (COP/JOP)
+#
+# -pipe
+# | Info pages for gcc (controlling the kind of output)
+# Use pipes rather than temporary files for communication
+# between the various stages of compilation
+#
+# -fno-plt
+# | Info pages for gcc (code generation conventions)
+# leads to more efficient code by eliminating PLT stubs and
+# exposing GOT loads to optimizations
+#
+# -fopenmp
+# | Info pages for gcc (controlling c dialect)
+# Enable handling of OpenMP directives
+#
+
+safe_flags="-Wp,-D-FORTIFY-SOURCE=2,-D_GLIBCXX_ASSERTIONS"
+safe_flags+=" -fcf-protection -fno-plt"
+safe_flags+=" -fstack-clash-protection -Wformat"
+safe_flags+=" -Werror=format-security"
+generic_flags="-pipe -fno-plt -fPIC -fopenmp"
+generic_flags+=" -march=native"
+generic_flags+=" -mtune=native ${safe_flags}"
+opt_flags="${generic_flags} -O3"
+generic_flags="${generic_flags} -O2"
+
+export LANG=C
+export OMPI_MCA_opal_cuda_support=0
+unset PETSC_DIR
+export PETSC_ARCH=${_config}
prepare() {
- cd "${srcdir}/petsc"
- sed -i 's-\(self.publicInstall[^=]*=[[:space:]]\)[^#]*-\10 -g' config/BuildSystem/config/package.py
+ patch -p1 -i blaslapack_download.patch
+ patch -p1 -i petsc4py_newuser.patch
}
-
-build() {
- cd petsc
-
- declare -a CONFOPTS
- CONFOPTS=(
- --COPTFLAGS="$COPTFLAGS"
- --CXXOPTFLAGS="$CXXOPTFLAGS"
- --CPPFLAGS="$CPPFLAGS"
- --CFLAGS="$CFLAGS"
- --CXXFLAGS="$CXXFLAGS"
- --FFLAGS="$FFLAGS"
- --FCFLAGS="$FCFLAGS"
- --F90FLAGS="$F90FLAGS"
- --F77FLAGS="$F77FLAGS"
-
- --with-cxx-dialect=C++11
- --with-mpi=1
- --with-pic=1
- --with-shared-libraries=1
- --with-zlib=1
-
- --with-fftw=1
- --with-hdf5=1
- --with-suitesparse=1
-
- --with-parmetis=1
- --with-metis=1
- --with-superlu=1
- --with-superlu-include=/usr/include/superlu
- --with-superlu-lib=superlu
- --with-eigen=1
- --with-eigen-pkg-config=/usr/share/pkgconfig
-
- --with-scalar-type=complex
-
- --download-scotch=1
- --download-ptscotch=1
- --download-mumps=1
- --download-scalapack=1
- --download-hypre=1
- )
-
- CONFOPTS=( "${CONFOPTS[@]}" )
-
- # Add OpenCL support
- OPENCL_DIR="/usr/include/CL/"
- if [ -f "${OPENCL_DIR}/cl.h" ]; then
- CONFOPTS="${CONFOPTS} --with-opencl=1"
- fi
-
- # Add hwloc support
- if [ -f "/usr/lib/libhwloc.so" ]; then
- CONFOPTS="${CONFOPTS} --with-hwloc=1 --with-hwloc-pkg-config=/usr/lib/pkgconfig/"
- fi
-
- # Add CGNS support
- if [ -f "/usr/lib/libcgns.so" ]; then
- CONFOPTS="${CONFOPTS} --with-cgns=1"
- fi
-
- # Add PNG support
- if [ -f "/usr/lib/libpng.so" ]; then
- CONFOPTS="${CONFOPTS} --with-png=1 --with-png-pkg-config=/usr/lib/pkgconfig/"
- fi
-
- # Add YAML support
- if [ -f "/usr/lib/libyaml.so" ]; then
- CONFOPTS="${CONFOPTS} --with-yaml=1 --with-yaml-pkg-config=/usr/lib/pkgconfig/"
- fi
-
- # if --with-debugging=1 is set then PETSC_ARCH is automatically set to
- # "linux-c-debug" for some things, so _config should be changed to "linux-c-debug"
- #CONFOPTS="${CONFOPTS} --with-debugging=1"
-
- export PETSC_DIR="${srcdir}/petsc"
- export PETSC_ARCH="${_petsc_arch}"
-
- python ./configure LDFLAGS="$LDFLAGS" \
- --prefix="${_install_dir}" \
- --MAKEFLAGS="$MAKEFLAGS" \
- $(for (( i=1; i<=${#CONFOPTS[@]}; i++)); do echo "${CONFOPTS[$i]}"; done)
-
- make all
+pkgver() {
+ cd "${srcdir}"/"${_base}"
+ git describe --tags --match '*.*' | tr '-' '.' | sed 's-^v--'
}
-package() {
- cd petsc
-
- _build_dir="${srcdir}/petsc"
-
- export PETSC_DIR=${_build_dir}
- export PETSC_ARCH="${_petsc_arch}"
-
- make DESTDIR="${pkgdir}" install
-
- # petsc4py
- pushd ${_build_dir}/src/binding/petsc4py
- CFLAGS="$(echo "${CFLAGS}" | sed 's%-D[^[:space:]]*%%g')" python setup.py install --root="${pkgdir}"
- popd
-
- # install license
- install -Dm 644 ${_build_dir}/LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
-
- mkdir -p "${pkgdir}/etc/profile.d"
- printf "export PETSC_DIR=${_install_dir}" > "${pkgdir}/etc/profile.d/petsc.sh"
- chmod +x "${pkgdir}/etc/profile.d/petsc.sh"
-
- # show where the shared libraries are
- install -dm 755 "${pkgdir}/etc/ld.so.conf.d/"
- printf "${_install_dir}/lib" > "${pkgdir}/etc/ld.so.conf.d/petsc.conf"
+build() {
- printf "PETSC_DIR = ${_petsc_dir}\nPETSC_ARCH = ${_petsc_arch}" \
- > "${pkgdir}/usr/lib/python3.9/site-packages/petsc4py/lib/petsc.cfg"
+ CONFOPTS=(
+ --silent --enable-silent-rules
+ --ignoreWarnings=1
+ --prefix="${_install_dir}"
+ --COPTFLAGS="${opt_flags}"
+ --CXXOPTFLAGS="${opt_flags}"
+ --FOPTFLAGS="${opt_flags}"
+ --CFLAGS="${generic_flags}"
+ --CXXFLAGS="$generic_flags"
+ --CPPFLAGS="$generic_flags"
+ --FCFLAGS="$generic_flags"
+ --F90FLAGS="$generic_flags"
+ --FFLAGS="$generic_flags"
+ --MAKEFLAGS=${MAKEFLAGS}
+ --LDFLAGS=${LDFLAGS}
+ --with-environment-variables=0
+ --disable-environment-variables=1
+ --with-cxx-dialect=auto
+ --with-mpi=1
+ --with-pic=1
+ --with-shared-libraries=1
+ --with-zlib=1
+ --with-petsc4py=1
+ --with-scalar-type=complex
+ --with-single-library=1
+ " $(sh ${srcdir}/test_optdepends.sh)")
+
+ cd "${srcdir}"/"${_base}"
+ python ./configure ${CONFOPTS[@]}
+
+ make -s ${MAKEFLAGS} all
+}
- _rem_dir="${_build_dir}/${_petsc_arch}"
+check() {
+ cd "${srcdir}"/"${_base}"
+ make check
+ }
+
+package_petsc-git() {
+ optdepends=(
+ "boost: Free peer-reviewed portable C++ source libraries"
+ "cgns: Recording and recovering computer data"
+ "eigen: Lightweight C++ template library for vector and matrix math"
+ "fftw: Fast-Fourier Transform"
+ "gdb: Debugging"
+ "hdf5: large files"
+ "hwloc: Portable Hardware Locality (abstraction of hierarchical architectures)"
+ "med>=4.0: Data Modelization and Exchanges (meshes)"
+ "metis: Partitioning library (for meshes)"
+ "mumps: Sparse solver library"
+ "openblas: Linear algebra libraries"
+ "opencl-headers: for opencl (GPU computing)"
+ "opencl: GPU computing"
+ "openmp: Parallel distributed tasks"
+ "png"
+ "scalapack: Parallel memory linear algebra"
+ "scotch: Partitioning with sparse matrices"
+ "suitesparse: Sparse matrix library"
+ "superlu: Subroutines for sparsse linear systems"
+ "yaml: configuration files")
+ provides=(${_base}="${_mainver}" petsc4py="${_mainver}")
+ conflicts=(${_base})
+
+ unset PETSC_DIR
+ _build_dir="${srcdir}"/"${_base}"
+
+ make -C "${_build_dir}" \
+ ${MAKEFLAGS} DESTDIR="${pkgdir}" install
+
+ export PETSC_DIR=${_install_dir}
+
+ # install licence (even though there is no such word as licenses)
+ install -Dm 644 ${_build_dir}/LICENSE \
+ "${pkgdir}"/"${_install_dir}"/share/licenses/"${pkgname}"/LICENSE
+
+ mkdir -p "${pkgdir}"/etc/profile.d
+ echo "export PETSC_DIR=${_install_dir}" > \
+ "${pkgdir}"/etc/profile.d/${_base}.sh
+ echo "export PYTHONPATH=\$PYTHONPATH:/${_install_dir}/${_base}/${_config}/lib" \
+ >> "${pkgdir}"/etc/profile.d/${_base}.sh
+ chmod +x "${pkgdir}"/etc/profile.d/${_base}.sh
+
+ # show where the shared libraries are
+ install -dm 755 "${pkgdir}"/etc/ld.so.conf.d/
+ echo "${_install_dir}/lib" > \
+ "${pkgdir}"/etc/ld.so.conf.d/${_base}.conf
+
+ # install pkgconfig settings
+ install -Dm 644 "${_build_dir}/${_config}"/lib/pkgconfig/PETSc.pc \
+ "${pkgdir}"/"${_install_dir}"/share/pkgconfig/PETSc.pc
+}
- sed -i "s#-L${_rem_dir}/lib ##" "${pkgdir}${_install_dir}/lib/pkgconfig/PETSc.pc"
- sed -i "s#-L${_rem_dir}/lib ##" "${pkgdir}${_install_dir}/lib/pkgconfig/petsc.pc"
- sed -i "s#${_rem_dir}#${_install_dir}#g" "${pkgdir}${_install_dir}/include/petscmachineinfo.h"
- sed -i "s#${_rem_dir}#${_install_dir}#g" "${pkgdir}${_install_dir}/lib/petsc/conf/pkg.conf.mumps"
- sed -i "s#${_rem_dir}#${_install_dir}#g" "${pkgdir}${_install_dir}/lib/petsc/conf/pkg.conf.hypre"
- sed -i "s#${_rem_dir}#${_install_dir}#g" "${pkgdir}${_install_dir}/lib/petsc/conf/petscvariables"
- sed -i "s#${_rem_dir}#${_install_dir}#g" "${pkgdir}${_install_dir}/lib/petsc/conf/petscrules"
+package_petsc-doc () {
+ depends=()
+ optdepends=()
+ provides=(${_base}-doc)
+ replaces=(${_base}-doc)
+ conflicts=()
+ pkgdesc="Documentation for PETSc"
+ # Two options: compile the documentation or get it from
+ # the web. Downloading is easier.
+ [[ -d ${pkgdir}/${_install_dir}/share/doc ]] && \
+ rm -fr "${pkgdir}"/"${_install_dir}"/share/doc
+ mkdir -p "${pkgdir}"/"${_install_dir}"/share/doc
+ cp -r "${srcdir}/${_base}-${_mainver}/docs" \
+ "${pkgdir}"/"${_install_dir}"/share/doc/${_base}
}
diff --git a/blaslapack_download.patch b/blaslapack_download.patch
new file mode 100644
index 000000000000..abf007480f17
--- /dev/null
+++ b/blaslapack_download.patch
@@ -0,0 +1,11 @@
+--- b/petsc/config/BuildSystem/config/packages/BlasLapack.py 2021-09-17 23:26:42.115594175 -0500
++++ b/petsc/config/BuildSystem/config/packages/BlasLapack.py 2021-09-17 22:53:07.122154127 -0500
+@@ -187,7 +187,7 @@
+ yield ('OpenBLAS with full path', None, os.path.join(self.openblas.libDir,'libopenblas.a'),self.openblas.known64,self.openblas.usesopenmp)
+ else:
+ yield ('OpenBLAS', None, self.openblas.lib,self.openblas.known64,self.openblas.usesopenmp)
+- raise RuntimeError('--download-openblas libraries cannot be used')
++ ###raise RuntimeError('--download-openblas libraries cannot be used')
+ if 'with-blas-lib' in self.argDB and not 'with-lapack-lib' in self.argDB:
+ raise RuntimeError('If you use the --with-blas-lib=<lib> you must also use --with-lapack-lib=<lib> option')
+ if not 'with-blas-lib' in self.argDB and 'with-lapack-lib' in self.argDB:
diff --git a/petsc4py_newuser.patch b/petsc4py_newuser.patch
new file mode 100644
index 000000000000..dca97e79a1d5
--- /dev/null
+++ b/petsc4py_newuser.patch
@@ -0,0 +1,11 @@
+--- a/petsc/config/BuildSystem/config/packages/petsc4py.py 2021-09-17 23:23:54.438918631 -0500
++++ b/petsc/config/BuildSystem/config/packages/petsc4py.py 2021-09-17 23:19:50.395572374 -0500
+@@ -58,7 +58,7 @@
+
+ # if installing as Superuser than want to return to regular user for clean and build
+ if self.installSudo:
+- newuser = self.installSudo+' -u $${SUDO_USER} '
++ newuser = ''
+ else:
+ newuser = ''
+
diff --git a/test_optdepends.sh b/test_optdepends.sh
new file mode 100644
index 000000000000..21e68917ac11
--- /dev/null
+++ b/test_optdepends.sh
@@ -0,0 +1,276 @@
+#!/bin/bash
+
+# Test if external packages for PETSC are installed
+
+# CONFOPTS=""
+
+# # External downloads
+# for external_pkg in hypre fblaslapack metis parmetis superlu_dist mumps scalapack; do
+# CONFOPTS+=" --download-${external_pkg}=1"
+# done
+
+type mpicc >/dev/null && CONFOPTS+=" --with-cc=mpicc"
+type mpicxx >/dev/null && CONFOPTS+=" --with-cxx=mpicxx"
+type mpifort >/dev/null && CONFOPTS+=" --with-fc=mpifort"
+
+# BOOST: Free peer-reviewed portable C++ source libraries
+if [ -f "$(whereis -b libboost_mpi.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-boost=1"
+fi;
+
+# CGNS: Recording and recovering computer data
+if [ -f "$(whereis -b libcgns.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-cgns=1"
+fi
+
+# eigen: Lightweight C++ template library for vector and matrix math
+EIGEN_DIR="$(pkgconf --cflags-only-I eigen3)"
+EIGEN_DIR="${EIGEN_DIR##-I}"
+if [ -d "${EIGEN_DIR}" ]; then
+ CONFOPTS+=" --with-eigen=1 --with-eigen-include=${EIGEN_DIR}"
+fi
+
+# fftw: Fast-Fourier Transform
+if [ -f "$(whereis -b libfftw3_mpi.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-fftw=1"
+fi
+
+# GDB: GNU debugger
+if [ -f "$(whereis -b gdb | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-debugger=gdb"
+fi
+
+# # GLUT (requires OpenGL)
+# if [ -f "$(whereis -b libglut.so | cut -d' ' -f2)" ]; then
+# CONFOPTS+=" --with-glut=1"
+# CONFOPTS+=" --with-glut-pkg-config="
+# CONFOPTS+="$(dirname $(pkgconf --path glut))"
+# fi
+
+# HDF5: large files
+if [[ "$(h5stat -V)" ]]; then
+ CONFOPTS+=" --with-hdf5=1"
+fi
+
+# hwloc: abstraction of hierarchical architectures
+if [ -f "$(whereis -b libhwloc.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-hwloc=1"
+ CONFOPTS+=" --with-hwloc-pkg-config="
+ CONFOPTS+="$(dirname $(pkgconf --path hwloc))"
+fi
+
+# Hypre: Large and sparse linear with massive parallel computing
+if [ -f "$(whereis -b libHYPRE.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-hypre=1"
+ CONFOPTS+=" --with-hypre-lib=[/usr/lib/libHYPRE.so]"
+ CONFOPTS+=" --with-hypre-include=/usr/include"
+fi
+
+# MED: Data Modelization and Exchanges (meshes)
+if [ -f "$(whereis -b libmed.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-med=1"
+fi
+
+# METIS: Automatic meshing partitioning
+if [ -f "$(whereis -b libmetis.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-metis=1"
+ # parmetis support
+ if [ -f "/usr/include/parmetis.h" ]; then
+ CONFOPTS+=" --with-parmetis=1"
+ fi
+fi
+
+# # MPI4Py
+# if [ -n "$(pacman -Qsq mpi4py)" ]; then
+# mpi4py_inc="$(pacman -Ql python-mpi4py | awk '/mpi4py.h$/{print $NF}')"
+# CONFOPTS+=" --with-mpi4py=1"
+# CONFOPTS+=" --with-mpi4py-include="
+# CONFOPTS+="$(dirname $mpi4py_inc)"
+# CONFOPTS+=" --with-mpi4py-lib="
+# CONFOPTS+="$(pacman -Ql python-mpi4py | awk '/.*\.so$/{print $NF}' | tr ' \n' ',')"
+# fi
+
+# MUMPS: Sparse solver library
+if [ -f "$(whereis -b libmumps_common.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-mumps=1"
+ # MUMPS_LIBS="[/usr/lib/libcmumps.so,"
+ # MUMPS_LIBS+="/usr/lib/libdmumps.so,"
+ # MUMPS_LIBS+="/usr/lib/libsmumps.so,"
+ # MUMPS_LIBS+="/usr/lib/libzmumps.so,"
+ # MUMPS_LIBS+="/usr/lib/libmumps_common.so,"
+ # MUMPS_LIBS+="/usr/lib/libpord.so]"
+ # CONFOPTS+=" --with-mumps-lib=${MUMPS_LIBS}"
+ # CONFOPTS+=" --with-mumps-include=/usr/include"
+ # CONFOPTS+=" --with-mumps-dir=/usr/"
+fi
+
+# NetCDF
+if [ -f "$(whereis -b libnetcdf.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-netcdf=1"
+ CONFOPTS+=" --with-netcdf-pkg-config="
+ CONFOPTS+="$(dirname $(pkgconf --path netcdf))"
+fi
+
+# PNG
+if [ -f "$(whereis -b libpng.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-png=1"
+ CONFOPTS+=" --with-png-pkg-config="
+ CONFOPTS+="$(dirname $(pkgconf --path libpng))"
+fi
+
+# PNetCDF
+if [ -f "$(whereis -b libpnetcdf.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-pnetcdf=1"
+ CONFOPTS+=" --with-pnetcdf-pkg-config="
+ CONFOPTS+="$(dirname $(pkgconf --path pnetcdf))"
+fi
+
+# OpenBLAS: Linear algebra libraries
+OPENBLAS_SO="$(whereis -b libblas.so | cut -d' ' -f2)"
+if [ -f "${OPENBLAS_SO}" ]; then
+ CONFOPTS+=" --with-openblas=1"
+ # CONFOPTS+=" --with-openblas-lib=[-lopenblas,-lm,-lpthread,-lgfortran,-lm,-lpthread,-lgfortran]"
+ # CONFOPTS+=" --with-openblas-include=/usr/include"
+ CONFOPTS+=" --with-openblas-pkg-config="
+ CONFOPTS+="$(dirname $(pkgconf --path openblas))"
+ # CONFOPTS+=" --download-openblas=0"
+ CONFOPTS+=" --download-f2cblaslapack=0"
+fi
+
+# OpenCL: GPU computing
+# Check header files
+# (from opencl-headers package; how to do this in a consistent way?)
+OPENCL_INC="/usr/include/CL/cl.h"
+# Check library (find libOpenCL.so)
+OPENCL_SO="$(whereis -b libOpenCL.so | cut -d' ' -f2)"
+if [ -f "${OPENCL_SO}" ] && [ -f "${OPENCL_INC}" ]; then
+ CONFOPTS+=" --with-opencl=1"
+fi
+
+# # OpenGL (mesa)
+# # echo /lib64/libOpenGL.so /lib64/libGLX.so /lib64/libGLU.so
+# # FindOpenGL found both a legacy GL library:
+# #
+# # OPENGL_gl_LIBRARY: /lib64/libGL.so
+# #
+# # and GLVND libraries for OpenGL and GLX:
+# #
+# # OPENGL_opengl_LIBRARY: /lib64/libOpenGL.so
+# # OPENGL_glx_LIBRARY: /lib64/libGLX.so
+# OPENGLIB="$(whereis -b libOpenGL.so | cut -d' ' -f2)"
+# if [ -f "${OPENGLIB}" ]; then
+# # OPENGLIB+=",$(whereis -b libGL | cut -d' ' -f2),"
+# # OPENGLIB+=",$(whereis -b libGLX | cut -d' ' -f2)"
+# # OPENGLIB+=",$(whereis -b libGLX | cut -d' ' -f2)"
+# # # OPENGLIB+="$(pacman -Ql mesa | awk '/\.so$/{print $NF}' | tr ' \n' ',')"
+# # CONFOPTS+=" --with-opengl=1"
+# # CONFOPTS+=" --with-opengl-lib=[${OPENGLIB}]"
+# # CONFOPTS+=" --with-opengl-include=[/usr/include/GL/glew.h]"
+# CONFOPTS+=" --with-opengl=1"
+# CONFOPTS+=" --with-opengl-pkg-config="
+# CONFOPTS+="$(dirname $(pkgconf --path opengl))"
+# # CONFOPTS+="$(pacman -Ql mesa | awk '/\/include\/[^/]*\/$/{print $NF}' | tr ' \n' ',')]"
+# fi
+
+# OpenMP: 64 bits blas and lapack, multi-threaded
+if [ -f "$(whereis -b libomp.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-openmp=1"
+fi
+
+# # OpenMPI (dependency; should be found by pacman)
+# MPILIBDIR=$(dirname "$(pacman -Qlq openmpi | grep 'libmpi.so$')")
+# MPIINC="$(pacman -Qlq openmpi | grep 'mpi.h$')"
+# if [ -d "${MPILIBDIR}" ]; then
+# CONFOPTS+=" --with-mpi=1"
+# CONFOPTS+=" --with-mpi-dir=/usr/"
+# fi
+
+# Scalapack: Parallel memory linear algebra
+if [ -f "$(whereis -b libscalapack.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-scalapack=1"
+fi
+
+# Scotch: Partitioning with sparse matrices
+# TODO: programatic way
+SCOTCH_DIR="/usr/include/scotch"
+if [ -d "${SCOTCH_DIR}" ]; then
+ # SCOTCH_LIBS="$(ldconfig -p | awk '/scotch/{printf("'"${SCOTCH_DIR}"'/%s,", $1)}')"
+ SCOTCH_LIBS="libesmumps.so,libptscotch.so,libptscotcherr.so,libscotch.so,libscotcherr.so"
+
+ # Include bzip2 if scotch was built with bzip2 support
+ if [ -f "$(whereis -b libbz2.so | cut -d' ' -f2)" ]; then
+ SCOTCH_LIBS+=",${SCOTCH_DIR}/libbz2.so"
+ fi
+ # Add [], remove trailing ,
+ SCOTCH_LIBS="[${SCOTCH_LIBS}]"
+ CONFOPTS+=" --with-ptscotch=1"
+ CONFOPTS+=" --with-ptscotch-lib=${SCOTCH_LIBS}"
+ CONFOPTS+=" --with-ptscotch-include=${SCOTCH_DIR}"
+fi
+
+# SuiteSparse: Sparse matrix library
+if [ -f "$(whereis -b libsuitesparseconfig.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-suitesparse=1"
+fi
+
+# SuperLU: Subroutines for sparsse linear systems
+# TODO: programatic way
+SUPERLU_DIR="/usr/include/superlu"
+if [ -d "${SUPERLU_DIR}" ]; then
+ CONFOPTS+=" --with-superlu=1 --with-superlu-lib=-lsuperlu --with-superlu-include=${SUPERLU_DIR}"
+fi
+
+# YAML: configuration files
+# Check library (find libyaml.so)
+OPENCL_SO="$(whereis -b libyaml.so | cut -d' ' -f2)"
+if [ -f "${OPENCL_SO}" ]; then
+ CONFOPTS+=" --with-yaml=1"
+fi
+
+# X: to enable ksp_xmonitor
+LIBX11="$(whereis -b libX11.so | cut -d' ' -f2)"
+LIBX11_DIR="$(dirname ${LIBX11})"
+if [ -f "${LIBX11}" ]; then
+ LIBX11_INC="--keep-system-cflags --cflags-only-I";
+ LIBX11_INC="$(pkgconf ${LIBX11_INC} x11)";
+ CONFOPTS+=" --with-x-lib=[${LIBX11_DIR}/";
+ # As per X11.pc, it seems that xcb.so is needed
+ CONFOPTS+="libX11-xcb.so,${LIBX11}]"
+ CONFOPTS+=" --with-x-include=${LIBX11_INC//-I/}"
+fi
+
+# ZLIB
+if [ -f "$(whereis -b libzlib.so | cut -d' ' -f2)" ]; then
+ CONFOPTS+=" --with-zlib=1"
+ CONFOPTS+=" --with-zlib-pkg-config="
+ CONFOPTS+="$(dirname $(pkgconf --path zlib))"
+fi
+
+# # trilinos support
+#
+# if [ "${TRILINOS_DIR}" ]; then
+# CONFOPTS+=" --with-ml-dir=${TRILINOS_DIR}"
+# # boost support (may be useful for trilinos)
+# CONFOPTS+=" --with-boost=1"
+# fi
+
+# Incompatible with complex
+# # sundials support
+# SUNDIALS_DIR="/usr/include/sundials/"
+# if [ -d "${SUNDIALS_DIR}" ]; then
+# CONFOPTS+=" --with-sundials=1 --with-sundials-include=${SUNDIALS_DIR}"
+# fi
+
+# # pastix support (non-free)
+# PASTIX_CONF=$(which pastix-conf)
+# if [ -f "${PASTIX_CONF}" ]; then
+# PASTIX_DIR="$($PASTIX_CONF --incs | sed 's/-I//')"
+# if [ ! -d ${PASTIX_DIR} ]; then
+# PASTIX_DIR="[]"
+# fi
+# #PASTIX_LIBS="$($PASTIX_CONF --libs)"
+# PASTIX_LIBS="[libpastix.a,librt.so,libhwloc.so,libpthread.a]"
+# CONFOPTS+=" --with-pastix=1 --with-pastix-lib=${PASTIX_LIBS} --with-pastix-include=${PASTIX_DIR}"
+# fi
+
+echo "${CONFOPTS}"