303 lines
8.5 KiB
RPMSpec
303 lines
8.5 KiB
RPMSpec
#
|
|
# spec file for package petsc
|
|
#
|
|
# Copyright (c) 2025 SUSE LLC
|
|
# Copyright (c) 2025 Atri B. <badshah400@opensuse.org>
|
|
# Copyright (c) 2024 Andreas Stieger <Andreas.Stieger@gmx.de>
|
|
#
|
|
# All modifications and additions to the file contributed by third parties
|
|
# remain the property of their copyright owners, unless otherwise agreed
|
|
# upon. The license for this file, and modifications and additions to the
|
|
# file, is the same license as for the pristine package itself (unless the
|
|
# license for the pristine package is not an Open Source License, in which
|
|
# case the license is the MIT License). An "Open Source License" is a
|
|
# license that conforms to the Open Source Definition (Version 1.9)
|
|
# published by the Open Source Initiative.
|
|
|
|
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
|
#
|
|
|
|
|
|
%global flavor @BUILD_FLAVOR@%{nil}
|
|
|
|
# Please also update slepc, which is version locked with petsc
|
|
%define pname petsc
|
|
%define so_ver 3_23
|
|
|
|
ExcludeArch: s390 s390x
|
|
|
|
# Fails to link during configure, as it omits SuperLU from the link libraries
|
|
%bcond_with hypre
|
|
# Only available as openmpi flavor, and not in Factory
|
|
%bcond_with pastix
|
|
|
|
%if "%flavor" == ""
|
|
ExclusiveArch: do_not_build
|
|
%endif
|
|
|
|
%if "%flavor" == "serial"
|
|
%endif
|
|
|
|
%if "%flavor" == "openmpi4"
|
|
%define mpi_flavor openmpi4
|
|
%endif
|
|
|
|
%if "%flavor" == "openmpi5"
|
|
%define mpi_flavor openmpi5
|
|
ExcludeArch: %{ix86} %{arm}
|
|
%endif
|
|
|
|
%if 0%{?mpi_flavor:1}
|
|
%bcond_without mpi
|
|
%define mpi_suffix -%{mpi_flavor}
|
|
%else
|
|
%bcond_with mpi
|
|
%endif
|
|
|
|
%define package_name %{pname}%{?mpi_suffix}
|
|
%define libname lib%{pname}%{so_ver}%{?mpi_suffix}
|
|
|
|
%if %{without mpi}
|
|
%define p_prefix %{_prefix}/
|
|
%else
|
|
%define p_prefix %{_libdir}/mpi/gcc/%{mpi_flavor}/
|
|
%endif
|
|
%define p_libdir %{p_prefix}%_lib
|
|
%define p_include %{p_prefix}include
|
|
|
|
%define petsc_arch %_arch
|
|
|
|
Name: %{package_name}
|
|
Summary: Portable Extensible Toolkit for Scientific Computation
|
|
License: BSD-2-Clause
|
|
Group: Development/Libraries/C and C++
|
|
Version: 3.23.0
|
|
Release: 0
|
|
URL: https://www.mcs.anl.gov/petsc/
|
|
Source: https://web.cels.anl.gov/projects/petsc/download/release-snapshots/petsc-%{version}.tar.gz
|
|
Patch0: Remove-rpath-test.patch
|
|
Patch1: petsc-3.7-fix-pastix-detection.patch
|
|
Patch2: Allow-lib64-as-library-directory-for-scalapack.patch
|
|
Patch3: petsc-fix-libdir.patch
|
|
BuildRequires: bison
|
|
BuildRequires: blas-devel
|
|
BuildRequires: fdupes
|
|
BuildRequires: gcc-c++
|
|
BuildRequires: gcc-fortran
|
|
BuildRequires: hdf5%{?mpi_suffix}-devel
|
|
BuildRequires: hwloc-devel
|
|
BuildRequires: lapack-devel
|
|
BuildRequires: pkg-config
|
|
BuildRequires: python3-base
|
|
BuildRequires: suitesparse-devel >= 5.6.0
|
|
BuildRequires: xz
|
|
BuildRequires: pkgconfig(valgrind)
|
|
BuildRequires: pkgconfig(yaml-0.1)
|
|
BuildRequires: pkgconfig(zlib)
|
|
%if %{with hypre}
|
|
BuildRequires: hypre%{?mpi_suffix}-devel
|
|
BuildRequires: superlu-devel
|
|
%endif
|
|
%if %{with mpi}
|
|
BuildRequires: %{mpi_flavor}-devel
|
|
BuildRequires: %{mpi_flavor}-macros-devel
|
|
BuildRequires: blacs-%{mpi_flavor}-devel
|
|
BuildRequires: ptscotch-%{mpi_flavor}-devel
|
|
BuildRequires: scalapack-%{mpi_flavor}-devel
|
|
%if %{with pastix}
|
|
BuildRequires: pastix-%{mpi_flavor}-devel
|
|
%endif
|
|
%else
|
|
BuildRequires: metis-devel
|
|
%endif
|
|
|
|
%description
|
|
PETSc is a suite of data structures and routines for the scalable
|
|
(parallel) solution of scientific applications modeled by partial
|
|
differential equations.
|
|
|
|
%package -n %{libname}
|
|
Summary: PETSc shared libraries
|
|
Group: System/Libraries
|
|
# Fixup wrong package name
|
|
Conflicts: libpetsc3%{?mpi_suffix}
|
|
|
|
%description -n %{libname}
|
|
PETSc is a suite of data structures and routines for the scalable
|
|
(parallel) solution of scientific applications modeled by partial
|
|
differential equations.
|
|
|
|
%package %{?n_pre}devel
|
|
Summary: Devel files for petsc
|
|
Group: Development/Libraries/C and C++
|
|
Requires: %{libname} = %{version}
|
|
Requires: hdf5%{?mpi_suffix}-devel
|
|
Requires: suitesparse-devel
|
|
Requires: pkgconfig(yaml-0.1)
|
|
%if %{with hypre}
|
|
Requires: hypre%{?mpi_suffix}-devel
|
|
Requires: superlu-devel
|
|
%endif
|
|
%if %{without mpi}
|
|
Requires: metis-devel
|
|
%else
|
|
Requires: blacs-%{mpi_flavor}-devel
|
|
Requires: ptscotch-%{mpi_flavor}-devel
|
|
Requires: scalapack-%{mpi_flavor}-devel
|
|
%endif
|
|
|
|
%description %{?n_pre}devel
|
|
PETSc is a suite of data structures and routines for the scalable
|
|
(parallel) solution of scientific applications modeled by partial
|
|
differential equations.
|
|
|
|
%package doc
|
|
Summary: Documentation for petsc
|
|
Group: Documentation/HTML
|
|
|
|
%description doc
|
|
This package contains the documentation for petsc.
|
|
|
|
%prep
|
|
|
|
%setup -q -n petsc-%{version}
|
|
%autopatch -p1
|
|
# Fix broken MAKEFLAGS usage
|
|
sed -i -e 's/MAKEFLAGS="[^"]*"//' lib/petsc/conf/rules
|
|
|
|
# Fix shebangs in packaged scripts
|
|
find src lib config share -type f -iname \*.py -exec sed -i \
|
|
-e '1 s@#!.*env python3@#!/usr/bin/python3@' \
|
|
-e '1 s@#!.*env python@#!/usr/bin/python%{python3_version}@' \
|
|
\{\} \;
|
|
find lib/petsc/bin -type f -exec sed -i \
|
|
-e '1 s@#!.*env sh@#!/usr/bin/sh@' \
|
|
-e '1 s@#!.*env python3@#!/usr/bin/python3@' \
|
|
-e '1 s@#!.*env python@#!/usr/bin/python%{python3_version}@' \
|
|
\{\} \;
|
|
|
|
# Add missing hashbangs for py scripts
|
|
sed -E -i '1{s@^@#!%{_bindir}/python%{python3_version}\n@}' \
|
|
lib/petsc/bin/PetscBinaryIO*.py \
|
|
lib/petsc/bin/petsc_conf.py
|
|
|
|
# Delete hashbang from non-exec script
|
|
sed -E -i '1{\@#!.*@d}' share/petsc/bin/dmnetwork_view.py
|
|
|
|
sed -E -i 's/\r$//' src/tao/leastsquares/tutorials/tomographyGenerateData.m
|
|
|
|
%build
|
|
export PETSC_DIR=${RPM_BUILD_DIR}/petsc-%{version}
|
|
export PETSC_LIB_DIR=%{p_libdir}
|
|
export PETSC_ARCH=%petsc_arch
|
|
%{?with_mpi:%setup_openmpi}
|
|
%ifarch ppc64le ppc64 s390 aarch64 x86_64
|
|
export ARCHCFLAGS=-fPIC
|
|
%endif
|
|
|
|
%{_bindir}/python%{python3_version} ./configure \
|
|
--COPTFLAGS="$RPM_OPT_FLAGS $ARCHCFLAGS" \
|
|
--FOPTLAGS="$RPM_OPT_FLAGS $ARCHCFLAGS" \
|
|
--CXXOPTFLAGS="$RPM_OPT_FLAGS $ARCHCFLAGS" \
|
|
--prefix=%{p_prefix} \
|
|
--with-batch=0 \
|
|
--with-clanguage=C++ \
|
|
--with-c-support \
|
|
--with-fortran-interfaces=1 \
|
|
--with-debugging=no \
|
|
--with-hdf5=1 \
|
|
--with-python-exec=%{_bindir}/python%{python3_version} \
|
|
--with-shared-libraries \
|
|
--with-suitesparse=1 \
|
|
--with-yaml=1 \
|
|
%if %{with hypre}
|
|
--with-hypre=1 \
|
|
--with-superlu=1 \
|
|
%endif
|
|
%if %{without mpi}
|
|
--with-mpi=0 \
|
|
%else
|
|
--with-mpi=1 \
|
|
--with-blacs=1 \
|
|
--with-pastix=%{?with_pastix:1}%{!?with_pastix:0} \
|
|
--with-ptscotch=1 \
|
|
--with-scalapack=1 \
|
|
%endif
|
|
|| { cat configure.log; exit 1; }
|
|
|
|
%make_build
|
|
|
|
%install
|
|
export PETSC_DIR=${RPM_BUILD_DIR}/petsc-%{version}
|
|
export PETSC_LIB_DIR=%{p_libdir}
|
|
export PETSC_ARCH=%{petsc_arch}
|
|
%make_install
|
|
|
|
find %{buildroot}%{p_prefix}/share/petsc/examples/src -type f -ipath '*/output/*out' -delete
|
|
rm -f %{buildroot}%{p_libdir}/conf/*.log
|
|
rm -f %{buildroot}%{p_libdir}/conf/.DIR
|
|
|
|
rm -rf %{buildroot}%{p_libdir}/conf/*.init
|
|
rm -rf %{buildroot}%{p_libdir}/conf/*.py
|
|
rm -rf %{buildroot}%{p_libdir}/conf/modules
|
|
|
|
# clean up non-include files
|
|
find %{buildroot}%{p_include} -name \*.html -exec rm {} \;
|
|
find %{buildroot}%{p_include} -name makefile -exec rm {} \;
|
|
|
|
sed -i \
|
|
-e 's!^\(#define PETSC_LIB_DIR\).*$!\1 "'%{p_libdir}'"!' \
|
|
-e 's!^\(#define PETSC_DIR\).*$!\1 "'%{p_prefix}'"!' \
|
|
%{buildroot}%{p_include}/petscconf.h
|
|
|
|
# remove buildroot
|
|
find %{buildroot}%{p_libdir}/{conf,bin}/ -type f -print0 | \
|
|
while IFS= read -r -d $'\0' line ; do
|
|
if file -e soft $line | grep -q "text" ; then
|
|
sed -i -e 's!%{buildroot}!!g' $line
|
|
fi
|
|
done
|
|
|
|
for i in $(find %{buildroot}%{p_prefix}/share \( -perm /a+x -and -type f \) ) ; do
|
|
grep -m 1 -q "^#!" $i || chmod a-x $i
|
|
done
|
|
chmod a+x %{buildroot}%{p_libdir}/petsc/bin/{configureTAS,extract,tasClasses}.py
|
|
|
|
# Remove CPU count from petscvariables, https://gitlab.com/petsc/petsc/-/issues/1315
|
|
sed -i -e '/^MAKE_/ { /MAKE_NP/ d ; /MAKE_LOAD/ d ; /MAKE_TEST_NP/ d }; /^NPMAX/ d' \
|
|
%{buildroot}%{p_libdir}/petsc/conf/petscvariables
|
|
|
|
%fdupes %{buildroot}%{p_include}
|
|
%fdupes %{buildroot}%{p_libdir}
|
|
%fdupes %{buildroot}%{p_prefix}/share/petsc/examples
|
|
|
|
%check
|
|
%if %{with mpi}
|
|
%setup_openmpi
|
|
%endif
|
|
export LD_LIBRARY_PATH+=:%{buildroot}%{p_libdir}
|
|
%make_build check
|
|
|
|
%ldconfig_scriptlets -n %{libname}
|
|
|
|
%files -n %{libname}
|
|
%{p_libdir}/*.so.*
|
|
%{p_prefix}/share/petsc/
|
|
%exclude %{p_prefix}/share/petsc/examples
|
|
%exclude %{p_prefix}/share/petsc/saws
|
|
|
|
%files %{?n_pre}devel
|
|
%exclude %{p_libdir}/petsc/bin/saws
|
|
%{p_include}/*.mod
|
|
%{p_include}/petsc/
|
|
%{p_include}/petsc*.h*
|
|
%{p_libdir}/*.so
|
|
%{p_libdir}/petsc/
|
|
%if %{with mpi}
|
|
%dir %{p_libdir}/pkgconfig
|
|
%endif
|
|
%{p_libdir}/pkgconfig/*.pc
|
|
%doc %{p_prefix}/share/petsc/examples
|
|
|
|
%changelog
|