summaryrefslogtreecommitdiffstats
path: root/Modules/CMakeParseImplicitLinkInfo.cmake
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-12-19 19:32:20 (GMT)
committerBrad King <brad.king@kitware.com>2024-01-03 21:24:58 (GMT)
commit78b7ba64941cf6341939a85bd95b79692910cf77 (patch)
tree350b71f1bd94e8e6bd27933e25d39f1c14e5a4bc /Modules/CMakeParseImplicitLinkInfo.cmake
parentdd480e5be58f4c0740c9331e7e1f099cd326ea8c (diff)
downloadCMake-78b7ba64941cf6341939a85bd95b79692910cf77.zip
CMake-78b7ba64941cf6341939a85bd95b79692910cf77.tar.gz
CMake-78b7ba64941cf6341939a85bd95b79692910cf77.tar.bz2
LinkerId: Fix detection of linker tool for GNU on SunOS sparc32
We do not use `-Wl,-v` on SunOS because not all GNU deployments use the `collect2` helper, and those that do do not always print the underlying `ld` command line. Parse the `--with-ld=` option as a fallback.
Diffstat (limited to 'Modules/CMakeParseImplicitLinkInfo.cmake')
-rw-r--r--Modules/CMakeParseImplicitLinkInfo.cmake12
1 files changed, 11 insertions, 1 deletions
diff --git a/Modules/CMakeParseImplicitLinkInfo.cmake b/Modules/CMakeParseImplicitLinkInfo.cmake
index 5234411..b4a7860 100644
--- a/Modules/CMakeParseImplicitLinkInfo.cmake
+++ b/Modules/CMakeParseImplicitLinkInfo.cmake
@@ -75,8 +75,9 @@ function(cmake_parse_implicit_link_info2 text log_var obj_regex)
set(linker_regex "^( *|.*[/\\])(${linker}|${startfile}|([^/\\]+-)?ld|collect2)[^/\\]*( |$)")
set(linker_exclude_regex "collect2 version |^[A-Za-z0-9_]+=|/ldfe ")
set(linker_tool_regex "^[ \t]*(->|\")?[ \t]*(.*[/\\](${linker}))(\"|,| |$)")
- set(linker_tool_exclude_regex "cuda-fake-ld|-fuse-ld=|--with-ld=")
+ set(linker_tool_exclude_regex "cuda-fake-ld|-fuse-ld=")
set(linker_tool "NOTFOUND")
+ set(linker_tool_fallback "")
set(link_line_parsed 0)
string(APPEND log " link line regex: [${linker_regex}]\n")
if(EXTRA_PARSE_COMPUTE_LINKER)
@@ -90,6 +91,12 @@ function(cmake_parse_implicit_link_info2 text log_var obj_regex)
set(linker_tool "${CMAKE_MATCH_1}")
elseif("${line}" MATCHES "^export XL_LINKER=(.*/${linker})[ \t]*$") # IBM XL
set(linker_tool "${CMAKE_MATCH_1}")
+ elseif("${line}" MATCHES "--with-ld=") # GNU
+ # The GNU compiler reports how it was configured.
+ # This does not account for -fuse-ld= so use it only as a fallback.
+ if("${line}" MATCHES " --with-ld=([^ ]+/${linker})( |$)")
+ set(linker_tool_fallback "${CMAKE_MATCH_1}")
+ endif()
elseif("${line}" MATCHES "${linker_tool_regex}")
set(linker_tool "${CMAKE_MATCH_2}")
endif()
@@ -258,6 +265,9 @@ function(cmake_parse_implicit_link_info2 text log_var obj_regex)
endif()
endforeach()
+ if(NOT linker_tool AND linker_tool_fallback)
+ set(linker_tool "${linker_tool_fallback}")
+ endif()
if(linker_tool)
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
# pick-up last path