diff options
author | Robert Maynard <rmaynard@nvidia.com> | 2023-07-17 21:44:26 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2023-07-18 17:21:01 (GMT) |
commit | 7351d590ee6a846ed0f2bd4793384a33bf49ea0d (patch) | |
tree | 35ade287824ea6c02e450f3e215eaa67364e8338 /Source/cmComputeLinkInformation.cxx | |
parent | 83574a47726b8824d58b65a262c289573fb69bb0 (diff) | |
download | CMake-7351d590ee6a846ed0f2bd4793384a33bf49ea0d.zip CMake-7351d590ee6a846ed0f2bd4793384a33bf49ea0d.tar.gz CMake-7351d590ee6a846ed0f2bd4793384a33bf49ea0d.tar.bz2 |
cmTarget: Add a way to represent imported shared library stubs
Shared library stubs can be used for linking, but not at runtime.
Their role is similar to import libraries on Windows, so represent
their location with the `IMPORTED_IMPLIB` target property.
Fixes: #24940
Diffstat (limited to 'Source/cmComputeLinkInformation.cxx')
-rw-r--r-- | Source/cmComputeLinkInformation.cxx | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx index 04e4fc7..f4bb8b1 100644 --- a/Source/cmComputeLinkInformation.cxx +++ b/Source/cmComputeLinkInformation.cxx @@ -2241,16 +2241,20 @@ void cmComputeLinkInformation::AddLibraryRuntimeInfo( if (target->GetType() != cmStateEnums::SHARED_LIBRARY) { return; } + auto const* info = target->GetImportInfo(this->Config); // Try to get the soname of the library. Only files with this name // could possibly conflict. - 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); + 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); + } } } |