diff --git a/cmake/Modules/OpmLibMain.cmake b/cmake/Modules/OpmLibMain.cmake index 7705adcb..b4159f0d 100644 --- a/cmake/Modules/OpmLibMain.cmake +++ b/cmake/Modules/OpmLibMain.cmake @@ -50,6 +50,7 @@ vcs_info () # print toolchain information to identify compilers with potential bugs include (UseCompVer) compiler_info () +linker_info () # default settings: build static debug library include (OpmDefaults) diff --git a/cmake/Modules/UseCompVer.cmake b/cmake/Modules/UseCompVer.cmake index 461898ef..45cf5893 100644 --- a/cmake/Modules/UseCompVer.cmake +++ b/cmake/Modules/UseCompVer.cmake @@ -45,3 +45,34 @@ function (compiler_info) 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_]*) (version|\\(.*\\)) ([^\\ ]*).*" "\\1 \\3" _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)