Swift: Fix INSTALL_NAME_DIR under CMP0157 NEW behavior

Setting `CMAKE_INSTALL_NAME_DIR` or the `INSTALL_NAME_DIR` on Swift
targets had no effect when CMP0157 was set to `NEW`.  This was a result
of missing the `<TARGET_INSTALLNAME_DIR>` before the `<TARGET_SONAME>`.
Fix that and add a test to verify that the install name directory is
included in the install name.

Fixes: #26175
This commit is contained in:
Evan Wilde
2024-07-30 09:59:47 -07:00
committed by Brad King
parent 651fa9e6ce
commit 8669176576
5 changed files with 39 additions and 4 deletions

View File

@@ -132,7 +132,7 @@ if(CMAKE_Swift_COMPILATION_MODE_DEFAULT)
endif()
if(NOT CMAKE_Swift_CREATE_SHARED_LIBRARY)
set(CMAKE_Swift_CREATE_SHARED_LIBRARY "<CMAKE_Swift_COMPILER> ${CMAKE_Swift_PARALLEL_FLAGS} -emit-library <CMAKE_SHARED_LIBRARY_Swift_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> ${CMAKE_Swift_IMPLIB_LINKER_FLAGS} <SONAME_FLAG> <TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
set(CMAKE_Swift_CREATE_SHARED_LIBRARY "<CMAKE_Swift_COMPILER> ${CMAKE_Swift_PARALLEL_FLAGS} -emit-library <CMAKE_SHARED_LIBRARY_Swift_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> ${CMAKE_Swift_IMPLIB_LINKER_FLAGS} <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
endif()
if(NOT CMAKE_Swift_CREATE_SHARED_MODULE)

View File

@@ -0,0 +1,13 @@
.*swiftc(.exe)? [^
]* -parse-as-library -static -emit-module [^
]* -module-name StaticLibrary [^
]*
.*swiftc(.exe)? [^
]* -parse-as-library -emit-module [^
]* -module-name DynamicLibrary [^
]*
.*swiftc(.exe)? [^
]* -emit-library [^
]* -Xlinker -install_name -Xlinker @rpath/libDynamicLibrary.dylib -o ([A-Za-z]+/)?libDynamicLibrary.dylib [^
]*
.*swiftc(.exe)? -j [0-9]+ -num-threads [0-9]+ -c -module-name Executable

View File

@@ -0,0 +1,13 @@
.*swiftc(.exe)? [^
]* -parse-as-library -static -emit-module [^
]* -module-name StaticLibrary [^
]*
.*swiftc(.exe)? [^
]* -parse-as-library -emit-module [^
]* -module-name DynamicLibrary [^
]*
.*swiftc(.exe)? [^
]* -emit-library [^
]* -Xlinker -implib:DynamicLibrary.lib +-o ([A-Za-z]+/)?DynamicLibrary.dll [^
]*
.*swiftc(.exe)? -j [0-9]+ -num-threads [0-9]+ -c -module-name Executable

View File

@@ -1,5 +1,13 @@
.*swiftc(.exe)? .* -parse-as-library -static -emit-module .* -module-name StaticLibrary [^
.*swiftc(.exe)? [^
]* -parse-as-library -static -emit-module [^
]* -module-name StaticLibrary [^
]*
.*swiftc(.exe)? .* -parse-as-library -emit-module .* -module-name DynamicLibrary [^
.*swiftc(.exe)? [^
]* -parse-as-library -emit-module [^
]* -module-name DynamicLibrary [^
]*
.*swiftc(.exe)? .* -j [0-9]* -num-threads [0-9]* -c -module-name Executable
.*swiftc(.exe)? [^
]* -emit-library [^
]* -Xlinker -soname -Xlinker libDynamicLibrary.so -o ([A-Za-z]+/)?libDynamicLibrary.so [^
]*
.*swiftc(.exe)? -j [0-9]+ -num-threads [0-9]+ -c -module-name Executable

View File

@@ -6,6 +6,7 @@ enable_language(Swift)
add_library(StaticLibrary STATIC L.swift)
add_library(DynamicLibrary SHARED L.swift)
set_target_properties(DynamicLibrary PROPERTIES INSTALL_NAME_DIR "@rpath")
add_executable(Executable E.swift)
add_dependencies(DynamicLibrary StaticLibrary)