commit:     a982ad56b88359465458734a665baa12361e908a
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 11 19:10:23 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sun Sep 28 18:19:49 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a982ad56

sci-libs/flexiblas: Support installing as a system BLAS/LAPACK

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 <mgorny <AT> gentoo.org>

 ...blas-9999.ebuild => flexiblas-3.4.82-r3.ebuild} | 105 +++++++++++++++++++--
 sci-libs/flexiblas/flexiblas-9999.ebuild           |  90 ++++++++++++++++--
 sci-libs/flexiblas/metadata.xml                    |   4 +
 3 files changed, 182 insertions(+), 17 deletions(-)

diff --git a/sci-libs/flexiblas/flexiblas-9999.ebuild 
b/sci-libs/flexiblas/flexiblas-3.4.82-r3.ebuild
similarity index 63%
copy from sci-libs/flexiblas/flexiblas-9999.ebuild
copy to sci-libs/flexiblas/flexiblas-3.4.82-r3.ebuild
index c77186b3f6bc..6310a8eb3a19 100644
--- a/sci-libs/flexiblas/flexiblas-9999.ebuild
+++ b/sci-libs/flexiblas/flexiblas-3.4.82-r3.ebuild
@@ -3,21 +3,24 @@
 
 EAPI=8
 
-inherit cmake git-r3 multilib toolchain-funcs
+inherit cmake multilib toolchain-funcs
 
+MY_P=flexiblas-release-v${PV}
 DESCRIPTION="A BLAS and LAPACK wrapper library with runtime exchangable 
backends"
 HOMEPAGE="
        https://www.mpi-magdeburg.mpg.de/projects/flexiblas/
        https://gitlab.mpi-magdeburg.mpg.de/software/flexiblas-release/
 "
-EGIT_REPO_URI="
-       https://gitlab.mpi-magdeburg.mpg.de/software/flexiblas-release.git
+SRC_URI="
+       
https://gitlab.mpi-magdeburg.mpg.de/software/flexiblas-release/-/archive/v${PV}/${MY_P}.tar.bz2
 "
+S=${WORKDIR}/${MY_P}
 
 # BSD for vendored cblas/lapacke
 LICENSE="LGPL-3+ BSD"
 SLOT="0"
-IUSE="blis index64 mkl openblas openmp tbb test"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86"
+IUSE="blis index64 mkl openblas openmp system-blas tbb test"
 RESTRICT="!test? ( test )"
 
 # flexiblas only supports gnu-openmp using clang/gcc
@@ -29,9 +32,23 @@ DEPEND="
                openmp? ( sci-libs/mkl[gnu-openmp] )
        )
        openblas? ( sci-libs/openblas:=[index64(-)?] )
+       system-blas? ( sci-libs/lapack[flexiblas(-)] )
 "
 RDEPEND="
        ${DEPEND}
+       system-blas? (
+               !app-eselect/eselect-blas
+               !app-eselect/eselect-cblas
+               !app-eselect/eselect-lapack
+               !sci-libs/lapack[-flexiblas(-)]
+       )
+"
+PDEPEND="
+       system-blas? (
+               elibc_glibc? (
+                       sci-libs/blas-lapack-aux-wrapper[index64?]
+               )
+       )
 "
 
 pkg_pretend() {
@@ -47,6 +64,12 @@ pkg_setup() {
 }
 
 src_prepare() {
+       local PATCHES=(
+               # extracted from
+               # 
https://gitlab.mpi-magdeburg.mpg.de/software/flexiblas-release/-/commit/04021ceada30f136036a22dc6c811b3d352b199d
+               "${FILESDIR}/${P}-xerbla-array.patch"
+       )
+
        cmake_src_prepare
 
        # remove bundled netlib blas/lapack
@@ -95,25 +118,47 @@ 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
 
        if use index64; then
                mycmakeargs+=(
                        -DINTEGER8=ON
-                       -DSYS_BLAS_LIBRARY="${libdir}/libblas64.so"
-                       -DSYS_LAPACK_LIBRARY="${libdir}/liblapack64.so"
                        -Dblis_LIBRARY="${libdir}/libblis64.so"
                        -Dopenblas_LIBRARY="${libdir}/libopenblas64.so"
                )
 
+               if use system-blas; then
+                       # this is sci-libs/lapack[flexiblas] install
+                       mycmakeargs+=(
+                               
-DSYS_BLAS_LIBRARY="${libdir}/libblas64-reference.so"
+                               
-DSYS_LAPACK_LIBRARY="${libdir}/liblapack64-reference.so"
+                       )
+               else
+                       mycmakeargs+=(
+                               -DSYS_BLAS_LIBRARY="${libdir}/libblas64.so"
+                               -DSYS_LAPACK_LIBRARY="${libdir}/liblapack64.so"
+                       )
+               fi
+
                BUILD_DIR=${BUILD_DIR}-ilp64 cmake_src_configure
        fi
 
@@ -198,7 +243,47 @@ src_install() {
        cmake_src_install
        use index64 && BUILD_DIR=${BUILD_DIR}-ilp64 cmake_src_install
 
-       # verify built backends
+       # Verify built backends.
        verify_backends flexiblas "${BACKENDS[@]}"
        use index64 && verify_backends flexiblas64 "${BACKENDS_ILP64[@]}"
+
+       # Install symlinks for system BLAS / LAPACK use.
+       if use system-blas; then
+               local libdir="/usr/$(get_libdir)"
+               local fn suffix
+               for fn in cblas.h lapack.h 
lapacke{,_config,_mangling,_utils}.h; do
+                       dosym "flexiblas/${fn}" "/usr/include/${fn}"
+               done
+
+               # On glibc, we can use sci-libs/blas-lapack-aux-wrapper.
+               if ! use elibc_glibc; then
+                       for suffix in '' $(usev index64 64); do
+                               for fn in blas cblas lapack lapacke; do
+                                       dosym "libflexiblas${suffix}.so.3" \
+                                               
"${libdir}/lib${fn}${suffix}.so.3"
+                                       dosym "libflexiblas${suffix}.so" \
+                                               "${libdir}/lib${fn}${suffix}.so"
+                                       dosym "flexiblas${suffix}.pc" \
+                                               
"${libdir}/pkgconfig/${fn}${suffix}.pc"
+                               done
+                       done
+               fi
+       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/flexiblas-9999.ebuild 
b/sci-libs/flexiblas/flexiblas-9999.ebuild
index c77186b3f6bc..13f3775404c0 100644
--- a/sci-libs/flexiblas/flexiblas-9999.ebuild
+++ b/sci-libs/flexiblas/flexiblas-9999.ebuild
@@ -17,7 +17,7 @@ EGIT_REPO_URI="
 # BSD for vendored cblas/lapacke
 LICENSE="LGPL-3+ BSD"
 SLOT="0"
-IUSE="blis index64 mkl openblas openmp tbb test"
+IUSE="blis elibc_glibc index64 mkl openblas openmp system-blas tbb test"
 RESTRICT="!test? ( test )"
 
 # flexiblas only supports gnu-openmp using clang/gcc
@@ -29,9 +29,23 @@ DEPEND="
                openmp? ( sci-libs/mkl[gnu-openmp] )
        )
        openblas? ( sci-libs/openblas:=[index64(-)?] )
+       system-blas? ( sci-libs/lapack[flexiblas(-)] )
 "
 RDEPEND="
        ${DEPEND}
+       system-blas? (
+               !app-eselect/eselect-blas
+               !app-eselect/eselect-cblas
+               !app-eselect/eselect-lapack
+               !sci-libs/lapack[-flexiblas(-)]
+       )
+"
+PDEPEND="
+       system-blas? (
+               elibc_glibc? (
+                       sci-libs/blas-lapack-aux-wrapper[index64?]
+               )
+       )
 "
 
 pkg_pretend() {
@@ -95,25 +109,47 @@ 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
 
        if use index64; then
                mycmakeargs+=(
                        -DINTEGER8=ON
-                       -DSYS_BLAS_LIBRARY="${libdir}/libblas64.so"
-                       -DSYS_LAPACK_LIBRARY="${libdir}/liblapack64.so"
                        -Dblis_LIBRARY="${libdir}/libblis64.so"
                        -Dopenblas_LIBRARY="${libdir}/libopenblas64.so"
                )
 
+               if use system-blas; then
+                       # this is sci-libs/lapack[flexiblas] install
+                       mycmakeargs+=(
+                               
-DSYS_BLAS_LIBRARY="${libdir}/libblas64-reference.so"
+                               
-DSYS_LAPACK_LIBRARY="${libdir}/liblapack64-reference.so"
+                       )
+               else
+                       mycmakeargs+=(
+                               -DSYS_BLAS_LIBRARY="${libdir}/libblas64.so"
+                               -DSYS_LAPACK_LIBRARY="${libdir}/liblapack64.so"
+                       )
+               fi
+
                BUILD_DIR=${BUILD_DIR}-ilp64 cmake_src_configure
        fi
 
@@ -198,7 +234,47 @@ src_install() {
        cmake_src_install
        use index64 && BUILD_DIR=${BUILD_DIR}-ilp64 cmake_src_install
 
-       # verify built backends
+       # Verify built backends.
        verify_backends flexiblas "${BACKENDS[@]}"
        use index64 && verify_backends flexiblas64 "${BACKENDS_ILP64[@]}"
+
+       # Install symlinks for system BLAS / LAPACK use.
+       if use system-blas; then
+               local libdir="/usr/$(get_libdir)"
+               local fn suffix
+               for fn in cblas.h lapack.h 
lapacke{,_config,_mangling,_utils}.h; do
+                       dosym "flexiblas/${fn}" "/usr/include/${fn}"
+               done
+
+               # On glibc, we can use sci-libs/blas-lapack-aux-wrapper.
+               if ! use elibc_glibc; then
+                       for suffix in '' $(usev index64 64); do
+                               for fn in blas cblas lapack lapacke; do
+                                       dosym "libflexiblas${suffix}.so.3" \
+                                               
"${libdir}/lib${fn}${suffix}.so.3"
+                                       dosym "libflexiblas${suffix}.so" \
+                                               "${libdir}/lib${fn}${suffix}.so"
+                                       dosym "flexiblas${suffix}.pc" \
+                                               
"${libdir}/pkgconfig/${fn}${suffix}.pc"
+                               done
+                       done
+               fi
+       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 a26b789b77c7..ac3f817d0ce9 100644
--- a/sci-libs/flexiblas/metadata.xml
+++ b/sci-libs/flexiblas/metadata.xml
@@ -10,6 +10,10 @@
                <flag name="index64">Build a separate ILP64 library in addition 
to LP64</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-blas">
+                       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