Bug 2404135

Summary: eigen3 was updated to 5.0.0 without coordination, causing many FTBFS issues
Product: [Fedora] Fedora Reporter: Ben Beasley <code>
Component: eigen3Assignee: Sandro Mani <manisandro>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: rawhideCC: adelton, manisandro, sergio.pasra
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: ---
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2026-03-08 09:22:25 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Ben Beasley 2025-10-15 09:52:00 UTC
The eigen3 package was updated to 5.0.0 in Rawhide without advance coordination, and many of the 65 packages that depend directly on it now fail to build from source.

This was a major-version upgrade with documented breaking changes, https://gitlab.com/libeigen/eigen/-/releases/5.0.0#breaking-changes. Even though this is a header-only library, so dependent packages do not have to be rebuilt, I think it should have been announced and coordinated ahead of time in accordance with the spirit of https://docs.fedoraproject.org/en-US/fesco/Updates_Policy/#_rawhide.

I tried an *ex post facto* impact check in https://copr.fedorainfracloud.org/coprs/music/eigen3/packages/, and I found the following kinds of issues.

CMake build system checks for version 3.x, rejects 5.x (intentionally or due to brittle/defective version-checking):

- ceres-solver
- gdl
- highfive
- krita
- mrchem
- openms
- pagmo2
- prusa-slicer
- step
- votca
- wivern

Build system fails to detect new include path (#include <Eigen/Something> fails without -I/usr/bin/eigen3, build system does not use pkgconf or similar):

- katago
- libsurvive
- luminance-hdr (I already fixed this one)
- phd2

Package is compiled as C++11, but Eigen3 5.x requires at least C++14:

- bcd
- guitarix
- python-python-fcl
- spectra

Other kinds of regressions:

- onnxruntime:

In file included from /usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/Core:25,
                 from /usr/include/eigen3/unsupported/Eigen/CXX11/Tensor:14,
                 from /builddir/build/BUILD/onnxruntime-1.20.1-build/onnxruntime-1.20.1/include/onnxruntime/core/common/eigen_common_wrapper.h:70,
                 from /builddir/build/BUILD/onnxruntime-1.20.1-build/onnxruntime-1.20.1/onnxruntime/core/common/threadpool.cc:22:
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:48:73: error: use of ‘std::hardware_destructive_interference_size’ [-Werror=interference-size]
   48 | #define EIGEN_ALIGN_TO_AVOID_FALSE_SHARING EIGEN_ALIGN_TO_BOUNDARY(std::hardware_destructive_interference_size)
      |                                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:37:44: note: in definition of macro ‘EIGEN_ALIGN_TO_BOUNDARY’
   37 | #define EIGEN_ALIGN_TO_BOUNDARY(n) alignas(n)
      |                                            ^
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/ThreadPool/EventCount.h:193:5: note: in expansion of macro ‘EIGEN_ALIGN_TO_AVOID_FALSE_SHARING’
  193 |     EIGEN_ALIGN_TO_AVOID_FALSE_SHARING std::atomic<uint64_t> next{kStackMask};
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:48:73: note: its value can vary between compiler versions or with different ‘-mtune’ or ‘-mcpu’ flags
   48 | #define EIGEN_ALIGN_TO_AVOID_FALSE_SHARING EIGEN_ALIGN_TO_BOUNDARY(std::hardware_destructive_interference_size)
      |                                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:37:44: note: in definition of macro ‘EIGEN_ALIGN_TO_BOUNDARY’
   37 | #define EIGEN_ALIGN_TO_BOUNDARY(n) alignas(n)
      |                                            ^
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/ThreadPool/EventCount.h:193:5: note: in expansion of macro ‘EIGEN_ALIGN_TO_AVOID_FALSE_SHARING’
  193 |     EIGEN_ALIGN_TO_AVOID_FALSE_SHARING std::atomic<uint64_t> next{kStackMask};
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:48:73: note: if this use is part of a public ABI, change it to instead use a constant variable you define
   48 | #define EIGEN_ALIGN_TO_AVOID_FALSE_SHARING EIGEN_ALIGN_TO_BOUNDARY(std::hardware_destructive_interference_size)
      |                                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:37:44: note: in definition of macro ‘EIGEN_ALIGN_TO_BOUNDARY’
   37 | #define EIGEN_ALIGN_TO_BOUNDARY(n) alignas(n)
      |                                            ^
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/ThreadPool/EventCount.h:193:5: note: in expansion of macro ‘EIGEN_ALIGN_TO_AVOID_FALSE_SHARING’
  193 |     EIGEN_ALIGN_TO_AVOID_FALSE_SHARING std::atomic<uint64_t> next{kStackMask};
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:48:73: note: the default value for the current CPU tuning is 64 bytes
   48 | #define EIGEN_ALIGN_TO_AVOID_FALSE_SHARING EIGEN_ALIGN_TO_BOUNDARY(std::hardware_destructive_interference_size)
      |                                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:37:44: note: in definition of macro ‘EIGEN_ALIGN_TO_BOUNDARY’
   37 | #define EIGEN_ALIGN_TO_BOUNDARY(n) alignas(n)
      |                                            ^
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/ThreadPool/EventCount.h:193:5: note: in expansion of macro ‘EIGEN_ALIGN_TO_AVOID_FALSE_SHARING’
  193 |     EIGEN_ALIGN_TO_AVOID_FALSE_SHARING std::atomic<uint64_t> next{kStackMask};
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:48:73: note: you can stabilize this value with ‘--param hardware_destructive_interference_size=64’, or disable this warning with ‘-Wno-interference-size’
   48 | #define EIGEN_ALIGN_TO_AVOID_FALSE_SHARING EIGEN_ALIGN_TO_BOUNDARY(std::hardware_destructive_interference_size)
      |                                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:37:44: note: in definition of macro ‘EIGEN_ALIGN_TO_BOUNDARY’
   37 | #define EIGEN_ALIGN_TO_BOUNDARY(n) alignas(n)
      |                                            ^
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/ThreadPool/EventCount.h:193:5: note: in expansion of macro ‘EIGEN_ALIGN_TO_AVOID_FALSE_SHARING’
  193 |     EIGEN_ALIGN_TO_AVOID_FALSE_SHARING std::atomic<uint64_t> next{kStackMask};
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:48:73: error: use of ‘std::hardware_destructive_interference_size’ [-Werror=interference-size]
   48 | #define EIGEN_ALIGN_TO_AVOID_FALSE_SHARING EIGEN_ALIGN_TO_BOUNDARY(std::hardware_destructive_interference_size)
      |                                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:37:44: note: in definition of macro ‘EIGEN_ALIGN_TO_BOUNDARY’
   37 | #define EIGEN_ALIGN_TO_BOUNDARY(n) alignas(n)
      |                                            ^
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/ThreadPool/RunQueue.h:176:3: note: in expansion of macro ‘EIGEN_ALIGN_TO_AVOID_FALSE_SHARING’
  176 |   EIGEN_ALIGN_TO_AVOID_FALSE_SHARING std::atomic<unsigned> front_;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:48:73: error: use of ‘std::hardware_destructive_interference_size’ [-Werror=interference-size]
   48 | #define EIGEN_ALIGN_TO_AVOID_FALSE_SHARING EIGEN_ALIGN_TO_BOUNDARY(std::hardware_destructive_interference_size)
      |                                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:37:44: note: in definition of macro ‘EIGEN_ALIGN_TO_BOUNDARY’
   37 | #define EIGEN_ALIGN_TO_BOUNDARY(n) alignas(n)
      |                                            ^
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/ThreadPool/RunQueue.h:177:3: note: in expansion of macro ‘EIGEN_ALIGN_TO_AVOID_FALSE_SHARING’
  177 |   EIGEN_ALIGN_TO_AVOID_FALSE_SHARING std::atomic<unsigned> back_;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:48:73: error: use of ‘std::hardware_destructive_interference_size’ [-Werror=interference-size]
   48 | #define EIGEN_ALIGN_TO_AVOID_FALSE_SHARING EIGEN_ALIGN_TO_BOUNDARY(std::hardware_destructive_interference_size)
      |                                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/Core/util/ConfigureVectorization.h:37:44: note: in definition of macro ‘EIGEN_ALIGN_TO_BOUNDARY’
   37 | #define EIGEN_ALIGN_TO_BOUNDARY(n) alignas(n)
      |                                            ^
/usr/include/eigen3/unsupported/Eigen/CXX11/../../../Eigen/src/ThreadPool/RunQueue.h:180:3: note: in expansion of macro ‘EIGEN_ALIGN_TO_AVOID_FALSE_SHARING’
  180 |   EIGEN_ALIGN_TO_AVOID_FALSE_SHARING Elem array_[kSize];
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- opencv, on i686 only:

In file included from /usr/include/eigen3/Eigen/Core:235,
                 from /builddir/build/BUILD/opencv-4.11.0-build/opencv-4.11.0/modules/core/include/opencv2/core/private.hpp:70,
                 from /builddir/build/BUILD/opencv-4.11.0-build/opencv-4.11.0/modules/core/src/precomp.hpp:59,
                 from /builddir/build/BUILD/opencv-4.11.0-build/opencv-4.11.0/redhat-linux-build/modules/core/mathfuncs_core.avx.cpp:2:
/usr/include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h: In function ‘__m128i Eigen::internal::segment_mask_4x8(Eigen::Index, Eigen::Index)’:
/usr/include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h:2837:10: error: ‘_mm_cvtsi64_si128’ was not declared in this scope; did you mean ‘_mm_cvtsi64_si32’?
 2837 |   return _mm_cvtsi64_si128(mask);
      |          ^~~~~~~~~~~~~~~~~
      |          _mm_cvtsi64_si32
/usr/include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h: In function ‘__m128i Eigen::internal::segment_mask_8x8(Eigen::Index, Eigen::Index)’:
/usr/include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h:2853:10: error: ‘_mm_cvtsi64_si128’ was not declared in this scope; did you mean ‘_mm_cvtsi64_si32’?
 2853 |   return _mm_cvtsi64_si128(mask);
      |          ^~~~~~~~~~~~~~~~~
      |          _mm_cvtsi64_si32

Pre-existing / unrelated FTBFS:

- avogadro2-libs
- calligra
- cloudcompare
- digikam
- dolfin
- gmsh
- kalzium
- kstars
- mrcpp
- pcl
- psi4

Some of the packages in the last list may also turn out to have problems with this update, once the pre-existing issues are resolved. It’s also possible that there may be a few packages that are impacted via indirect dependencies on eigen3.

Overall, I detected FTBFS regressions attributable to this update in 21 of 65 directly-dependent packages. Please consider filing bugs to make affected maintainers aware of these issues and/or opening PR’s to help fix them.

Reproducible: Always

Comment 1 Sandro Mani 2025-10-15 09:59:55 UTC
Very sorry about this and thanks for the analysis. I'll deal with this ASAP.

Comment 2 Ben Beasley 2025-10-15 10:07:02 UTC
(In reply to Sandro Mani from comment #1)
> Very sorry about this and thanks for the analysis. I'll deal with this ASAP.

Thank you!

Comment 3 Sandro Mani 2026-03-08 09:22:25 UTC
I believe this has since been addressed.

Comment 4 Jan Pazdziora 2026-03-12 15:48:08 UTC
Could you elaborate how the issue was addressed? Attempting to build prusa-slicer with Fedora-packaged eigen3 gives me

CMake Error at CMakeLists.txt:377 (find_package):
  Could not find a configuration file for package "Eigen3" that is compatible
  with requested version "3.3.7".
  The following configuration files were considered but not accepted:
    /usr/share/cmake/eigen3/Eigen3Config.cmake, version: 5.0.1
      The version found is not compatible with the version requested.

I filed https://bugzilla.redhat.com/show_bug.cgi?id=2446967 to prompt a discussion about decoupling eigen3 from eigen in version 5.*.