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)