diff options
author | Brad King <brad.king@kitware.com> | 2023-12-06 13:48:52 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2023-12-06 13:49:04 (GMT) |
commit | fb54e957d6a382310c0ec53b3f4d00d04cef6e85 (patch) | |
tree | b0dddffd808fa41ba0853c8c846f1be58ba173ab /Source | |
parent | 71d308f2a4e8653abbe18721bda5add4925ff148 (diff) | |
parent | fc6508921cf291308b7270f19c14d373225bfd37 (diff) | |
download | CMake-fb54e957d6a382310c0ec53b3f4d00d04cef6e85.zip CMake-fb54e957d6a382310c0ec53b3f4d00d04cef6e85.tar.gz CMake-fb54e957d6a382310c0ec53b3f4d00d04cef6e85.tar.bz2 |
Merge topic 'imported-implib-only'
fc6508921c cmComputeLinkInformation: Restore soname lookup for non-imported targets
03d86f9d9c cmGeneratorTarget: Add helper to check for known runtime artifact
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Acked-by: Robert Maynard <robertjmaynard@gmail.com>
Merge-request: !9041
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmComputeLinkInformation.cxx | 23 | ||||
-rw-r--r-- | Source/cmGeneratorTarget.cxx | 13 | ||||
-rw-r--r-- | Source/cmGeneratorTarget.h | 2 |
3 files changed, 26 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.cxx b/Source/cmGeneratorTarget.cxx index 9082fe6..0868190 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -1283,6 +1283,19 @@ bool cmGeneratorTarget::CanCompileSources() const return this->Target->CanCompileSources(); } +bool cmGeneratorTarget::HasKnownRuntimeArtifactLocation( + std::string const& config) const +{ + if (!this->IsRuntimeBinary()) { + return false; + } + if (!this->IsImported()) { + return true; + } + ImportInfo const* info = this->GetImportInfo(config); + return info && !info->Location.empty(); +} + const std::string& cmGeneratorTarget::GetLocationForBuild() const { static std::string location; diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h index e41edcf..cfb08fa 100644 --- a/Source/cmGeneratorTarget.h +++ b/Source/cmGeneratorTarget.h @@ -58,6 +58,7 @@ public: bool IsImported() const; bool IsImportedGloballyVisible() const; bool CanCompileSources() const; + bool HasKnownRuntimeArtifactLocation(std::string const& config) const; const std::string& GetLocation(const std::string& config) const; /** Get the full path to the target's main artifact, if known. */ @@ -1107,7 +1108,6 @@ private: std::string SharedDeps; }; - friend cmComputeLinkInformation; using ImportInfoMapType = std::map<std::string, ImportInfo>; mutable ImportInfoMapType ImportInfoMap; void ComputeImportInfo(std::string const& desired_config, |