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})