summaryrefslogtreecommitdiff
path: root/dev-cpp/eigen/files
diff options
context:
space:
mode:
Diffstat (limited to 'dev-cpp/eigen/files')
-rw-r--r--dev-cpp/eigen/files/eigen-3.3.9-max-macro.patch17
-rw-r--r--dev-cpp/eigen/files/eigen-3.4.0-buildstring.patch25
-rw-r--r--dev-cpp/eigen/files/eigen-3.4.0-c++-20.patch30
-rw-r--r--dev-cpp/eigen/files/eigen-3.4.0-cxxstandard.patch108
-rw-r--r--dev-cpp/eigen/files/eigen-3.4.0-doc-nocompress.patch15
-rw-r--r--dev-cpp/eigen/files/eigen-3.4.0-noansi.patch18
-rw-r--r--dev-cpp/eigen/files/eigen-3.4.0-ppc-no-vsx.patch195
-rw-r--r--dev-cpp/eigen/files/eigen-3.4.1-bug1213-link-with-Eigen3-Eigen.patch25
-rw-r--r--dev-cpp/eigen/files/eigen-3.4.1-cxxstandard-17.patch72
-rw-r--r--dev-cpp/eigen/files/eigen-5.0.0-doxygen-1.14.patch136
-rw-r--r--dev-cpp/eigen/files/eigen-5.0.0-please_protect_your_min_with_parentheses.patch35
-rw-r--r--dev-cpp/eigen/files/eigen-5.0.1-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch29
-rw-r--r--dev-cpp/eigen/files/eigen-5.0.1-c++-20.patch29
-rw-r--r--dev-cpp/eigen/files/eigen-5.0.1-cmake-GNUInstallDirs.patch57
-rw-r--r--dev-cpp/eigen/files/eigen-5.0.1-fix-lapack_testing.py.patch248
-rw-r--r--dev-cpp/eigen/files/eigen-5.0.1-make-static-libs-optional.patch61
-rw-r--r--dev-cpp/eigen/files/eigen-9999-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch29
-rw-r--r--dev-cpp/eigen/files/eigen-9999-product_threaded_dont_parallelize.patch22
18 files changed, 1151 insertions, 0 deletions
diff --git a/dev-cpp/eigen/files/eigen-3.3.9-max-macro.patch b/dev-cpp/eigen/files/eigen-3.3.9-max-macro.patch
new file mode 100644
index 000000000000..c5fdc2ed582c
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-3.3.9-max-macro.patch
@@ -0,0 +1,17 @@
+--- a/unsupported/test/forward_adolc.cpp
++++ b/unsupported/test/forward_adolc.cpp
+@@ -7,12 +7,13 @@
+ // Public License v. 2.0. If a copy of the MPL was not distributed
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+-#include "main.h"
+ #include <Eigen/Dense>
+
+ #define NUMBER_DIRECTIONS 16
+ #include <unsupported/Eigen/AdolcForward>
+
++#include "main.h"
++
+ template<typename Vector>
+ EIGEN_DONT_INLINE typename Vector::Scalar foo(const Vector& p)
+ {
diff --git a/dev-cpp/eigen/files/eigen-3.4.0-buildstring.patch b/dev-cpp/eigen/files/eigen-3.4.0-buildstring.patch
new file mode 100644
index 000000000000..8e9b98fbd8bb
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-3.4.0-buildstring.patch
@@ -0,0 +1,25 @@
+--- a/cmake/EigenTesting.cmake
++++ b/cmake/EigenTesting.cmake
+@@ -559,14 +559,22 @@ macro(ei_get_cxxflags VAR)
+ set(${VAR} VSX)
+ elseif(EIGEN_TEST_ALTIVEC)
+ set(${VAR} ALVEC)
++ elseif(EIGEN_TEST_AVX512DQ)
++ set(${VAR} AVX512DQ)
++ elseif(EIGEN_TEST_AVX512)
++ set(${VAR} AVX512)
++ elseif(EIGEN_TEST_AVX2)
++ set(${VAR} AVX2)
+ elseif(EIGEN_TEST_FMA)
+ set(${VAR} FMA)
++ elseif(EIGEN_TEST_F16C)
++ set(${VAR} F16C)
+ elseif(EIGEN_TEST_AVX)
+ set(${VAR} AVX)
+ elseif(EIGEN_TEST_SSE4_2)
+ set(${VAR} SSE42)
+ elseif(EIGEN_TEST_SSE4_1)
+ set(${VAR} SSE41)
+ elseif(EIGEN_TEST_SSSE3)
+ set(${VAR} SSSE3)
+ elseif(EIGEN_TEST_SSE3)
diff --git a/dev-cpp/eigen/files/eigen-3.4.0-c++-20.patch b/dev-cpp/eigen/files/eigen-3.4.0-c++-20.patch
new file mode 100644
index 000000000000..39eef7dc0c0f
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-3.4.0-c++-20.patch
@@ -0,0 +1,30 @@
+From: Nicholas Vinson <nvinson234@gmail.com>
+Date: Mon, 15 Dec 2025 20:37:04 -0500
+
+--- a/Eigen/src/Eigenvalues/ComplexSchur.h
++++ b/Eigen/src/Eigenvalues/ComplexSchur.h
+@@ -277,7 +277,8 @@
+ using std::abs;
+ if ((iter == 10 || iter == 20) && iu > 1) {
+ // exceptional shift, taken from http://www.netlib.org/eispack/comqr.f
+- return abs(numext::real(m_matT.coeff(iu,iu-1))) + abs(numext::real(m_matT.coeff(iu-1,iu-2)));
++ return ComplexSchur<MatrixType>::ComplexScalar(
++ abs(numext::real(m_matT.coeff(iu, iu - 1))) + abs(numext::real(m_matT.coeff(iu - 1, iu - 2))));
+ }
+
+ // compute the shift as one of the eigenvalues of t, the 2x2
+--- a/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h
++++ b/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h
+@@ -86,8 +86,8 @@
+ for (Index i = 0; i < rows; i++)
+ mx = (std::max)(mx, std::abs(m_f(Ashifted(i, i) + avgEival, static_cast<int>(s + r))));
+ if (r != 0)
+ rfactorial *= RealScalar(r);
+- delta = (std::max)(delta, mx / rfactorial);
++ delta = (std::max)(delta, RealScalar(mx / rfactorial));
+ }
+ const RealScalar P_norm = P.cwiseAbs().rowwise().sum().maxCoeff();
+ if (mu * delta * P_norm < NumTraits<Scalar>::epsilon() * F_norm) // series converged
+--
+2.52.0
+
diff --git a/dev-cpp/eigen/files/eigen-3.4.0-cxxstandard.patch b/dev-cpp/eigen/files/eigen-3.4.0-cxxstandard.patch
new file mode 100644
index 000000000000..826aa78d05aa
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-3.4.0-cxxstandard.patch
@@ -0,0 +1,108 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -74,19 +74,9 @@ macro(ei_add_cxx_compiler_flag FLAG)
+ endif()
+ endmacro()
+
+-check_cxx_compiler_flag("-std=c++11" EIGEN_COMPILER_SUPPORT_CPP11)
+-
+-if(EIGEN_TEST_CXX11)
+- set(CMAKE_CXX_STANDARD 11)
+- set(CMAKE_CXX_EXTENSIONS OFF)
+- if(EIGEN_COMPILER_SUPPORT_CPP11)
+- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+- endif()
+-else()
+- #set(CMAKE_CXX_STANDARD 03)
+- #set(CMAKE_CXX_EXTENSIONS OFF)
+- ei_add_cxx_compiler_flag("-std=c++03")
+-endif()
++set(CMAKE_CXX_STANDARD 14)
++set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
++set(CMAKE_CXX_EXTENSIONS OFF)
+
+ # Determine if we should build shared libraries on this platform.
+ get_cmake_property(EIGEN_BUILD_SHARED_LIBS TARGET_SUPPORTS_SHARED_LIBS)
+@@ -157,7 +157,6 @@ if(NOT MSVC)
+ ei_add_cxx_compiler_flag("-Wshorten-64-to-32")
+ ei_add_cxx_compiler_flag("-Wlogical-op")
+ ei_add_cxx_compiler_flag("-Wenum-conversion")
+- ei_add_cxx_compiler_flag("-Wc++11-extensions")
+ ei_add_cxx_compiler_flag("-Wdouble-promotion")
+ # ei_add_cxx_compiler_flag("-Wconversion")
+
+--- a/Eigen/src/Core/util/Macros.h
++++ b/Eigen/src/Core/util/Macros.h
+@@ -37,7 +37,7 @@
+ // Expected values are 03, 11, 14, 17, etc.
+ // By default, let's use an arbitrarily large C++ version.
+ #ifndef EIGEN_MAX_CPP_VER
+-#define EIGEN_MAX_CPP_VER 99
++#define EIGEN_MAX_CPP_VER 14
+ #endif
+
+ /** Allows to disable some optimizations which might affect the accuracy of the result.
+--- a/doc/examples/CMakeLists.txt
++++ b/doc/examples/CMakeLists.txt
+@@ -14,7 +14,3 @@ foreach(example_src ${examples_SRCS})
+ )
+ add_dependencies(all_examples ${example})
+ endforeach()
+-
+-if(EIGEN_COMPILER_SUPPORT_CPP11)
+-ei_add_target_property(nullary_indexing COMPILE_FLAGS "-std=c++11")
+-endif()
+\ No newline at end of file
+diff --git a/doc/snippets/CMakeLists.txt b/doc/snippets/CMakeLists.txt
+index 65f195a..4cb18c8 100644
+--- a/doc/snippets/CMakeLists.txt
++++ b/doc/snippets/CMakeLists.txt
+@@ -15,9 +15,6 @@ foreach(snippet_src ${snippets_SRCS})
+ if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO)
+ target_link_libraries(${compile_snippet_target} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO})
+ endif()
+- if(${snippet_src} MATCHES "cxx11")
+- set_target_properties(${compile_snippet_target} PROPERTIES COMPILE_FLAGS "-std=c++11")
+- endif()
+ if(${snippet_src} MATCHES "deprecated")
+ set_target_properties(${compile_snippet_target} PROPERTIES COMPILE_FLAGS "-DEIGEN_NO_DEPRECATED_WARNING")
+ endif()
+--- a/test/CMakeLists.txt
++++ b/test/CMakeLists.txt
+@@ -399,7 +399,6 @@ if(CUDA_FOUND)
+ set(CUDA_NVCC_FLAGS "-ccbin ${CMAKE_C_COMPILER}" CACHE STRING "nvcc flags" FORCE)
+ endif()
+ if(EIGEN_TEST_CUDA_CLANG)
+- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+ string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}")
+ foreach(GPU IN LISTS EIGEN_CUDA_COMPUTE_ARCH)
+ string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${GPU}")
+--- a/unsupported/test/CMakeLists.txt
++++ b/unsupported/test/CMakeLists.txt
+@@ -59,7 +59,7 @@ find_package(MPREAL)
+ if(MPREAL_FOUND AND EIGEN_COMPILER_SUPPORT_CPP11)
+ ei_add_property(EIGEN_TESTED_BACKENDS "MPFR C++, ")
+ include_directories(${MPREAL_INCLUDES})
+- ei_add_test(mpreal_support "-std=c++11" "${MPREAL_LIBRARIES}" )
++ ei_add_test(mpreal_support "-std=c++14" "${MPREAL_LIBRARIES}" )
+ else()
+ ei_add_property(EIGEN_MISSING_BACKENDS "MPFR C++, ")
+ endif()
+@@ -308,7 +308,6 @@ if(CUDA_FOUND AND EIGEN_TEST_CUDA)
+ set(CUDA_NVCC_FLAGS "-ccbin ${CMAKE_C_COMPILER}" CACHE STRING "nvcc flags" FORCE)
+ endif()
+ if(EIGEN_TEST_CUDA_CLANG)
+- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+ string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}")
+ foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH)
+ string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${ARCH}")
+--- a/doc/special_examples/CMakeLists.txt
++++ b/doc/special_examples/CMakeLists.txt
+@@ -23,7 +23,6 @@ if(EIGEN_COMPILER_SUPPORT_CPP11)
+ add_executable(random_cpp11 random_cpp11.cpp)
+ target_link_libraries(random_cpp11 ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO})
+ add_dependencies(all_examples random_cpp11)
+- ei_add_target_property(random_cpp11 COMPILE_FLAGS "-std=c++11")
+
+ add_custom_command(
+ TARGET random_cpp11
diff --git a/dev-cpp/eigen/files/eigen-3.4.0-doc-nocompress.patch b/dev-cpp/eigen/files/eigen-3.4.0-doc-nocompress.patch
new file mode 100644
index 000000000000..b9c252ebb09c
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-3.4.0-doc-nocompress.patch
@@ -0,0 +1,15 @@
+--- a/doc/CMakeLists.txt
++++ b/doc/CMakeLists.txt
+@@ -112,11 +112,7 @@
+ COMMAND doxygen
+ COMMAND doxygen Doxyfile-unsupported
+ COMMAND ${CMAKE_COMMAND} -E copy ${Eigen_BINARY_DIR}/doc/html/group__TopicUnalignedArrayAssert.html ${Eigen_BINARY_DIR}/doc/html/TopicUnalignedArrayAssert.html
+- COMMAND ${CMAKE_COMMAND} -E rename html eigen-doc
+- COMMAND ${CMAKE_COMMAND} -E remove eigen-doc/eigen-doc.tgz eigen-doc/unsupported/_formulas.log eigen-doc/_formulas.log
+- COMMAND ${CMAKE_COMMAND} -E tar cfz eigen-doc.tgz eigen-doc
+- COMMAND ${CMAKE_COMMAND} -E rename eigen-doc.tgz eigen-doc/eigen-doc.tgz
+- COMMAND ${CMAKE_COMMAND} -E rename eigen-doc html
++ COMMAND ${CMAKE_COMMAND} -E remove html/unsupported/_formulas.log html/_formulas.log
+ WORKING_DIRECTORY ${Eigen_BINARY_DIR}/doc)
+
+ add_dependencies(doc doc-eigen-prerequisites doc-unsupported-prerequisites)
diff --git a/dev-cpp/eigen/files/eigen-3.4.0-noansi.patch b/dev-cpp/eigen/files/eigen-3.4.0-noansi.patch
new file mode 100644
index 000000000000..c0ce44445c1d
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-3.4.0-noansi.patch
@@ -0,0 +1,18 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -184,6 +184,7 @@ if(NOT MSVC)
+ ei_add_cxx_compiler_flag("-wd2304") # disable ICC's "warning #2304: non-explicit constructor with single argument may cause implicit type conversion" produced by -Wnon-virtual-dtor
+
+
++ if(NOT EIGEN_TEST_CXX11)
+ # The -ansi flag must be added last, otherwise it is also used as a linker flag by check_cxx_compiler_flag making it fails
+ # Moreover we should not set both -strict-ansi and -ansi
+ check_cxx_compiler_flag("-strict-ansi" COMPILER_SUPPORT_STRICTANSI)
+@@ -194,6 +195,7 @@ if(NOT MSVC)
+ else()
+ ei_add_cxx_compiler_flag("-ansi")
+ endif()
++ endif()
+
+ if(ANDROID_NDK)
+ ei_add_cxx_compiler_flag("-pie")
diff --git a/dev-cpp/eigen/files/eigen-3.4.0-ppc-no-vsx.patch b/dev-cpp/eigen/files/eigen-3.4.0-ppc-no-vsx.patch
new file mode 100644
index 000000000000..7cfeaaf129ff
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-3.4.0-ppc-no-vsx.patch
@@ -0,0 +1,195 @@
+https://gitlab.com/libeigen/eigen/-/merge_requests/1028
+https://bugs.gentoo.org/936107
+--- a/Eigen/Core
++++ b/Eigen/Core
+@@ -346,7 +346,7 @@
+ #include "src/Core/CoreIterators.h"
+ #include "src/Core/ConditionEstimator.h"
+
+-#if defined(EIGEN_VECTORIZE_ALTIVEC) || defined(EIGEN_VECTORIZE_VSX)
++#if defined(EIGEN_VECTORIZE_VSX)
+ #include "src/Core/arch/AltiVec/MatrixProduct.h"
+ #elif defined EIGEN_VECTORIZE_NEON
+ #include "src/Core/arch/NEON/GeneralBlockPanelKernel.h"
+--- a/Eigen/src/Core/arch/AltiVec/Complex.h
++++ b/Eigen/src/Core/arch/AltiVec/Complex.h
+@@ -100,6 +100,7 @@
+ HasAbs2 = 0,
+ HasMin = 0,
+ HasMax = 0,
++ HasSqrt = 1,
+ #ifdef __VSX__
+ HasBlend = 1,
+ #endif
+@@ -320,6 +321,7 @@
+ HasAbs2 = 0,
+ HasMin = 0,
+ HasMax = 0,
++ HasSqrt = 1,
+ HasSetLinear = 0
+ };
+ };
+--- a/Eigen/src/Core/arch/AltiVec/MathFunctions.h
++++ b/Eigen/src/Core/arch/AltiVec/MathFunctions.h
+@@ -40,16 +40,14 @@
+ return pcos_float(_x);
+ }
+
++#ifdef __VSX__
+ #ifndef EIGEN_COMP_CLANG
+ template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED
+ Packet4f prsqrt<Packet4f>(const Packet4f& x)
+ {
+ return vec_rsqrt(x);
+ }
+-#endif
+
+-#ifdef __VSX__
+-#ifndef EIGEN_COMP_CLANG
+ template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED
+ Packet2d prsqrt<Packet2d>(const Packet2d& x)
+ {
+@@ -74,6 +72,26 @@
+ {
+ return pexp_double(_x);
+ }
++
++template<> EIGEN_STRONG_INLINE Packet8bf psqrt<Packet8bf> (const Packet8bf& a){
++ BF16_TO_F32_UNARY_OP_WRAPPER(psqrt<Packet4f>, a);
++}
++
++#ifndef EIGEN_COMP_CLANG
++template<> EIGEN_STRONG_INLINE Packet8bf prsqrt<Packet8bf> (const Packet8bf& a){
++ BF16_TO_F32_UNARY_OP_WRAPPER(prsqrt<Packet4f>, a);
++}
++#endif
++#else
++template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
++Packet4f psqrt<Packet4f>(const Packet4f& x)
++{
++ Packet4f a;
++ for (Index i = 0; i < packet_traits<float>::size; i++) {
++ a[i] = numext::sqrt(x[i]);
++ }
++ return a;
++}
+ #endif
+
+ // Hyperbolic Tangent function.
+--- a/Eigen/src/Core/arch/AltiVec/PacketMath.h
++++ b/Eigen/src/Core/arch/AltiVec/PacketMath.h
+@@ -175,16 +175,19 @@
+ #else
+ HasRsqrt = 0,
+ #endif
++ HasTanh = EIGEN_FAST_MATH,
++ HasErf = EIGEN_FAST_MATH,
++ HasRint = 1,
+ #else
+ HasSqrt = 0,
+ HasRsqrt = 0,
+- HasTanh = EIGEN_FAST_MATH,
+- HasErf = EIGEN_FAST_MATH,
++ HasTanh = 0,
++ HasErf = 0,
++ HasRint = 0,
+ #endif
+ HasRound = 1,
+ HasFloor = 1,
+ HasCeil = 1,
+- HasRint = 1,
+ HasNegate = 1,
+ HasBlend = 1
+ };
+@@ -217,16 +220,17 @@
+ #else
+ HasRsqrt = 0,
+ #endif
++ HasRint = 1,
+ #else
+ HasSqrt = 0,
+ HasRsqrt = 0,
+- HasTanh = EIGEN_FAST_MATH,
+- HasErf = EIGEN_FAST_MATH,
++ HasRint = 0,
+ #endif
++ HasTanh = 0,
++ HasErf = 0,
+ HasRound = 1,
+ HasFloor = 1,
+ HasCeil = 1,
+- HasRint = 1,
+ HasNegate = 1,
+ HasBlend = 1
+ };
+@@ -872,19 +876,29 @@
+ return vec_nor(c,c);
+ }
+
++#ifdef __VSX__
+ template<> EIGEN_STRONG_INLINE Packet4i pcmp_le(const Packet4i& a, const Packet4i& b) { return reinterpret_cast<Packet4i>(vec_cmple(a,b)); }
++#endif
+ template<> EIGEN_STRONG_INLINE Packet4i pcmp_lt(const Packet4i& a, const Packet4i& b) { return reinterpret_cast<Packet4i>(vec_cmplt(a,b)); }
+ template<> EIGEN_STRONG_INLINE Packet4i pcmp_eq(const Packet4i& a, const Packet4i& b) { return reinterpret_cast<Packet4i>(vec_cmpeq(a,b)); }
++#ifdef __VSX__
+ template<> EIGEN_STRONG_INLINE Packet8s pcmp_le(const Packet8s& a, const Packet8s& b) { return reinterpret_cast<Packet8s>(vec_cmple(a,b)); }
++#endif
+ template<> EIGEN_STRONG_INLINE Packet8s pcmp_lt(const Packet8s& a, const Packet8s& b) { return reinterpret_cast<Packet8s>(vec_cmplt(a,b)); }
+ template<> EIGEN_STRONG_INLINE Packet8s pcmp_eq(const Packet8s& a, const Packet8s& b) { return reinterpret_cast<Packet8s>(vec_cmpeq(a,b)); }
++#ifdef __VSX__
+ template<> EIGEN_STRONG_INLINE Packet8us pcmp_le(const Packet8us& a, const Packet8us& b) { return reinterpret_cast<Packet8us>(vec_cmple(a,b)); }
++#endif
+ template<> EIGEN_STRONG_INLINE Packet8us pcmp_lt(const Packet8us& a, const Packet8us& b) { return reinterpret_cast<Packet8us>(vec_cmplt(a,b)); }
+ template<> EIGEN_STRONG_INLINE Packet8us pcmp_eq(const Packet8us& a, const Packet8us& b) { return reinterpret_cast<Packet8us>(vec_cmpeq(a,b)); }
++#ifdef __VSX__
+ template<> EIGEN_STRONG_INLINE Packet16c pcmp_le(const Packet16c& a, const Packet16c& b) { return reinterpret_cast<Packet16c>(vec_cmple(a,b)); }
++#endif
+ template<> EIGEN_STRONG_INLINE Packet16c pcmp_lt(const Packet16c& a, const Packet16c& b) { return reinterpret_cast<Packet16c>(vec_cmplt(a,b)); }
+ template<> EIGEN_STRONG_INLINE Packet16c pcmp_eq(const Packet16c& a, const Packet16c& b) { return reinterpret_cast<Packet16c>(vec_cmpeq(a,b)); }
++#ifdef __VSX__
+ template<> EIGEN_STRONG_INLINE Packet16uc pcmp_le(const Packet16uc& a, const Packet16uc& b) { return reinterpret_cast<Packet16uc>(vec_cmple(a,b)); }
++#endif
+ template<> EIGEN_STRONG_INLINE Packet16uc pcmp_lt(const Packet16uc& a, const Packet16uc& b) { return reinterpret_cast<Packet16uc>(vec_cmplt(a,b)); }
+ template<> EIGEN_STRONG_INLINE Packet16uc pcmp_eq(const Packet16uc& a, const Packet16uc& b) { return reinterpret_cast<Packet16uc>(vec_cmpeq(a,b)); }
+
+@@ -937,6 +951,7 @@
+ }
+ template<> EIGEN_STRONG_INLINE Packet4f pceil<Packet4f>(const Packet4f& a) { return vec_ceil(a); }
+ template<> EIGEN_STRONG_INLINE Packet4f pfloor<Packet4f>(const Packet4f& a) { return vec_floor(a); }
++#ifdef __VSX__
+ template<> EIGEN_STRONG_INLINE Packet4f print<Packet4f>(const Packet4f& a)
+ {
+ Packet4f res;
+@@ -947,6 +962,7 @@
+
+ return res;
+ }
++#endif
+
+ template<typename Packet> EIGEN_STRONG_INLINE Packet ploadu_common(const __UNPACK_TYPE__(Packet)* from)
+ {
+@@ -1341,12 +1357,6 @@
+ BF16_TO_F32_BINARY_OP_WRAPPER(psub<Packet4f>, a, b);
+ }
+
+-template<> EIGEN_STRONG_INLINE Packet8bf psqrt<Packet8bf> (const Packet8bf& a){
+- BF16_TO_F32_UNARY_OP_WRAPPER(vec_sqrt, a);
+-}
+-template<> EIGEN_STRONG_INLINE Packet8bf prsqrt<Packet8bf> (const Packet8bf& a){
+- BF16_TO_F32_UNARY_OP_WRAPPER(prsqrt<Packet4f>, a);
+-}
+ template<> EIGEN_STRONG_INLINE Packet8bf pexp<Packet8bf> (const Packet8bf& a){
+ BF16_TO_F32_UNARY_OP_WRAPPER(pexp_float, a);
+ }
+@@ -1390,9 +1400,11 @@
+ template<> EIGEN_STRONG_INLINE Packet8bf pround<Packet8bf> (const Packet8bf& a){
+ BF16_TO_F32_UNARY_OP_WRAPPER(pround<Packet4f>, a);
+ }
++#ifdef __VSX__
+ template<> EIGEN_STRONG_INLINE Packet8bf print<Packet8bf> (const Packet8bf& a){
+ BF16_TO_F32_UNARY_OP_WRAPPER(print<Packet4f>, a);
+ }
++#endif
+ template<> EIGEN_STRONG_INLINE Packet8bf pmadd(const Packet8bf& a, const Packet8bf& b, const Packet8bf& c) {
+ Packet4f a_even = Bf16ToF32Even(a);
+ Packet4f a_odd = Bf16ToF32Odd(a);
diff --git a/dev-cpp/eigen/files/eigen-3.4.1-bug1213-link-with-Eigen3-Eigen.patch b/dev-cpp/eigen/files/eigen-3.4.1-bug1213-link-with-Eigen3-Eigen.patch
new file mode 100644
index 000000000000..9ced714f0c51
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-3.4.1-bug1213-link-with-Eigen3-Eigen.patch
@@ -0,0 +1,25 @@
+From 470c47b3b8309cb71cf48146e56744bd2630827a Mon Sep 17 00:00:00 2001
+From: Paul Zander <negril.nx+gentoo@gmail.com>
+Date: Sat, 28 Feb 2026 23:16:55 +0100
+Subject: [PATCH] bug1213: link with Eigen3::Eigen
+
+Doesn't find Eigen/Core otherwise.
+---
+ test/CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
+index f503efc..360f989 100644
+--- a/test/CMakeLists.txt
++++ b/test/CMakeLists.txt
+@@ -299,6 +299,7 @@ if(EIGEN_TEST_CXX11)
+ endif()
+
+ add_executable(bug1213 bug1213.cpp bug1213_main.cpp)
++target_link_libraries(bug1213 Eigen3::Eigen)
+
+ check_cxx_compiler_flag("-ffast-math" COMPILER_SUPPORT_FASTMATH)
+ if(COMPILER_SUPPORT_FASTMATH)
+--
+2.53.0
+
diff --git a/dev-cpp/eigen/files/eigen-3.4.1-cxxstandard-17.patch b/dev-cpp/eigen/files/eigen-3.4.1-cxxstandard-17.patch
new file mode 100644
index 000000000000..720898bdd11c
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-3.4.1-cxxstandard-17.patch
@@ -0,0 +1,72 @@
+From cd8bb671321b5163c21f84689f929b671ed68750 Mon Sep 17 00:00:00 2001
+From: Paul Zander <negril.nx+gentoo@gmail.com>
+Date: Mon, 20 Oct 2025 21:26:47 +0200
+Subject: [PATCH] cxx standard 17
+
+Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 80d36b991..8106bb264 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -330,11 +330,8 @@ if (EIGEN_BUILD_TESTING)
+
+ option(EIGEN_TEST_CXX11 "Enable testing with C++11 and C++11 features (e.g. Tensor module)." ${EIGEN_COMPILER_SUPPORT_CPP11})
+ if(EIGEN_TEST_CXX11)
+- set(CMAKE_CXX_STANDARD 11)
++ set(CMAKE_CXX_STANDARD 17)
+ set(CMAKE_CXX_EXTENSIONS OFF)
+- if(EIGEN_COMPILER_SUPPORT_CPP11)
+- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+- endif()
+ else()
+ ei_add_cxx_compiler_flag("-std=c++03")
+ endif()
+@@ -373,7 +370,7 @@ if (EIGEN_BUILD_TESTING)
+ ei_add_cxx_compiler_flag("-Wshorten-64-to-32")
+ ei_add_cxx_compiler_flag("-Wlogical-op")
+ ei_add_cxx_compiler_flag("-Wenum-conversion")
+- ei_add_cxx_compiler_flag("-Wc++11-extensions")
++ # ei_add_cxx_compiler_flag("-Wc++11-extensions")
+ ei_add_cxx_compiler_flag("-Wdouble-promotion")
+ # ei_add_cxx_compiler_flag("-Wconversion")
+ ei_add_cxx_compiler_flag("-Wshadow")
+diff --git a/doc/special_examples/CMakeLists.txt b/doc/special_examples/CMakeLists.txt
+index a0267a512..d7fc80976 100644
+--- a/doc/special_examples/CMakeLists.txt
++++ b/doc/special_examples/CMakeLists.txt
+@@ -23,7 +23,6 @@ if(EIGEN_COMPILER_SUPPORT_CPP11)
+ add_executable(random_cpp11 random_cpp11.cpp)
+ target_link_libraries(random_cpp11 ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO} Eigen3::Eigen)
+ add_dependencies(all_examples random_cpp11)
+- target_compile_options(random_cpp11 PRIVATE "-std=c++11")
+
+ add_custom_command(
+ TARGET random_cpp11
+diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
+index 7ce260e0e..f503efc5d 100644
+--- a/test/CMakeLists.txt
++++ b/test/CMakeLists.txt
+@@ -386,7 +386,6 @@ if(CUDA_FOUND AND EIGEN_TEST_CUDA)
+ string(REPLACE "-fno-check-new" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+
+ if(EIGEN_TEST_CUDA_CLANG)
+- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+ string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}")
+ foreach(GPU IN LISTS EIGEN_CUDA_COMPUTE_ARCH)
+ string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${GPU}")
+diff --git a/unsupported/test/CMakeLists.txt b/unsupported/test/CMakeLists.txt
+index 1d5e9b174..cf394de86 100644
+--- a/unsupported/test/CMakeLists.txt
++++ b/unsupported/test/CMakeLists.txt
+@@ -227,7 +227,6 @@ if(CUDA_FOUND AND EIGEN_TEST_CUDA)
+ string(REPLACE "-ansi" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+
+ if(EIGEN_TEST_CUDA_CLANG)
+- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+ string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}")
+ foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH)
+ string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${ARCH}")
+--
+2.51.1
+
diff --git a/dev-cpp/eigen/files/eigen-5.0.0-doxygen-1.14.patch b/dev-cpp/eigen/files/eigen-5.0.0-doxygen-1.14.patch
new file mode 100644
index 000000000000..89e049368022
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-5.0.0-doxygen-1.14.patch
@@ -0,0 +1,136 @@
+From cf458c66ee01802d5023fcab78412583b5c73574 Mon Sep 17 00:00:00 2001
+From: Guilhem Saurel <guilhem.saurel@laas.fr>
+Date: Tue, 16 Dec 2025 09:40:05 +0100
+Subject: [PATCH 1/4] doc: add and use \anchor Eigen_placeholders_lastN
+
+fix for Doxygen >= 1.14:
+```
+doc/Manual.dox:177: error: unable to resolve link to 'Eigen::placeholders::lastN(SizeType)' for \link command
+doc/Manual.dox:178: error: unable to resolve link to 'Eigen::placeholders::lastN(SizeType,IncrType)' for \link command
+```
+---
+ Eigen/src/Core/ArithmeticSequence.h | 2 +-
+ doc/TutorialSlicingIndexing.dox | 3 +--
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/Eigen/src/Core/ArithmeticSequence.h b/Eigen/src/Core/ArithmeticSequence.h
+index ae6373dda..41617713f 100644
+--- a/Eigen/src/Core/ArithmeticSequence.h
++++ b/Eigen/src/Core/ArithmeticSequence.h
+@@ -182,7 +182,7 @@ namespace placeholders {
+ * \returns a symbolic ArithmeticSequence representing the last \a size elements with increment \a incr.
+ *
+ * It is a shortcut for: \code seqN(last-(size-fix<1>)*incr, size, incr) \endcode
+- *
++ * \anchor Eigen_placeholders_lastN
+ * \sa lastN(SizeType), seqN(FirstType,SizeType), seq(FirstType,LastType,IncrType) */
+ template <typename SizeType, typename IncrType>
+ auto lastN(SizeType size, IncrType incr)
+diff --git a/doc/TutorialSlicingIndexing.dox b/doc/TutorialSlicingIndexing.dox
+index 6ebaa2d6d..a1b00dfc4 100644
+--- a/doc/TutorialSlicingIndexing.dox
++++ b/doc/TutorialSlicingIndexing.dox
+@@ -114,8 +114,7 @@ Here are some examples for a 2D array/matrix \c A and a 1D array/vector \c v.
+
+ As seen in the last example, referencing the <i> last n </i> elements (or rows/columns) is a bit cumbersome to write.
+ This becomes even more tricky and error prone with a non-default increment.
+-Here comes \link Eigen::placeholders::lastN(SizeType) Eigen::placeholders::lastN(size) \endlink, and
+-\link Eigen::placeholders::lastN(SizeType,IncrType) Eigen::placeholders::lastN(size,incr) \endlink:
++Here comes \ref Eigen_placeholders_lastN :
+
+ <table class="manual">
+ <tr>
+--
+GitLab
+
+
+From 6be98c166c86a2360177bad9cdccc55ac1ceed7b Mon Sep 17 00:00:00 2001
+From: Guilhem Saurel <guilhem.saurel@laas.fr>
+Date: Tue, 16 Dec 2025 10:13:56 +0100
+Subject: [PATCH 2/4] doc: fix html
+
+fix for Doxygen >= 1.14:
+```
+doc/Manual.dox:656: error: expected <tr> or </table> tag but found token TK_HTMLTAG instead!
+```
+---
+ doc/QuickReference.dox | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/doc/QuickReference.dox b/doc/QuickReference.dox
+index 1fb000fdc..4aece902c 100644
+--- a/doc/QuickReference.dox
++++ b/doc/QuickReference.dox
+@@ -551,7 +551,6 @@ Read-write access to sub-vectors:
+ <tr>
+ <th>Default versions</th>
+ <th>Optimized versions when the size \n is known at compile time</th></tr>
+-<th></th>
+
+ <tr><td>\code vec1.head(n)\endcode</td><td>\code vec1.head<n>()\endcode</td><td>the first \c n coeffs </td></tr>
+ <tr><td>\code vec1.tail(n)\endcode</td><td>\code vec1.tail<n>()\endcode</td><td>the last \c n coeffs </td></tr>
+--
+GitLab
+
+
+From ac5d00609f14b7402f1fe8274e4d5db3c61f091e Mon Sep 17 00:00:00 2001
+From: Guilhem Saurel <guilhem.saurel@laas.fr>
+Date: Tue, 16 Dec 2025 10:37:35 +0100
+Subject: [PATCH 3/4] doc: typo
+
+fix for doxygen 1.15:
+```
+doc/UnalignedArrayAssert.dox:134: error: Reached end of file while still searching closing '`' of a verbatim block starting at line 117
+doc/UnalignedArrayAssert.dox:134: error: Reached end of file while still inside a (nested) comment. Nesting level 1 (possible line reference(s): 3)
+```
+---
+ doc/UnalignedArrayAssert.dox | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/doc/UnalignedArrayAssert.dox b/doc/UnalignedArrayAssert.dox
+index ca674a267..0ed6f8835 100644
+--- a/doc/UnalignedArrayAssert.dox
++++ b/doc/UnalignedArrayAssert.dox
+@@ -7,7 +7,7 @@ Hello! You are seeing this webpage because your program terminated on an asserti
+ my_program: path/to/eigen/Eigen/src/Core/DenseStorage.h:44:
+ Eigen::internal::matrix_array<T, Size, MatrixOptions, Align>::internal::matrix_array()
+ [with T = double, int Size = 2, int MatrixOptions = 2, bool Align = true]:
+-Assertion `(reinterpret_cast<size_t>(array) & (sizemask)) == 0 && "this assertion
++Assertion (reinterpret_cast<size_t>(array) & (sizemask)) == 0 && "this assertion
+ is explained here: http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html
+ **** READ THIS WEB PAGE !!! ****"' failed.
+ </pre>
+--
+GitLab
+
+
+From ae263fb905b2dd9ff3ad9b47dc44f90466f7b1c8 Mon Sep 17 00:00:00 2001
+From: Guilhem Saurel <guilhem.saurel@laas.fr>
+Date: Tue, 16 Dec 2025 10:40:27 +0100
+Subject: [PATCH 4/4] doc: define eigenAutoToc alias
+
+Fix for doxygen 1.15:
+```
+doc/Manual.dox:95: error: Found unexpanded alias '\cpp17'. Check if number of arguments passed is correct.
+doc/Manual.dox:98: error: Found unexpanded alias '\eigenAutoToc'. Check if number of arguments passed is correct.
+```
+---
+ doc/Doxyfile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
+index 25a7e2e9a..445fc0a6f 100644
+--- a/doc/Doxyfile.in
++++ b/doc/Doxyfile.in
+@@ -32,7 +32,7 @@ ALIASES = "only_for_vectors=This is only for vectors (either row-
+ "cpp14=<span class='cpp14'>[c++14]</span>" \
+ "cpp17=<span class='cpp17'>[c++17]</span>" \
+ "newin{1}=<span class='newin3x'>New in %Eigen \1.</span>" \
+- eigenAutoToc= \
++ "eigenAutoToc=<!-- TOC placeholder -->" \
+ eigenManualPage=\defgroup
+ EXTENSION_MAPPING = .h=C++ \
+ no_extension=C++
+--
+GitLab
+
diff --git a/dev-cpp/eigen/files/eigen-5.0.0-please_protect_your_min_with_parentheses.patch b/dev-cpp/eigen/files/eigen-5.0.0-please_protect_your_min_with_parentheses.patch
new file mode 100644
index 000000000000..ee8ab16793cb
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-5.0.0-please_protect_your_min_with_parentheses.patch
@@ -0,0 +1,35 @@
+From 056b77036b4c97fee25bbd7a747e55c75c79cd48 Mon Sep 17 00:00:00 2001
+From: Paul Zander <negril.nx+gentoo@gmail.com>
+Date: Tue, 23 Sep 2025 00:40:14 +0200
+Subject: [PATCH] please protect your min with parentheses
+
+Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
+
+diff --git a/Eigen/src/Core/products/Parallelizer.h b/Eigen/src/Core/products/Parallelizer.h
+index 4f36689..899d78f 100644
+--- a/Eigen/src/Core/products/Parallelizer.h
++++ b/Eigen/src/Core/products/Parallelizer.h
+@@ -141,7 +141,7 @@ inline void manage_multi_threading(Action action, int* v) {
+ // for OpenMP.
+ eigen_internal_assert(*v >= 0);
+ int omp_threads = omp_get_max_threads();
+- m_maxThreads = (*v == 0 ? omp_threads : std::min(*v, omp_threads));
++ m_maxThreads = (*v == 0 ? omp_threads : (std::min)(*v, omp_threads));
+ #elif defined(EIGEN_GEMM_THREADPOOL)
+ // Calling action == SetAction and *v = 0 means
+ // restoring m_maxThreads to the number of threads in the ThreadPool,
+diff --git a/test/product_threaded.cpp b/test/product_threaded.cpp
+index 1782c28..85c2615 100644
+--- a/test/product_threaded.cpp
++++ b/test/product_threaded.cpp
+@@ -7,6 +7,7 @@
+ // Public License v. 2.0. If a copy of the MPL was not distributed
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
++#define EIGEN_DONT_PARALLELIZE
+ #define EIGEN_GEMM_THREADPOOL
+ #include "main.h"
+
+--
+2.51.0
+
diff --git a/dev-cpp/eigen/files/eigen-5.0.1-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch b/dev-cpp/eigen/files/eigen-5.0.1-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch
new file mode 100644
index 000000000000..9a740351ead9
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-5.0.1-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch
@@ -0,0 +1,29 @@
+From d0e70fb11f54ccc8117030482fb7b3b359261cbf Mon Sep 17 00:00:00 2001
+From: Paul Zander <negril.nx+gentoo@gmail.com>
+Date: Mon, 22 Dec 2025 17:19:51 +0100
+Subject: Do not show deprecated CUDA device properties for CUDA-13
+
+Fixes: 9e5714b93b3a0d7848e72db5fa2b58decaa60297
+Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
+
+diff --git a/test/gpu_common.h b/test/gpu_common.h
+index f34f1b078..f47742079 100644
+--- a/test/gpu_common.h
++++ b/test/gpu_common.h
+@@ -153,9 +153,13 @@ void ei_test_init_gpu() {
+ std::cout << " warpSize: " << deviceProp.warpSize << "\n";
+ std::cout << " regsPerBlock: " << deviceProp.regsPerBlock << "\n";
+ std::cout << " concurrentKernels: " << deviceProp.concurrentKernels << "\n";
++#if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER < 130000
+ std::cout << " clockRate: " << deviceProp.clockRate << "\n";
++#endif
+ std::cout << " canMapHostMemory: " << deviceProp.canMapHostMemory << "\n";
++#if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER < 130000
+ std::cout << " computeMode: " << deviceProp.computeMode << "\n";
++#endif
+ }
+
+ #endif // EIGEN_TEST_GPU_COMMON_H
+--
+2.52.0
+
diff --git a/dev-cpp/eigen/files/eigen-5.0.1-c++-20.patch b/dev-cpp/eigen/files/eigen-5.0.1-c++-20.patch
new file mode 100644
index 000000000000..c770cbe827cc
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-5.0.1-c++-20.patch
@@ -0,0 +1,29 @@
+From: Nicholas Vinson <nvinson234@gmail.com>
+Date: Mon, 15 Dec 2025 20:37:04 -0500
+
+--- a/Eigen/src/Eigenvalues/ComplexSchur.h
++++ b/Eigen/src/Eigenvalues/ComplexSchur.h
+@@ -277,7 +277,8 @@
+ using std::abs;
+ if ((iter == 10 || iter == 20) && iu > 1) {
+ // exceptional shift, taken from http://www.netlib.org/eispack/comqr.f
+- return abs(numext::real(m_matT.coeff(iu, iu - 1))) + abs(numext::real(m_matT.coeff(iu - 1, iu - 2)));
++ return ComplexSchur<MatrixType>::ComplexScalar(
++ abs(numext::real(m_matT.coeff(iu, iu - 1))) + abs(numext::real(m_matT.coeff(iu - 1, iu - 2))));
+ }
+
+ // compute the shift as one of the eigenvalues of t, the 2x2
+--- a/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h
++++ b/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h
+@@ -86,7 +86,7 @@
+ for (Index i = 0; i < rows; i++)
+ mx = (std::max)(mx, std::abs(m_f(Ashifted(i, i) + avgEival, static_cast<int>(s + r))));
+ if (r != 0) rfactorial *= RealScalar(r);
+- delta = (std::max)(delta, mx / rfactorial);
++ delta = (std::max)(delta, RealScalar(mx / rfactorial));
+ }
+ const RealScalar P_norm = P.cwiseAbs().rowwise().sum().maxCoeff();
+ if (mu * delta * P_norm < NumTraits<Scalar>::epsilon() * F_norm) // series converged
+--
+2.52.0
+
diff --git a/dev-cpp/eigen/files/eigen-5.0.1-cmake-GNUInstallDirs.patch b/dev-cpp/eigen/files/eigen-5.0.1-cmake-GNUInstallDirs.patch
new file mode 100644
index 000000000000..d68e31b132ed
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-5.0.1-cmake-GNUInstallDirs.patch
@@ -0,0 +1,57 @@
+From efcf4891a83e2757aa70de61eb17d81963085c20 Mon Sep 17 00:00:00 2001
+From: Paul Zander <negril.nx+gentoo@gmail.com>
+Date: Sat, 27 Dec 2025 15:39:40 +0100
+Subject: cmake GNUInstallDirs
+
+Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
+
+diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt
+index 45488d7..f0f88c0 100644
+--- a/blas/CMakeLists.txt
++++ b/blas/CMakeLists.txt
+@@ -31,10 +31,8 @@ foreach(target IN LISTS EIGEN_BLAS_TARGETS)
+ endif()
+
+ add_dependencies(blas ${target})
+- install(TARGETS ${target}
+- RUNTIME DESTINATION bin
+- LIBRARY DESTINATION lib
+- ARCHIVE DESTINATION lib)
++ include(GNUInstallDirs)
++ install(TARGETS ${target})
+ endforeach()
+
+ if(EIGEN_BUILD_TESTING)
+diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
+index da07b19d6..dec130bd5 100644
+--- a/doc/CMakeLists.txt
++++ b/doc/CMakeLists.txt
+@@ -4,6 +4,8 @@ set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL TRUE)
+
+ project(EigenDoc)
+
++include(GNUInstallDirs)
++
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ if(CMAKE_SYSTEM_NAME MATCHES Linux)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1 -g1")
+diff --git a/lapack/CMakeLists.txt b/lapack/CMakeLists.txt
+index d837fff..9e127a6 100644
+--- a/lapack/CMakeLists.txt
++++ b/lapack/CMakeLists.txt
+@@ -120,10 +120,8 @@ foreach(target IN LISTS EIGEN_LAPACK_TARGETS)
+ endif()
+ target_link_libraries(${target} Eigen3::Eigen)
+ add_dependencies(lapack ${target})
+- install(TARGETS ${target}
+- RUNTIME DESTINATION bin
+- LIBRARY DESTINATION lib
+- ARCHIVE DESTINATION lib)
++ include(GNUInstallDirs)
++ install(TARGETS ${target})
+ endforeach()
+
+
+--
+2.52.0
+
diff --git a/dev-cpp/eigen/files/eigen-5.0.1-fix-lapack_testing.py.patch b/dev-cpp/eigen/files/eigen-5.0.1-fix-lapack_testing.py.patch
new file mode 100644
index 000000000000..cbba85d882cb
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-5.0.1-fix-lapack_testing.py.patch
@@ -0,0 +1,248 @@
+From 8d05fb579428b57a784f72e054295ebfeac5864d Mon Sep 17 00:00:00 2001
+From: Paul Zander <negril.nx+gentoo@gmail.com>
+Date: Fri, 13 Mar 2026 18:43:46 +0100
+Subject: fix lapack_testing.py
+
+Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
+
+diff --git a/lapack/testing/lapack_testing.py b/lapack/testing/lapack_testing.py
+index 3bd9462..b35e15d 100755
+--- a/lapack/testing/lapack_testing.py
++++ b/lapack/testing/lapack_testing.py
+@@ -15,9 +15,9 @@ try:
+ opts, args = getopt.getopt(sys.argv[1:], "hd:srep:t:n",
+ ["help", "dir", "short", "run", "error","prec=","test=","number"])
+
+-except getopt.error, msg:
+- print msg
+- print "for help use --help"
++except (getopt.error, msg):
++ print(msg)
++ print("for help use --help")
+ sys.exit(2)
+
+ short_summary=0
+@@ -29,38 +29,38 @@ only_numbers=0
+ dir="TESTING"
+ for o, a in opts:
+ if o in ("-h", "--help"):
+- print sys.argv[0]+" [-h|--help] [-d dir |--dir dir] [-s |--short] [-r |--run] [-e |--error] [-p p |--prec p] [-t test |--test test] [-n | --number]"
+- print " - h is to print this message"
+- print " - r is to use to run the LAPACK tests then analyse the output (.out files). By default, the script will not run all the LAPACK tests"
+- print " - d [dir] is to indicate where is the LAPACK testing directory (.out files). By default, the script will use ."
+- print " LEVEL OF OUTPUT"
+- print " - x is to print a detailed summary"
+- print " - e is to print only the error summary"
+- print " - s is to print a short summary"
+- print " - n is to print the numbers of failing tests (turn on summary mode)"
+- print " SECLECTION OF TESTS:"
+- print " - p [s/c/d/z/x] is to indicate the PRECISION to run:"
+- print " s=single"
+- print " d=double"
+- print " sd=single/double"
+- print " c=complex"
+- print " z=double complex"
+- print " cz=complex/double complex"
+- print " x=all [DEFAULT]"
+- print " - t [lin/eig/mixed/rfp/all] is to indicate which TEST FAMILY to run:"
+- print " lin=Linear Equation"
+- print " eig=Eigen Problems"
+- print " mixed=mixed-precision"
+- print " rfp=rfp format"
+- print " all=all tests [DEFAULT]"
+- print " EXAMPLES:"
+- print " ./lapack_testing.py -n"
+- print " Will return the numbers of failed tests by analyzing the LAPACK output"
+- print " ./lapack_testing.py -n -r -p s"
+- print " Will return the numbers of failed tests in REAL precision by running the LAPACK Tests then analyzing the output"
+- print " ./lapack_testing.py -n -p s -t eig "
+- print " Will return the numbers of failed tests in REAL precision by analyzing only the LAPACK output of EIGEN testings"
+- print "Written by Julie Langou (June 2011) "
++ print(sys.argv[0]+" [-h|--help] [-d dir |--dir dir] [-s |--short] [-r |--run] [-e |--error] [-p p |--prec p] [-t test |--test test] [-n | --number]")
++ print(" - h is to print this message")
++ print(" - r is to use to run the LAPACK tests then analyse the output (.out files). By default, the script will not run all the LAPACK tests")
++ print(" - d [dir] is to indicate where is the LAPACK testing directory (.out files). By default, the script will use .")
++ print(" LEVEL OF OUTPUT")
++ print(" - x is to print a detailed summary")
++ print(" - e is to print only the error summary")
++ print(" - s is to print a short summary")
++ print(" - n is to print the numbers of failing tests (turn on summary mode)")
++ print(" SECLECTION OF TESTS:")
++ print(" - p [s/c/d/z/x] is to indicate the PRECISION to run:")
++ print(" s=single")
++ print(" d=double")
++ print(" sd=single/double")
++ print(" c=complex")
++ print(" z=double complex")
++ print(" cz=complex/double complex")
++ print(" x=all [DEFAULT]")
++ print(" - t [lin/eig/mixed/rfp/all] is to indicate which TEST FAMILY to run:")
++ print(" lin=Linear Equation")
++ print(" eig=Eigen Problems")
++ print(" mixed=mixed-precision")
++ print(" rfp=rfp format")
++ print(" all=all tests [DEFAULT]")
++ print(" EXAMPLES:")
++ print(" ./lapack_testing.py -n")
++ print(" Will return the numbers of failed tests by analyzing the LAPACK output")
++ print(" ./lapack_testing.py -n -r -p s")
++ print(" Will return the numbers of failed tests in REAL precision by running the LAPACK Tests then analyzing the output")
++ print(" ./lapack_testing.py -n -p s -t eig ")
++ print(" Will return the numbers of failed tests in REAL precision by analyzing only the LAPACK output of EIGEN testings")
++ print("Written by Julie Langou (June 2011) ")
+ sys.exit(0)
+ else:
+ if o in ("-s", "--short"):
+@@ -120,34 +120,34 @@ def run_summary_test( f, cmdline, short_summary):
+ error_message=cmdline+" did not work"
+
+ if r != 0 and not with_file:
+- print "---- TESTING " + cmdline.split()[0] + "... FAILED(" + error_message +") !"
++ print("---- TESTING " + cmdline.split()[0] + "... FAILED(" + error_message +") !")
+ for line in pipe.readlines():
+ f.write(str(line))
+ elif r != 0 and with_file and not short_summary:
+- print "---- WARNING: please check that you have the LAPACK output : "+cmdline+"!"
+- print "---- WARNING: with the option -r, we can run the LAPACK testing for you"
++ print("---- WARNING: please check that you have the LAPACK output : "+cmdline+"!")
++ print("---- WARNING: with the option -r, we can run the LAPACK testing for you")
+ # print "---- "+error_message
+ else:
+ for line in pipe.readlines():
+- f.write(str(line))
+- words_in_line=line.split()
+- if (line.find("run")!=-1):
+-# print line
+- whereisrun=words_in_line.index("run)")
+- nb_test_run+=int(words_in_line[whereisrun-2])
+- if (line.find("out of")!=-1):
+- if (short_summary==0): print line,
+- whereisout= words_in_line.index("out")
+- nb_test_fail+=int(words_in_line[whereisout-1])
+- if (line.find("illegal")!=-1):
+- if (short_summary==0):print line,
+- nb_test_illegal+=1
+- if (line.find(" INFO")!=-1):
+- if (short_summary==0):print line,
+- nb_test_info+=1
+- if (with_file==1):
+- pipe.close()
+-
++ f.write(str(line))
++ words_in_line=line.split()
++ if (line.find("run")!=-1):
++# print line
++ whereisrun=words_in_line.index("run)")
++ nb_test_run+=int(words_in_line[whereisrun-2])
++ if (line.find("out of")!=-1):
++ if (short_summary==0): print(line),
++ whereisout= words_in_line.index("out")
++ nb_test_fail+=int(words_in_line[whereisout-1])
++ if (line.find("illegal")!=-1):
++ if (short_summary==0):print(line),
++ nb_test_illegal+=1
++ if (line.find(" INFO")!=-1):
++ if (short_summary==0):print(line),
++ nb_test_info+=1
++ if (with_file==1):
++ pipe.close()
++
+ f.flush();
+
+ return [nb_test_run,nb_test_fail,nb_test_illegal,nb_test_info]
+@@ -161,10 +161,10 @@ except IOError:
+ f = sys.stdout
+
+ if (short_summary==0):
+- print " "
+- print "---------------- Testing LAPACK Routines ----------------"
+- print " "
+- print "-- Detailed results are stored in", filename
++ print(" ")
++ print("---------------- Testing LAPACK Routines ----------------")
++ print(" ")
++ print("-- Detailed results are stored in", filename)
+
+ dtypes = (
+ ("s", "d", "c", "z"),
+@@ -211,9 +211,9 @@ for dtype in range_prec:
+ name = dtypes[1][dtype]
+
+ if (short_summary==0):
+- print " "
+- print "------------------------- %s ------------------------" % name
+- print " "
++ print(" ")
++ print("------------------------- %s ------------------------" % name)
++ print(" ")
+ sys.stdout.flush()
+
+
+@@ -260,8 +260,8 @@ for dtype in range_prec:
+ # EIG TESTS
+ cmdbase="xeigtst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out"
+ if (not just_errors and not short_summary):
+- print "--> Testing "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]"
+- # Run the process: either to read the file or run the LAPACK testing
++ print("--> Testing "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]")
++ # Run the process: either to read the file or run the LAPACK testing
+ nb_test = run_summary_test(f, cmdbase, short_summary)
+ list_results[0][dtype]+=nb_test[0]
+ list_results[1][dtype]+=nb_test[1]
+@@ -271,21 +271,21 @@ for dtype in range_prec:
+
+ if (not short_summary):
+ if (nb_test[0]>0 and just_errors==0):
+- print "--> Tests passed: "+str(nb_test[0])
++ print("--> Tests passed: "+str(nb_test[0]))
+ if (nb_test[1]>0):
+- print "--> Tests failing to pass the threshold: "+str(nb_test[1])
++ print("--> Tests failing to pass the threshold: "+str(nb_test[1]))
+ if (nb_test[2]>0):
+- print "--> Illegal Error: "+str(nb_test[2])
++ print("--> Illegal Error: "+str(nb_test[2]))
+ if (nb_test[3]>0):
+- print "--> Info Error: "+str(nb_test[3])
++ print("--> Info Error: "+str(nb_test[3]))
+ if (got_error>0 and just_errors==1):
+- print "ERROR IS LOCATED IN "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]"
+- print ""
++ print("ERROR IS LOCATED IN "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]")
++ print("")
+ if (just_errors==0):
+- print ""
++ print("")
+ # elif (got_error>0):
+-# print dtests[2][dtest]+".out \t"+str(nb_test[1])+"\t"+str(nb_test[2])+"\t"+str(nb_test[3])
+
++# print(dtests[2][dtest]+".out \t"+str(nb_test[1])+"\t"+str(nb_test[2])+"\t"+str(nb_test[3]))
+ sys.stdout.flush()
+ if (list_results[0][dtype] > 0 ):
+ percent_num_error=float(list_results[1][dtype])/float(list_results[0][dtype])*100
+@@ -300,9 +300,9 @@ for dtype in range_prec:
+ list_results[3][4]+=list_results[3][dtype]
+
+ if only_numbers==1:
+- print str(list_results[1][4])+"\n"+str(list_results[2][4]+list_results[3][4])
++ print(str(list_results[1][4])+"\n"+str(list_results[2][4]+list_results[3][4]))
+ else:
+- print summary
++ print(summary)
+ if (list_results[0][4] > 0 ):
+ percent_num_error=float(list_results[1][4])/float(list_results[0][4])*100
+ percent_error=float(list_results[2][4]+list_results[3][4])/float(list_results[0][4])*100
+@@ -310,9 +310,9 @@ else:
+ percent_num_error=0
+ percent_error=0
+ if (prec=='x'):
+- print "--> ALL PRECISIONS\t"+str(list_results[0][4])+"\t\t"+str(list_results[1][4])+"\t("+"%.3f" % percent_num_error+"%)\t"+str(list_results[2][4]+list_results[3][4])+"\t("+"%.3f" % percent_error+"%)\t""\n"
++ print("--> ALL PRECISIONS\t"+str(list_results[0][4])+"\t\t"+str(list_results[1][4])+"\t("+"%.3f" % percent_num_error+"%)\t"+str(list_results[2][4]+list_results[3][4])+"\t("+"%.3f" % percent_error+"%)\t""\n")
+ if list_results[0][4] == 0:
+- print "NO TESTS WERE ANALYZED, please use the -r option to run the LAPACK TESTING"
++ print("NO TESTS WERE ANALYZED, please use the -r option to run the LAPACK TESTING")
+
+ # This may close the sys.stdout stream, so make it the last statement
+ f.close()
+--
+2.53.0
+
diff --git a/dev-cpp/eigen/files/eigen-5.0.1-make-static-libs-optional.patch b/dev-cpp/eigen/files/eigen-5.0.1-make-static-libs-optional.patch
new file mode 100644
index 000000000000..63272d4a82d8
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-5.0.1-make-static-libs-optional.patch
@@ -0,0 +1,61 @@
+From 9ddec05248d0084c4bfe737fa9ab3cf61f3ecd4a Mon Sep 17 00:00:00 2001
+From: Paul Zander <negril.nx+gentoo@gmail.com>
+Date: Thu, 12 Mar 2026 16:38:02 +0100
+Subject: make static libs optional
+
+Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
+
+diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt
+index 2bd498a11..0b605cc9e 100644
+--- a/blas/CMakeLists.txt
++++ b/blas/CMakeLists.txt
+@@ -15,8 +15,10 @@ set(EigenBlas_SRCS single.cpp double.cpp complex_single.cpp complex_double.cpp
+
+ set(EIGEN_BLAS_TARGETS "")
+
++if (EIGEN_BUILD_STATIC_LIBS)
+ add_library(eigen_blas_static STATIC ${EigenBlas_SRCS})
+ list(APPEND EIGEN_BLAS_TARGETS eigen_blas_static)
++endif()
+
+ if (EIGEN_BUILD_SHARED_LIBS)
+ add_library(eigen_blas SHARED ${EigenBlas_SRCS} "eigen_blas.def")
+@@ -34,7 +36,9 @@ foreach(target IN LISTS EIGEN_BLAS_TARGETS)
+
+ add_dependencies(blas ${target})
+ include(GNUInstallDirs)
++ if (NOT EIGEN_INSTALL_STATIC_LIBS AND NOT ${target} EQUAL eigen_blas_static)
+ install(TARGETS ${target})
++ endif()
+ endforeach()
+
+ if(EIGEN_BUILD_TESTING)
+diff --git a/lapack/CMakeLists.txt b/lapack/CMakeLists.txt
+index f98f77afc..4ea553b56 100644
+--- a/lapack/CMakeLists.txt
++++ b/lapack/CMakeLists.txt
+@@ -101,9 +101,11 @@ endif()
+
+ set(EIGEN_LAPACK_TARGETS "")
+
++if (EIGEN_BUILD_STATIC_LIBS)
+ add_library(eigen_lapack_static STATIC ${EigenLapack_SRCS} ${ReferenceLapack_SRCS})
+ target_link_libraries(eigen_lapack_static eigen_blas_static)
+ list(APPEND EIGEN_LAPACK_TARGETS eigen_lapack_static)
++endif()
+
+ if (EIGEN_BUILD_SHARED_LIBS)
+ add_library(eigen_lapack SHARED ${EigenLapack_SRCS} ${EIGEN_LAPACK_DEF})
+@@ -123,7 +125,9 @@ foreach(target IN LISTS EIGEN_LAPACK_TARGETS)
+ target_link_libraries(${target} Eigen3::Eigen)
+ add_dependencies(lapack ${target})
+ include(GNUInstallDirs)
++ if (NOT EIGEN_INSTALL_STATIC_LIBS AND NOT ${target} EQUAL eigen_lapack_static)
+ install(TARGETS ${target})
++ endif()
+ endforeach()
+
+
+--
+2.53.0
+
diff --git a/dev-cpp/eigen/files/eigen-9999-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch b/dev-cpp/eigen/files/eigen-9999-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch
new file mode 100644
index 000000000000..0d762191009c
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-9999-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch
@@ -0,0 +1,29 @@
+From f14dfe5022870966d0d888651f0d4f5b3af5f25c Mon Sep 17 00:00:00 2001
+From: Paul Zander <negril.nx+gentoo@gmail.com>
+Date: Mon, 22 Dec 2025 17:19:51 +0100
+Subject: Do not show deprecated CUDA device properties for CUDA-13
+
+Fixes: 9e5714b93b3a0d7848e72db5fa2b58decaa60297
+Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
+
+diff --git a/test/gpu_common.h b/test/gpu_common.h
+index 8c7049b17..f47742079 100644
+--- a/test/gpu_common.h
++++ b/test/gpu_common.h
+@@ -153,7 +153,13 @@ void ei_test_init_gpu() {
+ std::cout << " warpSize: " << deviceProp.warpSize << "\n";
+ std::cout << " regsPerBlock: " << deviceProp.regsPerBlock << "\n";
+ std::cout << " concurrentKernels: " << deviceProp.concurrentKernels << "\n";
++#if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER < 130000
++ std::cout << " clockRate: " << deviceProp.clockRate << "\n";
++#endif
+ std::cout << " canMapHostMemory: " << deviceProp.canMapHostMemory << "\n";
++#if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER < 130000
++ std::cout << " computeMode: " << deviceProp.computeMode << "\n";
++#endif
+ }
+
+ #endif // EIGEN_TEST_GPU_COMMON_H
+--
+2.53.0
+
diff --git a/dev-cpp/eigen/files/eigen-9999-product_threaded_dont_parallelize.patch b/dev-cpp/eigen/files/eigen-9999-product_threaded_dont_parallelize.patch
new file mode 100644
index 000000000000..4153896b3933
--- /dev/null
+++ b/dev-cpp/eigen/files/eigen-9999-product_threaded_dont_parallelize.patch
@@ -0,0 +1,22 @@
+From 056b77036b4c97fee25bbd7a747e55c75c79cd48 Mon Sep 17 00:00:00 2001
+From: Paul Zander <negril.nx+gentoo@gmail.com>
+Date: Tue, 23 Sep 2025 00:40:14 +0200
+Subject: [PATCH] product_threaded don't parallelize
+
+Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
+
+diff --git a/test/product_threaded.cpp b/test/product_threaded.cpp
+index 1782c28..85c2615 100644
+--- a/test/product_threaded.cpp
++++ b/test/product_threaded.cpp
+@@ -8,6 +8,7 @@
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ // SPDX-License-Identifier: MPL-2.0
+
++#define EIGEN_DONT_PARALLELIZE
+ #define EIGEN_GEMM_THREADPOOL
+ #include "main.h"
+
+--
+2.51.0
+