blob: b1cf463f1d0e171b321767e63c5fcd6e90641834 [file] [log] [blame]
# Contributor: Oleg A. Khlybov <fougas@mail.ru>
_realname=slepc
pkgbase=mingw-w64-${_realname}
pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}")
pkgver=3.14.2
petsc_pkgver=3.14
pkgrel=1
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64')
pkgdesc="Scalable library for eigenvalue problem computations (mingw-w64)"
depends=("${MINGW_PACKAGE_PREFIX}-petsc>=${petsc_pkgver}")
makedepends=("python"
"${MINGW_PACKAGE_PREFIX}-gcc"
"${MINGW_PACKAGE_PREFIX}-gcc-fortran"
"${MINGW_PACKAGE_PREFIX}-petsc-build>=${petsc_pkgver}")
optdepends=("${MINGW_PACKAGE_PREFIX}-tcl: build & run test suite")
options=('strip' 'staticlibs')
license=('2-clause BSD')
url="https://slepc.upv.es/"
source=("https://slepc.upv.es/download/distrib/${_realname}-${pkgver}.tar.gz"
'all.tcl'
'tclbuildtest.tcl'
'slepc.test')
noextract=("${_realname}-${pkgver}.tar.gz")
sha256sums=('3e54578dda1f4c54d35ac27d02f70a43f6837906cb7604dbcec0e033cfb264c8'
'ec5072630e1c0309fe383669e9187790cd135a393c67bc4bc35cf60b0ba396ff'
'15c7af25b91406d5fe5f26cfe00963b6cfde1c3dd466eb25f1b6fae299934966'
'47237bd53f15e9d204b7c871ef887d9b6d11e0add1409a6eeb1a122f4b302265')
prepare() {
mkdir -p $srcdir/build-${MINGW_CHOST} && cd $srcdir/build-${MINGW_CHOST}
tar xzf $srcdir/${_realname}-${pkgver}.tar.gz
}
build() {
. ${MINGW_PREFIX}/src/petsc-*/petsc
cd "${srcdir}/build-${MINGW_CHOST}/${_realname}-${pkgver}"
for build in ${petsc_builds}; do
export SLEPC_DIR=`pwd`
export PETSC_ARCH=${build}
export PETSC_DIR=${MINGW_PREFIX}/src/petsc-${petsc_pkgver}
/usr/bin/python configure
make
(
cd ${build}/lib
lib=libslepc-${build}
rm -rf ${lib}.a
case ${build} in
*o) strip -S *.a ;;
esac
ar crsT ${lib}.a libslepcnep.a libslepcpep.a libslepcsvd.a libslepceps.a libslepcmfn.a libslepclme.a libslepcsys.a
gcc -shared -Wl,--enable-auto-import -Wl,--export-all-symbols -o ${lib}.dll -Wl,--out-implib,${lib}.dll.a -Wl,--whole-archive ${lib}.a -Wl,--no-whole-archive $(pkg-config msmpi openblas petsc-${build} --libs)
)
done
}
package() {
cd ${srcdir}/build-${MINGW_CHOST}/${_realname}-${pkgver}
mkdir -p ${pkgdir}${MINGW_PREFIX}/{bin,lib/pkgconfig,lib/${_realname},include/${_realname},share/test/${_realname}}
(
cd include
cp *.h ${pkgdir}${MINGW_PREFIX}/include/${_realname}
cd ${_realname}
cp -R finclude ${pkgdir}${MINGW_PREFIX}/include/${_realname}
cd ${pkgdir}${MINGW_PREFIX}/include/${_realname}
find . \( ! -name '*.h' -a -type f \) -delete
)
(
cd ${srcdir}
cp {all,tclbuildtest}.tcl slepc.test ${pkgdir}${MINGW_PREFIX}/share/test/${_realname}
)
(
cd src/eps/tutorials
cp ex1.c ex1f.F ${pkgdir}${MINGW_PREFIX}/share/test/${_realname}
)
for build in ${petsc_builds}; do
(
cd ${build}/lib
mkdir -p ${pkgdir}${MINGW_PREFIX}/lib/${_realname}/${build}
cp *.a ${pkgdir}${MINGW_PREFIX}/lib/${_realname}/${build}
cp *.dll ${pkgdir}${MINGW_PREFIX}/bin
)
(
cd ${build}/include
mkdir -p ${pkgdir}${MINGW_PREFIX}/include/${_realname}/${build}
cp *.{h,mod} ${pkgdir}${MINGW_PREFIX}/include/${_realname}/${build}
)
lib=${_realname}-${build}
case ${build} in
?m?) desc="MPI parallel";;
?t?) desc="OpenMP multithreaded";;
?s?) desc="Sequential";;
esac
case ${build} in
z*|d*) desc="$desc double precision";;
c*|s*) desc="$desc single precision";;
esac
case ${build} in
z*|c*) desc="$desc complex";;
esac
echo "
prefix=${MINGW_PREFIX}
libdir=\${prefix}/lib/${_realname}
includedir=\${prefix}/include/${_realname}
Name: ${_realname}
URL: ${url}
Version: ${pkgver}
Description: ${desc} SLEPc build
Requires: petsc-${build}
Cflags: -I\${includedir}/${build} -I\${includedir}
Libs: -L\${libdir}/${build} -l${lib}
" | sed '/^\s*$/d;s/^\s*//' > ${pkgdir}${MINGW_PREFIX}/lib/pkgconfig/${lib}.pc
done
}