diff --git a/deps_src/eigen/CMakeLists.txt b/deps_src/eigen/CMakeLists.txt index b534a55d825..c0cb27d3ae2 100644 --- a/deps_src/eigen/CMakeLists.txt +++ b/deps_src/eigen/CMakeLists.txt @@ -1,12 +1,36 @@ cmake_minimum_required(VERSION 3.13) project(eigen) -# Use the pre-built Eigen from deps/ (Eigen3Config.cmake is installed there via CMAKE_PREFIX_PATH). -# The bundled headers in this directory are an older version and must not be used directly, -# as libigl and admesh require Eigen3::Eigen with Eigen 3.4+ features (e.g. Eigen::all). -find_package(Eigen3 REQUIRED NO_MODULE) +# Try to find the pre-built Eigen3 installed by deps/ CMakeLists (Eigen 5.x). +# This must succeed: libigl and admesh use Eigen 3.4+ features (e.g. Eigen::all). +find_package(Eigen3 CONFIG QUIET) -# Provide a plain "eigen" alias for any code that links to the unnamespaced target. +if(Eigen3_FOUND OR TARGET Eigen3::Eigen) + message(STATUS "deps_src/eigen: using pre-built Eigen3 from CMAKE_PREFIX_PATH") +else() + # Fall back: construct the include path from the known deps install location. + # CMAKE_PREFIX_PATH points to deps/build/OrcaSlicer_dep/usr/local; + # Eigen installs its headers under /include/eigen3. + set(_eigen_include "") + foreach(_prefix ${CMAKE_PREFIX_PATH}) + if(EXISTS "${_prefix}/include/eigen3") + set(_eigen_include "${_prefix}/include/eigen3") + break() + endif() + endforeach() + + if(_eigen_include) + message(STATUS "deps_src/eigen: using eigen3 headers from ${_eigen_include}") + add_library(Eigen3::Eigen INTERFACE IMPORTED GLOBAL) + set_target_properties(Eigen3::Eigen PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_eigen_include}") + else() + message(FATAL_ERROR "deps_src/eigen: could not locate Eigen3 headers. " + "Ensure deps/ has been built first (cmake --build deps/build).") + endif() +endif() + +# Provide unnamespaced "eigen" alias for targets that link against it directly. if(NOT TARGET eigen) add_library(eigen INTERFACE) target_link_libraries(eigen INTERFACE Eigen3::Eigen)