Forráskód Böngészése

Merge topic 'aix-archive-shared-libraries-genex' into release-3.31

f923463f2b AIX: Disallow TARGET_SONAME_* genex for AIX_SHARED_LIBRARY_ARCHIVE targets

Acked-by: Kitware Robot <[email protected]>
Acked-by: buildbot <[email protected]>
Merge-request: !10028
Brad King 1 éve
szülő
commit
5caaf1d651

+ 12 - 0
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(

+ 4 - 0
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)

+ 1 - 0
Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_FILE-AIX-result.txt

@@ -0,0 +1 @@
+1

+ 8 - 0
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\)

+ 4 - 0
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>")

+ 1 - 0
Tests/RunCMake/GenEx-TARGET_FILE/TARGET_SONAME_IMPORT_FILE-AIX-result.txt

@@ -0,0 +1 @@
+1

+ 9 - 0
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\)

+ 4 - 0
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>")

+ 1 - 1
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)

+ 12 - 2
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)