summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Help/prop_tgt/AIX_SHARED_LIBRARY_ARCHIVE.rst6
-rw-r--r--Help/variable/CMAKE_AIX_SHARED_LIBRARY_ARCHIVE.rst4
-rw-r--r--Source/cmExportCMakeConfigGenerator.cxx6
-rw-r--r--Source/cmInstallImportedRuntimeArtifactsGenerator.cxx12
-rw-r--r--Source/cmTarget.cxx5
-rw-r--r--Tests/ExportImport/Export/CMakeLists.txt10
-rw-r--r--Tests/ExportImport/Export/testSharedObjectAIX.c (renamed from Tests/ExportImport/Export/testSharedLibArchiveAIX.c)2
-rw-r--r--Tests/ExportImport/Import/A/CMakeLists.txt4
-rw-r--r--Tests/ExportImport/Import/A/imp_testExe1.c4
-rw-r--r--Tests/SharedLibraryArchive/CMakeLists.txt6
10 files changed, 41 insertions, 18 deletions
diff --git a/Help/prop_tgt/AIX_SHARED_LIBRARY_ARCHIVE.rst b/Help/prop_tgt/AIX_SHARED_LIBRARY_ARCHIVE.rst
index d0106c5..9e81594 100644
--- a/Help/prop_tgt/AIX_SHARED_LIBRARY_ARCHIVE.rst
+++ b/Help/prop_tgt/AIX_SHARED_LIBRARY_ARCHIVE.rst
@@ -16,5 +16,7 @@ the :prop_tgt:`SOVERSION` target property, if set, and otherwise from
the :prop_tgt:`VERSION` target property, if set.
This property defaults to :variable:`CMAKE_AIX_SHARED_LIBRARY_ARCHIVE`
-if that variable is set when a ``SHARED`` library target is created
-by :command:`add_library`.
+if that variable is set when a non-imported ``SHARED`` library target
+is created by :command:`add_library`. Imported targets must explicitly
+enable :prop_tgt:`!AIX_SHARED_LIBRARY_ARCHIVE` if they import an AIX
+shared library archive.
diff --git a/Help/variable/CMAKE_AIX_SHARED_LIBRARY_ARCHIVE.rst b/Help/variable/CMAKE_AIX_SHARED_LIBRARY_ARCHIVE.rst
index 10fdf04..2b636c0 100644
--- a/Help/variable/CMAKE_AIX_SHARED_LIBRARY_ARCHIVE.rst
+++ b/Help/variable/CMAKE_AIX_SHARED_LIBRARY_ARCHIVE.rst
@@ -6,5 +6,5 @@ CMAKE_AIX_SHARED_LIBRARY_ARCHIVE
On AIX, enable creation of shared library archives.
This variable initializes the :prop_tgt:`AIX_SHARED_LIBRARY_ARCHIVE`
-target property on ``SHARED`` library targets as they are created
-by :command:`add_library`. See that target property for details.
+target property on non-imported ``SHARED`` library targets as they are
+created by :command:`add_library`. See that target property for details.
diff --git a/Source/cmExportCMakeConfigGenerator.cxx b/Source/cmExportCMakeConfigGenerator.cxx
index 4f4765c..e85d949 100644
--- a/Source/cmExportCMakeConfigGenerator.cxx
+++ b/Source/cmExportCMakeConfigGenerator.cxx
@@ -334,6 +334,12 @@ void cmExportCMakeConfigGenerator::GenerateImportTargetCode(
os << "set_property(TARGET " << targetName << " PROPERTY BUNDLE 1)\n";
}
+ // Mark the imported library if it is an AIX shared library archive.
+ if (target->IsArchivedAIXSharedLibrary()) {
+ os << "set_property(TARGET " << targetName
+ << " PROPERTY AIX_SHARED_LIBRARY_ARCHIVE 1)\n";
+ }
+
// generate DEPRECATION
if (target->IsDeprecated()) {
os << "set_property(TARGET " << targetName << " PROPERTY DEPRECATION "
diff --git a/Source/cmInstallImportedRuntimeArtifactsGenerator.cxx b/Source/cmInstallImportedRuntimeArtifactsGenerator.cxx
index 01980ac..79b18e5 100644
--- a/Source/cmInstallImportedRuntimeArtifactsGenerator.cxx
+++ b/Source/cmInstallImportedRuntimeArtifactsGenerator.cxx
@@ -107,11 +107,13 @@ void cmInstallImportedRuntimeArtifactsGenerator::GenerateScriptForConfig(
}
} else {
std::vector<std::string> files{ location };
- auto soName = this->Target->GetSOName(config);
- auto soNameFile =
- cmStrCat(this->Target->GetDirectory(config), '/', soName);
- if (!soName.empty() && soNameFile != location) {
- files.push_back(soNameFile);
+ if (!this->Target->IsArchivedAIXSharedLibrary()) {
+ auto soName = this->Target->GetSOName(config);
+ auto soNameFile =
+ cmStrCat(this->Target->GetDirectory(config), '/', soName);
+ if (!soName.empty() && soNameFile != location) {
+ files.push_back(soNameFile);
+ }
}
this->AddInstallRule(os, this->GetDestination(config),
cmInstallType_SHARED_LIBRARY, files,
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index f220837..f1dcc76 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -1087,6 +1087,11 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type,
}
}
+ // Imported targets must set AIX_SHARED_LIBRARY_ARCHIVE explicitly.
+ if (this->IsImported() && property == "AIX_SHARED_LIBRARY_ARCHIVE"_s) {
+ return;
+ }
+
// Replace everything after "CMAKE_"
defKey.replace(defKey.begin() + 6, defKey.end(), property);
if (cmValue value = mf->GetDefinition(defKey)) {
diff --git a/Tests/ExportImport/Export/CMakeLists.txt b/Tests/ExportImport/Export/CMakeLists.txt
index 2cc2354..f6d32b8 100644
--- a/Tests/ExportImport/Export/CMakeLists.txt
+++ b/Tests/ExportImport/Export/CMakeLists.txt
@@ -5,6 +5,8 @@ if(POLICY CMP0129)
endif()
project(Export C CXX)
+set(CMAKE_AIX_SHARED_LIBRARY_ARCHIVE 1)
+
find_package(Foo REQUIRED CONFIG NO_DEFAULT_PATH)
# Pretend that RelWithDebInfo should link to debug libraries to test
@@ -482,8 +484,8 @@ add_library(testMod1 MODULE empty.cpp)
add_library(testMod2 MODULE empty.cpp)
set_property(TARGET testMod2 PROPERTY BUNDLE 1)
-add_library(testSharedLibArchiveAIX SHARED testSharedLibArchiveAIX.c)
-set_property(TARGET testSharedLibArchiveAIX PROPERTY AIX_SHARED_LIBRARY_ARCHIVE 1)
+add_library(testSharedObjectAIX SHARED testSharedObjectAIX.c)
+set_property(TARGET testSharedObjectAIX PROPERTY AIX_SHARED_LIBRARY_ARCHIVE 0)
install(TARGETS testLibRequired
EXPORT RequiredExp DESTINATION lib
@@ -625,7 +627,7 @@ install(
systemlib
testInterfaceIncludeUser
testInterfaceIncludeUser2
- testSharedLibArchiveAIX
+ testSharedObjectAIX
EXPORT exp
RUNTIME DESTINATION $<1:bin>$<0:/wrong>
LIBRARY DESTINATION $<1:lib>$<0:/wrong> NAMELINK_SKIP
@@ -703,7 +705,7 @@ export(TARGETS testExe2 testLib4 testLib5 testLib6 testLib7 testExe3 testExe4 te
testExeWithPluginHelper testExePluginHelperObj
testMod1 testMod2
testLibPerConfigDest
- testSharedLibArchiveAIX
+ testSharedObjectAIX
NAMESPACE bld_
APPEND FILE ExportBuildTree.cmake
)
diff --git a/Tests/ExportImport/Export/testSharedLibArchiveAIX.c b/Tests/ExportImport/Export/testSharedObjectAIX.c
index 25a29e0..9879c39 100644
--- a/Tests/ExportImport/Export/testSharedLibArchiveAIX.c
+++ b/Tests/ExportImport/Export/testSharedObjectAIX.c
@@ -4,7 +4,7 @@
# define EXPORT
#endif
-EXPORT int testSharedLibArchiveAIX(void)
+EXPORT int testSharedObjectAIX(void)
{
return 0;
}
diff --git a/Tests/ExportImport/Import/A/CMakeLists.txt b/Tests/ExportImport/Import/A/CMakeLists.txt
index 84a50a6..7d933a4 100644
--- a/Tests/ExportImport/Import/A/CMakeLists.txt
+++ b/Tests/ExportImport/Import/A/CMakeLists.txt
@@ -68,7 +68,7 @@ target_link_libraries(imp_testExe1
exp_testLib7
exp_testLibCycleA
exp_testLibPerConfigDest
- exp_testSharedLibArchiveAIX
+ exp_testSharedObjectAIX
exp_testStaticLibWithPlugin
)
@@ -124,7 +124,7 @@ target_link_libraries(imp_testExe1b
bld_testLib7
bld_testLibCycleA
bld_testLibPerConfigDest
- bld_testSharedLibArchiveAIX
+ bld_testSharedObjectAIX
bld_testStaticLibWithPlugin
)
diff --git a/Tests/ExportImport/Import/A/imp_testExe1.c b/Tests/ExportImport/Import/A/imp_testExe1.c
index 7f30c5d..554bf4b 100644
--- a/Tests/ExportImport/Import/A/imp_testExe1.c
+++ b/Tests/ExportImport/Import/A/imp_testExe1.c
@@ -11,7 +11,7 @@ extern int testLib7(void);
extern int testLibCycleA1(void);
extern int testLibPerConfigDest(void);
extern int testStaticLibPlugin(void);
-extern int testSharedLibArchiveAIX(void);
+extern int testSharedObjectAIX(void);
/* Switch a symbol between debug and optimized builds to make sure the
proper library is found from the testLib4 link interface. */
@@ -27,6 +27,6 @@ int main(void)
return (testLib2() + generated_by_testExe1() + testLib3() + testLib4() +
testLib5() + testLib6() + testLib7() + testLibCycleA1() +
testLibPerConfigDest() + testStaticLibPlugin() +
- testSharedLibArchiveAIX() + generated_by_testExe3() +
+ testSharedObjectAIX() + generated_by_testExe3() +
generated_by_testExe4() + testLib4lib() + testLib4libcfg());
}
diff --git a/Tests/SharedLibraryArchive/CMakeLists.txt b/Tests/SharedLibraryArchive/CMakeLists.txt
index f6bef24..cc961f1 100644
--- a/Tests/SharedLibraryArchive/CMakeLists.txt
+++ b/Tests/SharedLibraryArchive/CMakeLists.txt
@@ -36,3 +36,9 @@ if(aix_sla_versioned)
message(FATAL_ERROR "AIX_SHARED_LIBRARY_ARCHIVE initialized on EXECUTABLE")
endif()
target_link_libraries(UseSLA_versioned PRIVATE sla_versioned)
+
+add_library(imported SHARED IMPORTED)
+get_property(aix_sla TARGET imported PROPERTY AIX_SHARED_LIBRARY_ARCHIVE)
+if(aix_sla)
+ message(FATAL_ERROR "AIX_SHARED_LIBRARY_ARCHIVE initialized on imported target")
+endif()