--- a/cmake/FindSuiteSparse.cmake Mon Feb 06 18:05:05 2017 +++ b/cmake/FindSuiteSparse.cmake Fri Jul 07 02:13:31 2017 @@ -152,6 +152,12 @@ # the first. endmacro(SUITESPARSE_REPORT_NOT_FOUND) +# Protect against any alternative find_package scripts for this library having +# been called previously (in a client project) which set SUITESPARSE_FOUND, but +# not the other variables we require / set here which could cause the search +# logic here to fail. +unset(SUITESPARSE_FOUND) + # Handle possible presence of lib prefix for libraries on MSVC, see # also SUITESPARSE_RESET_FIND_LIBRARY_PREFIX(). if (MSVC) @@ -173,8 +179,6 @@ /opt/local/include/ufsparse # Mac OS X /usr/local/homebrew/include # Mac OS X /usr/local/include - /usr/local/include/suitesparse - /usr/include/suitesparse # Ubuntu /usr/include) list(APPEND SUITESPARSE_CHECK_LIBRARY_DIRS ${SUITESPARSE_LIBRARY_DIR_HINTS} @@ -182,9 +186,10 @@ /opt/local/lib/ufsparse # Mac OS X /usr/local/homebrew/lib # Mac OS X /usr/local/lib - /usr/local/lib/suitesparse - /usr/lib/suitesparse # Ubuntu /usr/lib) +# Additional suffixes to try appending to each search path. +list(APPEND SUITESPARSE_CHECK_PATH_SUFFIXES + suitesparse) # Windows/Ubuntu # Given the number of components of SuiteSparse, and to ensure that the # automatic failure message generated by FindPackageHandleStandardArgs() @@ -212,7 +217,8 @@ set(AMD_FOUND TRUE) list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS AMD_FOUND) find_library(AMD_LIBRARY NAMES amd - PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS}) + PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${AMD_LIBRARY}) message(STATUS "Found AMD library: ${AMD_LIBRARY}") else (EXISTS ${AMD_LIBRARY}) @@ -223,7 +229,8 @@ mark_as_advanced(AMD_LIBRARY) find_path(AMD_INCLUDE_DIR NAMES amd.h - PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS}) + PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${AMD_INCLUDE_DIR}) message(STATUS "Found AMD header in: ${AMD_INCLUDE_DIR}") else (EXISTS ${AMD_INCLUDE_DIR}) @@ -237,7 +244,8 @@ set(CAMD_FOUND TRUE) list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CAMD_FOUND) find_library(CAMD_LIBRARY NAMES camd - PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS}) + PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${CAMD_LIBRARY}) message(STATUS "Found CAMD library: ${CAMD_LIBRARY}") else (EXISTS ${CAMD_LIBRARY}) @@ -248,7 +256,8 @@ mark_as_advanced(CAMD_LIBRARY) find_path(CAMD_INCLUDE_DIR NAMES camd.h - PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS}) + PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${CAMD_INCLUDE_DIR}) message(STATUS "Found CAMD header in: ${CAMD_INCLUDE_DIR}") else (EXISTS ${CAMD_INCLUDE_DIR}) @@ -262,7 +271,8 @@ set(COLAMD_FOUND TRUE) list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS COLAMD_FOUND) find_library(COLAMD_LIBRARY NAMES colamd - PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS}) + PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${COLAMD_LIBRARY}) message(STATUS "Found COLAMD library: ${COLAMD_LIBRARY}") else (EXISTS ${COLAMD_LIBRARY}) @@ -273,7 +283,8 @@ mark_as_advanced(COLAMD_LIBRARY) find_path(COLAMD_INCLUDE_DIR NAMES colamd.h - PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS}) + PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${COLAMD_INCLUDE_DIR}) message(STATUS "Found COLAMD header in: ${COLAMD_INCLUDE_DIR}") else (EXISTS ${COLAMD_INCLUDE_DIR}) @@ -287,7 +298,8 @@ set(CCOLAMD_FOUND TRUE) list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CCOLAMD_FOUND) find_library(CCOLAMD_LIBRARY NAMES ccolamd - PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS}) + PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${CCOLAMD_LIBRARY}) message(STATUS "Found CCOLAMD library: ${CCOLAMD_LIBRARY}") else (EXISTS ${CCOLAMD_LIBRARY}) @@ -298,7 +310,8 @@ mark_as_advanced(CCOLAMD_LIBRARY) find_path(CCOLAMD_INCLUDE_DIR NAMES ccolamd.h - PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS}) + PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${CCOLAMD_INCLUDE_DIR}) message(STATUS "Found CCOLAMD header in: ${CCOLAMD_INCLUDE_DIR}") else (EXISTS ${CCOLAMD_INCLUDE_DIR}) @@ -312,7 +325,8 @@ set(CHOLMOD_FOUND TRUE) list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS CHOLMOD_FOUND) find_library(CHOLMOD_LIBRARY NAMES cholmod - PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS}) + PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${CHOLMOD_LIBRARY}) message(STATUS "Found CHOLMOD library: ${CHOLMOD_LIBRARY}") else (EXISTS ${CHOLMOD_LIBRARY}) @@ -323,7 +337,8 @@ mark_as_advanced(CHOLMOD_LIBRARY) find_path(CHOLMOD_INCLUDE_DIR NAMES cholmod.h - PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS}) + PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${CHOLMOD_INCLUDE_DIR}) message(STATUS "Found CHOLMOD header in: ${CHOLMOD_INCLUDE_DIR}") else (EXISTS ${CHOLMOD_INCLUDE_DIR}) @@ -337,7 +352,8 @@ set(SUITESPARSEQR_FOUND TRUE) list(APPEND SUITESPARSE_FOUND_REQUIRED_VARS SUITESPARSEQR_FOUND) find_library(SUITESPARSEQR_LIBRARY NAMES spqr - PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS}) + PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${SUITESPARSEQR_LIBRARY}) message(STATUS "Found SuiteSparseQR library: ${SUITESPARSEQR_LIBRARY}") else (EXISTS ${SUITESPARSEQR_LIBRARY}) @@ -348,7 +364,8 @@ mark_as_advanced(SUITESPARSEQR_LIBRARY) find_path(SUITESPARSEQR_INCLUDE_DIR NAMES SuiteSparseQR.hpp - PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS}) + PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${SUITESPARSEQR_INCLUDE_DIR}) message(STATUS "Found SuiteSparseQR header in: ${SUITESPARSEQR_INCLUDE_DIR}") else (EXISTS ${SUITESPARSEQR_INCLUDE_DIR}) @@ -364,7 +381,8 @@ # 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}) + PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${TBB_LIBRARIES}) message(STATUS "Found Intel Thread Building Blocks (TBB) library: " "${TBB_LIBRARIES}, assuming SuiteSparseQR was compiled with TBB.") @@ -377,7 +395,8 @@ if (TBB_FOUND) find_library(TBB_MALLOC_LIB NAMES tbbmalloc - PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS}) + PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${TBB_MALLOC_LIB}) message(STATUS "Found Intel Thread Building Blocks (TBB) Malloc library: " "${TBB_MALLOC_LIB}") @@ -407,7 +426,8 @@ # 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}) + PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${SUITESPARSE_CONFIG_LIBRARY}) message(STATUS "Found SuiteSparse_config library: " "${SUITESPARSE_CONFIG_LIBRARY}") @@ -415,7 +435,8 @@ mark_as_advanced(SUITESPARSE_CONFIG_LIBRARY) find_path(SUITESPARSE_CONFIG_INCLUDE_DIR NAMES SuiteSparse_config.h - PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS}) + PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${SUITESPARSE_CONFIG_INCLUDE_DIR}) message(STATUS "Found SuiteSparse_config header in: " "${SUITESPARSE_CONFIG_INCLUDE_DIR}") @@ -433,7 +454,8 @@ # 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}) + PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (LIBRT_LIBRARY) message(STATUS "Adding librt: ${LIBRT_LIBRARY} to " "SuiteSparse_config libraries (required on Linux & Unix [not OSX] if " @@ -452,7 +474,8 @@ # 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}) + PATHS ${SUITESPARSE_CHECK_INCLUDE_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${UFCONFIG_INCLUDE_DIR}) message(STATUS "Found UFconfig header in: ${UFCONFIG_INCLUDE_DIR}") set(UFCONFIG_FOUND TRUE) @@ -543,7 +566,8 @@ # METIS (Optional dependency). find_library(METIS_LIBRARY NAMES metis - PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS}) + PATHS ${SUITESPARSE_CHECK_LIBRARY_DIRS} + PATH_SUFFIXES ${SUITESPARSE_CHECK_PATH_SUFFIXES}) if (EXISTS ${METIS_LIBRARY}) message(STATUS "Found METIS library: ${METIS_LIBRARY}.") set(METIS_FOUND TRUE)