Add a system-blas flag that installs symlinks to make FlexiBLAS the provider for libblas, libcblas, liblapack and liblapacke.
Signed-off-by: Michał Górny <[email protected]> --- ...4.82.ebuild => flexiblas-3.4.82-r1.ebuild} | 57 +++++++++++++++++-- sci-libs/flexiblas/metadata.xml | 4 ++ 2 files changed, 57 insertions(+), 4 deletions(-) copy sci-libs/flexiblas/{flexiblas-3.4.82.ebuild => flexiblas-3.4.82-r1.ebuild} (73%) diff --git a/sci-libs/flexiblas/flexiblas-3.4.82.ebuild b/sci-libs/flexiblas/flexiblas-3.4.82-r1.ebuild similarity index 73% copy from sci-libs/flexiblas/flexiblas-3.4.82.ebuild copy to sci-libs/flexiblas/flexiblas-3.4.82-r1.ebuild index 015a92dfda1f..fe94017e3776 100644 --- a/sci-libs/flexiblas/flexiblas-3.4.82.ebuild +++ b/sci-libs/flexiblas/flexiblas-3.4.82-r1.ebuild @@ -20,7 +20,7 @@ S=${WORKDIR}/${MY_P} LICENSE="LGPL-3+ BSD" SLOT="0" # TODO: 64bit-index -IUSE="blis mkl openblas openmp tbb test" +IUSE="blis mkl openblas openmp system-blas tbb test" RESTRICT="!test? ( test )" # flexiblas only supports gnu-openmp using clang/gcc @@ -32,9 +32,15 @@ DEPEND=" openmp? ( sci-libs/mkl[gnu-openmp] ) ) openblas? ( sci-libs/openblas:= ) + system-blas? ( sci-libs/lapack[flexiblas] ) " RDEPEND=" ${DEPEND} + system-blas? ( + !app-eselect/eselect-blas + !app-eselect/eselect-cblas + !app-eselect/eselect-lapack + ) " pkg_pretend() { @@ -91,14 +97,25 @@ src_configure() { -DEXTRA="${extra// /;}" # respect CFLAGS -DLTO=OFF - # use system sci-libs/lapack - -DSYS_BLAS_LIBRARY="${libdir}/libblas.so" - -DSYS_LAPACK_LIBRARY="${libdir}/liblapack.so" # these are used only with -DEXTRA -Dblis_LIBRARY="${libdir}/libblis.so" -Dopenblas_LIBRARY="${libdir}/libopenblas.so" ) + # use system sci-libs/lapack + if use system-blas; then + # this is sci-libs/lapack[flexiblas] install + mycmakeargs+=( + -DSYS_BLAS_LIBRARY="${libdir}/libblas-reference.so" + -DSYS_LAPACK_LIBRARY="${libdir}/liblapack-reference.so" + ) + else + mycmakeargs+=( + -DSYS_BLAS_LIBRARY="${libdir}/libblas.so" + -DSYS_LAPACK_LIBRARY="${libdir}/liblapack.so" + ) + fi + cmake_src_configure BACKENDS+=( netlib ) @@ -160,4 +177,36 @@ src_install() { if [[ ${missing[@]} ]]; then die "Not all requested backends built. Missing: ${missing[*]}" fi + + # Install symlinks for system BLAS / LAPACK use. + if use system-blas; then + local libdir="/usr/$(get_libdir)" + local fn + for fn in cblas.h lapack.h lapacke{,_config,_mangling,_utils}.h; do + dosym "flexiblas/${fn}" "/usr/include/${fn}" + done + + for fn in blas cblas lapack lapacke; do + dosym libflexiblas.so.3 "${libdir}/lib${fn}.so.3" + dosym libflexiblas.so "${libdir}/lib${fn}.so" + dosym flexiblas.pc "${libdir}/pkgconfig/${fn}.pc" + done + fi +} + +pkg_postinst() { + if use system-blas; then + # eselect-{blas,lapack} doesn't clean up its configs + local prev_opt=$(shopt -p nullglob) + shopt -s nullglob + local files=( + "${EROOT}"/etc/ld.so.conf.d/81-blas-*.conf + "${EROOT}"/etc/ld.so.conf.d/82-lapack-*.conf + ) + ${prev_opt} + + if [[ ${files[@]} ]]; then + rm -v "${files[@]}" + fi + fi } diff --git a/sci-libs/flexiblas/metadata.xml b/sci-libs/flexiblas/metadata.xml index 5d259655d445..ec9d9350ed6d 100644 --- a/sci-libs/flexiblas/metadata.xml +++ b/sci-libs/flexiblas/metadata.xml @@ -9,6 +9,10 @@ <flag name="blis">Support <pkg>sci-libs/blis</pkg> provider</flag> <flag name="mkl">Support <pkg>sci-libs/mkl</pkg> provider</flag> <flag name="openblas">Support <pkg>sci-libs/openblas</pkg> provider</flag> + <flag name="system-lapack"> + Install symlinks to use FlexiBLAS as the system BLAS / LAPACK + provider. + </flag> <flag name="tbb"> Support <pkg>sci-libs/mkl</pkg> with <pkg>dev-cpp/tbb</pkg> threading.
