diff options
author | Brad King <brad.king@kitware.com> | 2024-05-16 20:37:48 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2024-05-20 23:23:13 (GMT) |
commit | 881a46819e014e9953b32d5caf87cfccd4a3c3f9 (patch) | |
tree | 575b638ee78a605bad6b9e44d1013b03ea68d445 /Source/cmGeneratorTarget.cxx | |
parent | 0a3c97308dc497910523a4c962f50ec2096a16cb (diff) | |
download | CMake-881a46819e014e9953b32d5caf87cfccd4a3c3f9.zip CMake-881a46819e014e9953b32d5caf87cfccd4a3c3f9.tar.gz CMake-881a46819e014e9953b32d5caf87cfccd4a3c3f9.tar.bz2 |
cmGeneratorTarget: Factor LINK_DIRECTORIES impl into own source
Diffstat (limited to 'Source/cmGeneratorTarget.cxx')
-rw-r--r-- | Source/cmGeneratorTarget.cxx | 125 |
1 files changed, 0 insertions, 125 deletions
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index e0e118f..5898a63 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -3697,131 +3697,6 @@ std::vector<BT<std::string>> cmGeneratorTarget::GetStaticLibraryLinkOptions( return result; } -namespace { -void processLinkDirectories(cmGeneratorTarget const* tgt, - EvaluatedTargetPropertyEntries& entries, - std::vector<BT<std::string>>& directories, - std::unordered_set<std::string>& uniqueDirectories, - bool debugDirectories) -{ - for (EvaluatedTargetPropertyEntry& entry : entries.Entries) { - cmLinkImplItem const& item = entry.LinkImplItem; - std::string const& targetName = item.AsStr(); - - std::string usedDirectories; - for (std::string& entryDirectory : entry.Values) { - if (!cmSystemTools::FileIsFullPath(entryDirectory)) { - std::ostringstream e; - bool noMessage = false; - MessageType messageType = MessageType::FATAL_ERROR; - if (!targetName.empty()) { - /* clang-format off */ - e << "Target \"" << targetName << "\" contains relative " - "path in its INTERFACE_LINK_DIRECTORIES:\n" - " \"" << entryDirectory << "\""; - /* clang-format on */ - } else { - switch (tgt->GetPolicyStatusCMP0081()) { - case cmPolicies::WARN: { - e << cmPolicies::GetPolicyWarning(cmPolicies::CMP0081) << "\n"; - messageType = MessageType::AUTHOR_WARNING; - } break; - case cmPolicies::OLD: - noMessage = true; - break; - case cmPolicies::REQUIRED_IF_USED: - case cmPolicies::REQUIRED_ALWAYS: - case cmPolicies::NEW: - // Issue the fatal message. - break; - } - e << "Found relative path while evaluating link directories of " - "\"" - << tgt->GetName() << "\":\n \"" << entryDirectory << "\"\n"; - } - if (!noMessage) { - tgt->GetLocalGenerator()->IssueMessage(messageType, e.str()); - if (messageType == MessageType::FATAL_ERROR) { - return; - } - } - } - - // Sanitize the path the same way the link_directories command does - // in case projects set the LINK_DIRECTORIES property directly. - cmSystemTools::ConvertToUnixSlashes(entryDirectory); - if (uniqueDirectories.insert(entryDirectory).second) { - directories.emplace_back(entryDirectory, entry.Backtrace); - if (debugDirectories) { - usedDirectories += " * " + entryDirectory + "\n"; - } - } - } - if (!usedDirectories.empty()) { - tgt->GetLocalGenerator()->GetCMakeInstance()->IssueMessage( - MessageType::LOG, - std::string("Used link directories for target ") + tgt->GetName() + - ":\n" + usedDirectories, - entry.Backtrace); - } - } -} -} - -void cmGeneratorTarget::GetLinkDirectories(std::vector<std::string>& result, - const std::string& config, - const std::string& language) const -{ - std::vector<BT<std::string>> tmp = - this->GetLinkDirectories(config, language); - result.reserve(tmp.size()); - for (BT<std::string>& v : tmp) { - result.emplace_back(std::move(v.Value)); - } -} - -std::vector<BT<std::string>> cmGeneratorTarget::GetLinkDirectories( - std::string const& config, std::string const& language) const -{ - ConfigAndLanguage cacheKey( - config, cmStrCat(language, this->IsDeviceLink() ? "-device" : "")); - { - auto it = this->LinkDirectoriesCache.find(cacheKey); - if (it != this->LinkDirectoriesCache.end()) { - return it->second; - } - } - std::vector<BT<std::string>> result; - std::unordered_set<std::string> uniqueDirectories; - - cmGeneratorExpressionDAGChecker dagChecker(this, "LINK_DIRECTORIES", nullptr, - nullptr, this->LocalGenerator); - - cmList debugProperties{ this->Makefile->GetDefinition( - "CMAKE_DEBUG_TARGET_PROPERTIES") }; - bool debugDirectories = !this->DebugLinkDirectoriesDone && - cm::contains(debugProperties, "LINK_DIRECTORIES"); - - if (this->GlobalGenerator->GetConfigureDoneCMP0026()) { - this->DebugLinkDirectoriesDone = true; - } - - EvaluatedTargetPropertyEntries entries = EvaluateTargetPropertyEntries( - this, config, language, &dagChecker, this->LinkDirectoriesEntries); - - AddInterfaceEntries(this, config, "INTERFACE_LINK_DIRECTORIES", language, - &dagChecker, entries, IncludeRuntimeInterface::Yes, - this->GetPolicyStatusCMP0099() == cmPolicies::NEW - ? UseTo::Link - : UseTo::Compile); - - processLinkDirectories(this, entries, result, uniqueDirectories, - debugDirectories); - - this->LinkDirectoriesCache.emplace(cacheKey, result); - return result; -} - void cmGeneratorTarget::GetLinkDepends(std::vector<std::string>& result, const std::string& config, const std::string& language) const |