From 6c12e0758bceee62daf40c31840a64de28a97142 Mon Sep 17 00:00:00 2001 From: Aditya Vidyadhar Kamath Date: Fri, 27 Sep 2024 07:24:11 -0500 Subject: Ninja: Fix AIX shared library archiving Extend commit d27fe9dfba (AIX: Add option to archive shared libraries, 2024-06-18) to update the Ninja generator to support the new `AIX_SHARED_LIBRARY_ARCHIVE` feature. Fixes: #26332 --- Source/cmNinjaNormalTargetGenerator.cxx | 5 +++-- Tests/SharedLibraryArchive/CMakeLists.txt | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx index cd9d1ef..891187a 100644 --- a/Source/cmNinjaNormalTargetGenerator.cxx +++ b/Source/cmNinjaNormalTargetGenerator.cxx @@ -1016,7 +1016,8 @@ void cmNinjaNormalTargetGenerator::WriteNvidiaDeviceLinkStatement( vars["LANGUAGE_COMPILE_FLAGS"] = langFlags; auto const tgtNames = this->TargetNames(config); - if (genTarget->HasSOName(config)) { + if (genTarget->HasSOName(config) || + genTarget->IsArchivedAIXSharedLibrary()) { vars["SONAME_FLAG"] = this->GetMakefile()->GetSONameFlag(this->TargetLinkLanguage(config)); vars["SONAME"] = localGen.ConvertToOutputFormat(tgtNames.SharedObject, @@ -1315,7 +1316,7 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement( t, gt, this->TargetLinkLanguage(config), config); vars["LANGUAGE_COMPILE_FLAGS"] = t; } - if (gt->HasSOName(config)) { + if (gt->HasSOName(config) || gt->IsArchivedAIXSharedLibrary()) { vars["SONAME_FLAG"] = mf->GetSONameFlag(this->TargetLinkLanguage(config)); vars["SONAME"] = localGen.ConvertToOutputFormat(tgtNames.SharedObject, cmOutputConverter::SHELL); diff --git a/Tests/SharedLibraryArchive/CMakeLists.txt b/Tests/SharedLibraryArchive/CMakeLists.txt index 7077181..3af0f76 100644 --- a/Tests/SharedLibraryArchive/CMakeLists.txt +++ b/Tests/SharedLibraryArchive/CMakeLists.txt @@ -18,3 +18,19 @@ if(aix_sla) message(FATAL_ERROR "AIX_SHARED_LIBRARY_ARCHIVE initialized on EXECUTABLE") endif() target_link_libraries(UseSLA PRIVATE sla) + +# Test for versioned names. Everything else should be tested and set above. +add_library(sla_versioned SHARED sla.c) +get_property(aix_sla_versioned TARGET sla_versioned PROPERTY AIX_SHARED_LIBRARY_ARCHIVE) +if(NOT aix_sla_versioned) + message(FATAL_ERROR "AIX_SHARED_LIBRARY_ARCHIVE not initialized on SHARED library") +endif() + +set_target_properties(sla_versioned PROPERTIES OUTPUT_NAME "sla_versioned" VERSION 3 SOVERSION 2) + +add_executable(UseSLA_versioned use_sla.c) +get_property(aix_sla_versioned TARGET UseSLA_versioned PROPERTY AIX_SHARED_LIBRARY_ARCHIVE) +if(aix_sla_versioned) + message(FATAL_ERROR "AIX_SHARED_LIBRARY_ARCHIVE initialized on EXECUTABLE") +endif() +target_link_libraries(UseSLA_versioned PRIVATE sla_versioned) -- cgit v0.12