diff options
author | Brad King <brad.king@kitware.com> | 2024-11-21 23:36:28 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2024-11-21 23:44:25 (GMT) |
commit | f923463f2b6d76abef735ec084672d9c88942d57 (patch) | |
tree | ea0f37bcb72615397e96fba867b51c5c823e6a0d | |
parent | eb281d34548f4234e68ff31d1050aca7e8441d86 (diff) | |
download | CMake-f923463f2b6d76abef735ec084672d9c88942d57.zip CMake-f923463f2b6d76abef735ec084672d9c88942d57.tar.gz CMake-f923463f2b6d76abef735ec084672d9c88942d57.tar.bz2 |
AIX: Disallow TARGET_SONAME_* genex for AIX_SHARED_LIBRARY_ARCHIVE targets
AIX shared library archives have no filesystem artifact named with their
SONAME because it is in an archive.
10 files changed, 56 insertions, 3 deletions
diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx index 7f4e4ac..80eedf5 100644 --- a/Source/cmGeneratorExpressionNode.cxx +++ b/Source/cmGeneratorExpressionNode.cxx @@ -3592,6 +3592,12 @@ struct TargetFilesystemArtifactResultCreator<ArtifactSonameTag> "SHARED libraries."); return std::string(); } + if (target->IsArchivedAIXSharedLibrary()) { + ::reportError(context, content->GetOriginalExpression(), + "TARGET_SONAME_FILE is not allowed for " + "AIX_SHARED_LIBRARY_ARCHIVE libraries."); + return std::string(); + } std::string result = cmStrCat(target->GetDirectory(context->Config), '/', target->GetSOName(context->Config)); return result; @@ -3618,6 +3624,12 @@ struct TargetFilesystemArtifactResultCreator<ArtifactSonameImportTag> "SHARED libraries."); return std::string(); } + if (target->IsArchivedAIXSharedLibrary()) { + ::reportError(context, content->GetOriginalExpression(), + "TARGET_SONAME_IMPORT_FILE is not allowed for " + "AIX_SHARED_LIBRARY_ARCHIVE libraries."); + return std::string(); + } if (target->HasImportLibrary(context->Config)) { return cmStrCat(target->GetDirectory( diff --git a/Tests/RunCMake/GenEx-TARGET_FILE/RunCMakeTest.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/RunCMakeTest.cmake index a79fcaf..5abea25 100644 --- a/Tests/RunCMake/GenEx-TARGET_FILE/RunCMakeTest.cmake +++ b/Tests/RunCMake/GenEx-TARGET_FILE/RunCMakeTest.cmake @@ -19,6 +19,10 @@ run_cmake_with_options(TARGET_FILE_BASE_NAME -DCMAKE_BUILD_TYPE:STRING=Debug) run_cmake_with_options(TARGET_FILE_BASE_NAME-imported-target -DCMAKE_BUILD_TYPE:STRING=Debug) run_cmake(TARGET_FILE_BASE_NAME-non-valid-target) run_cmake(TARGET_LINKER_FILE_BASE_NAME-non-valid-target) +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "AIX") + run_cmake(TARGET_SONAME_FILE-AIX) + run_cmake(TARGET_SONAME_IMPORT_FILE-AIX) +endif() run_cmake(NonValidTarget-TARGET_BUNDLE_DIR) run_cmake(NonValidTarget-TARGET_BUNDLE_DIR_NAME) run_cmake(NonValidTarget-TARGET_BUNDLE_CONTENT_DIR) diff --git a/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX-stderr.txt new file mode 100644 index 0000000..f440662 --- /dev/null +++ b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX-stderr.txt @@ -0,0 +1,8 @@ +^CMake Error at TARGET_SONAME_FILE-AIX\.cmake:[0-9]+ \(add_custom_target\): + Error evaluating generator expression: + + \$<TARGET_SONAME_FILE:sla> + + TARGET_SONAME_FILE is not allowed for AIX_SHARED_LIBRARY_ARCHIVE libraries\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX.cmake new file mode 100644 index 0000000..c641283 --- /dev/null +++ b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX.cmake @@ -0,0 +1,4 @@ +enable_language (C) +set(CMAKE_AIX_SHARED_LIBRARY_ARCHIVE 1) +add_library(sla SHARED empty.c) +add_custom_target(custom COMMAND ${CMAKE_COMMAND} -E echo "$<TARGET_SONAME_FILE:sla>") diff --git a/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX-result.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX-stderr.txt b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX-stderr.txt new file mode 100644 index 0000000..41c7df1 --- /dev/null +++ b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX-stderr.txt @@ -0,0 +1,9 @@ +^CMake Error at TARGET_SONAME_IMPORT_FILE-AIX\.cmake:[0-9]+ \(add_custom_target\): + Error evaluating generator expression: + + \$<TARGET_SONAME_IMPORT_FILE:sla> + + TARGET_SONAME_IMPORT_FILE is not allowed for AIX_SHARED_LIBRARY_ARCHIVE + libraries\. +Call Stack \(most recent call first\): + CMakeLists\.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX.cmake b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX.cmake new file mode 100644 index 0000000..b3f89a3 --- /dev/null +++ b/Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX.cmake @@ -0,0 +1,4 @@ +enable_language (C) +set(CMAKE_AIX_SHARED_LIBRARY_ARCHIVE 1) +add_library(sla SHARED empty.c) +add_custom_target(custom COMMAND ${CMAKE_COMMAND} -E echo "$<TARGET_SONAME_IMPORT_FILE:sla>") diff --git a/Tests/RunCMake/RuntimePath/Stub-fail-stderr.txt b/Tests/RunCMake/RuntimePath/Stub-fail-stderr.txt index 9c17414..38cd119 100644 --- a/Tests/RunCMake/RuntimePath/Stub-fail-stderr.txt +++ b/Tests/RunCMake/RuntimePath/Stub-fail-stderr.txt @@ -1 +1 @@ -(error while loading shared libraries: libStub\.so\.1|Library not loaded: '?@rpath/libStub\.1\.dylib'?|(Cannot|Could not) load module libStub\.so|fatal: libStub\.so\.1: open failed|Shared object "libStub\.so\.1" not found) +(error while loading shared libraries: libStub\.so\.1|Library not loaded: '?@rpath/libStub\.1\.dylib'?|(Cannot|Could not) load module libStub\.a\(libStub\.so\.1\)|fatal: libStub\.so\.1: open failed|Shared object "libStub\.so\.1" not found) diff --git a/Tests/RunCMake/RuntimePath/Stub.cmake b/Tests/RunCMake/RuntimePath/Stub.cmake index 18e99c1..6ab9312 100644 --- a/Tests/RunCMake/RuntimePath/Stub.cmake +++ b/Tests/RunCMake/RuntimePath/Stub.cmake @@ -1,5 +1,15 @@ enable_language(C) +set(CMAKE_AIX_SHARED_LIBRARY_ARCHIVE 1) + +if(CMAKE_SYSTEM_NAME STREQUAL "AIX") + set(suffix "${CMAKE_SHARED_LIBRARY_ARCHIVE_SUFFIX}") + set(genex "TARGET_LINKER_FILE") +else() + set(suffix "${CMAKE_SHARED_LIBRARY_SUFFIX}") + set(genex "TARGET_SONAME_FILE") +endif() + add_library(Stub SHARED Stub.c) set_target_properties(Stub PROPERTIES SOVERSION 1 @@ -7,10 +17,10 @@ set_target_properties(Stub PROPERTIES ) set(StubDir ${CMAKE_CURRENT_BINARY_DIR}/lib/stubs) -set(Stub "${StubDir}/${CMAKE_SHARED_LIBRARY_PREFIX}Stub${CMAKE_SHARED_LIBRARY_SUFFIX}") +set(Stub "${StubDir}/${CMAKE_SHARED_LIBRARY_PREFIX}Stub${suffix}") add_custom_target(StubCopy COMMAND ${CMAKE_COMMAND} -E make_directory "${StubDir}" - COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_SONAME_FILE:Stub>" "${Stub}" + COMMAND ${CMAKE_COMMAND} -E copy "$<${genex}:Stub>" "${Stub}" BYPRODUCTS ${Stub} ) add_dependencies(StubCopy Stub) |