Skip to content

Commit

Permalink
hunter: prefer CXSparse from SuiteSparse
Browse files Browse the repository at this point in the history
Change-Id: I1cfd837d45e1c7edf4c8eaa4feea2c631517efcf
  • Loading branch information
riegl-gc committed Jan 15, 2019
1 parent abdce33 commit e8b1b90
Showing 1 changed file with 44 additions and 7 deletions.
51 changes: 44 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,48 @@ else (SUITESPARSE)
endif (SUITESPARSE)

# CXSparse.
if (CXSPARSE)
if (CXSPARSE AND TARGET SuiteSparse::cxsparse)
# use suitesparse provided cxsparse target
# Extract CXSparse version from cs.h
set(CXSPARSE_INCLUDE_DIR "${SuiteSparse_INCLUDE_DIRS}/suitesparse")
if (CXSPARSE_INCLUDE_DIR)
set(CXSPARSE_VERSION_FILE ${CXSPARSE_INCLUDE_DIR}/cs.h)
if (NOT EXISTS ${CXSPARSE_VERSION_FILE})
message(
"Could not find file: ${CXSPARSE_VERSION_FILE} "
"containing version information in CXSparse install located at: "
"${CXSPARSE_INCLUDE_DIR}.")
else (NOT EXISTS ${CXSPARSE_VERSION_FILE})
file(READ ${CXSPARSE_INCLUDE_DIR}/cs.h CXSPARSE_VERSION_FILE_CONTENTS)

string(REGEX MATCH "#define CS_VER [0-9]+"
CXSPARSE_MAIN_VERSION "${CXSPARSE_VERSION_FILE_CONTENTS}")
string(REGEX REPLACE "#define CS_VER ([0-9]+)" "\\1"
CXSPARSE_MAIN_VERSION "${CXSPARSE_MAIN_VERSION}")

string(REGEX MATCH "#define CS_SUBVER [0-9]+"
CXSPARSE_SUB_VERSION "${CXSPARSE_VERSION_FILE_CONTENTS}")
string(REGEX REPLACE "#define CS_SUBVER ([0-9]+)" "\\1"
CXSPARSE_SUB_VERSION "${CXSPARSE_SUB_VERSION}")

string(REGEX MATCH "#define CS_SUBSUB [0-9]+"
CXSPARSE_SUBSUB_VERSION "${CXSPARSE_VERSION_FILE_CONTENTS}")
string(REGEX REPLACE "#define CS_SUBSUB ([0-9]+)" "\\1"
CXSPARSE_SUBSUB_VERSION "${CXSPARSE_SUBSUB_VERSION}")

# This is on a single line s/t CMake does not interpret it as a list of
# elements and insert ';' separators which would result in 3.;1.;2 nonsense.
set(CXSPARSE_VERSION "${CXSPARSE_MAIN_VERSION}.${CXSPARSE_SUB_VERSION}.${CXSPARSE_SUBSUB_VERSION}")
endif (NOT EXISTS ${CXSPARSE_VERSION_FILE})
endif (CXSPARSE_INCLUDE_DIR)
if (NOT CXSPARSE_VERSION)
set(CXSPARSE_VERSION ${SuiteSparse_VERSION})
endif()
set(CXSPARSE_LIBRARIES SuiteSparse::cxsparse)
set(CXSPARSE_FOUND TRUE)
message("-- Using target SuiteSparse::cxsparse with version: ${CXSPARSE_VERSION}, "
"building with CXSparse.")
elseif (CXSPARSE)
# Don't search with REQUIRED as we can continue without CXSparse.
find_package(CXSparse)
if (CXSPARSE_FOUND)
Expand All @@ -324,7 +365,7 @@ if (CXSPARSE)
update_cache_variable(CXSPARSE OFF)
list(APPEND CERES_COMPILE_OPTIONS CERES_NO_CXSPARSE)
endif (CXSPARSE_FOUND)
else (CXSPARSE)
else ()
message("-- Building without CXSparse.")
list(APPEND CERES_COMPILE_OPTIONS CERES_NO_CXSPARSE)
# Mark as advanced (remove from default GUI view) the CXSparse search
Expand All @@ -333,7 +374,7 @@ else (CXSPARSE)
# CXSPARSE instead of setting them.
mark_as_advanced(FORCE CXSPARSE_INCLUDE_DIR
CXSPARSE_LIBRARY)
endif (CXSPARSE)
endif ()

# Ensure that the user understands they have disabled all sparse libraries.
if (NOT SUITESPARSE AND NOT CXSPARSE AND NOT EIGENSPARSE)
Expand Down Expand Up @@ -597,10 +638,6 @@ include_directories(
# as system headers.
include_directories(SYSTEM ${EIGEN_INCLUDE_DIRS})

if (CXSPARSE)
include_directories(${CXSPARSE_INCLUDE_DIRS})
endif (CXSPARSE)

if (GFLAGS)
include_directories(${GFLAGS_INCLUDE_DIRS})
endif (GFLAGS)
Expand Down

0 comments on commit e8b1b90

Please sign in to comment.