summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-11-21 23:36:28 (GMT)
committerBrad King <brad.king@kitware.com>2024-11-21 23:44:25 (GMT)
commitf923463f2b6d76abef735ec084672d9c88942d57 (patch)
treeea0f37bcb72615397e96fba867b51c5c823e6a0d
parenteb281d34548f4234e68ff31d1050aca7e8441d86 (diff)
downloadCMake-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.
-rw-r--r--Source/cmGeneratorExpressionNode.cxx12
-rw-r--r--Tests/RunCMake/GenEx-TARGET_FILE/RunCMakeTest.cmake4
-rw-r--r--Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX-result.txt1
-rw-r--r--Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX-stderr.txt8
-rw-r--r--Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX.cmake4
-rw-r--r--Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX-result.txt1
-rw-r--r--Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX-stderr.txt9
-rw-r--r--Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX.cmake4
-rw-r--r--Tests/RunCMake/RuntimePath/Stub-fail-stderr.txt2
-rw-r--r--Tests/RunCMake/RuntimePath/Stub.cmake14
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)