diff options
author | Brad King <brad.king@kitware.com> | 2023-12-05 20:50:17 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2023-12-05 20:50:56 (GMT) |
commit | fc6508921cf291308b7270f19c14d373225bfd37 (patch) | |
tree | 18d8393c2fd50ee98e9282d14f58360efe15a737 | |
parent | 03d86f9d9ce0d55ac297ea876245f0e5ac539cd0 (diff) | |
download | CMake-fc6508921cf291308b7270f19c14d373225bfd37.zip CMake-fc6508921cf291308b7270f19c14d373225bfd37.tar.gz CMake-fc6508921cf291308b7270f19c14d373225bfd37.tar.bz2 |
cmComputeLinkInformation: Restore soname lookup for non-imported targets
In commit 7351d590ee (cmTarget: Add a way to represent imported shared
library stubs, 2023-07-17, v3.28.0-rc1~344^2) we accidentally stopped
passing the SONAME of a non-imported SHARED library to our runtime
search path ordering logic. Unfortunately I have not found a way to add
a test case for this, but it at least shouldn't regress existing tests
or those added by that commit.
-rw-r--r-- | Source/cmComputeLinkInformation.cxx | 23 | ||||
-rw-r--r-- | Source/cmGeneratorTarget.h | 1 |
2 files changed, 12 insertions, 12 deletions
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx index c58dc68..1b69f6e 100644 --- a/Source/cmComputeLinkInformation.cxx +++ b/Source/cmComputeLinkInformation.cxx @@ -2363,20 +2363,21 @@ void cmComputeLinkInformation::AddLibraryRuntimeInfo( if (target->GetType() != cmStateEnums::SHARED_LIBRARY) { return; } - auto const* info = target->GetImportInfo(this->Config); + + // Skip targets that do not have a known runtime artifact. + if (!target->HasKnownRuntimeArtifactLocation(this->Config)) { + return; + } // Try to get the soname of the library. Only files with this name // could possibly conflict. - const char* soname = - (!info || info->SOName.empty()) ? nullptr : info->SOName.c_str(); - - // If this shared library has a known runtime artifact (IMPORTED_LOCATION), - // include its location in the runtime path ordering. - if (!info || !info->Location.empty()) { - this->OrderRuntimeSearchPath->AddRuntimeLibrary(fullPath, soname); - if (this->LinkWithRuntimePath) { - this->OrderLinkerSearchPath->AddRuntimeLibrary(fullPath, soname); - } + std::string soName = target->GetSOName(this->Config); + const char* soname = soName.empty() ? nullptr : soName.c_str(); + + // Include this library in the runtime path ordering. + this->OrderRuntimeSearchPath->AddRuntimeLibrary(fullPath, soname); + if (this->LinkWithRuntimePath) { + this->OrderLinkerSearchPath->AddRuntimeLibrary(fullPath, soname); } } diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h index e6513a1..c13b2f6 100644 --- a/Source/cmGeneratorTarget.h +++ b/Source/cmGeneratorTarget.h @@ -1098,7 +1098,6 @@ private: std::string SharedDeps; }; - friend cmComputeLinkInformation; using ImportInfoMapType = std::map<std::string, ImportInfo>; mutable ImportInfoMapType ImportInfoMap; void ComputeImportInfo(std::string const& desired_config, |