Pass user-specified search hints as HINTS not PATHS.
- As reported as Issue #285, previously we passed user-specified hint
locations as PATHS to find_path/library which means that they are
searched after system locations. Now we pass them as HINTS, which are
searched before system locations.
- Also clean-up FindSuiteSparse to replace repeated code for finding
each component with a common macro.
Change-Id: I20a1f905d929a23037b1d0b7fb7ffe817abaa3e3
diff --git a/cmake/FindCXSparse.cmake b/cmake/FindCXSparse.cmake
index 718042c..798809c 100644
--- a/cmake/FindCXSparse.cmake
+++ b/cmake/FindCXSparse.cmake
@@ -143,8 +143,8 @@
# Search supplied hint directories first if supplied.
find_path(CXSPARSE_INCLUDE_DIR
NAMES cs.h
- PATHS ${CXSPARSE_INCLUDE_DIR_HINTS}
- ${CXSPARSE_CHECK_INCLUDE_DIRS})
+ HINTS ${CXSPARSE_INCLUDE_DIR_HINTS}
+ PATHS ${CXSPARSE_CHECK_INCLUDE_DIRS})
if (NOT CXSPARSE_INCLUDE_DIR OR
NOT EXISTS ${CXSPARSE_INCLUDE_DIR})
cxsparse_report_not_found(
@@ -154,8 +154,8 @@
NOT EXISTS ${CXSPARSE_INCLUDE_DIR})
find_library(CXSPARSE_LIBRARY NAMES cxsparse
- PATHS ${CXSPARSE_LIBRARY_DIR_HINTS}
- ${CXSPARSE_CHECK_LIBRARY_DIRS})
+ HINTS ${CXSPARSE_LIBRARY_DIR_HINTS}
+ PATHS ${CXSPARSE_CHECK_LIBRARY_DIRS})
if (NOT CXSPARSE_LIBRARY OR
NOT EXISTS ${CXSPARSE_LIBRARY})
cxsparse_report_not_found(
diff --git a/cmake/FindEigen.cmake b/cmake/FindEigen.cmake
index 348f043..f6d2664 100644
--- a/cmake/FindEigen.cmake
+++ b/cmake/FindEigen.cmake
@@ -195,8 +195,8 @@
# Search supplied hint directories first if supplied.
find_path(EIGEN_INCLUDE_DIR
NAMES Eigen/Core
- PATHS ${EIGEN_INCLUDE_DIR_HINTS}
- ${EIGEN_CHECK_INCLUDE_DIRS}
+ HINTS ${EIGEN_INCLUDE_DIR_HINTS}
+ PATHS ${EIGEN_CHECK_INCLUDE_DIRS}
PATH_SUFFIXES ${EIGEN_CHECK_PATH_SUFFIXES})
if (NOT EIGEN_INCLUDE_DIR OR
@@ -258,5 +258,6 @@
# Only mark internal variables as advanced if we found Eigen, otherwise
# leave it visible in the standard GUI for the user to set manually.
if (EIGEN_FOUND)
- mark_as_advanced(FORCE EIGEN_INCLUDE_DIR)
+ mark_as_advanced(FORCE EIGEN_INCLUDE_DIR
+ Eigen3_DIR) # Autogenerated by find_package(Eigen3)
endif (EIGEN_FOUND)
diff --git a/cmake/FindGflags.cmake b/cmake/FindGflags.cmake
index 0bd5c56..32c04ea 100644
--- a/cmake/FindGflags.cmake
+++ b/cmake/FindGflags.cmake
@@ -456,8 +456,8 @@
# Search supplied hint directories first if supplied.
find_path(GFLAGS_INCLUDE_DIR
NAMES gflags/gflags.h
- PATHS ${GFLAGS_INCLUDE_DIR_HINTS}
- ${GFLAGS_CHECK_INCLUDE_DIRS}
+ HINTS ${GFLAGS_INCLUDE_DIR_HINTS}
+ PATHS ${GFLAGS_CHECK_INCLUDE_DIRS}
PATH_SUFFIXES ${GFLAGS_CHECK_PATH_SUFFIXES})
if (NOT GFLAGS_INCLUDE_DIR OR
NOT EXISTS ${GFLAGS_INCLUDE_DIR})
@@ -468,8 +468,8 @@
NOT EXISTS ${GFLAGS_INCLUDE_DIR})
find_library(GFLAGS_LIBRARY NAMES gflags
- PATHS ${GFLAGS_LIBRARY_DIR_HINTS}
- ${GFLAGS_CHECK_LIBRARY_DIRS}
+ HINTS ${GFLAGS_LIBRARY_DIR_HINTS}
+ PATHS ${GFLAGS_CHECK_LIBRARY_DIRS}
PATH_SUFFIXES ${GFLAGS_CHECK_LIBRARY_SUFFIXES})
if (NOT GFLAGS_LIBRARY OR
NOT EXISTS ${GFLAGS_LIBRARY})
diff --git a/cmake/FindGlog.cmake b/cmake/FindGlog.cmake
index a11ba2c..979dced 100644
--- a/cmake/FindGlog.cmake
+++ b/cmake/FindGlog.cmake
@@ -260,8 +260,8 @@
# Search supplied hint directories first if supplied.
find_path(GLOG_INCLUDE_DIR
NAMES glog/logging.h
- PATHS ${GLOG_INCLUDE_DIR_HINTS}
- ${GLOG_CHECK_INCLUDE_DIRS}
+ HINTS ${GLOG_INCLUDE_DIR_HINTS}
+ PATHS ${GLOG_CHECK_INCLUDE_DIRS}
PATH_SUFFIXES ${GLOG_CHECK_PATH_SUFFIXES})
if (NOT GLOG_INCLUDE_DIR OR
NOT EXISTS ${GLOG_INCLUDE_DIR})
@@ -272,8 +272,8 @@
NOT EXISTS ${GLOG_INCLUDE_DIR})
find_library(GLOG_LIBRARY NAMES glog
- PATHS ${GLOG_LIBRARY_DIR_HINTS}
- ${GLOG_CHECK_LIBRARY_DIRS}
+ HINTS ${GLOG_LIBRARY_DIR_HINTS}
+ PATHS ${GLOG_CHECK_LIBRARY_DIRS}
PATH_SUFFIXES ${GLOG_CHECK_LIBRARY_SUFFIXES})
if (NOT GLOG_LIBRARY OR
NOT EXISTS ${GLOG_LIBRARY})
diff --git a/cmake/FindSuiteSparse.cmake b/cmake/FindSuiteSparse.cmake
index af1fb1d..db4cc3b 100644
--- a/cmake/FindSuiteSparse.cmake
+++ b/cmake/FindSuiteSparse.cmake
@@ -108,7 +108,9 @@
#
# == Intel Thread Building Blocks (TBB)
# TBB_FOUND
-# TBB_LIBRARIES
+# TBB_LIBRARY
+# TBB_MALLOC_FOUND
+# TBB_MALLOC_LIBRARY
# Reset CALLERS_CMAKE_FIND_LIBRARY_PREFIXES to its value when
# FindSuiteSparse was invoked.
@@ -174,7 +176,6 @@
# directories first if supplied, and search user-installed locations first
# so that we prefer user installs to system installs where both exist.
list(APPEND SUITESPARSE_CHECK_INCLUDE_DIRS
- ${SUITESPARSE_INCLUDE_DIR_HINTS}
/opt/local/include
/opt/local/include/ufsparse # Mac OS X
/usr/local/homebrew/include # Mac OS X
@@ -183,7 +184,6 @@
/usr/include/suitesparse # Ubuntu
/usr/include)
list(APPEND SUITESPARSE_CHECK_LIBRARY_DIRS
- ${SUITESPARSE_LIBRARY_DIR_HINTS}
/opt/local/lib
/opt/local/lib/ufsparse # Mac OS X
/usr/local/homebrew/lib # Mac OS X
@@ -192,6 +192,67 @@
/usr/lib/suitesparse # Ubuntu
/usr/lib)
+# Wrappers to find_path/library that pass the SuiteSparse search hints/paths.
+#
+# suitesparse_find_component(<component> [FILES name1 [name2 ...]]
+# [LIBRARIES name1 [name2 ...]]
+# [REQUIRED])
+macro(suitesparse_find_component COMPONENT)
+ include(CMakeParseArguments)
+ set(OPTIONS REQUIRED)
+ set(MULTI_VALUE_ARGS FILES LIBRARIES)
+ cmake_parse_arguments(SUITESPARSE_FIND_${COMPONENT}
+ "${OPTIONS}" "" "${MULTI_VALUE_ARGS}" ${ARGN})
+
+ if (SUITESPARSE_FIND_${COMPONENT}_REQUIRED)
+ list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS ${COMPONENT}_FOUND)
+ endif()
+
+ set(${COMPONENT}_FOUND TRUE)
+ if (SUITESPARSE_FIND_${COMPONENT}_FILES)
+ find_path(${COMPONENT}_INCLUDE_DIR
+ NAMES ${SUITESPARSE_FIND_${COMPONENT}_FILES}
+ HINTS ${SUITESPARSE_INCLUDE_DIR_HINTS}
+ PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
+ if (${COMPONENT}_INCLUDE_DIR)
+ message(STATUS "Found ${COMPONENT} headers in: "
+ "${${COMPONENT}_INCLUDE_DIR}")
+ mark_as_advanced(${COMPONENT}_INCLUDE_DIR)
+ else()
+ # Specified headers not found.
+ set(${COMPONENT}_FOUND FALSE)
+ if (SUITESPARSE_FIND_${COMPONENT}_REQUIRED)
+ suitesparse_report_not_found(
+ "Did not find ${COMPONENT} header (required SuiteSparse component).")
+ else()
+ message(STATUS "Did not find ${COMPONENT} header (optional "
+ "SuiteSparse component).")
+ endif()
+ endif()
+ endif()
+
+ if (SUITESPARSE_FIND_${COMPONENT}_LIBRARIES)
+ find_library(${COMPONENT}_LIBRARY
+ NAMES ${SUITESPARSE_FIND_${COMPONENT}_LIBRARIES}
+ HINTS ${SUITESPARSE_LIBRARY_DIR_HINTS}
+ PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
+ if (${COMPONENT}_LIBRARY)
+ message(STATUS "Found ${COMPONENT} library: ${${COMPONENT}_LIBRARY}")
+ mark_as_advanced(${COMPONENT}_LIBRARY)
+ else ()
+ # Specified libraries not found.
+ set(${COMPONENT}_FOUND FALSE)
+ if (SUITESPARSE_FIND_${COMPONENT}_REQUIRED)
+ suitesparse_report_not_found(
+ "Did not find ${COMPONENT} library (required SuiteSparse component).")
+ else()
+ message(STATUS "Did not find ${COMPONENT} library (optional SuiteSparse "
+ "dependency)")
+ endif()
+ endif()
+ endif()
+endmacro()
+
# Given the number of components of SuiteSparse, and to ensure that the
# automatic failure message generated by FindPackageHandleStandardArgs()
# when not all required components are found is helpful, we maintain a list
@@ -214,258 +275,66 @@
endif (NOT LAPACK_FOUND)
list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS LAPACK_FOUND)
-# AMD.
-set(AMD_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS AMD_FOUND)
-find_library(AMD_LIBRARY NAMES amd
- PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${AMD_LIBRARY})
- message(STATUS "Found AMD library: ${AMD_LIBRARY}")
-else (EXISTS ${AMD_LIBRARY})
- suitesparse_report_not_found(
- "Did not find AMD library (required SuiteSparse component).")
- set(AMD_FOUND FALSE)
-endif (EXISTS ${AMD_LIBRARY})
-mark_as_advanced(AMD_LIBRARY)
-
-find_path(AMD_INCLUDE_DIR NAMES amd.h
- PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${AMD_INCLUDE_DIR})
- message(STATUS "Found AMD header in: ${AMD_INCLUDE_DIR}")
-else (EXISTS ${AMD_INCLUDE_DIR})
- suitesparse_report_not_found(
- "Did not find AMD header (required SuiteSparse component).")
- set(AMD_FOUND FALSE)
-endif (EXISTS ${AMD_INCLUDE_DIR})
-mark_as_advanced(AMD_INCLUDE_DIR)
-
-# CAMD.
-set(CAMD_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CAMD_FOUND)
-find_library(CAMD_LIBRARY NAMES camd
- PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${CAMD_LIBRARY})
- message(STATUS "Found CAMD library: ${CAMD_LIBRARY}")
-else (EXISTS ${CAMD_LIBRARY})
- suitesparse_report_not_found(
- "Did not find CAMD library (required SuiteSparse component).")
- set(CAMD_FOUND FALSE)
-endif (EXISTS ${CAMD_LIBRARY})
-mark_as_advanced(CAMD_LIBRARY)
-
-find_path(CAMD_INCLUDE_DIR NAMES camd.h
- PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${CAMD_INCLUDE_DIR})
- message(STATUS "Found CAMD header in: ${CAMD_INCLUDE_DIR}")
-else (EXISTS ${CAMD_INCLUDE_DIR})
- suitesparse_report_not_found(
- "Did not find CAMD header (required SuiteSparse component).")
- set(CAMD_FOUND FALSE)
-endif (EXISTS ${CAMD_INCLUDE_DIR})
-mark_as_advanced(CAMD_INCLUDE_DIR)
-
-# COLAMD.
-set(COLAMD_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS COLAMD_FOUND)
-find_library(COLAMD_LIBRARY NAMES colamd
- PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${COLAMD_LIBRARY})
- message(STATUS "Found COLAMD library: ${COLAMD_LIBRARY}")
-else (EXISTS ${COLAMD_LIBRARY})
- suitesparse_report_not_found(
- "Did not find COLAMD library (required SuiteSparse component).")
- set(COLAMD_FOUND FALSE)
-endif (EXISTS ${COLAMD_LIBRARY})
-mark_as_advanced(COLAMD_LIBRARY)
-
-find_path(COLAMD_INCLUDE_DIR NAMES colamd.h
- PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${COLAMD_INCLUDE_DIR})
- message(STATUS "Found COLAMD header in: ${COLAMD_INCLUDE_DIR}")
-else (EXISTS ${COLAMD_INCLUDE_DIR})
- suitesparse_report_not_found(
- "Did not find COLAMD header (required SuiteSparse component).")
- set(COLAMD_FOUND FALSE)
-endif (EXISTS ${COLAMD_INCLUDE_DIR})
-mark_as_advanced(COLAMD_INCLUDE_DIR)
-
-# CCOLAMD.
-set(CCOLAMD_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CCOLAMD_FOUND)
-find_library(CCOLAMD_LIBRARY NAMES ccolamd
- PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${CCOLAMD_LIBRARY})
- message(STATUS "Found CCOLAMD library: ${CCOLAMD_LIBRARY}")
-else (EXISTS ${CCOLAMD_LIBRARY})
- suitesparse_report_not_found(
- "Did not find CCOLAMD library (required SuiteSparse component).")
- set(CCOLAMD_FOUND FALSE)
-endif (EXISTS ${CCOLAMD_LIBRARY})
-mark_as_advanced(CCOLAMD_LIBRARY)
-
-find_path(CCOLAMD_INCLUDE_DIR NAMES ccolamd.h
- PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${CCOLAMD_INCLUDE_DIR})
- message(STATUS "Found CCOLAMD header in: ${CCOLAMD_INCLUDE_DIR}")
-else (EXISTS ${CCOLAMD_INCLUDE_DIR})
- suitesparse_report_not_found(
- "Did not find CCOLAMD header (required SuiteSparse component).")
- set(CCOLAMD_FOUND FALSE)
-endif (EXISTS ${CCOLAMD_INCLUDE_DIR})
-mark_as_advanced(CCOLAMD_INCLUDE_DIR)
-
-# CHOLMOD.
-set(CHOLMOD_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CHOLMOD_FOUND)
-find_library(CHOLMOD_LIBRARY NAMES cholmod
- PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${CHOLMOD_LIBRARY})
- message(STATUS "Found CHOLMOD library: ${CHOLMOD_LIBRARY}")
-else (EXISTS ${CHOLMOD_LIBRARY})
- suitesparse_report_not_found(
- "Did not find CHOLMOD library (required SuiteSparse component).")
- set(CHOLMOD_FOUND FALSE)
-endif (EXISTS ${CHOLMOD_LIBRARY})
-mark_as_advanced(CHOLMOD_LIBRARY)
-
-find_path(CHOLMOD_INCLUDE_DIR NAMES cholmod.h
- PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${CHOLMOD_INCLUDE_DIR})
- message(STATUS "Found CHOLMOD header in: ${CHOLMOD_INCLUDE_DIR}")
-else (EXISTS ${CHOLMOD_INCLUDE_DIR})
- suitesparse_report_not_found(
- "Did not find CHOLMOD header (required SuiteSparse component).")
- set(CHOLMOD_FOUND FALSE)
-endif (EXISTS ${CHOLMOD_INCLUDE_DIR})
-mark_as_advanced(CHOLMOD_INCLUDE_DIR)
-
-# SuiteSparseQR.
-set(SUITESPARSEQR_FOUND TRUE)
-list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS SUITESPARSEQR_FOUND)
-find_library(SUITESPARSEQR_LIBRARY NAMES spqr
- PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${SUITESPARSEQR_LIBRARY})
- message(STATUS "Found SuiteSparseQR library: ${SUITESPARSEQR_LIBRARY}")
-else (EXISTS ${SUITESPARSEQR_LIBRARY})
- suitesparse_report_not_found(
- "Did not find SuiteSparseQR library (required SuiteSparse component).")
- set(SUITESPARSEQR_FOUND FALSE)
-endif (EXISTS ${SUITESPARSEQR_LIBRARY})
-mark_as_advanced(SUITESPARSEQR_LIBRARY)
-
-find_path(SUITESPARSEQR_INCLUDE_DIR NAMES SuiteSparseQR.hpp
- PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
- message(STATUS "Found SuiteSparseQR header in: ${SUITESPARSEQR_INCLUDE_DIR}")
-else (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
- suitesparse_report_not_found(
- "Did not find SUITESPARSEQR header (required SuiteSparse component).")
- set(SUITESPARSEQR_FOUND FALSE)
-endif (EXISTS ${SUITESPARSEQR_INCLUDE_DIR})
-mark_as_advanced(SUITESPARSEQR_INCLUDE_DIR)
-
+suitesparse_find_component(AMD REQUIRED FILES amd.h LIBRARIES amd)
+suitesparse_find_component(CAMD REQUIRED FILES camd.h LIBRARIES camd)
+suitesparse_find_component(COLAMD REQUIRED FILES colamd.h LIBRARIES colamd)
+suitesparse_find_component(COLAMD REQUIRED FILES ccolamd.h LIBRARIES ccolamd)
+suitesparse_find_component(CHOLMOD REQUIRED FILES cholmod.h LIBRARIES cholmod)
+suitesparse_find_component(
+ SUITESPARSEQR REQUIRED FILES SuiteSparseQR.hpp LIBRARIES spqr)
if (SUITESPARSEQR_FOUND)
# SuiteSparseQR may be compiled with Intel Threading Building Blocks,
# we assume that if TBB is installed, SuiteSparseQR was compiled with
# support for it, this will do no harm if it wasn't.
- set(TBB_FOUND TRUE)
- find_library(TBB_LIBRARIES NAMES tbb
- PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
- if (EXISTS ${TBB_LIBRARIES})
- message(STATUS "Found Intel Thread Building Blocks (TBB) library: "
- "${TBB_LIBRARIES}, assuming SuiteSparseQR was compiled with TBB.")
- else (EXISTS ${TBB_LIBRARIES})
- message(STATUS "Did not find Intel TBB library, assuming SuiteSparseQR was "
- "not compiled with TBB.")
- set(TBB_FOUND FALSE)
- endif (EXISTS ${TBB_LIBRARIES})
- mark_as_advanced(TBB_LIBRARIES)
-
+ suitesparse_find_component(TBB LIBRARIES tbb)
if (TBB_FOUND)
- find_library(TBB_MALLOC_LIB NAMES tbbmalloc
- PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
- if (EXISTS ${TBB_MALLOC_LIB})
+ message(STATUS "Found Intel Thread Building Blocks (TBB) library: "
+ "${TBB_LIBRARY}, assuming SuiteSparseQR was compiled with TBB.")
+ suitesparse_find_component(TBB_MALLOC LIBRARIES tbbmalloc)
+ if (TBB_MALLOC_FOUND)
message(STATUS "Found Intel Thread Building Blocks (TBB) Malloc library: "
- "${TBB_MALLOC_LIB}")
- # Append TBB malloc library to TBB libraries list whilst retaining
- # any CMake generated help string (cache variable).
- list(APPEND TBB_LIBRARIES ${TBB_MALLOC_LIB})
- get_property(HELP_STRING CACHE TBB_LIBRARIES PROPERTY HELPSTRING)
- set(TBB_LIBRARIES "${TBB_LIBRARIES}" CACHE STRING "${HELP_STRING}")
-
+ "${TBB_MALLOC_LIBRARY}")
# Add the TBB libraries to the SuiteSparseQR libraries (the only
# libraries to optionally depend on TBB).
- list(APPEND SUITESPARSEQR_LIBRARY ${TBB_LIBRARIES})
-
- else (EXISTS ${TBB_MALLOC_LIB})
- # If we cannot find all required TBB components do not include it as
- # a dependency.
+ list(APPEND SUITESPARSEQR_LIBRARY ${TBB_LIBRARY} ${TBB_MALLOC_LIBRARY})
+ else()
message(STATUS "Did not find Intel Thread Building Blocks (TBB) Malloc "
"Library, discarding TBB as a dependency.")
- set(TBB_FOUND FALSE)
- endif (EXISTS ${TBB_MALLOC_LIB})
- mark_as_advanced(TBB_MALLOC_LIB)
- endif (TBB_FOUND)
+ endif()
+ else()
+ message(STATUS "Did not find Intel TBB library, assuming SuiteSparseQR was "
+ "not compiled with TBB.")
+ endif()
endif(SUITESPARSEQR_FOUND)
# UFconfig / SuiteSparse_config.
#
# If SuiteSparse version is >= 4 then SuiteSparse_config is required.
# For SuiteSparse 3, UFconfig.h is required.
-find_library(SUITESPARSE_CONFIG_LIBRARY NAMES suitesparseconfig
- PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${SUITESPARSE_CONFIG_LIBRARY})
- message(STATUS "Found SuiteSparse_config library: "
- "${SUITESPARSE_CONFIG_LIBRARY}")
-endif (EXISTS ${SUITESPARSE_CONFIG_LIBRARY})
-mark_as_advanced(SUITESPARSE_CONFIG_LIBRARY)
+suitesparse_find_component(
+ SUITESPARSE_CONFIG FILES SuiteSparse_config.h LIBRARIES suitesparseconfig)
-find_path(SUITESPARSE_CONFIG_INCLUDE_DIR NAMES SuiteSparse_config.h
- PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
-if (EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
- message(STATUS "Found SuiteSparse_config header in: "
- "${SUITESPARSE_CONFIG_INCLUDE_DIR}")
-endif (EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
-mark_as_advanced(SUITESPARSE_CONFIG_INCLUDE_DIR)
-
-set(SUITESPARSE_CONFIG_FOUND FALSE)
-set(UFCONFIG_FOUND FALSE)
-
-if (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
- EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
- set(SUITESPARSE_CONFIG_FOUND TRUE)
+if (SUITESPARSE_CONFIG_FOUND)
# SuiteSparse_config (SuiteSparse version >= 4) requires librt library for
# timing by default when compiled on Linux or Unix, but not on OSX (which
# does not have librt).
if (CMAKE_SYSTEM_NAME MATCHES "Linux" OR UNIX AND NOT APPLE)
- find_library(LIBRT_LIBRARY NAMES rt
- PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
- if (LIBRT_LIBRARY)
+ suitesparse_find_component(LIBRT LIBRARIES rt)
+ if (LIBRT_FOUND)
message(STATUS "Adding librt: ${LIBRT_LIBRARY} to "
"SuiteSparse_config libraries (required on Linux & Unix [not OSX] if "
"SuiteSparse is compiled with timing).")
- else (LIBRT_LIBRARY)
+ list(APPEND SUITESPARSE_CONFIG_LIBRARY ${LIBRT_LIBRARY})
+ else()
message(STATUS "Could not find librt, but found SuiteSparse_config, "
"assuming that SuiteSparse was compiled without timing.")
- endif (LIBRT_LIBRARY)
- mark_as_advanced(LIBRT_LIBRARY)
- list(APPEND SUITESPARSE_CONFIG_LIBRARY ${LIBRT_LIBRARY})
+ endif ()
endif (CMAKE_SYSTEM_NAME MATCHES "Linux" OR UNIX AND NOT APPLE)
-
-else (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
- EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
+else()
# Failed to find SuiteSparse_config (>= v4 installs), instead look for
# UFconfig header which should be present in < v4 installs.
- set(SUITESPARSE_CONFIG_FOUND FALSE)
- find_path(UFCONFIG_INCLUDE_DIR NAMES UFconfig.h
- PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS})
- if (EXISTS ${UFCONFIG_INCLUDE_DIR})
- message(STATUS "Found UFconfig header in: ${UFCONFIG_INCLUDE_DIR}")
- set(UFCONFIG_FOUND TRUE)
- endif (EXISTS ${UFCONFIG_INCLUDE_DIR})
- mark_as_advanced(UFCONFIG_INCLUDE_DIR)
-endif (EXISTS ${SUITESPARSE_CONFIG_LIBRARY} AND
- EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR})
+ suitesparse_find_component(UFCONFIG FILES UFconfig.h)
+endif ()
if (NOT SUITESPARSE_CONFIG_FOUND AND
NOT UFCONFIG_FOUND)
@@ -473,8 +342,7 @@
"Failed to find either: SuiteSparse_config header & library (should be "
"present in all SuiteSparse >= v4 installs), or UFconfig header (should "
"be present in all SuiteSparse < v4 installs).")
-endif (NOT SUITESPARSE_CONFIG_FOUND AND
- NOT UFCONFIG_FOUND)
+endif()
# Extract the SuiteSparse version from the appropriate header (UFconfig.h for
# <= v3, SuiteSparse_config.h for >= v4).
@@ -548,16 +416,7 @@
endif (SUITESPARSE_CONFIG_FOUND)
# METIS (Optional dependency).
-find_library(METIS_LIBRARY NAMES metis
- PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS})
-if (EXISTS ${METIS_LIBRARY})
- message(STATUS "Found METIS library: ${METIS_LIBRARY}.")
- set(METIS_FOUND TRUE)
-else (EXISTS ${METIS_LIBRARY})
- message(STATUS "Did not find METIS library (optional SuiteSparse dependency)")
- set(METIS_FOUND FALSE)
-endif (EXISTS ${METIS_LIBRARY})
-mark_as_advanced(METIS_LIBRARY)
+suitesparse_find_component(METIS LIBRARIES metis)
# Only mark SuiteSparse as found if all required components and dependencies
# have been found.
@@ -621,7 +480,6 @@
# Any even moderately recent Ubuntu release (likely to be affected by
# this bug) should have lsb_release, if it isn't present we are likely
# on a different Linux distribution (should be fine).
-
execute_process(COMMAND ${LSB_RELEASE_EXECUTABLE} -si
OUTPUT_VARIABLE LSB_DISTRIBUTOR_ID
OUTPUT_STRIP_TRAILING_WHITESPACE)