mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
The linker that is used (ld vs. gold for instance) is often hidden when using the compiler as a front-end (to include the correct runtime libraries). These functions enables us to probe the linker version and reports its finding in the log.
79 lines
2.8 KiB
CMake
79 lines
2.8 KiB
CMake
# - Get compiler version
|
|
|
|
# probe the GCC version, returns empty string if GCC is not compiler
|
|
function (get_gcc_version language ver_name)
|
|
if(CMAKE_${language}_COMPILER_ID STREQUAL GNU)
|
|
# exec_program is deprecated, but execute_process does't work :-(
|
|
exec_program (${CMAKE_${language}_COMPILER}
|
|
ARGS ${CMAKE_${language}_COMPILER_ARG1} -dumpversion
|
|
OUTPUT_VARIABLE _version
|
|
)
|
|
set (${ver_name} ${_version} PARENT_SCOPE)
|
|
else (CMAKE_${language}_COMPILER_ID STREQUAL GNU)
|
|
set (${ver_name} "" PARENT_SCOPE)
|
|
endif (CMAKE_${language}_COMPILER_ID STREQUAL GNU)
|
|
endfunction (get_gcc_version ver_name)
|
|
|
|
# less reliable, but includes the patch number
|
|
function (get_gcc_patch language ver_name)
|
|
if(CMAKE_${language}_COMPILER_ID STREQUAL GNU)
|
|
# exec_program is deprecated, but execute_process does't work :-(
|
|
exec_program (${CMAKE_${language}_COMPILER}
|
|
ARGS ${CMAKE_${language}_COMPILER_ARG1} --version
|
|
OUTPUT_VARIABLE _version
|
|
)
|
|
# split multi-line string into list
|
|
if (WIN32)
|
|
string (REPLACE "\r\n" ";" _version "${_version}")
|
|
else (WIN32)
|
|
string (REPLACE "\n" ";" _version "${_version}")
|
|
endif (WIN32)
|
|
# only keep first line
|
|
list (GET _version 0 _version)
|
|
# extract version number from it (this is the fragile part)
|
|
string (REGEX REPLACE "^[^\\(]+(\\([^\\)]*\\))?[\ \t]*([0-9]+\\.[0-9]+\\.[0-9]+)(.*\\(.*\\))?" "\\2" _version "${_version}")
|
|
# return this to the caller
|
|
set (${ver_name} ${_version} PARENT_SCOPE)
|
|
else (CMAKE_${language}_COMPILER_ID STREQUAL GNU)
|
|
set (${ver_name} "" PARENT_SCOPE)
|
|
endif (CMAKE_${language}_COMPILER_ID STREQUAL GNU)
|
|
endfunction (get_gcc_patch language ver_name)
|
|
|
|
function (compiler_info)
|
|
if (CMAKE_COMPILER_IS_GNUCXX)
|
|
get_gcc_patch (CXX version)
|
|
message (STATUS "GNU C++ compiler version: ${version}")
|
|
endif (CMAKE_COMPILER_IS_GNUCXX)
|
|
endfunction (compiler_info)
|
|
|
|
function (get_ld_version ver_name)
|
|
# run linker to get the version number. interestingly, this option works
|
|
# (for our purposes) on all major platforms (Linux, Mac OS X and Windows);
|
|
# it returns the program version although it may have ended in error
|
|
exec_program (${CMAKE_LINKER}
|
|
ARGS "-v"
|
|
OUTPUT_VARIABLE _version
|
|
)
|
|
|
|
# keep only first line, even on Mac OS X there is no line end
|
|
list (GET _version 0 _version)
|
|
|
|
# format of the version string is platform-specific
|
|
if (NOT WIN32)
|
|
if (APPLE)
|
|
string (REGEX REPLACE ".*, from Apple (.*\)" "\\1" _version "${_version}")
|
|
else (APPLE)
|
|
# assuming some GNU toolchain now
|
|
string (REGEX REPLACE "GNU ([a-zA-Z0-9_]*) \\(.*\\) (.*)" "\\1 \\2" _version "${_version}")
|
|
endif (APPLE)
|
|
endif (NOT WIN32)
|
|
|
|
# return the string to the caller
|
|
set (${ver_name} "${_version}" PARENT_SCOPE)
|
|
endfunction (get_ld_version ver_name)
|
|
|
|
function (linker_info)
|
|
get_ld_version (version)
|
|
message (STATUS "Linker: ${version}")
|
|
endfunction (linker_info)
|