From 0f1e69110f3b18c8f2b76026552bb2b157e086a8 Mon Sep 17 00:00:00 2001 From: thysson2701 Date: Tue, 21 Jul 2026 14:33:28 +0200 Subject: [PATCH] fix(build): resolve Eigen3::Eigen via CMAKE_PREFIX_PATH fallback find_package(Eigen3 CONFIG) may not work in static builds where find_package is skipped globally. As fallback, manually create the Eigen3::Eigen IMPORTED target pointing to the eigen3 headers installed by deps/ (under CMAKE_PREFIX_PATH/include/eigen3). This ensures libigl and admesh always get a modern Eigen (5.x) with Eigen::all support. --- deps_src/eigen/CMakeLists.txt | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) 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)