commit:     c6f83216c443b41bcb26be6e8f139005310ce42b
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri Dec  3 00:46:42 2021 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Dec  3 00:53:41 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c6f83216

media-libs/opencv: add lapack patch

Closes: https://bugs.gentoo.org/800539
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../opencv/files/opencv-4.5.2-lapack-3.10.patch    | 123 +++++++++++++++++++++
 media-libs/opencv/opencv-4.5.2-r5.ebuild           |   3 +-
 media-libs/opencv/opencv-4.5.4.ebuild              |   3 +-
 3 files changed, 127 insertions(+), 2 deletions(-)

diff --git a/media-libs/opencv/files/opencv-4.5.2-lapack-3.10.patch 
b/media-libs/opencv/files/opencv-4.5.2-lapack-3.10.patch
new file mode 100644
index 000000000000..31e2fc60d121
--- /dev/null
+++ b/media-libs/opencv/files/opencv-4.5.2-lapack-3.10.patch
@@ -0,0 +1,123 @@
+https://bugs.gentoo.org/800539
+
+--- a/modules/core/src/hal_internal.cpp
++++ b/modules/core/src/hal_internal.cpp
+@@ -163,9 +163,9 @@
+         if(n == 1 && b_step == sizeof(fptype))
+         {
+             if(typeid(fptype) == typeid(float))
+-                sposv_(L, &m, &n, (float*)a, &lda, (float*)b, &m, 
&lapackStatus);
++                LAPACK_sposv_(L, &m, &n, (float*)a, &lda, (float*)b, &m, 
&lapackStatus);
+             else if(typeid(fptype) == typeid(double))
+-                dposv_(L, &m, &n, (double*)a, &lda, (double*)b, &m, 
&lapackStatus);
++                LAPACK_dposv_(L, &m, &n, (double*)a, &lda, (double*)b, &m, 
&lapackStatus);
+         }
+         else
+         {
+@@ -174,9 +174,9 @@
+             transpose(b, ldb, tmpB, m, m, n);
+ 
+             if(typeid(fptype) == typeid(float))
+-                sposv_(L, &m, &n, (float*)a, &lda, (float*)tmpB, &m, 
&lapackStatus);
++                LAPACK_sposv_(L, &m, &n, (float*)a, &lda, (float*)tmpB, &m, 
&lapackStatus);
+             else if(typeid(fptype) == typeid(double))
+-                dposv_(L, &m, &n, (double*)a, &lda, (double*)tmpB, &m, 
&lapackStatus);
++                LAPACK_dposv_(L, &m, &n, (double*)a, &lda, (double*)tmpB, &m, 
&lapackStatus);
+ 
+             transpose(tmpB, m, b, ldb, n, m);
+             delete[] tmpB;
+@@ -185,9 +185,9 @@
+     else
+     {
+         if(typeid(fptype) == typeid(float))
+-            spotrf_(L, &m, (float*)a, &lda, &lapackStatus);
++            LAPACK_spotrf_(L, &m, (float*)a, &lda, &lapackStatus);
+         else if(typeid(fptype) == typeid(double))
+-            dpotrf_(L, &m, (double*)a, &lda, &lapackStatus);
++            LAPACK_dpotrf_(L, &m, (double*)a, &lda, &lapackStatus);
+     }
+ 
+     if(lapackStatus == 0) *info = true;
+@@ -227,17 +227,17 @@
+     }
+ 
+     if(typeid(fptype) == typeid(float))
+-        sgesdd_(mode, &m, &n, (float*)a, &lda, (float*)w, (float*)u, &ldu, 
(float*)vt, &ldv, (float*)&work1, &lwork, iworkBuf, info);
++        LAPACK_sgesdd_(mode, &m, &n, (float*)a, &lda, (float*)w, (float*)u, 
&ldu, (float*)vt, &ldv, (float*)&work1, &lwork, iworkBuf, info);
+     else if(typeid(fptype) == typeid(double))
+-        dgesdd_(mode, &m, &n, (double*)a, &lda, (double*)w, (double*)u, &ldu, 
(double*)vt, &ldv, (double*)&work1, &lwork, iworkBuf, info);
++        LAPACK_dgesdd_(mode, &m, &n, (double*)a, &lda, (double*)w, 
(double*)u, &ldu, (double*)vt, &ldv, (double*)&work1, &lwork, iworkBuf, info);
+ 
+     lwork = (int)round(work1); //optimal buffer size
+     fptype* buffer = new fptype[lwork + 1];
+ 
+     if(typeid(fptype) == typeid(float))
+-        sgesdd_(mode, &m, &n, (float*)a, &lda, (float*)w, (float*)u, &ldu, 
(float*)vt, &ldv, (float*)buffer, &lwork, iworkBuf, info);
++        LAPACK_sgesdd_(mode, &m, &n, (float*)a, &lda, (float*)w, (float*)u, 
&ldu, (float*)vt, &ldv, (float*)buffer, &lwork, iworkBuf, info);
+     else if(typeid(fptype) == typeid(double))
+-        dgesdd_(mode, &m, &n, (double*)a, &lda, (double*)w, (double*)u, &ldu, 
(double*)vt, &ldv, (double*)buffer, &lwork, iworkBuf, info);
++        LAPACK_dgesdd_(mode, &m, &n, (double*)a, &lda, (double*)w, 
(double*)u, &ldu, (double*)vt, &ldv, (double*)buffer, &lwork, iworkBuf, info);
+ 
+     if(!(flags & CV_HAL_SVD_NO_UV))
+         transpose_square_inplace(vt, ldv, n);
+@@ -288,18 +288,18 @@
+         if (k == 1 && b_step == sizeof(fptype))
+         {
+             if (typeid(fptype) == typeid(float))
+-                sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)b, 
&m, (float*)&work1, &lwork, info);
++                LAPACK_sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, 
(float*)b, &m, (float*)&work1, &lwork, info);
+             else if (typeid(fptype) == typeid(double))
+-                dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, (double*)b, 
&m, (double*)&work1, &lwork, info);
++                LAPACK_dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, 
(double*)b, &m, (double*)&work1, &lwork, info);
+ 
+             lwork = cvRound(work1); //optimal buffer size
+             std::vector<fptype> workBufMemHolder(lwork + 1);
+             fptype* buffer = &workBufMemHolder.front();
+ 
+             if (typeid(fptype) == typeid(float))
+-                sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)b, 
&m, (float*)buffer, &lwork, info);
++                LAPACK_sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, 
(float*)b, &m, (float*)buffer, &lwork, info);
+             else if (typeid(fptype) == typeid(double))
+-                dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, (double*)b, 
&m, (double*)buffer, &lwork, info);
++                LAPACK_dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, 
(double*)b, &m, (double*)buffer, &lwork, info);
+         }
+         else
+         {
+@@ -309,18 +309,18 @@
+             transpose(b, ldb, tmpB, m, m, k);
+ 
+             if (typeid(fptype) == typeid(float))
+-                sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)tmpB, 
&m, (float*)&work1, &lwork, info);
++                LAPACK_sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, 
(float*)tmpB, &m, (float*)&work1, &lwork, info);
+             else if (typeid(fptype) == typeid(double))
+-                dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, 
(double*)tmpB, &m, (double*)&work1, &lwork, info);
++                LAPACK_dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, 
(double*)tmpB, &m, (double*)&work1, &lwork, info);
+ 
+             lwork = cvRound(work1); //optimal buffer size
+             std::vector<fptype> workBufMemHolder(lwork + 1);
+             fptype* buffer = &workBufMemHolder.front();
+ 
+             if (typeid(fptype) == typeid(float))
+-                sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, (float*)tmpB, 
&m, (float*)buffer, &lwork, info);
++                LAPACK_sgels_(mode, &m, &n, &k, (float*)tmpA, &ldtmpA, 
(float*)tmpB, &m, (float*)buffer, &lwork, info);
+             else if (typeid(fptype) == typeid(double))
+-                dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, 
(double*)tmpB, &m, (double*)buffer, &lwork, info);
++                LAPACK_dgels_(mode, &m, &n, &k, (double*)tmpA, &ldtmpA, 
(double*)tmpB, &m, (double*)buffer, &lwork, info);
+ 
+             transpose(tmpB, m, b, ldb, k, m);
+         }
+--- a/cmake/checks/lapack_check.cpp
++++ b/cmake/checks/lapack_check.cpp
+@@ -2,9 +2,9 @@
+ #include "opencv_lapack.h"
+ 
+ static char* check_fn1 = (char*)sgesv_;
+-static char* check_fn2 = (char*)sposv_;
+-static char* check_fn3 = (char*)spotrf_;
+-static char* check_fn4 = (char*)sgesdd_;
++static char* check_fn2 = (char*)LAPACK_sposv_;
++static char* check_fn3 = (char*)LAPACK_spotrf_;
++static char* check_fn4 = (char*)LAPACK_sgesdd_;
+ 
+ int main(int argc, char* argv[])
+ {

diff --git a/media-libs/opencv/opencv-4.5.2-r5.ebuild 
b/media-libs/opencv/opencv-4.5.2-r5.ebuild
index 773e61c6fb4a..12f8c7f34e77 100644
--- a/media-libs/opencv/opencv-4.5.2-r5.ebuild
+++ b/media-libs/opencv/opencv-4.5.2-r5.ebuild
@@ -118,7 +118,7 @@ RDEPEND="
        jpeg2k? ( media-libs/openjpeg:2=[${MULTILIB_USEDEP}] )
        lapack? (
                virtual/cblas
-               virtual/lapack
+               >=virtual/lapack-3.10
        )
        opencl? ( virtual/opencl[${MULTILIB_USEDEP}] )
        openexr? ( <media-libs/openexr-3.0.0:0=[${MULTILIB_USEDEP}] )
@@ -283,6 +283,7 @@ PATCHES=(
        "${FILESDIR}"/${PN}-4.1.2-opencl-license.patch
        "${FILESDIR}"/${PN}-4.4.0-disable-native-cpuflag-detect.patch
        "${FILESDIR}"/${PN}-4.5.0-link-with-cblas-for-lapack.patch
+       "${FILESDIR}"/${PN}-4.5.2-lapack-3.10.patch
 )
 
 pkg_pretend() {

diff --git a/media-libs/opencv/opencv-4.5.4.ebuild 
b/media-libs/opencv/opencv-4.5.4.ebuild
index c4bd53d72d71..ca4d84d5a815 100644
--- a/media-libs/opencv/opencv-4.5.4.ebuild
+++ b/media-libs/opencv/opencv-4.5.4.ebuild
@@ -118,7 +118,7 @@ RDEPEND="
        jpeg2k? ( media-libs/openjpeg:2=[${MULTILIB_USEDEP}] )
        lapack? (
                virtual/cblas
-               virtual/lapack
+               >=virtual/lapack-3.10
        )
        opencl? ( virtual/opencl[${MULTILIB_USEDEP}] )
        openexr? ( <media-libs/openexr-3.0.0:0=[${MULTILIB_USEDEP}] )
@@ -283,6 +283,7 @@ PATCHES=(
        "${FILESDIR}"/${PN}-4.1.2-opencl-license.patch
        "${FILESDIR}"/${PN}-4.4.0-disable-native-cpuflag-detect.patch
        "${FILESDIR}"/${PN}-4.5.0-link-with-cblas-for-lapack.patch
+       "${FILESDIR}"/${PN}-4.5.2-lapack-3.10.patch
 )
 
 pkg_pretend() {

Reply via email to