Fixed SuiteSparse 6.0 version parsing

The version component macro names are delimited by multiple spaces in
the new release resulting in a failure to parse the version.

An additional guard ensures that if the version cannot be correctly
parsed it is discarded and a user warning is issued.

Fixes #919

Change-Id: I630f30dba0fd23979b6fe5d854e59701c22c3469
This commit is contained in:
Sergiu Deitsch
2022-11-13 21:13:12 +01:00
committed by Sameer Agarwal
parent 8fd7828e3d
commit 352b320ab1
+23 -13
View File
@@ -404,26 +404,36 @@ if (TARGET SuiteSparse::Config)
else (NOT EXISTS ${SuiteSparse_VERSION_FILE})
file(READ ${SuiteSparse_VERSION_FILE} Config_CONTENTS)
string(REGEX MATCH "#define SUITESPARSE_MAIN_VERSION [0-9]+"
SuiteSparse_VERSION_MAJOR "${Config_CONTENTS}")
string(REGEX REPLACE "#define SUITESPARSE_MAIN_VERSION ([0-9]+)" "\\1"
SuiteSparse_VERSION_MAJOR "${SuiteSparse_VERSION_MAJOR}")
string(REGEX MATCH "#define SUITESPARSE_MAIN_VERSION[ \t]+([0-9]+)"
SuiteSparse_VERSION_LINE "${Config_CONTENTS}")
set (SuiteSparse_VERSION_MAJOR ${CMAKE_MATCH_1})
string(REGEX MATCH "#define SUITESPARSE_SUB_VERSION [0-9]+"
SuiteSparse_VERSION_MINOR "${Config_CONTENTS}")
string(REGEX REPLACE "#define SUITESPARSE_SUB_VERSION ([0-9]+)" "\\1"
SuiteSparse_VERSION_MINOR "${SuiteSparse_VERSION_MINOR}")
string(REGEX MATCH "#define SUITESPARSE_SUB_VERSION[ \t]+([0-9]+)"
SuiteSparse_VERSION_LINE "${Config_CONTENTS}")
set (SuiteSparse_VERSION_MINOR ${CMAKE_MATCH_1})
string(REGEX MATCH "#define SUITESPARSE_SUBSUB_VERSION [0-9]+"
SuiteSparse_VERSION_PATCH "${Config_CONTENTS}")
string(REGEX REPLACE "#define SUITESPARSE_SUBSUB_VERSION ([0-9]+)" "\\1"
SuiteSparse_VERSION_PATCH "${SuiteSparse_VERSION_PATCH}")
string(REGEX MATCH "#define SUITESPARSE_SUBSUB_VERSION[ \t]+([0-9]+)"
SuiteSparse_VERSION_LINE "${Config_CONTENTS}")
set (SuiteSparse_VERSION_PATCH ${CMAKE_MATCH_1})
unset (SuiteSparse_VERSION_LINE)
# 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 4.;2.;1 nonsense.
set(SuiteSparse_VERSION
"${SuiteSparse_VERSION_MAJOR}.${SuiteSparse_VERSION_MINOR}.${SuiteSparse_VERSION_PATCH}")
set(SuiteSparse_VERSION_COMPONENTS 3)
if (SuiteSparse_VERSION MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+")
set(SuiteSparse_VERSION_COMPONENTS 3)
else (SuiteSparse_VERSION MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+")
message (WARNING "Could not parse SuiteSparse_config.h: SuiteSparse "
"version will not be available")
unset (SuiteSparse_VERSION)
unset (SuiteSparse_VERSION_MAJOR)
unset (SuiteSparse_VERSION_MINOR)
unset (SuiteSparse_VERSION_PATCH)
endif (SuiteSparse_VERSION MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+")
endif (NOT EXISTS ${SuiteSparse_VERSION_FILE})
endif (TARGET SuiteSparse::Config)