1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-15 12:16:40 +08:00

cmLinkLineComputer: Add ComputeLinkLibs overload with backtraces

This commit is contained in:
Justin Goshi
2019-09-13 10:59:53 -07:00
committed by Brad King
parent 0ac9dcb807
commit d4d0dd0f6a
3 changed files with 35 additions and 6 deletions

View File

@@ -70,6 +70,8 @@ public:
std::string GetConfig() const { return this->Config; }
const cmGeneratorTarget* GetTarget() { return this->Target; }
private:
void AddItem(std::string const& item, const cmGeneratorTarget* tgt);
void AddSharedDepItem(std::string const& item, cmGeneratorTarget const* tgt);

View File

@@ -9,6 +9,7 @@
#include "cmComputeLinkInformation.h"
#include "cmGeneratorTarget.h"
#include "cmLinkItem.h"
#include "cmListFileCache.h"
#include "cmOutputConverter.h"
#include "cmStateDirectory.h"
@@ -58,6 +59,15 @@ std::string cmLinkLineComputer::ConvertToLinkReference(
std::string cmLinkLineComputer::ComputeLinkLibs(cmComputeLinkInformation& cli)
{
std::string linkLibs;
std::vector<BT<std::string>> linkLibsList;
this->ComputeLinkLibs(cli, linkLibsList);
cli.AppendValues(linkLibs, linkLibsList);
return linkLibs;
}
void cmLinkLineComputer::ComputeLinkLibs(
cmComputeLinkInformation& cli, std::vector<BT<std::string>>& linkLibraries)
{
using ItemVector = cmComputeLinkInformation::ItemVector;
ItemVector const& items = cli.GetItems();
for (auto const& item : items) {
@@ -66,17 +76,32 @@ std::string cmLinkLineComputer::ComputeLinkLibs(cmComputeLinkInformation& cli)
continue;
}
BT<std::string> linkLib;
if (item.IsPath) {
linkLibs += cli.GetLibLinkFileFlag();
linkLibs +=
linkLib.Value += cli.GetLibLinkFileFlag();
linkLib.Value +=
this->ConvertToOutputFormat(this->ConvertToLinkReference(item.Value));
} else {
linkLibs += item.Value;
linkLib.Value += item.Value;
}
linkLib.Value += " ";
const cmLinkImplementation* linkImpl =
cli.GetTarget()->GetLinkImplementation(cli.GetConfig());
for (const cmLinkImplItem& iter : linkImpl->Libraries) {
if (iter.Target != nullptr &&
iter.Target->GetType() != cmStateEnums::INTERFACE_LIBRARY) {
std::string libPath = iter.Target->GetLocation(cli.GetConfig());
if (item.Value == libPath) {
linkLib.Backtrace = iter.Backtrace;
break;
}
}
linkLibs += " ";
}
return linkLibs;
linkLibraries.emplace_back(linkLib);
}
}
std::string cmLinkLineComputer::ConvertToOutputFormat(std::string const& input)

View File

@@ -53,6 +53,8 @@ public:
protected:
std::string ComputeLinkLibs(cmComputeLinkInformation& cli);
void ComputeLinkLibs(cmComputeLinkInformation& cli,
std::vector<BT<std::string>>& linkLibraries);
std::string ComputeRPath(cmComputeLinkInformation& cli);
std::string ConvertToOutputFormat(std::string const& input);