mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 19:00:54 -06:00
AIX: Propagate AIX_SHARED_LIBRARY_ARCHIVE through exports
Teach `export()` and `install(EXPORT)` to record this setting on the imported targets they generate. Make this property's non-presence authoritative on imported targets since they represent what was built elsewhere.
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 "
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# define EXPORT
|
||||
#endif
|
||||
|
||||
EXPORT int testSharedLibArchiveAIX(void)
|
||||
EXPORT int testSharedObjectAIX(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user