aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/ceres/0001_cmakelists_fixes.patch
blob: 7e71e7f0f70962023e4f861491403179d501272c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8e49c19..4ea82bc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -292,10 +292,23 @@ if (SUITESPARSE)
   # built with SuiteSparse support.
 
   # Check for SuiteSparse and dependencies.
-  find_package(SuiteSparse 4.5.6 COMPONENTS CHOLMOD SPQR
-    OPTIONAL_COMPONENTS Partition)
+  find_package(CHOLMOD REQUIRED)
+  include(CheckCSourceCompiles)
+  block(SCOPE_FOR VARIABLES)
+  set(CMAKE_REQUIRED_INCLUDES "")
+  set(CMAKE_REQUIRED_LIBRARIES SuiteSparse::CHOLMOD)
+  set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+  check_c_source_compiles([[
+    #include <cholmod.h>
+    #ifndef CHOLMOD_HAS_PARTITION
+    #error "partition not enabled"
+    #endif
+  ]] SuiteSparse_Partition_FOUND)
+  endblock()
+  find_package(SPQR CONFIG REQUIRED)
+  find_package(SuiteSparse NAMES SuiteSparse_config REQUIRED)
   if (SuiteSparse_FOUND)
-    set(SuiteSparse_DEPENDENCY "find_dependency(SuiteSparse ${SuiteSparse_VERSION})")
+    set(SuiteSparse_DEPENDENCY "find_dependency(CHOLMOD CONFIG)\nfind_dependency(SPQR CONFIG)")
     # By default, if all of SuiteSparse's dependencies are found, Ceres is
     # built with SuiteSparse support.
     message("-- Found SuiteSparse ${SuiteSparse_VERSION}, "
@@ -323,13 +336,14 @@ if (NOT SuiteSparse_Partition_FOUND)
 endif (NOT SuiteSparse_Partition_FOUND)
 
 if (EIGENMETIS)
-  find_package (METIS)
+  find_package (METIS NAMES metis REQUIRED)
+  add_library(METIS::METIS ALIAS metis)
   if (METIS_FOUND)
     # Since METIS is a private dependency of Ceres, it requires access to the
     # link-only METIS::METIS target to avoid undefined linker errors in projects
     # relying on Ceres. We do not actually need to propagate anything besides
     # the link libraries (such as include directories.)
-    set(METIS_DEPENDENCY "find_dependency(METIS ${METIS_VERSION})")
+    set(METIS_DEPENDENCY "find_dependency(metis CONFIG)")
     # METIS find module must be installed unless a package config is being used.
     if (NOT METIS_DIR)
       install(FILES ${Ceres_SOURCE_DIR}/cmake/FindMETIS.cmake
@@ -433,7 +447,9 @@ else (MINIGLOG)
   unset(MINIGLOG_MAX_LOG_LEVEL CACHE)
   # Don't search with REQUIRED so that configuration continues if not found and
   # we can output an error messages explaining MINIGLOG option.
-  find_package(Glog)
+  find_package(GLOG NAMES glog REQUIRED)
+  set(FOUND_INSTALLED_GLOG_CMAKE_CONFIGURATION TRUE)
+  set(GLOG_LIBRARIES glog::glog)
   if (NOT GLOG_FOUND)
     message(FATAL_ERROR "Can't find Google Log (glog). Please set either: "
       "glog_DIR (newer CMake built versions of glog) or GLOG_INCLUDE_DIR & "
diff --git a/cmake/CeresConfig.cmake.in b/cmake/CeresConfig.cmake.in
index ceb7e26..a5eb833 100644
--- a/cmake/CeresConfig.cmake.in
+++ b/cmake/CeresConfig.cmake.in
@@ -195,7 +195,7 @@ set(CERES_EIGEN_VERSION @Eigen3_VERSION@)
 # Search quietly to control the timing of the error message if not found. The
 # search should be for an exact match, but for usability reasons do a soft
 # match and reject with an explanation below.
-find_package(Eigen3 ${CERES_EIGEN_VERSION} QUIET)
+find_dependency(Eigen3 CONFIG ${CERES_EIGEN_VERSION})
 if (Eigen3_FOUND)
   if (NOT Eigen3_VERSION VERSION_EQUAL CERES_EIGEN_VERSION)
     # CMake's VERSION check in FIND_PACKAGE() will accept any version >= the
@@ -233,7 +233,7 @@ if (CERES_USES_MINIGLOG)
     "for glog, beware this will likely cause problems if glog is later linked.")
 else(CERES_USES_MINIGLOG)
   if (CERES_GLOG_WAS_BUILT_WITH_CMAKE)
-    find_package(glog ${CERES_GLOG_VERSION} CONFIG QUIET)
+    find_dependency(glog)
     set(GLOG_FOUND ${glog_FOUND})
   else()
     # Version of glog against which Ceres was built was not built with CMake,
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index f9fc241..9f6f25b 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -104,15 +104,14 @@ if (SUITESPARSE AND SuiteSparse_FOUND)
     SuiteSparse::SPQR)
 
   if (SuiteSparse_Partition_FOUND)
-    list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES SuiteSparse::Partition)
   endif (SuiteSparse_Partition_FOUND)
 endif (SUITESPARSE AND SuiteSparse_FOUND)
 
-if (SuiteSparse_Partition_FOUND OR EIGENMETIS)
+if (EIGENMETIS)
   # Define version information for use in Solver::FullReport.
   add_definitions(-DCERES_METIS_VERSION="${METIS_VERSION}")
   list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES METIS::METIS)
-endif (SuiteSparse_Partition_FOUND OR EIGENMETIS)
+endif (EIGENMETIS)
 
 if (ACCELERATESPARSE AND AccelerateSparse_FOUND)
   list(APPEND CERES_LIBRARY_PRIVATE_DEPENDENCIES ${AccelerateSparse_LIBRARIES})
diff --git a/internal/ceres/solver_utils.cc b/internal/ceres/solver_utils.cc
index 3356f3b..35a6109 100644
--- a/internal/ceres/solver_utils.cc
+++ b/internal/ceres/solver_utils.cc
@@ -62,7 +62,7 @@ constexpr char kVersion[] =
   "-suitesparse-(" CERES_SUITESPARSE_VERSION ")"
 #endif
 
-#if !defined(CERES_NO_EIGEN_METIS) || !defined(CERES_NO_CHOLMOD_PARTITION)
+#if !defined(CERES_NO_EIGEN_METIS)
   "-metis-(" CERES_METIS_VERSION ")"
 #endif