summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2013-02-06 21:21:11 (GMT)
committerBrad King <brad.king@kitware.com>2013-02-06 21:22:02 (GMT)
commit10e8b2da37ff207a7e1a984a5a413c37bf0c8aa4 (patch)
tree667f3c1df8551a908f4853b678b92aa247504af6
parent1d3b35fd8a59c6f987b4caab17330955dbaf32bc (diff)
downloadCMake-10e8b2da37ff207a7e1a984a5a413c37bf0c8aa4.zip
CMake-10e8b2da37ff207a7e1a984a5a413c37bf0c8aa4.tar.gz
CMake-10e8b2da37ff207a7e1a984a5a413c37bf0c8aa4.tar.bz2
Normalize full paths in implicit link library list
Teach CMakeParseImplicitLinkInfo to convert implicit link library full paths to a canonical form. This makes them more reproducible in case different language compiler front-ends add the same library by different paths e.g. ".../libA.a" and "...//libA.a". Add a case to the CMake.ImplicitLinkInfo test to cover removal of extra slashes from both library and directory paths.
-rw-r--r--Modules/CMakeParseImplicitLinkInfo.cmake6
-rw-r--r--Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in6
2 files changed, 12 insertions, 0 deletions
diff --git a/Modules/CMakeParseImplicitLinkInfo.cmake b/Modules/CMakeParseImplicitLinkInfo.cmake
index ecb20dc..8c914b3 100644
--- a/Modules/CMakeParseImplicitLinkInfo.cmake
+++ b/Modules/CMakeParseImplicitLinkInfo.cmake
@@ -103,6 +103,12 @@ function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var log_var obj_regex)
foreach(lib IN LISTS implicit_libs_tmp)
if("${lib}" MATCHES "^(crt.*\\.o|gcc.*|System.*)$")
set(log "${log} remove lib [${lib}]\n")
+ elseif(IS_ABSOLUTE "${lib}")
+ get_filename_component(abs "${lib}" ABSOLUTE)
+ if(NOT "x${lib}" STREQUAL "x${abs}")
+ set(log "${log} collapse lib [${lib}] ==> [${abs}]\n")
+ endif()
+ list(APPEND implicit_libs "${abs}")
else()
list(APPEND implicit_libs "${lib}")
endif()
diff --git a/Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in b/Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in
index dbe9500..3fdc729 100644
--- a/Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in
+++ b/Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in
@@ -99,6 +99,12 @@ set(linux64_test1_libs "${linux64_gcc_libs}")
set(linux64_test1_dirs "${linux64_gcc_dirs}")
list(APPEND platforms linux64_test1)
+# sunCC dummy.cxx -v # extra slashes
+set(linux64_test2_text "/usr/bin/ld --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 /opt/sun/sunstudio12/prod/lib/amd64//crti.o /opt/sun/sunstudio12/prod/lib/amd64/crt1x.o /opt/sun/sunstudio12/prod/lib/amd64/values-xa.o dummy.o -Y \"/opt/sun/sunstudio12/prod/lib//amd64:/lib64:/usr//lib64\" -Qy -lc /opt/sun/sunstudio12/prod/lib/amd64//libc_supp.a /opt/sun/sunstudio12/prod/lib/amd64/crtn.o")
+set(linux64_test2_libs "c;/opt/sun/sunstudio12/prod/lib/amd64/libc_supp.a")
+set(linux64_test2_dirs "/opt/sun/sunstudio12/prod/lib/amd64;/lib64;/usr/lib64")
+list(APPEND platforms linux64_test2)
+
#-----------------------------------------------------------------------------
# Mac