# Testing ? %bcond_without check ## Debug builds ? %bcond_with debug # # Define _pkgdocdir macro on epel %{?el7:%global _pkgdocdir %{_docdir}/%{name}} # %if 0%{?fedora} %bcond_without mpich %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%{?rhel} && 0%{?rhel} >= 7 %bcond_without mpich %bcond_without openmpi %endif %if 0%{?rhel} == 7 %global dts devtoolset-8- %endif # ## PETSC looks incompatible with serial MUMPS %bcond_with mumps_serial # ## Sundials needs mpi %bcond_with sundials_serial # %bcond_without superlu # ## SuperLUDIST needs parmetis %bcond_with superludist %bcond_with superlumt # # hdf5' is required by 'cgns' # hdf5 needs MPI %bcond_without cgns %bcond_without hdf5 # '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.8.* is incompatible with Sundials 3+ %bcond_with sundials %bcond_without scalapack %bcond_without mumps %bcond_without ptscotch %bcond_without hypre %endif %global releasever 3.11 Name: petsc Summary: Portable Extensible Toolkit for Scientific Computation Version: %{releasever}.3 Release: 11%{?dist} License: BSD URL: https://www.mcs.anl.gov/petsc Source0: http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-%{version}.tar.gz ## Remove rpath flags Patch0: %{name}-%{releasever}-no-rpath.patch ## Rename library name for 64-bit integer package Patch1: %{name}-lib64.patch # Disable checkopts and petscnagupgrade.py Patch3: %{name}-disable_petscnagupgrade.patch # Reverting patch for Hypre-2.11.2 Patch4: %{name}-%{releasever}-hypre_2.11.2_reverting.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 %endif %if %{with sundials_serial} BuildRequires: sundials-devel %endif %if 0%{?with_suitesparse} BuildRequires: suitesparse-devel %endif %if %{with blas} BuildRequires: openblas-devel, openblas-srpm-macros %endif BuildRequires: %{?dts}gcc, %{?dts}gcc-c++, cmake3 BuildRequires: %{?dts}gcc-gfortran BuildRequires: libX11-devel %if 0%{?el7} BuildRequires: python2-devel %else BuildRequires: python3-devel %endif BuildRequires: pcre-devel %if 0%{?el7} BuildRequires: pkgconfig %else BuildRequires: pkgconf-pkg-config %endif BuildRequires: valgrind-devel BuildRequires: tcsh Requires: gcc-gfortran%{?_isa} %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} %if 0%{?el7} Requires: pkgconfig%{?_isa} %else Requires: pkgconf-pkg-config%{?_isa} %endif %description devel Portable Extensible Toolkit for Scientific Computation (developer files). %package doc Summary: Portable Extensible Toolkit for Scientific Computation (documentation files) %if 0%{?el7} BuildRequires: python2-sphinx %else BuildRequires: python3-sphinx %endif 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) BuildRequires: openblas-serial64 >= 0.2.19-1 BuildRequires: openblas-devel >= 0.2.19-1 Requires: gcc-gfortran%{?_isa} %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} %if 0%{?el7} Requires: pkgconfig%{?_isa} %else Requires: pkgconf-pkg-config%{?_isa} %endif 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-devel %endif %if %{with ptscotch} BuildRequires: ptscotch-openmpi-devel %endif %if %{with scalapack} BuildRequires: scalapack-openmpi-devel BuildRequires: blacs-openmpi-devel %endif %if %{with mumps} BuildRequires: MUMPS-openmpi-devel %endif %if %{with sundials} BuildRequires: sundials-openmpi-devel %endif %if %{with superludist} BuildRequires: superlu_dist-openmpi-devel %endif %if %{with fftw} BuildRequires: fftw-devel BuildRequires: fftw-openmpi-devel %endif %if %{with hypre} BuildRequires: hypre-openmpi-devel %endif %if %{with blas} BuildRequires: openblas-devel, openblas-srpm-macros %endif Requires: gcc-gfortran%{?_isa} %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} %description openmpi-devel Portable Extensible Toolkit for Scientific Computation (developer files). %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-devel %endif %if %{with ptscotch} BuildRequires: ptscotch-mpich-devel %endif %if %{with scalapack} BuildRequires: scalapack-mpich-devel BuildRequires: blacs-mpich-devel %endif %if %{with mumps} BuildRequires: MUMPS-mpich-devel %endif %if %{with sundials} BuildRequires: sundials-mpich-devel %endif %if %{with superludist} BuildRequires: superlu_dist-mpich-devel %endif %if %{with hypre} BuildRequires: hypre-mpich-devel %endif %if %{with fftw} BuildRequires: fftw-devel BuildRequires: fftw-mpich-devel %endif %if %{with blas} BuildRequires: openblas-devel, openblas-srpm-macros %endif Requires: gcc-gfortran%{?_isa} %global mpichversion %(rpm -qi mpich | awk -F': ' '/Version/ {print $2}') Requires: mpich%{?_isa} >= 0:%{mpichversion}-1 %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} %if 0%{?el7} # https://bugzilla.redhat.com/show_bug.cgi?id=1397192 Requires: mpich-devel %else Requires: mpich-devel%{?_isa} %endif %description mpich-devel Portable Extensible Toolkit for Scientific Computation (developer files). %endif ###### ############################################################################# %prep %setup -q -c pushd %{name}-%{version} %if 0%{?fedora} || 0%{?rhel} >= 8 find . -name 'setup.py' | xargs sed -i '1s|^#!/usr/bin/env python|#!%{__python3}|' find . -name 'configure' | xargs sed -i '1s|^#!/usr/bin/env python|#!%{__python3}|' find config -name '*.py' | xargs sed -i '1s|^#!/usr/bin/env python|#!%{__python3}|' find src/benchmarks/streams -name '*.py' | xargs sed -i '1s|^#!/usr/bin/env python|#!%{__python3}|' %endif %patch3 -p0 %if 0%{?el7} %patch4 -R -p1 %endif popd %if %{with arch64} cp -a %{name}-%{version} build64 pushd build64 %patch1 -p0 popd %endif pushd %{name}-%{version} %patch0 -p0 popd %if %{with openmpi} cp -a %{name}-%{version} buildopenmpi_dir %endif %if %{with mpich} cp -a %{name}-%{version} buildmpich_dir %endif %build pushd %{name}-%{version} %if 0%{?el7} %{?dts:source /opt/rh/devtoolset-8/enable} %configure --with-cc=/opt/rh/devtoolset-8/root/usr/bin/gcc --with-cxx=/opt/rh/devtoolset-8/root/usr/bin/g++ --with-fc=/opt/rh/devtoolset-8/root/usr/bin/gfortran \ %else %configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran \ %endif %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" \ %else CFLAGS="$CFLAGS -O3 -fPIC" CXXFLAGS="$CXXFLAGS -O3 -fPIC" FFLAGS="$FFLAGS -O3 -fPIC" LDFLAGS="$LDFLAGS -fPIC" \ COPTFLAGS="$CFLAGS" CXXOPTFLAGS="$CXXFLAGS" FOPTFLAGS="$FFLAGS" \ %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-64-bit-indices=0 \ --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 \ %if 0%{?fedora} --with-cxxlib-autodetect=0 \ %endif %if %{with debug} --with-debugging=1 \ %else --with-debugging=0 \ %endif %if %{with blas} --with-blas-lapack-lib=-lopenblas \ --known-64-bit-blas-indices=0 \ %endif %if %{with superlu} --with-superlu=1 \ --with-superlu-include=%{_includedir}/SuperLU \ --with-superlu-lib=-lsuperlu \ %endif %if %{with mumps_serial} --with-mumps-serial=1 \ --with-mumps-include=%{_includedir}/MUMPS \ --with-mumps-lib=-ldmumps \ %endif --with-mpi=0 \ --with-x=1 \ --with-openmp=0 \ --with-metis=0 \ --with-hwloc=0 \ --with-ssl=0 \ %if 0%{?with_suitesparse} --with-suitesparse=1 \ --with-suitesparse-include=%{_includedir}/suitesparse \ --with-suitesparse-lib="-lumfpack -lklu -lcholmod -lamd" \ %endif %if %{with sundials_serial} --with-sundials=1 \ --with-sundials-include= \ --with-sundials-lib="-lsundials_nvecserial -lsundials_cvode" \ %endif %if %{with superlu} --with-superlu=1 \ --with-superlu-include=%{_includedir}/SuperLU \ --with-superlu-lib=-lsuperlu \ %endif --with-pthread=1 \ --with-valgrind=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 %if 0%{?el7} %{?dts:source /opt/rh/devtoolset-8/enable} %configure --with-cc=/opt/rh/devtoolset-8/root/usr/bin/gcc --with-cxx=/opt/rh/devtoolset-8/root/usr/bin/g++ --with-fc=/opt/rh/devtoolset-8/root/usr/bin/gfortran \ %else %configure --with-cc=gcc --with-cxx=g++ --with-fc=gfortran \ %endif %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 -fPIC -I%{_libdir}/gfortran/modules" LDFLAGS="$LDFLAGS -fPIC" \ %else CFLAGS="$CFLAGS -O3 -fPIC" CXXFLAGS="$CXXFLAGS -O3 -fPIC" FFLAGS="$FFLAGS -O3 -fPIC" LDFLAGS="$LDFLAGS -fPIC" \ COPTFLAGS="$CFLAGS" CXXOPTFLAGS="$CXXFLAGS" FOPTFLAGS="$FFLAGS" \ %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-64-bit-indices=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 \ %if 0%{?fedora} --with-cxxlib-autodetect=0 \ %endif --with-mpi=0 \ --with-threadsafety=0 --with-log=1 \ %if %{with debug} --with-debugging=1 \ %else --with-debugging=0 \ %endif %if %{with blas64} --with-blas-lapack-lib=-lopenblas64 \ --known-64-bit-blas-indices=1 \ %endif --with-x=1 \ --with-openmp=0 \ --with-metis=0 \ --with-hwloc=0 \ --with-ssl=0 \ --with-pthread=1 \ --with-valgrind=1 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} pushd buildopenmpi_dir %{_openmpi_load} %configure \ %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 -fPIC -I${MPI_FORTRAN_MOD_DIR}" LDFLAGS="$LDFLAGS -fPIC" \ %else CFLAGS="$CFLAGS -O3 -fPIC" CXXFLAGS="$CXXFLAGS -O3 -fPIC" FFLAGS="$FFLAGS -O3 -fPIC" LDFLAGS="$LDFLAGS -fPIC" \ COPTFLAGS="$CFLAGS" CXXOPTFLAGS="$CXXFLAGS" FOPTFLAGS="$FFLAGS" \ %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-64-bit-indices=0 \ --with-fortran-interfaces=1 \ --with-windows-graphics=0 \ --with-cc=mpicc \ --with-cxx=mpicxx \ --with-fc=mpif77 \ --with-shared-ld=ld \ --with-pic=1 \ --with-clib-autodetect=0 \ --with-fortranlib-autodetect=0 \ %if 0%{?fedora} --with-cxxlib-autodetect=0 \ %endif --with-threadsafety=0 --with-log=1 \ %if %{with debug} --with-debugging=1 \ %else --with-debugging=0 \ %endif %if %{with blas} --with-blas-lapack-lib="-lopenblas" \ --known-64-bit-blas-indices=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= \ --with-cgns-lib="-L$MPI_LIB -lhdf5 -lcgns" \ %endif %if %{with hdf5} --with-hdf5=1 \ --with-hdf5-include= \ --with-hdf5-lib="-L$MPI_LIB -lhdf5" \ %endif %if %{with ptscotch} --with-ptscotch=1 \ --with-ptscotch-include= \ --with-ptscotch-lib="-L$MPI_LIB -lptscotch -lscotch -lptscotcherr -lscotcherr" \ %endif %if %{with mumps} --with-mumps=1 \ --with-mumps-include=$MPI_INCLUDE \ --with-mumps-lib="-L$MPI_LIB -ldmumps" \ %endif %if %{with sundials} --with-sundials=1 \ --with-sundials-include=$MPI_INCLUDE \ --with-sundials-lib="-L$MPI_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-metis=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 #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 %{_openmpi_unload} popd %endif %if %{with mpich} pushd buildmpich_dir %{_mpich_load} %configure \ %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 -fPIC -I${MPI_FORTRAN_MOD_DIR}" LDFLAGS="$LDFLAGS -fPIC" \ %else CFLAGS="$CFLAGS -O3 -fPIC" CXXFLAGS="$CXXFLAGS -O3 -fPIC" FFLAGS="$FFLAGS -O3 -fPIC" LDFLAGS="$LDFLAGS -fPIC" \ COPTFLAGS="$CFLAGS" CXXOPTFLAGS="$CXXFLAGS" FOPTFLAGS="$FFLAGS" \ %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-64-bit-indices=0 \ --with-fortran-interfaces=1 \ --with-windows-graphics=0 \ --with-cc=mpicc \ --with-cxx=mpicxx \ --with-fc=mpif77 \ --with-shared-ld=ld \ --with-pic=1 \ --with-clib-autodetect=0 \ --with-fortranlib-autodetect=0 \ %if 0%{?fedora} --with-cxxlib-autodetect=0 \ %endif --with-threadsafety=0 --with-log=1 \ %if %{with debug} --with-debugging=1 \ %else --with-debugging=0 \ %endif %if %{with blas} --with-blas-lapack-lib=-lopenblas \ --known-64-bit-blas-indices=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= \ --with-cgns-lib="-L$MPI_LIB -lhdf5 -lcgns" \ %endif %if %{with hdf5} --with-hdf5=1 \ --with-hdf5-include= \ --with-hdf5-lib="-L$MPI_LIB -lhdf5" \ %endif %if %{with ptscotch} --with-ptscotch=1 \ --with-ptscotch-include="" \ --with-ptscotch-lib="-L$MPI_LIB -lptscotch -lscotch -lptscotcherr -lscotcherr" \ %endif %if %{with mumps} --with-mumps=1 \ --with-mumps-include=$MPI_INCLUDE \ --with-mumps-lib="-L$MPI_LIB -ldmumps" \ %endif %if %{with sundials} --with-sundials=1 \ --with-sundials-include=$MPI_INCLUDE \ --with-sundials-lib="-L$MPI_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-metis=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 #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 %{_mpich_unload} popd %endif %install pushd %{name}-%{version} mkdir -p $RPM_BUILD_ROOT%{_libdir} $RPM_BUILD_ROOT%{_includedir}/%{name} mkdir -p $RPM_BUILD_ROOT%{_fmoddir}/%{name} mkdir -p $RPM_BUILD_ROOT%{_libdir}/%{name}/conf install -pm 755 %{_arch}/lib/libpetsc.* $RPM_BUILD_ROOT%{_libdir} ln -sf libpetsc.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpetsc.so ln -sf libpetsc.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpetsc.so.%{releasever} install -pm 644 %{_arch}/include/*.h $RPM_BUILD_ROOT%{_includedir}/%{name}/ install -pm 644 %{_arch}/include/*.mod $RPM_BUILD_ROOT%{_fmoddir}/%{name}/ cp -a include/* $RPM_BUILD_ROOT%{_includedir}/%{name}/ install -pm 644 %{_arch}/lib/petsc/conf/petscrules $RPM_BUILD_ROOT%{_libdir}/%{name}/conf/ install -pm 644 %{_arch}/lib/petsc/conf/petscvariables $RPM_BUILD_ROOT%{_libdir}/%{name}/conf/ install -pm 644 lib/petsc/conf/rules $RPM_BUILD_ROOT%{_libdir}/%{name}/conf/ install -pm 644 lib/petsc/conf/variables $RPM_BUILD_ROOT%{_libdir}/%{name}/conf/ sed -e 's|%{_builddir}/%{name}-%{version}/%{name}-%{version}|%{_prefix}|g' -i $RPM_BUILD_ROOT%{_libdir}/%{name}/conf/petscvariables sed -e 's|%{_builddir}/%{name}-%{version}/%{name}-%{version}/%{_arch}/|%{_prefix}|g' -i $RPM_BUILD_ROOT%{_libdir}/%{name}/conf/petscvariables sed -e 's|-L%{_prefix}/%{_arch}/lib|-L%{_libdir}|g' -i $RPM_BUILD_ROOT%{_libdir}/%{name}/conf/petscvariables sed -e 's|-I%{_prefix}/%{_arch}/include|-I%{_includedir}/%{name} -I%{_fmoddir}/%{name}|g' -i $RPM_BUILD_ROOT%{_libdir}/%{name}/conf/petscvariables sed -e 's|${PETSC_DIR}/${PETSC_ARCH}/lib|${PETSC_DIR}/%{_lib}|g' -i $RPM_BUILD_ROOT%{_libdir}/%{name}/conf/variables sed -e 's|${PETSC_DIR}/${PETSC_ARCH}/lib|${PETSC_DIR}/%{_lib}|g' -i $RPM_BUILD_ROOT%{_libdir}/%{name}/conf/rules popd ##Make a .pc file mkdir -p $RPM_BUILD_ROOT%{_libdir}/pkgconfig cat > $RPM_BUILD_ROOT%{_libdir}/pkgconfig/%{name}.pc < $RPM_BUILD_ROOT%{_libdir}/pkgconfig/%{name}64.pc <= 7 %if %{with mpich} %{_mpich_load} 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 %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" make -C buildmpich_dir test MPIEXEC='%{_builddir}/%{name}-%{version}/buildmpich_dir/lib/petsc/bin/petscmpiexec -valgrind' %else make -C buildmpich_dir test %endif %{_mpich_unload} %endif %endif %endif %files %license %{name}-%{version}/LICENSE %{_libdir}/libpetsc.so.* %files devel %{_libdir}/pkgconfig/%{name}.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.* %files -n petsc64-devel %{_libdir}/pkgconfig/%{name}64.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.* %files openmpi-devel %{_libdir}/openmpi/lib/libpetsc.so %{_libdir}/openmpi/lib/%{name}/ %{_includedir}/openmpi-%{_arch}/%{name}/ %if 0%{?el7} %{_fmoddir}/openmpi-%{_arch}/%{name}/ %else %{_fmoddir}/openmpi/%{name}/ %endif %endif %if %{with mpich} %files mpich %license buildmpich_dir/LICENSE %{_libdir}/mpich/lib/libpetsc.so.* %files mpich-devel %{_libdir}/mpich/lib/libpetsc.so %{_libdir}/mpich/lib/%{name}/ %{_includedir}/mpich-%{_arch}/%{name}/ %if 0%{?el7} %{_fmoddir}/mpich-%{_arch}/%{name}/ %else %{_fmoddir}/mpich/%{name}/ %endif %endif %changelog * Mon Oct 14 2019 Orion Poplawski - 3.11.3-11 - Rebuild for suitesparse 5.4 * Sun Oct 13 2019 Orion Poplawski - 3.11.3-8 - Rebuild for hypre 2.18.0 * Tue Oct 01 2019 Antonio Trande - 3.11.3-9 - Explicit required MPICH version (rhbz#1757279) * Thu Sep 19 2019 Orion Poplawski - 3.11.3-8 - Rebuild for hypre 2.17.0 * Wed Sep 11 2019 Orion Poplawski - 3.11.3-7 - Build for python3 only, without dts for EPEL8 * Mon Aug 26 2019 Antonio Trande - 3.11.3-6 - Rebuilt for MPICH 3.2.1 * Wed Aug 21 2019 Antonio Trande - 3.11.3-5 - Rebuilt for Python 3.8 * Fri Jul 26 2019 Fedora Release Engineering - 3.11.3-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild * Tue Jul 23 2019 Antonio Trande - 3.11.3-3 - Complete rebuild * Fri Jul 19 2019 Antonio Trande - 3.11.3-2 - Rebuild for MUMPS-5.2.1 - Use Python 2 on EPEL * Thu Jun 27 2019 Antonio Trande - 3.11.3-1 - Release 3.11.3 * Sat May 25 2019 Antonio Trande - 3.11.2-1 - Release 3.11.2 * Fri May 03 2019 Antonio Trande - 3.11.1-2 - Rebuild for OpenMPI-4 * Mon Apr 15 2019 Antonio Trande - 3.11.1-1 - Release 3.11.1 - Switch to Python3 - Use openblas always * Sat Mar 16 2019 Orion Poplawski - 3.10.4-2 - Rebuild for hdf5 1.10.5 * Tue Mar 12 2019 Antonio Trande - 3.10.4-1 - Release 3.10.4 * Tue Mar 12 2019 Sandro Mani - 3.10.3-4 - Rebuild (cgnslib) * Thu Feb 14 2019 Orion Poplawski - 3.10.3-3 - Rebuild for openmpi 3.1.3 * Sat Feb 02 2019 Fedora Release Engineering - 3.10.3-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild * Thu Dec 20 2018 Antonio Trande - 3.10.3-1 - Release 3.10.3 * Thu Nov 29 2018 Orion Poplawski - 3.10.2-2 - Re-enable OpenMPI tests - fixed with openmpi 2.1.6rc1 * Tue Oct 23 2018 Antonio Trande - 3.10.2-1 - Update to 3.10.2 - Disable check of OpenMPI libraries on x86 temporarely (rhbz#1639646) * Tue Oct 23 2018 Antonio Trande - 3.9.3-5 - Fix paths inside of the 'rules' config files * Fri Aug 03 2018 Antonio Trande - 3.9.3-4 - Fix conditional macros for MPI builds * Thu Aug 02 2018 Antonio Trande - 3.9.3-3 - Exclude OpenMPI build on Fedora 28 s390x - Patched for using Hypre-2.11.2 on epel7 * Tue Jul 31 2018 Florian Weimer - 3.9.3-2 - Rebuild with fixed binutils * Fri Jul 27 2018 Antonio Trande - 3.9.3-1 - Update to 3.9.3 * Thu Jul 19 2018 Sandro Mani - 3.9.0-5 - Rebuild (scotch) * Fri Jul 13 2018 Fedora Release Engineering - 3.9.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild * Fri May 04 2018 Antonio Trande - 3.9.0-3 - Use unversioned directory for installing configuration files * Thu Apr 26 2018 Antonio Trande - 3.9.0-2 - Set again the MPI builds on Fedora * Wed Apr 11 2018 Antonio Trande - 3.9.0-1 - Update to 3.9.0 * Fri Mar 30 2018 Antonio Trande - 3.8.4-1 - Update to 3.8.4 - Exclude MPI builds on s390 archirectures if fedora < 28 only - Patched for using Hypre-2.14.0 * Tue Feb 06 2018 Antonio Trande - 3.8.3-5 - Use unversioned directory for installing configuration files * Tue Feb 06 2018 Antonio Trande - 3.8.3-4 - Fix pkgconfig request on rhel * Sun Feb 04 2018 Antonio Trande - 3.8.3-3 - cgns/hdf5 support enabled (bz#1541616) * Sat Feb 03 2018 Antonio Trande - 3.8.3-2 - Fix PETSC_LIB_DIR variables - cgns/hdf5 support temporarily disabled (bz#1541616) * Sun Jan 28 2018 Antonio Trande - 3.8.3-1 - Update to 3.8.3 - Rebuild for sundials-3.1.0 * Thu Dec 14 2017 Antonio Trande - 3.8.1-4 - Not build 64-bit integer libraries on epel6 * Sun Dec 03 2017 Antonio Trande - 3.8.1-3 - Build 64-bit integer libraries on epel7 * Sun Dec 03 2017 Antonio Trande - 3.8.1-2 - Fix Fortran MPI library path on epel * Wed Nov 22 2017 Antonio Trande - 3.8.1-1 - Update to 3.8.1 - Disable Sundials - Enable MUMPS on serial build * Mon Nov 13 2017 Antonio Trande - 3.8.0-5 - Install .mod files (bz#1212557) * Thu Nov 09 2017 Antonio Trande - 3.8.0-4 - Fix soname version * Wed Nov 08 2017 Antonio Trande - 3.8.0-3 - Rebuild for hypre-2.13.0 - Disable sundials on MPI builds * Sun Oct 29 2017 Antonio Trande - 3.8.0-2 - Define openblas arches * Tue Oct 03 2017 Antonio Trande - 3.8.0-1 - Update to 3.8.0 - with-mpiuni-fortran-binding option deprecated - Remove obsolete patch2 * Mon Oct 02 2017 Antonio Trande - 3.7.7-5 - Disable debugging - Unset default compiler flags when tests are built * Sun Oct 01 2017 Antonio Trande - 3.7.7-4 - Rebuild for debugging * Sun Oct 01 2017 Antonio Trande - 3.7.7-3 - Exclude MPI builds on s390x * Sat Sep 30 2017 Antonio Trande - 3.7.7-2 - Enable mpiuni-fortran-binding on MPI builds * Tue Sep 26 2017 Antonio Trande - 3.7.7-1 - Update to 3.7.7 - Move petscvariables/petscrules under a private directory of libdir * Wed Aug 16 2017 Antonio Trande - 3.7.6-9 - Rebuild for lapack 3.7.1 (moved to 64_ suffix) * Sun Aug 13 2017 Antonio Trande - 3.7.6-8 - Option for Fedora < 25 definitively removed * Sun Aug 13 2017 Antonio Trande - 3.7.6-7 - Superlu_dist needs parmetis - Use MPI variables * Thu Aug 03 2017 Fedora Release Engineering - 3.7.6-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild * Thu Jul 27 2017 Fedora Release Engineering - 3.7.6-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild * Wed May 17 2017 Antonio Trande - 3.7.6-4 - Fix Requires packages * Mon May 15 2017 Antonio Trande - 3.7.6-3 - Move petscvariables/petscrules under private directory of /usr/share * Fri May 12 2017 Antonio Trande - 3.7.6-2 - Move petscvariables/petscrules under private directory of /usr/lib * Fri May 05 2017 Antonio Trande - 3.7.6-1 - Update to 3.7.6 - Install petscvariables/petscrules - Install pkgconfig files * Sun Apr 09 2017 Antonio Trande - 3.7.5-4 - Exclude aarch64 on fedora < 25 * Sat Mar 25 2017 Antonio Trande - 3.7.5-3 - Rebuild for MUMPS-5.1.1 * Sat Feb 11 2017 Fedora Release Engineering - 3.7.5-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild * Wed Jan 04 2017 Antonio Trande - 3.7.5-1 - Update to 3.7.5 * Fri Dec 02 2016 Antonio Trande - 3.7.4-14 - Conditionalize mpich-devel%%{?_isa} (bz#1397192) * Tue Nov 01 2016 Antonio Trande - 3.7.4-13 - New architectures * Wed Oct 26 2016 Antonio Trande - 3.7.4-12 - Fix OpenMPI builds * Tue Oct 25 2016 Antonio Trande - 3.7.4-11 - Fix s390x builds again * Tue Oct 25 2016 Antonio Trande - 3.7.4-10 - Fix s390x builds * Mon Oct 24 2016 Antonio Trande - 3.7.4-9 - Build 64bit-int libs (bz#1382916) * Sat Oct 22 2016 Antonio Trande - 3.7.4-8 - Build 64bit-int libs (bz#1382916) * Fri Oct 21 2016 Antonio Trande - 3.7.4-7 - Install missing header files * Wed Oct 19 2016 Antonio Trande - 3.7.4-6 - Add the -O3 to restore vectorization over the RPM defaults - Remove gmp support * Thu Oct 13 2016 Antonio Trande - 3.7.4-5 - 64bit-int libs not built (bz#1382916) - Enable gmp and suitesparse support * Thu Oct 13 2016 Antonio Trande - 3.7.4-4 - superlu and fftw enabled - Fixed settings of compiler flags - Disable flags for "hardened" builds * Mon Oct 10 2016 Antonio Trande - 3.7.4-3 - Enabled fftw-mpi support (Fedora > 24) - Omitted PAPI (obsolete) - Omitted tetgen support (used with C++) * Sun Oct 09 2016 Antonio Trande - 3.7.4-2 - Default optimization level (-O2) * Sun Oct 09 2016 Antonio Trande - 3.7.4-1 - Update to 3.7.4 - PAPI support disabled (upstream advice) * Sat Oct 08 2016 Antonio Trande - 3.7.3-8 - Add tcsh as BR package - Patched for disabling petscnagupgrade.py check * Fri Oct 07 2016 Antonio Trande - 3.7.3-7 - Use Make for testing * Thu Oct 06 2016 Antonio Trande - 3.7.3-6 - Remove linkage to mpiblacs - Tests enabled * Thu Oct 06 2016 Antonio Trande - 3.7.3-5 - hwloc/metis (needs parmetis) disabled (upstream advice) - X support enabled - Libraries detection disabled * Wed Oct 05 2016 Antonio Trande - 3.7.3-4 - Fix library paths * Wed Oct 05 2016 Antonio Trande - 3.7.3-3 - Fix PTScotch * Wed Oct 05 2016 Antonio Trande - 3.7.3-2 - Disabled fftw support * Wed Sep 28 2016 Antonio Trande - 3.7.3-1 - Update to 3.7.3 - Remove module files * Tue Sep 13 2016 Antonio Trande - 3.7.2-12 - Fix MAKE_NP option - Remove --known-endian option - Use architecture condition for openblas - Fix unused-direct-shlib-dependency warnings * Fri Aug 26 2016 Antonio Trande - 3.7.2-11 - Use SuperLU on >=f25 only * Thu Aug 25 2016 Antonio Trande - 3.7.2-10 - Some fixes for epel6 builds - Add -O3 flag - Headers installed under a private directory - Use %%{_modulesdir} macro - Use 'openblas' instead of 'blas' * Wed Aug 10 2016 Antonio Trande - 3.7.2-9 - Fortran modules moved into devel sub-packages - Some fixes of SPEC file's lines - Set compiler/linker flags against PAPI-5.1.1 on epel6 * Thu Jul 28 2016 Dave Love - 3.7.2-8 - Support el6 - Add cgnslib support * Sat Jul 23 2016 Antonio Trande - 3.7.2-7 - Rebuild with Hypre support * Sun Jul 10 2016 Antonio Trande - 3.7.2-6 - Packed additional header files - Tests performed on EPEL7 * Mon Jun 27 2016 Antonio Trande - 3.7.2-5 - Perform tests one-by-one - Packaged all documentation files * Mon Jun 27 2016 Antonio Trande - 3.7.2-4 - Build OpenMPI/MPICH libraries - Fix known-endian option * Mon Jun 27 2016 Antonio Trande - 3.7.2-3 - Disable additional libraries - Build a minimal PETSC * Fri Jun 24 2016 Antonio Trande - 3.7.2-2 - Perform test * Sun Jun 19 2016 Antonio Trande - 3.7.2-1 - New package