# Broken package_note links in rules and variables files # Disabling this functionality %undefine _package_note_file # Disable LTO # undefined-non-weak-symbol libpetsc.so.3.17.4_glibcxx_assert_fail %undefine _ld_as_needed %global _lto_cflags %{nil} # Testing libpetsc ? %bcond_with check # # Python binding and its testing %bcond_without python # Python tests need Cython %bcond_with pycheck %global pymodule_name petsc4py %global pymodule_version %{version} # ## Debug builds ? %bcond_with debug # ## Fix Epoch in EPEL9 %if 0%{?el9} %global epoch 1 %else %global epoch 0 %endif %bcond_without mpich %if 0%{?fedora} >= 40 && "%{_arch}" == "i686" %bcond_with openmpi %else %bcond_without openmpi %endif %if %{?__isa_bits:%{__isa_bits}}%{!?__isa_bits:32} == 64 %bcond_without arch64 %else %bcond_with arch64 %endif %bcond_without blas %if %{with arch64} %bcond_without blas64 %endif %if 0%{?fedora} || 0%{?rhel} >= 9 %global blaslib flexiblas %global blasvar %{nil} %else %global blaslib openblas %global blasvar %{nil} %endif # ## PETSC looks incompatible with serial MUMPS %bcond_without mumps_serial # ## Sundials needs mpi ? %bcond_with sundials_serial # %bcond_without superlu # ## Suitesparse ## This version of PETSc needs the 5.6.0 at least %bcond_with suitesparse %bcond_with suitesparse64 # ## SuperLUDIST needs parmetis %if 0%{?fedora} || 0%{?rhel} > 7 %bcond_without superludist >= 6.3.0 %bcond_with cgns %bcond_without hdf5 %else # Needed superludist >= 6.3.0 %bcond_with superludist ## hdf5 is required by cgns ## See rhbz#1904164 %bcond_with cgns %bcond_with hdf5 %endif %bcond_with superlumt # ## Tetgen %bcond_with tetgen # ## Metis %bcond_without metis %if 0%{?fedora} || 0%{?rhel} < 8 %bcond_without metis64 %endif # # 'scalapack' is required by 'MUMPS' %if %{with openmpi} %bcond_without mpi # PETSC-3.* is incompatible with Sundials 3+ %bcond_with sundials %bcond_without scalapack %bcond_without mumps %bcond_without ptscotch %bcond_without hypre %endif %if %{with mpich} %bcond_without mpi # PETSC-3.* is incompatible with Sundials 3+ %bcond_with sundials %bcond_without scalapack %bcond_without mumps %bcond_without ptscotch %bcond_without hypre %endif %global petsc_build_options \\\ %if %{with debug} \ CFLAGS="-O0 -g -Wl,-z,now -fPIC" CXXFLAGS="-O0 -g -Wl,-z,now -fPIC" FFLAGS="-O0 -g -Wl,-z,now -fPIC -I%{_libdir}/gfortran/modules" COPTFLAGS="-O0 -g -Wl,-z,now" \\\ CXXOPTFLAGS="-O0 -g -Wl,-z,now" FOPTFLAGS="-O0 -g -Wl,-z,now -I%{_libdir}/gfortran/modules" LDFLAGS="$LDFLAGS -fPIC" \\\ FCFLAGS="-O0 -g -Wl,-z,now -fPIC -I%{_libdir}/gfortran/modules" \\\ %else \ CFLAGS="$CFLAGS -O3 -fPIC" CXXFLAGS="$CXXFLAGS -O3 -fPIC" FFLAGS="$FFLAGS -O3 -fPIC" LDFLAGS="$LDFLAGS -fPIC" \\\ COPTFLAGS="$CFLAGS -O3" CXXOPTFLAGS="$CXXFLAGS -O3" FOPTFLAGS="$FFLAGS -O3" \\\ FCFLAGS="$FFLAGS -O3 -fPIC" \\\ %endif \ --CC_LINKER_FLAGS="$LDFLAGS" \\\ --FC_LINKER_FLAGS="$LDFLAGS -lgfortran" \\\ --with-default-arch=0 --with-make=1 \\\ --with-cmake-exec=%{_bindir}/cmake3 --with-ctest-exec=%{_bindir}/ctest3 \\\ --with-single-library=1 \\\ --with-precision=double \\\ --with-petsc-arch=%{_arch} \\\ --with-clanguage=C \\\ --with-shared-libraries=1 \\\ --with-fortran-interfaces=1 \\\ --with-windows-graphics=0 \\\ --CC=gcc \\\ --FC=gfortran \\\ --CXX=g++ \\\ --with-shared-ld=ld \\\ --with-pic=1 \\\ --with-clib-autodetect=0 \\\ --with-fortranlib-autodetect=0 \\\ --with-threadsafety=0 --with-log=1 \\\ --with-mkl_sparse=0 \\\ --with-mkl_sparse_optimize=0 \\\ --with-mkl_cpardiso=0 \\\ --with-mkl_pardiso=0 \\\ --with-python=0 \\\ --with-cxxlib-autodetect=1 \\\ %if %{with debug} \ --with-debugging=1 \\\ %else \ --with-debugging=0 \\\ %endif \ %if %{with mumps_serial} \ --with-mumps-serial=1 \\\ %endif \ --with-mpi=0 \\\ %if %{with hdf5} \ --with-hdf5=1 \\\ --with-hdf5-include= \\\ --with-hdf5-lib="-lhdf5 -lhdf5_hl" \\\ %endif \ %if %{with cgns} \ --with-cgns=0 \\\ %endif \ --with-x=1 \\\ --with-openmp=0 \\\ --with-hwloc=0 \\\ --with-ssl=0 \\\ %if %{with sundials_serial} \ --with-sundials=1 \\\ --with-sundials-include=%{_includedir} \\\ --with-sundials-lib="-lsundials_nvecserial -lsundials_cvode" \\\ %endif \ --with-pthread=1 \\\ --with-valgrind=1 %global petsc_mpibuild_options \\\ %if %{with debug} \ CFLAGS="-O0 -g -Wl,-z,now -fPIC" CXXFLAGS="-O0 -g -Wl,-z,now -fPIC" FFLAGS="-O0 -g -Wl,-z,now -fPIC -I${MPI_FORTRAN_MOD_DIR}" COPTFLAGS="-O0 -g -Wl,-z,now" \\\ CXXOPTFLAGS="-O0 -g -Wl,-z,now" FOPTFLAGS="-O0 -g -Wl,-z,now -I${MPI_FORTRAN_MOD_DIR}" LDFLAGS="$LDFLAGS -fPIC" \\\ FCFLAGS="-O0 -g -Wl,-z,now -fPIC -I${MPI_FORTRAN_MOD_DIR}" \\\ %else \ CFLAGS="$CFLAGS -O3 -fPIC" CXXFLAGS="$CXXFLAGS -O3 -fPIC" FFLAGS="$FFLAGS -O3 -fPIC" LDFLAGS="$LDFLAGS -fPIC" \\\ COPTFLAGS="$CFLAGS -O3" CXXOPTFLAGS="$CXXFLAGS -O3" FOPTFLAGS="$FFLAGS -O3" \\\ FCFLAGS="$FFLAGS -O3 -fPIC" \\\ %endif \ --CC_LINKER_FLAGS="$LDFLAGS" \\\ --with-default-arch=0 --with-make=1 \\\ --with-cmake-exec=%{_bindir}/cmake3 --with-ctest-exec=%{_bindir}/ctest3 \\\ --with-single-library=1 \\\ --with-precision=double \\\ --with-petsc-arch=%{_arch} \\\ --with-clanguage=C \\\ --with-shared-libraries=1 \\\ --with-fortran-interfaces=1 \\\ --with-windows-graphics=0 \\\ --with-cc=${MPI_BIN}/mpicc \\\ --with-cxx=${MPI_BIN}/mpicxx \\\ --with-fc=${MPI_BIN}/mpif90 \\\ --with-shared-ld=ld \\\ --with-pic=1 \\\ --with-clib-autodetect=0 \\\ --with-fortranlib-autodetect=0 \\\ --with-mkl_sparse=0 \\\ --with-mkl_sparse_optimize=0 \\\ --with-mkl_cpardiso=0 \\\ --with-mkl_pardiso=0 \\\ %if %{with python} \ --with-python=1 \\\ --with-python-exec=%{__python3} \\\ --with-petsc4py=1 \\\ --with-petsc4py-test-np="`/usr/bin/getconf _NPROCESSORS_ONLN`" \\\ %endif \ --with-cxxlib-autodetect=1 \\\ --with-threadsafety=0 --with-log=1 \\\ %if %{with debug} \ --with-debugging=1 \\\ --with-mpiexec="${MPI_BIN}/mpiexec -n `/usr/bin/getconf _NPROCESSORS_ONLN` --mca btl_base_warn_component_unused 0 --mca orte_base_help_aggregate 0" \\\ %else \ --with-debugging=0 \\\ --with-mpiexec="${MPI_BIN}/mpiexec -n `/usr/bin/getconf _NPROCESSORS_ONLN` --mca btl_base_warn_component_unused 0" \\\ %endif \ %if %{with scalapack} \ --with-scalapack=1 \\\ --with-scalapack-lib="-L$MPI_LIB -lscalapack" \\\ --with-scalapck-include="" \\\ %endif \ %if %{with mpi} \ --with-mpi=1 \\\ %endif \ %if %{with cgns} \ --with-cgns=1 \\\ --with-cgns-include=%{_includedir} \\\ --with-cgns-lib=-lcgns \\\ %endif \ %if %{with hdf5} \ --with-hdf5=1 \\\ --with-hdf5-include= \\\ --with-hdf5-lib="-L$MPI_LIB -lhdf5 -lhdf5_hl" \\\ %endif \ %if %{with ptscotch} \ --with-ptscotch=1 \\\ --with-ptscotch-include=$MPI_INCLUDE/scotch \\\ --with-ptscotch-lib="-L$MPI_LIB -lptscotch -lscotch -lptscotcherr -lscotcherr" \\\ %endif \ %if %{with mumps} \ --with-mumps=1 \\\ %endif \ %if %{with sundials} \ --with-sundials=1 \\\ --with-sundials-include=$MPI_INCLUDE \\\ --with-sundials-lib=-lsundials_nvecparallel \\\ %endif \ %if %{with superludist} \ --with-superlu_dist=1 \\\ --with-superlu_dist-include=$MPI_INCLUDE/superlu_dist \\\ --with-superlu_dist-lib=-lsuperlu_dist \\\ %endif \ --with-x=1 \\\ --with-openmp=0 \\\ --with-hwloc=0 \\\ --with-ssl=0 \\\ %if %{with hypre} \ --with-hypre=1 \\\ --with-hypre-include=$MPI_INCLUDE/hypre \\\ --with-hypre-lib="-L$MPI_LIB -lHYPRE" \\\ %endif \ %if %{with fftw} \ --with-fftw=1 \\\ --with-fftw-include= \\\ --with-fftw-lib="-L$MPI_LIB -lfftw3_mpi -lfftw3" \\\ %endif \ --with-pthread=1 \\\ --with-valgrind=1 %global mpichversion %(rpm -qi mpich | awk -F': ' '/Version/ {print $2}') %global openmpiversion %(rpm -qi openmpi | awk -F': ' '/Version/ {print $2}') %global majorver 3 %global releasever 3.20 Name: petsc Summary: Portable Extensible Toolkit for Scientific Computation Version: %{releasever}.0 Release: %autorelease License: BSD URL: https://petsc.org/ Source0: https://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-with-docs-%{version}.tar.gz # These files have been generated by Cython-0.29.36 # PETSC-3.19 is not compatible with Cython-3.0.0 yet # See https://gitlab.com/petsc/petsc/-/issues/1431 Source2: %{name}-PETSc_cython0.29.36.c Source3: %{name}-PETSc_cython0.29.36.h Source4: %{name}-PETSc_api_cython0.29.36.h ## Remove rpath flags Patch0: %{name}-3.11-no-rpath.patch ## Rename library name for 64-bit integer package Patch1: %{name}-lib64.patch Patch3: %{name}-3.19.4-fix_mumps_includes.patch Patch4: %{name}-3.19.4-fix_metis64.patch Patch6: %{name}-3.14.1-fix_pkgconfig_file.patch Patch7: %{name}-3.17.0-avoid_fake_MKL_detection.patch %if %{with superlu} BuildRequires: SuperLU-devel >= 5.2.0 %endif %if %{with superlumt} BuildRequires: SuperLUMT-devel %endif %if %{with mumps_serial} BuildRequires: MUMPS-devel >= 5.2.1 %endif %if %{with metis} BuildRequires: metis-devel >= 5.1.0 %endif %if %{with suitesparse} BuildRequires: suitesparse-devel >= 5.6.0 %endif %if %{with blas} BuildRequires: %{blaslib}-devel %endif BuildRequires: chrpath BuildRequires: gcc, gcc-c++, cmake3 BuildRequires: gcc-gfortran BuildRequires: make BuildRequires: libX11-devel BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: pcre2-devel %if %{with hdf5} BuildRequires: hdf5-devel %endif %if %{with cgns} BuildRequires: cgnslib-devel BuildRequires: hdf5-devel %endif BuildRequires: tcsh %if %{with tetgen} BuildRequires: tetgen-devel %endif BuildRequires: xorg-x11-server-Xvfb BuildRequires: valgrind-devel %description PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations. %package devel Summary: Portable Extensible Toolkit for Scientific Computation (developer files) Requires: %{name}%{?_isa} = %{version}-%{release} Requires: gcc-gfortran%{?_isa} %description devel Portable Extensible Toolkit for Scientific Computation (developer files). %package doc Summary: Portable Extensible Toolkit for Scientific Computation (documentation files) BuildRequires: python3-sphinx BuildArch: noarch %description doc Portable Extensible Toolkit for Scientific Computation. PDF and HTML documentation files. %if %{with arch64} %package -n petsc64 Summary: Portable Extensible Toolkit for Scientific Computation (64bit INTEGER) %if %{with metis64} BuildRequires: metis64-devel >= 5.1.0 %endif %description -n petsc64 PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations (64bit INTEGER). %package -n petsc64-devel Requires: %{name}64%{?_isa} = %{version}-%{release} Requires: gcc-gfortran%{?_isa} Summary: Portable Extensible Toolkit for Scientific Computation (64bit INTEGER) %description -n petsc64-devel Portable Extensible Toolkit for Scientific Computation (developer files) (64bit INTEGER). %endif ############################################################################# ######### %if %{with openmpi} %package openmpi Summary: Portable Extensible Toolkit for Scientific Computation (OpenMPI) BuildRequires: openmpi-devel %if %{with hdf5} BuildRequires: hdf5-openmpi-devel %endif %if %{with cgns} BuildRequires: cgnslib-devel BuildRequires: hdf5-openmpi-devel %endif %if %{with ptscotch} BuildRequires: ptscotch-openmpi-devel %endif %if %{with scalapack} BuildRequires: scalapack-openmpi-devel %if 0%{?rhel} BuildRequires: blacs-openmpi-devel %endif %endif %if %{with mumps} BuildRequires: MUMPS-openmpi-devel >= 5.2.1 %endif %if %{with sundials} BuildRequires: sundials-openmpi-devel %endif %if %{with superludist} BuildRequires: superlu_dist-openmpi-devel >= 6.3.0 %endif %if %{with fftw} BuildRequires: fftw-devel BuildRequires: fftw-openmpi-devel %endif %if %{with hypre} BuildRequires: hypre-openmpi-devel %endif %description openmpi PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations. %package openmpi-devel Summary: Portable Extensible Toolkit for Scientific Computation (OpenMPI) Requires: %{name}-openmpi%{?_isa} = %{version}-%{release} Requires: openmpi-devel%{?_isa} = %{epoch}:%{openmpiversion} Requires: hdf5-openmpi-devel%{?_isa} %description openmpi-devel Portable Extensible Toolkit for Scientific Computation (developer files). %endif %if %{with python} %package -n python3-%{name}-openmpi Summary: Python3 bindings for OpenMPI PETSc %{?python_provide:%python_provide python3-%{name}-openmpi} BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-wheel BuildRequires: hdf5-openmpi-devel BuildRequires: scalapack-openmpi-devel BuildRequires: ptscotch-openmpi-devel BuildRequires: python3-numpy BuildRequires: python3-Cython Requires: petsc-openmpi%{?_isa} Requires: hdf5-openmpi%{?_isa} Requires: scalapack-openmpi%{?_isa} Requires: ptscotch-openmpi%{?_isa} Requires: openmpi%{?_isa} = %{epoch}:%{openmpiversion} Requires: MUMPS-openmpi%{?_isa} Obsoletes: %{pymodule_name}-openmpi < 0:3.14.0-3 Obsoletes: python3-%{pymodule_name}-openmpi < 0:3.14.0-3 Provides: python3-%{pymodule_name}-openmpi = 0:%{pymodule_version}-%{release} Provides: python-%{pymodule_name}-openmpi = 0:%{pymodule_version}-%{release} Provides: %{pymodule_name}-openmpi = 0:%{pymodule_version}-%{release} %description -n python3-%{name}-openmpi This package provides Python3 bindings for OpenMPI PETSc, the Portable, Extensible Toolkit for Scientific Computation. %package -n python3-%{name}-mpich Summary: Python3 bindings for MPICH PETSc %{?python_provide:%python_provide python3-%{name}-mpich} BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-wheel BuildRequires: hdf5-mpich-devel BuildRequires: scalapack-mpich-devel BuildRequires: ptscotch-mpich-devel BuildRequires: python3-numpy BuildRequires: python3-Cython Requires: petsc-mpich%{?_isa} Requires: hdf5-mpich%{?_isa} Requires: scalapack-openmpi%{?_isa} Requires: ptscotch-mpich%{?_isa} Requires: mpich%{?_isa} = 0:%{mpichversion} Requires: MUMPS-mpich%{?_isa} Obsoletes: %{pymodule_name}-mpich < 0:3.14.0-3 Obsoletes: python3-%{pymodule_name}-mpich < 0:3.14.0-3 Provides: python3-%{pymodule_name}-mpich = 0:%{pymodule_version}-%{release} Provides: python-%{pymodule_name}-mpich = 0:%{pymodule_version}-%{release} Provides: %{pymodule_name}-mpich = 0:%{pymodule_version}-%{release} %description -n python3-%{name}-mpich This package provides Python3 bindings for MPICH PETSc, the Portable, Extensible Toolkit for Scientific Computation. %endif ###### ############################################################################### ###### %if %{with mpich} %package mpich Summary: Portable Extensible Toolkit for Scientific Computation (MPICH) BuildRequires: mpich-devel %if %{with hdf5} BuildRequires: hdf5-mpich-devel %endif %if %{with cgns} BuildRequires: cgnslib-devel BuildRequires: hdf5-mpich-devel %endif %if %{with ptscotch} BuildRequires: ptscotch-mpich-devel %endif %if %{with scalapack} BuildRequires: scalapack-mpich-devel %if 0%{?rhel} BuildRequires: blacs-mpich-devel %endif %endif %if %{with mumps} BuildRequires: MUMPS-mpich-devel >= 5.2.1 %endif %if %{with sundials} BuildRequires: sundials-mpich-devel %endif %if %{with superludist} BuildRequires: superlu_dist-mpich-devel >= 6.3.0 %endif %if %{with hypre} BuildRequires: hypre-mpich-devel %endif %if %{with fftw} BuildRequires: fftw-devel BuildRequires: fftw-mpich-devel %endif Requires: mpich%{?_isa} = 0:%{mpichversion} %description mpich PETSc, pronounced PET-see (the S is silent), is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations. %package mpich-devel Summary: Portable Extensible Toolkit for Scientific Computation (MPICH) Requires: %{name}-mpich%{?_isa} = %{version}-%{release} Requires: mpich-devel%{?_isa} = 0:%{mpichversion} Requires: hdf5-mpich-devel%{?_isa} %description mpich-devel Portable Extensible Toolkit for Scientific Computation (developer files). %endif ###### ############################################################################# %prep %setup -qc %if %{with python} rm -rf %{name}-%{version}/src/binding/petsc4py/src/*.egg-info %if 0%{?fedora} for i in `find . -name 'setup.py' -o -name 'configure' -o -name '*.py'`; do %py3_shebang_fix $i done %endif %endif pushd %{name}-%{version} %patch -P 7 -p1 -b .backup popd # Remove pregenerated Cython C sources pushd %{name}-%{version} rm -vf $(grep -rl '/\* Generated by Cython') popd %if %{with arch64} cp -a %{name}-%{version} build64 pushd build64 %patch -P 1 -p0 %if %{with metis64} %patch -P 4 -p1 -b .metis64 %endif popd %endif pushd %{name}-%{version} %patch -P 0 -p0 -b .backup %patch -P 6 -p1 -b .backup popd %if %{with openmpi} cp -a %{name}-%{version} buildopenmpi_dir %endif %if %{with mpich} cp -a %{name}-%{version} buildmpich_dir %endif # Do NOT move up this patch pushd %{name}-%{version} %patch -P 3 -p1 -b .backup popd %build pushd %{name}-%{version} %configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran \ %{petsc_build_options} \ --with-64-bit-indices=0 \ %if %{with blas} %if 0%{?fedora} || 0%{?rhel} >= 9 --with-blaslapack=1 --with-blaslapack-lib=-l%{blaslib}%{blasvar} --with-blaslapack-include=%{_includedir}/%{blaslib} \ %else --with-openblas=1 --with-openblas-lib=-l%{blaslib}%{blasvar} --with-openblas-include=%{_includedir}/%{blaslib} \ %endif %endif %if %{with metis} --with-metis=1 \ %endif %if %{with tetgen} --with-tetgen=1 \ --with-tetgen-lib=-ltetgen \ %endif %if %{with superlu} --with-superlu=1 \ --with-superlu-include=%{_includedir}/SuperLU \ --with-superlu-lib=-lsuperlu \ %endif %if %{with suitesparse} --with-suitesparse=1 \ --with-suitesparse-include=%{_includedir}/suitesparse \ --with-suitesparse-lib="-lumfpack -lklu -lcholmod -lamd" %endif #cat config.log && exit 1 ## RPM_BUILD_NCPUS="`%{_bindir}/getconf _NPROCESSORS_ONLN`" make \ V=1 MAKE_NP=$RPM_BUILD_NCPUS PETSC_DIR=%{_builddir}/%{name}-%{version}/%{name}-%{version} PETSC_ARCH=%{_arch} all popd %if %{with arch64} pushd build64 %configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran \ %{petsc_build_options} \ --with-64-bit-indices=1 \ %if %{with metis64} --with-metis=1 \ %endif %if %{with blas64} %if 0%{?fedora} || 0%{?rhel} >= 9 --with-blaslapack=1 --with-blaslapack-lib=-l%{blaslib}%{blasvar}64 --with-blaslapack-include=%{_includedir}/%{blaslib} \ %else --with-openblas=1 --with-openblas-lib=-l%{blaslib}%{blasvar}64 --with-openblas-include=%{_includedir}/%{blaslib} \ %endif %endif %if %{with suitesparse64} --with-suitesparse=1 \ --with-suitesparse-include=%{_includedir}/suitesparse \ --with-suitesparse-lib="-lumfpack64 -lklu64 -lcholmod64 -lamd64" %endif ## RPM_BUILD_NCPUS="`%{_bindir}/getconf _NPROCESSORS_ONLN`" make \ V=1 MAKE_NP=$RPM_BUILD_NCPUS PETSC_DIR=%{_builddir}/%{name}-%{version}/build64 PETSC_ARCH=%{_arch} all popd %endif %if %{with openmpi} cd buildopenmpi_dir %{_openmpi_load} export CC=mpicc export CXX=mpic++ export FC=mpifort %configure --with-cc=mpicc --with-cxx=mpic++ --with-fc=mpifort \ --FC_LINKER_FLAGS="$LDFLAGS -lgfortran -lmpi_mpifh" \ --LIBS=" -lmpi -lmpi_mpifh" \ %{petsc_mpibuild_options} \ %if %{with metis} --with-metis=1 \ %endif %if %{?__isa_bits:%{__isa_bits}}%{!?__isa_bits:32} == 64 --with-64-bit-indices=0 \ %endif %if %{with blas} %if 0%{?fedora} || 0%{?rhel} >= 9 --with-blaslapack=1 --with-blaslapack-lib=-l%{blaslib}%{blasvar} --with-blaslapack-include=%{_includedir}/%{blaslib} \ %else --with-openblas=1 --with-openblas-lib=-l%{blaslib}%{blasvar} --with-openblas-include=%{_includedir}/%{blaslib} \ %endif %endif #cat config.log #exit 1 RPM_BUILD_NCPUS="`%{_bindir}/getconf _NPROCESSORS_ONLN`" make \ V=1 MAKE_NP=$RPM_BUILD_NCPUS PETSC_DIR=%{_builddir}/%{name}-%{version}/buildopenmpi_dir PETSC_ARCH=%{_arch} all %if %{with python} pushd src/binding/petsc4py export PETSC_ARCH=%{_arch} export PETSC_DIR=../../../ %py3_build unset PETSC_ARCH unset PETSC_DIR popd %endif %{_openmpi_unload} cd .. %endif %if %{with mpich} cd buildmpich_dir %{_mpich_load} export CC=mpicc export CXX=mpic++ export FC=mpifort %configure --with-cc=mpicc --with-cxx=mpic++ --with-fc=mpifort \ --FC_LINKER_FLAGS="$LDFLAGS -lgfortran -lfmpich -lmpichf90" \ --LIBS=" -lmpich -lfmpich -lmpichf90" \ %{petsc_mpibuild_options} \ %if %{with metis} --with-metis=1 \ %endif %if %{?__isa_bits:%{__isa_bits}}%{!?__isa_bits:32} == 64 --with-64-bit-indices=0 \ %endif %if %{with blas} %if 0%{?fedora} || 0%{?rhel} >= 9 --with-blaslapack=1 --with-blaslapack-lib=-l%{blaslib}%{blasvar} --with-blaslapack-include=%{_includedir}/%{blaslib} \ %else --with-openblas=1 --with-openblas-lib=-l%{blaslib}%{blasvar} --with-openblas-include=%{_includedir}/%{blaslib} \ %endif %endif #cat config.log #exit 1 RPM_BUILD_NCPUS="`%{_bindir}/getconf _NPROCESSORS_ONLN`" make \ V=1 MAKE_NP=$RPM_BUILD_NCPUS PETSC_DIR=%{_builddir}/%{name}-%{version}/buildmpich_dir PETSC_ARCH=%{_arch} all %if %{with python} pushd src/binding/petsc4py export PETSC_ARCH=%{_arch} export PETSC_DIR=../../../ %py3_build unset PETSC_ARCH unset PETSC_DIR popd %endif %{_mpich_unload} cd .. %endif %install pushd %{name}-%{version} mkdir -p %{buildroot}%{_libdir} %{buildroot}%{_includedir}/%{name} mkdir -p %{buildroot}%{_fmoddir}/%{name} mkdir -p %{buildroot}%{_libdir}/%{name}/conf install -pm 755 %{_arch}/lib/libpetsc.* %{buildroot}%{_libdir} ln -sf libpetsc.so.%{version} %{buildroot}%{_libdir}/libpetsc.so ln -sf libpetsc.so.%{version} %{buildroot}%{_libdir}/libpetsc.so.%{releasever} ln -sf libpetsc.so.%{version} %{buildroot}%{_libdir}/libpetsc.so.%{majorver} install -pm 644 %{_arch}/include/*.h %{buildroot}%{_includedir}/%{name}/ install -pm 644 %{_arch}/include/*.mod %{buildroot}%{_fmoddir}/%{name}/ cp -a include/* %{buildroot}%{_includedir}/%{name}/ cp -a %{_arch}/lib/pkgconfig %{buildroot}%{_libdir}/ sed -e 's|${prefix}/lib|${prefix}/%{_lib}|g' -i %{buildroot}%{_libdir}/pkgconfig/PETSc.pc ln -fs %{_libdir}/pkgconfig/PETSc.pc %{buildroot}%{_libdir}/pkgconfig/petsc.pc install -pm 644 %{_arch}/lib/petsc/conf/petscrules %{buildroot}%{_libdir}/%{name}/conf/ install -pm 644 %{_arch}/lib/petsc/conf/petscvariables %{buildroot}%{_libdir}/%{name}/conf/ install -pm 644 lib/petsc/conf/rules %{buildroot}%{_libdir}/%{name}/conf/ install -pm 644 lib/petsc/conf/variables %{buildroot}%{_libdir}/%{name}/conf/ sed -e 's|%{_builddir}/%{name}-%{version}/%{name}-%{version}|%{_prefix}|g' -i %{buildroot}%{_libdir}/%{name}/conf/petscvariables sed -e 's|%{_builddir}/%{name}-%{version}/%{name}-%{version}/%{_arch}/|%{_prefix}|g' -i %{buildroot}%{_libdir}/%{name}/conf/petscvariables sed -e 's|-L%{_prefix}/%{_arch}/lib|-L%{_libdir}|g' -i %{buildroot}%{_libdir}/%{name}/conf/petscvariables sed -e 's|-I%{_prefix}/%{_arch}/include|-I%{_includedir}/%{name} -I%{_fmoddir}/%{name}|g' -i %{buildroot}%{_libdir}/%{name}/conf/petscvariables sed -e 's|${PETSC_DIR}/${PETSC_ARCH}/lib|%{_libdir}|g' -i %{buildroot}%{_libdir}/%{name}/conf/variables sed -e 's|${PETSC_DIR}/${PETSC_ARCH}/lib|%{_libdir}|g' -i %{buildroot}%{_libdir}/%{name}/conf/rules sed -e 's|${PETSC_DIR}|%{_prefix}|g' -i %{buildroot}%{_libdir}/%{name}/conf/petscrules sed -e 's|${PETSC_DIR}|%{_prefix}|g' -i %{buildroot}%{_libdir}/%{name}/conf/petscvariables popd %if %{with arch64} pushd build64 mkdir -p %{buildroot}%{_libdir} %{buildroot}%{_includedir}/%{name}64 mkdir -p %{buildroot}%{_fmoddir}/%{name}64 mkdir -p %{buildroot}%{_libdir}/%{name}64/conf mkdir -p %{buildroot}%{_libdir}/pkgconfig install -pm 755 %{_arch}/lib/libpetsc64.* %{buildroot}%{_libdir} ln -sf libpetsc64.so.%{version} %{buildroot}%{_libdir}/libpetsc64.so ln -sf libpetsc64.so.%{version} %{buildroot}%{_libdir}/libpetsc64.so.%{releasever} ln -sf libpetsc64.so.%{version} %{buildroot}%{_libdir}/libpetsc64.so.%{majorver} install -pm 644 %{_arch}/include/*.h %{buildroot}%{_includedir}/%{name}64/ install -pm 644 %{_arch}/include/*.mod %{buildroot}%{_fmoddir}/%{name}64/ cp -a include/* %{buildroot}%{_includedir}/%{name}64/ cp -p %{_arch}/lib/pkgconfig/PETSc.pc %{buildroot}%{_libdir}/pkgconfig/PETSc64.pc cp -p %{_arch}/lib/pkgconfig/PETSc.pc %{buildroot}%{_libdir}/pkgconfig/petsc64.pc sed -e 's|${prefix}/lib|${prefix}/%{_lib}|g' -i %{buildroot}%{_libdir}/pkgconfig/PETSc64.pc sed -e 's|${prefix}/lib|${prefix}/%{_lib}|g' -i %{buildroot}%{_libdir}/pkgconfig/petsc64.pc install -pm 644 %{_arch}/lib/petsc/conf/petscrules %{buildroot}%{_libdir}/%{name}64/conf/ install -pm 644 %{_arch}/lib/petsc/conf/petscvariables %{buildroot}%{_libdir}/%{name}64/conf/ install -pm 644 lib/petsc/conf/rules %{buildroot}%{_libdir}/%{name}64/conf/ install -pm 644 lib/petsc/conf/variables %{buildroot}%{_libdir}/%{name}64/conf/ sed -e 's|%{_builddir}/%{name}-%{version}/build64|%{_prefix}|g' -i %{buildroot}%{_libdir}/%{name}64/conf/petscvariables sed -e 's|%{_builddir}/%{name}-%{version}/build64/%{_arch}/|%{_prefix}|g' -i %{buildroot}%{_libdir}/%{name}64/conf/petscvariables sed -e 's|-L%{_prefix}/%{_arch}/lib|-L%{_libdir}|g' -i %{buildroot}%{_libdir}/%{name}64/conf/petscvariables sed -e 's|-I%{_prefix}/%{_arch}/include/|-I%{_includedir}/%{name}64 -I%{_fmoddir}/%{name}64|g' -i %{buildroot}%{_libdir}/%{name}64/conf/petscvariables sed -e 's|${PETSC_DIR}/${PETSC_ARCH}/lib|%{_libdir}|g' -i %{buildroot}%{_libdir}/%{name}64/conf/variables sed -e 's|${PETSC_DIR}/${PETSC_ARCH}/lib|%{_libdir}|g' -i %{buildroot}%{_libdir}/%{name}64/conf/rules sed -e 's|${PETSC_DIR}|%{_prefix}|g' -i %{buildroot}%{_libdir}/%{name}/conf/petscrules sed -e 's|${PETSC_DIR}|%{_prefix}|g' -i %{buildroot}%{_libdir}/%{name}/conf/petscvariables popd %endif %if %{with openmpi} pushd buildopenmpi_dir %{_openmpi_load} mkdir -p %{buildroot}$MPI_LIB %{buildroot}$MPI_INCLUDE/%{name} mkdir -p %{buildroot}$MPI_FORTRAN_MOD_DIR/%{name} mkdir -p %{buildroot}$MPI_LIB/%{name}/conf install -pm 755 %{_arch}/lib/libpetsc.* %{buildroot}$MPI_LIB ln -sf libpetsc.so.%{version} %{buildroot}$MPI_LIB/libpetsc.so ln -sf libpetsc.so.%{version} %{buildroot}$MPI_LIB/libpetsc.so.%{releasever} ln -sf libpetsc.so.%{version} %{buildroot}$MPI_LIB/libpetsc.so.%{majorver} install -pm 644 %{_arch}/include/*.h %{buildroot}$MPI_INCLUDE/%{name}/ install -pm 644 %{_arch}/include/*.mod %{buildroot}$MPI_FORTRAN_MOD_DIR/%{name}/ cp -a include/* %{buildroot}$MPI_INCLUDE/%{name}/ cp -a %{_arch}/lib/pkgconfig %{buildroot}$MPI_LIB/ sed -e 's|-I${includedir}/petsc|-I%{_includedir}/openmpi-%{_arch}/petsc|g' -i %{buildroot}$MPI_LIB/pkgconfig/PETSc.pc sed -e 's|-L${libdir}|-L%{_libdir}/openmpi/lib|g' -i %{buildroot}$MPI_LIB/pkgconfig/PETSc.pc sed -e 's|ldflag_rpath=-L|ldflag_rpath=-L%{_libdir}/openmpi/lib|g' -i %{buildroot}$MPI_LIB/pkgconfig/PETSc.pc sed -e 's|-lpetsc|-lpetsc -lhdf5|' -i %{buildroot}$MPI_LIB/pkgconfig/PETSc.pc sed -e 's|${prefix}/lib|${prefix}/%{_lib}/openmpi/lib|g' -i %{buildroot}$MPI_LIB/pkgconfig/PETSc.pc ln -fs $MPI_LIB/pkgconfig/PETSc.pc %{buildroot}$MPI_LIB/pkgconfig/petsc.pc install -pm 644 %{_arch}/lib/petsc/conf/petscrules %{buildroot}$MPI_LIB/%{name}/conf/ install -pm 644 %{_arch}/lib/petsc/conf/petscvariables %{buildroot}$MPI_LIB/%{name}/conf/ install -pm 644 lib/petsc/conf/rules %{buildroot}$MPI_LIB/%{name}/conf/ install -pm 644 lib/petsc/conf/variables %{buildroot}$MPI_LIB/%{name}/conf/ sed -e 's|%{_builddir}/%{name}-%{version}/buildopenmpi_dir|%{_prefix}|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscvariables sed -e 's|%{_builddir}/%{name}-%{version}/buildopenmpi_dir/%{_arch}/|%{_prefix}|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscvariables sed -e 's|-L%{_prefix}/%{_arch}/lib|-L%{_libdir}/openmpi/lib|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscvariables sed -e 's|-I%{_prefix}/%{_arch}/include|-I%{_includedir}/openmpi-%{_arch}/%{name} -I%{_fmoddir}/openmpi/%{name}|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscvariables sed -e 's|${PETSC_DIR}/${PETSC_ARCH}/lib|%{_libdir}/openmpi/lib|g' -i %{buildroot}$MPI_LIB/%{name}/conf/variables sed -e 's|${PETSC_DIR}/${PETSC_ARCH}/lib|%{_libdir}/openmpi/lib|g' -i %{buildroot}$MPI_LIB/%{name}/conf/rules sed -e 's|${PETSC_DIR}|%{_prefix}|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscrules sed -e 's|${PETSC_DIR}|%{_prefix}|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscvariables %if %{with python} pushd src/binding/petsc4py export PETSC_ARCH=%{_arch} export PETSC_DIR=../../../ %py3_install -- --verbose unset PETSC_ARCH unset PETSC_DIR popd # Install petsc4py files into MPI directories %if 0%{?rhel} MPI_PYTHON3_SITEARCH=%{python3_sitearch}/openmpi %endif mkdir -p %{buildroot}$MPI_PYTHON3_SITEARCH cp -a %{buildroot}%{python3_sitearch}/%{pymodule_name} %{buildroot}$MPI_PYTHON3_SITEARCH/ rm -rf %{buildroot}%{python3_sitearch}/%{pymodule_name} cp -a %{buildroot}%{python3_sitearch}/%{pymodule_name}-%{pymodule_version}-py%{python3_version}.egg-info %{buildroot}$MPI_PYTHON3_SITEARCH/ rm -rf %{buildroot}%{python3_sitearch}/%{pymodule_name}-%{pymodule_version}-py%{python3_version}.egg-info chrpath -r %{_libdir}/openmpi/lib %{buildroot}$MPI_PYTHON3_SITEARCH/%{pymodule_name}/lib/%{_arch}/*.so %endif %{_openmpi_unload} cd .. %endif %if %{with mpich} cd buildmpich_dir %{_mpich_load} mkdir -p %{buildroot}$MPI_LIB %{buildroot}$MPI_INCLUDE/%{name} mkdir -p %{buildroot}$MPI_FORTRAN_MOD_DIR/%{name} mkdir -p %{buildroot}$MPI_LIB/%{name}/conf install -pm 755 %{_arch}/lib/libpetsc.* %{buildroot}$MPI_LIB ln -sf libpetsc.so.%{version} %{buildroot}$MPI_LIB/libpetsc.so ln -sf libpetsc.so.%{version} %{buildroot}$MPI_LIB/libpetsc.so.%{releasever} ln -sf libpetsc.so.%{version} %{buildroot}$MPI_LIB/libpetsc.so.%{majorver} install -pm 644 %{_arch}/include/*.h %{buildroot}$MPI_INCLUDE/%{name}/ install -pm 644 %{_arch}/include/*.mod %{buildroot}$MPI_FORTRAN_MOD_DIR/%{name}/ cp -a include/* %{buildroot}$MPI_INCLUDE/%{name}/ cp -a %{_arch}/lib/pkgconfig %{buildroot}$MPI_LIB/ sed -e 's|-I${includedir}/petsc|-I%{_includedir}/mpich-%{_arch}/petsc|g' -i %{buildroot}$MPI_LIB/pkgconfig/PETSc.pc sed -e 's|-L${libdir}|-L%{_libdir}/mpich/lib|g' -i %{buildroot}$MPI_LIB/pkgconfig/PETSc.pc sed -e 's|ldflag_rpath=-L|ldflag_rpath=-L%{_libdir}/mpich/lib|g' -i %{buildroot}$MPI_LIB/pkgconfig/PETSc.pc sed -e 's|-lpetsc|-lpetsc -lhdf5|' -i %{buildroot}$MPI_LIB/pkgconfig/PETSc.pc sed -e 's|${prefix}/lib|${prefix}/%{_lib}/mpich/lib|g' -i %{buildroot}$MPI_LIB/pkgconfig/PETSc.pc ln -fs $MPI_LIB/pkgconfig/PETSc.pc %{buildroot}$MPI_LIB/pkgconfig/petsc.pc install -pm 644 %{_arch}/lib/petsc/conf/petscrules %{buildroot}$MPI_LIB/%{name}/conf/ install -pm 644 %{_arch}/lib/petsc/conf/petscvariables %{buildroot}$MPI_LIB/%{name}/conf/ install -pm 644 lib/petsc/conf/rules %{buildroot}$MPI_LIB/%{name}/conf/ install -pm 644 lib/petsc/conf/variables %{buildroot}$MPI_LIB/%{name}/conf/ sed -e 's|%{_builddir}/%{name}-%{version}/buildmpich_dir|%{_prefix}|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscvariables sed -e 's|%{_builddir}/%{name}-%{version}/buildmpich_dir/%{_arch}/|%{_prefix}|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscvariables sed -e 's|-L%{_prefix}/%{_arch}/lib|-L%{_libdir}/mpich/lib|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscvariables sed -e 's|-I%{_prefix}/%{_arch}/include|-I%{_includedir}/mpich-%{_arch}/%{name} -I%{_fmoddir}/mpich/%{name}|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscvariables sed -e 's|${PETSC_DIR}/${PETSC_ARCH}/lib|%{_libdir}/mpich/lib|g' -i %{buildroot}$MPI_LIB/%{name}/conf/variables sed -e 's|${PETSC_DIR}/${PETSC_ARCH}/lib|%{_libdir}/mpich/lib|g' -i %{buildroot}$MPI_LIB/%{name}/conf/rules sed -e 's|${PETSC_DIR}|%{_prefix}|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscrules sed -e 's|${PETSC_DIR}|%{_prefix}|g' -i %{buildroot}$MPI_LIB/%{name}/conf/petscvariables %if %{with python} pushd src/binding/petsc4py export PETSC_ARCH=%{_arch} export PETSC_DIR=../../../ %py3_install -- --verbose unset PETSC_ARCH unset PETSC_DIR popd # Install petsc4py files into MPI directories %if 0%{?rhel} MPI_PYTHON3_SITEARCH=%{python3_sitearch}/mpich %endif mkdir -p %{buildroot}$MPI_PYTHON3_SITEARCH cp -a %{buildroot}%{python3_sitearch}/%{pymodule_name} %{buildroot}$MPI_PYTHON3_SITEARCH/ rm -rf %{buildroot}%{python3_sitearch}/%{pymodule_name} cp -a %{buildroot}%{python3_sitearch}/%{pymodule_name}-%{pymodule_version}-py%{python3_version}.egg-info %{buildroot}$MPI_PYTHON3_SITEARCH/ rm -rf %{buildroot}%{python3_sitearch}/%{pymodule_name}-%{pymodule_version}-py%{python3_version}.egg-info chrpath -r %{_libdir}/mpich/lib %{buildroot}$MPI_PYTHON3_SITEARCH/%{pymodule_name}/lib/%{_arch}/*.so %endif %{_mpich_unload} cd .. %endif # Move html documentation in _pkgdocdir pushd %{buildroot}%{_includedir} mkdir -p %{buildroot}%{_pkgdocdir}/headers for i in `find . -name "*.h.html" -type f -print`; do mv $i %{buildroot}%{_pkgdocdir}/headers done for i in `find . -name "*.html" -type f -print`; do mv $i %{buildroot}%{_pkgdocdir}/headers done find . -name "Makefile" -type f -print | xargs /bin/rm -f popd cp -a %{name}-%{version}/docs/* %{buildroot}%{_pkgdocdir} # %check %if %{with openmpi} %{_openmpi_load} %if %{with check} export LD_LIBRARY_PATH=%{buildroot}$MPI_LIB export PETSC_DIR=%{_builddir}/%{name}-%{version}/buildopenmpi_dir export PETSC_ARCH=%{_arch} export MPI_INTERFACE_HOSTNAME=localhost export OMPI_MCA_btl_base_warn_component_unused=0 export wPETSC_DIR=./ export DATAFILESPATH=%{_builddir}/%{name}-%{version}/buildopenmpi_dir/share/petsc/datafiles RPM_BUILD_NCPUS="`%{_bindir}/getconf _NPROCESSORS_ONLN`" %if %{with debug} export PETSCVALGRIND_OPTIONS=" --tool=memcheck --leak-check=yes --track-origins=yes" export CFLAGS="-O0 -g -Wl,-z,now -fPIC" export CXXFLAGS="-O0 -g -Wl,-z,now -fPIC" export FFLAGS="-O0 -g -Wl,-z,now -fPIC -I${MPI_FORTRAN_MOD_DIR}" xvfb-run -a make MAKE_NP=$RPM_BUILD_NCPUS all test -C buildopenmpi_dir V=1 MPIEXEC='%{_builddir}/%{name}-%{version}/buildopenmpi_dir/lib/petsc/bin/petscmpiexec -valgrind' %else xvfb-run -a make MAKE_NP=$RPM_BUILD_NCPUS all test -C buildopenmpi_dir V=1 %endif %endif %if %{with python} %if %{with pycheck} pushd buildopenmpi_dir/src/binding/petsc4py export PETSC_ARCH=%{_arch} export PETSC_DIR=../../../ %if 0%{?rhel} MPI_PYTHON3_SITEARCH=%{python3_sitearch}/openmpi %endif export PYTHONPATH=%{buildroot}$MPI_PYTHON3_SITEARCH export LD_LIBRARY_PATH=%{buildroot}$MPI_LIB %{__python3} setup.py test unset PETSC_ARCH unset PETSC_DIR popd %endif %endif %{_openmpi_unload} %endif %if %{with mpich} %{_mpich_load} %if %{with check} export LD_LIBRARY_PATH=%{_builddir}/%{name}-%{version}/buildmpich_dir/%{_arch}/lib export PETSC_DIR=%{_builddir}/%{name}-%{version}/buildmpich_dir export PETSC_ARCH=%{_arch} export MPI_INTERFACE_HOSTNAME=localhost export OMPI_MCA_btl_base_warn_component_unused=0 export wPETSC_DIR=./ export DATAFILESPATH=%{_builddir}/%{name}-%{version}/buildmpich_dir/share/petsc/datafiles RPM_BUILD_NCPUS="`%{_bindir}/getconf _NPROCESSORS_ONLN`" %if %{with debug} export PETSCVALGRIND_OPTIONS=" --tool=memcheck --leak-check=yes --track-origins=yes" export CFLAGS="-O0 -g -Wl,-z,now -fPIC" export CXXFLAGS="-O0 -g -Wl,-z,now -fPIC" export FFLAGS="-O0 -g -Wl,-z,now -fPIC -I${MPI_FORTRAN_MOD_DIR}" xvfb-run -a make MAKE_NP=$RPM_BUILD_NCPUS all test -C buildmpich_dir V=1 MPIEXEC='%{_builddir}/%{name}-%{version}/buildmpich_dir/lib/petsc/bin/petscmpiexec -valgrind' %else xvfb-run -a make MAKE_NP=$RPM_BUILD_NCPUS all test -C buildmpich_dir V=1 %endif %endif %if %{with python} %if %{with pycheck} pushd buildmpich_dir/src/binding/petsc4py export PETSC_ARCH=%{_arch} export PETSC_DIR=../../../ %if 0%{?rhel} MPI_PYTHON3_SITEARCH=%{python3_sitearch}/mpich %endif export PYTHONPATH=%{buildroot}$MPI_PYTHON3_SITEARCH export LD_LIBRARY_PATH=%{buildroot}$MPI_LIB %{__python3} setup.py test unset PETSC_ARCH unset PETSC_DIR popd %endif %endif %{_mpich_unload} %endif %if %{with check} export LD_LIBRARY_PATH=%{_libdir}:%{_builddir}/%{name}-%{version}/%{name}-%{version}/%{_arch}/lib export PETSC_DIR=%{_builddir}/%{name}-%{version}/%{name}-%{version} export PETSC_ARCH=%{_arch} export wPETSC_DIR=./ export DATAFILESPATH=%{_builddir}/%{name}-%{version}/%{name}-%{version}/share/petsc/datafiles RPM_BUILD_NCPUS="`%{_bindir}/getconf _NPROCESSORS_ONLN`" %if %{with debug} export PETSCVALGRIND_OPTIONS=" --tool=memcheck --leak-check=yes --track-origins=yes" export CFLAGS="-O0 -g -Wl,-z,now -fPIC" export CXXFLAGS="-O0 -g -Wl,-z,now -fPIC" export FFLAGS="-O0 -g -Wl,-z,now -fPIC -I%{_libdir}/gfortran/modules" xvfb-run -a make MAKE_NP=$RPM_BUILD_NCPUS all test -C %{name}-%{version} V=1 MPIEXEC='%{_builddir}/%{name}-%{version}/%{name}-%{version}/lib/petsc/bin/petscmpiexec -n $RPM_BUILD_NCPUS -valgrind' %else xvfb-run -a make MAKE_NP=$RPM_BUILD_NCPUS all test -C %{name}-%{version} V=1 MPIEXEC='%{_builddir}/%{name}-%{version}/%{name}-%{version}/lib/petsc/bin/petscmpiexec -n $RPM_BUILD_NCPUS' %endif %if %{with arch64} export LD_LIBRARY_PATH=%{_libdir}:%{_builddir}/%{name}-%{version}/build64/%{_arch}/lib export PETSC_DIR=%{_builddir}/%{name}-%{version}/build64 export PETSC_ARCH=%{_arch} export wPETSC_DIR=./ export DATAFILESPATH=%{_builddir}/%{name}-%{version}/build64/share/petsc/datafiles RPM_BUILD_NCPUS="`%{_bindir}/getconf _NPROCESSORS_ONLN`" ## 'make test' needs to link against -lpetsc ## Crude fix: ln -s %{_builddir}/%{name}-%{version}/build64/%{_arch}/lib/libpetsc64.so %{_builddir}/%{name}-%{version}/build64/%{_arch}/lib/libpetsc.so %if %{with debug} export PETSCVALGRIND_OPTIONS=" --tool=memcheck --leak-check=yes --track-origins=yes" export CFLAGS="-O0 -g -Wl,-z,now -fPIC" export CXXFLAGS="-O0 -g -Wl,-z,now -fPIC" export FFLAGS="-O0 -g -Wl,-z,now -fPIC -I%{_libdir}/gfortran/modules" xvfb-run -a make MAKE_NP=$RPM_BUILD_NCPUS all test -C build64 V=1 MPIEXEC='%{_builddir}/%{name}-%{version}/build64/lib/petsc/bin/petscmpiexec -n $RPM_BUILD_NCPUS -valgrind' %else xvfb-run -a make MAKE_NP=$RPM_BUILD_NCPUS all test -C build64 V=1 MPIEXEC='%{_builddir}/%{name}-%{version}/build64/lib/petsc/bin/petscmpiexec -n $RPM_BUILD_NCPUS' %endif %endif %endif %files %license %{name}-%{version}/LICENSE %{_libdir}/libpetsc.so.3 %{_libdir}/libpetsc.so.%{releasever} %{_libdir}/libpetsc.so.%{version} %files devel %{_libdir}/pkgconfig/PETSc.pc %{_libdir}/pkgconfig/petsc.pc %{_libdir}/%{name}/ %{_libdir}/libpetsc.so %{_includedir}/%{name}/ %{_fmoddir}/%{name}/ %files doc %license %{name}-%{version}/LICENSE %{_pkgdocdir}/ %if %{with arch64} %files -n petsc64 %license build64/LICENSE %{_libdir}/libpetsc64.so.3 %{_libdir}/libpetsc64.so.%{releasever} %{_libdir}/libpetsc64.so.%{version} %files -n petsc64-devel %{_libdir}/pkgconfig/PETSc64.pc %{_libdir}/pkgconfig/petsc64.pc %{_libdir}/%{name}64/ %{_libdir}/libpetsc64.so %{_includedir}/%{name}64/ %{_fmoddir}/%{name}64/ %endif %if %{with openmpi} %files openmpi %license buildopenmpi_dir/LICENSE %{_libdir}/openmpi/lib/libpetsc.so.3 %{_libdir}/openmpi/lib/libpetsc.so.%{releasever} %{_libdir}/openmpi/lib/libpetsc.so.%{version} %files openmpi-devel %{_libdir}/openmpi/lib/libpetsc.so %{_libdir}/openmpi/lib/%{name}/ %{_libdir}/openmpi/lib/pkgconfig/PETSc.pc %{_libdir}/openmpi/lib/pkgconfig/petsc.pc %{_includedir}/openmpi-%{_arch}/%{name}/ %{_fmoddir}/openmpi/%{name}/ %if %{with python} %files -n python3-%{name}-openmpi %{python3_sitearch}/openmpi/%{pymodule_name}/ %{python3_sitearch}/openmpi/%{pymodule_name}-%{pymodule_version}-py%{python3_version}.egg-info %endif %endif %if %{with mpich} %files mpich %license buildmpich_dir/LICENSE %{_libdir}/mpich/lib/libpetsc.so.3 %{_libdir}/mpich/lib/libpetsc.so.%{releasever} %{_libdir}/mpich/lib/libpetsc.so.%{version} %files mpich-devel %{_libdir}/mpich/lib/libpetsc.so %{_libdir}/mpich/lib/%{name}/ %{_libdir}/mpich/lib/pkgconfig/PETSc.pc %{_libdir}/mpich/lib/pkgconfig/petsc.pc %{_includedir}/mpich-%{_arch}/%{name}/ %{_fmoddir}/mpich/%{name}/ %if %{with python} %files -n python3-%{name}-mpich %{python3_sitearch}/mpich/%{pymodule_name}/ %{python3_sitearch}/mpich/%{pymodule_name}-%{pymodule_version}-py%{python3_version}.egg-info %endif %endif %changelog %autochangelog