Use a more reliable regex for extracting binary INFO strings
A few different regular expressions were being used in various places to extract info strings from binaries. This uses a consistent regex amongst all of them now. This also fixes the broken ABI detection for Cray compilers.
This commit is contained in:
parent
fb8acb74e8
commit
3e84e78c3f
|
@ -52,7 +52,7 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src)
|
||||||
message(STATUS "Detecting ${lang} compiler ABI info - done")
|
message(STATUS "Detecting ${lang} compiler ABI info - done")
|
||||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||||
"Detecting ${lang} compiler ABI info compiled with the following output:\n${OUTPUT}\n\n")
|
"Detecting ${lang} compiler ABI info compiled with the following output:\n${OUTPUT}\n\n")
|
||||||
file(STRINGS "${BIN}" ABI_STRINGS LIMIT_COUNT 2 REGEX "INFO:[^[]*\\[")
|
file(STRINGS "${BIN}" ABI_STRINGS LIMIT_COUNT 2 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
|
||||||
foreach(info ${ABI_STRINGS})
|
foreach(info ${ABI_STRINGS})
|
||||||
if("${info}" MATCHES "INFO:sizeof_dptr\\[0*([^]]*)\\]")
|
if("${info}" MATCHES "INFO:sizeof_dptr\\[0*([^]]*)\\]")
|
||||||
set(ABI_SIZEOF_DPTR "${CMAKE_MATCH_1}")
|
set(ABI_SIZEOF_DPTR "${CMAKE_MATCH_1}")
|
||||||
|
|
|
@ -390,7 +390,7 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
|
||||||
set(SIMULATE_ID)
|
set(SIMULATE_ID)
|
||||||
set(SIMULATE_VERSION)
|
set(SIMULATE_VERSION)
|
||||||
file(STRINGS ${file}
|
file(STRINGS ${file}
|
||||||
CMAKE_${lang}_COMPILER_ID_STRINGS LIMIT_COUNT 6 REGEX "INFO:")
|
CMAKE_${lang}_COMPILER_ID_STRINGS LIMIT_COUNT 6 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
|
||||||
set(COMPILER_ID_TWICE)
|
set(COMPILER_ID_TWICE)
|
||||||
foreach(info ${CMAKE_${lang}_COMPILER_ID_STRINGS})
|
foreach(info ${CMAKE_${lang}_COMPILER_ID_STRINGS})
|
||||||
if("${info}" MATCHES "INFO:compiler\\[([^]\"]*)\\]")
|
if("${info}" MATCHES "INFO:compiler\\[([^]\"]*)\\]")
|
||||||
|
|
|
@ -67,7 +67,7 @@ endif()
|
||||||
set(FortranCInterface_SYMBOLS)
|
set(FortranCInterface_SYMBOLS)
|
||||||
if(FortranCInterface_EXE)
|
if(FortranCInterface_EXE)
|
||||||
file(STRINGS "${FortranCInterface_EXE}" _info_strings
|
file(STRINGS "${FortranCInterface_EXE}" _info_strings
|
||||||
LIMIT_COUNT 8 REGEX "INFO:[^[]*\\[")
|
LIMIT_COUNT 8 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
|
||||||
foreach(info ${_info_strings})
|
foreach(info ${_info_strings})
|
||||||
if("${info}" MATCHES "INFO:symbol\\[([^]]*)\\]")
|
if("${info}" MATCHES "INFO:symbol\\[([^]]*)\\]")
|
||||||
list(APPEND FortranCInterface_SYMBOLS ${CMAKE_MATCH_1})
|
list(APPEND FortranCInterface_SYMBOLS ${CMAKE_MATCH_1})
|
||||||
|
|
|
@ -29,7 +29,7 @@ endif()
|
||||||
|
|
||||||
# Verify that the implementation files are named correctly.
|
# Verify that the implementation files are named correctly.
|
||||||
foreach(lib pcStatic pcShared)
|
foreach(lib pcStatic pcShared)
|
||||||
file(STRINGS "${${lib}_file}" info LIMIT_COUNT 1 REGEX "INFO:[^[]*\\[")
|
file(STRINGS "${${lib}_file}" info LIMIT_COUNT 1 REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]")
|
||||||
if(NOT "${info}" MATCHES "INFO:symbol\\[${lib}\\]")
|
if(NOT "${info}" MATCHES "INFO:symbol\\[${lib}\\]")
|
||||||
message(SEND_ERROR "No INFO:symbol[${lib}] found in:\n ${${lib}_file}")
|
message(SEND_ERROR "No INFO:symbol[${lib}] found in:\n ${${lib}_file}")
|
||||||
endif()
|
endif()
|
||||||
|
|
Loading…
Reference in New Issue