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.

Reply via email to