Add UFconfig and/or SuiteSparse_config test to CMakeLists.txt SuiteSparse 4 requires linking to libsuitesparseconfig.a. Both SuiteSparse 3 and SuiteSparse 4 require an additional header (either UFconfig.h or SuiteSparse_config.h) that is not found if it is in a separate path. Therefore, add explicit checks. Change-Id: I699902b5db4f1b7f17134b5a54f9aa681445e294
diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ae2595..472ca1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -188,6 +188,46 @@ SET(CHOLMOD_FOUND FALSE) ENDIF (EXISTS ${CHOLMOD_INCLUDE}) +# If SuiteSparse version is >= 4 then SuiteSparse_config is required. +# For SuiteSparse 3, UFconfig.h is required. +MESSAGE("-- Check for SuiteSparse_config (SuiteSparse v4)") +SET(SUITESPARSE_CONFIG_FOUND TRUE) + +FIND_LIBRARY(SUITESPARSE_CONFIG_LIB + NAMES suitesparseconfig + PATHS ${SUITESPARSE_SEARCH_LIBS}) +IF (EXISTS ${SUITESPARSE_CONFIG_LIB}) + MESSAGE("-- Found SuiteSparse_config library: ${SUITESPARSE_CONFIG_LIB}") +ELSE (EXISTS ${SUITESPARSE_CONFIG_LIB}) + MESSAGE("-- Did not find SuiteSparse_config library") +ENDIF (EXISTS ${SUITESPARSE_CONFIG_LIB}) + +FIND_PATH(SUITESPARSE_CONFIG_INCLUDE + NAMES SuiteSparse_config.h + PATHS ${SUITESPARSE_SEARCH_INCLUDES}) +IF (EXISTS ${SUITESPARSE_CONFIG_INCLUDE}) + MESSAGE("-- Found SuiteSparse_config header in: ${SUITESPARSE_CONFIG_INCLUDE}") +ELSE (EXISTS ${SUITESPARSE_CONFIG_INCLUDE}) + MESSAGE("-- Did not find SuiteSparse_config header") +ENDIF (EXISTS ${SUITESPARSE_CONFIG_INCLUDE}) + +IF (NOT EXISTS ${SUITESPARSE_CONFIG_LIB} OR NOT EXISTS ${SUITESPARSE_CONFIG_INCLUDE}) + SET(SUITESPARSE_CONFIG_FOUND FALSE) +ENDIF (NOT EXISTS ${SUITESPARSE_CONFIG_LIB} OR NOT EXISTS ${SUITESPARSE_CONFIG_INCLUDE}) + +MESSAGE("-- Check for UFconfig (SuiteSparse v3)") +SET(UFCONFIG_FOUND TRUE) + +FIND_PATH(UFCONFIG_INCLUDE + NAMES UFconfig.h + PATHS ${SUITESPARSE_SEARCH_INCLUDES}) +IF (EXISTS ${UFCONFIG_INCLUDE}) + MESSAGE("-- Found UFconfig header in: ${UFCONFIG_INCLUDE}") +ELSE (EXISTS ${UFCONFIG_INCLUDE}) + MESSAGE("-- Did not find UFconfig header") + SET(UFCONFIG_FOUND FALSE) +ENDIF (EXISTS ${UFCONFIG_INCLUDE}) + MESSAGE("-- Check for METIS (optional)") FIND_LIBRARY(METIS_LIB NAMES metis PATHS ${SUITESPARSE_SEARCH_LIBS}) @@ -227,6 +267,7 @@ ${COLAMD_FOUND} AND ${CCOLAMD_FOUND} AND ${CHOLMOD_FOUND} AND + (${SUITESPARSE_CONFIG_FOUND} OR ${UFCONFIG_FOUND}) AND ${BLAS_AND_LAPACK_FOUND}) # By default, if all of SuiteSparse's dependencies are found, Ceres is @@ -444,7 +485,17 @@ ) IF (${SUITESPARSE}) + INCLUDE_DIRECTORIES(${AMD_INCLUDE}) + INCLUDE_DIRECTORIES(${CAMD_INCLUDE}) + INCLUDE_DIRECTORIES(${COLAMD_INCLUDE}) + INCLUDE_DIRECTORIES(${CCOLAMD_INCLUDE}) INCLUDE_DIRECTORIES(${CHOLMOD_INCLUDE}) + IF (${SUITESPARSE_CONFIG_FOUND}) + INCLUDE_DIRECTORIES(${SUITESPARSE_CONFIG_INCLUDE}) + ENDIF (${SUITESPARSE_CONFIG_FOUND}) + IF (${UFCONFIG_FOUND}) + INCLUDE_DIRECTORIES(${UFCONFIG_INCLUDE}) + ENDIF (${UFCONFIG_FOUND}) ENDIF(${SUITESPARSE}) IF (${CXSPARSE})
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt index 1c1d4cd..6f35e96 100644 --- a/internal/ceres/CMakeLists.txt +++ b/internal/ceres/CMakeLists.txt
@@ -125,6 +125,9 @@ LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${CAMD_LIB}) LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${COLAMD_LIB}) LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${AMD_LIB}) + IF (EXISTS ${SUITESPARSE_CONFIG_LIB}) + LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${SUITESPARSE_CONFIG_LIB}) + ENDIF (EXISTS ${SUITESPARSE_CONFIG_LIB}) IF (EXISTS ${METIS_LIB}) LIST(APPEND CERES_LIBRARY_DEPENDENCIES ${METIS_LIB})