1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-14 10:47:59 +08:00

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.
This commit is contained in:
Brad King
2024-11-21 18:36:28 -05:00
parent eb281d3454
commit f923463f2b
10 changed files with 56 additions and 3 deletions

View File

@@ -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(

View File

@@ -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)

View File

@@ -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\)

View File

@@ -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>")

View File

@@ -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\)

View File

@@ -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>")

View File

@@ -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)

View File

@@ -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)