diff options
author | Evan Wilde <etceterawilde@gmail.com> | 2024-07-30 16:59:47 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2024-08-01 14:49:36 (GMT) |
commit | 866917657621ee74720f5abcee290b50341882c9 (patch) | |
tree | 7dcc4fda3c070ee68b0ed6b33c4268f9150a42b9 | |
parent | 651fa9e6ce7890744274e0f4f0d00a17c1f73dd3 (diff) | |
download | CMake-866917657621ee74720f5abcee290b50341882c9.zip CMake-866917657621ee74720f5abcee290b50341882c9.tar.gz CMake-866917657621ee74720f5abcee290b50341882c9.tar.bz2 |
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
5 files changed, 39 insertions, 4 deletions
diff --git a/Modules/CMakeSwiftInformation.cmake b/Modules/CMakeSwiftInformation.cmake index f8b6748..d891de5 100644 --- a/Modules/CMakeSwiftInformation.cmake +++ b/Modules/CMakeSwiftInformation.cmake @@ -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) diff --git a/Tests/RunCMake/Swift/SwiftLibraryModuleCommand-check-stdout-darwin.txt b/Tests/RunCMake/Swift/SwiftLibraryModuleCommand-check-stdout-darwin.txt new file mode 100644 index 0000000..20c656d --- /dev/null +++ b/Tests/RunCMake/Swift/SwiftLibraryModuleCommand-check-stdout-darwin.txt @@ -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 diff --git a/Tests/RunCMake/Swift/SwiftLibraryModuleCommand-check-stdout-windows.txt b/Tests/RunCMake/Swift/SwiftLibraryModuleCommand-check-stdout-windows.txt new file mode 100644 index 0000000..220a805 --- /dev/null +++ b/Tests/RunCMake/Swift/SwiftLibraryModuleCommand-check-stdout-windows.txt @@ -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 diff --git a/Tests/RunCMake/Swift/SwiftLibraryModuleCommand-check-stdout.txt b/Tests/RunCMake/Swift/SwiftLibraryModuleCommand-check-stdout.txt index 7e7fc7d..c3530aa 100644 --- a/Tests/RunCMake/Swift/SwiftLibraryModuleCommand-check-stdout.txt +++ b/Tests/RunCMake/Swift/SwiftLibraryModuleCommand-check-stdout.txt @@ -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 diff --git a/Tests/RunCMake/Swift/SwiftLibraryModuleCommand.cmake b/Tests/RunCMake/Swift/SwiftLibraryModuleCommand.cmake index af4aede..700edf0 100644 --- a/Tests/RunCMake/Swift/SwiftLibraryModuleCommand.cmake +++ b/Tests/RunCMake/Swift/SwiftLibraryModuleCommand.cmake @@ -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) |