cmLinkLineComputer: Add ComputeLinkPath overload with backtraces

This commit is contained in:
Justin Goshi
2019-09-11 10:37:03 -07:00
committed by Brad King
parent 0c6468178a
commit 0ac9dcb807
2 changed files with 35 additions and 9 deletions
+27 -9
View File
@@ -4,10 +4,12 @@
#include "cmLinkLineComputer.h"
#include <sstream>
#include <utility>
#include <vector>
#include "cmComputeLinkInformation.h"
#include "cmGeneratorTarget.h"
#include "cmListFileCache.h"
#include "cmOutputConverter.h"
#include "cmStateDirectory.h"
#include "cmStateTypes.h"
@@ -63,6 +65,7 @@ std::string cmLinkLineComputer::ComputeLinkLibs(cmComputeLinkInformation& cli)
item.Target->GetType() == cmStateEnums::INTERFACE_LIBRARY) {
continue;
}
if (item.IsPath) {
linkLibs += cli.GetLibLinkFileFlag();
linkLibs +=
@@ -72,6 +75,7 @@ std::string cmLinkLineComputer::ComputeLinkLibs(cmComputeLinkInformation& cli)
}
linkLibs += " ";
}
return linkLibs;
}
@@ -101,8 +105,19 @@ std::string cmLinkLineComputer::ComputeLinkPath(
std::string const& libPathTerminator)
{
std::string linkPath;
std::vector<BT<std::string>> linkPathList;
this->ComputeLinkPath(cli, libPathFlag, libPathTerminator, linkPathList);
cli.AppendValues(linkPath, linkPathList);
return linkPath;
}
void cmLinkLineComputer::ComputeLinkPath(
cmComputeLinkInformation& cli, std::string const& libPathFlag,
std::string const& libPathTerminator, std::vector<BT<std::string>>& linkPath)
{
if (cli.GetLinkLanguage() == "Swift") {
std::string linkPathNoBT;
for (const cmComputeLinkInformation::Item& item : cli.GetItems()) {
const cmGeneratorTarget* target = item.Target;
if (!target) {
@@ -116,20 +131,23 @@ std::string cmLinkLineComputer::ComputeLinkPath(
type = cmStateEnums::ImportLibraryArtifact;
}
linkPath += cmStrCat(" ", libPathFlag,
item.Target->GetDirectory(cli.GetConfig(), type),
libPathTerminator, " ");
linkPathNoBT += cmStrCat(
" ", libPathFlag, item.Target->GetDirectory(cli.GetConfig(), type),
libPathTerminator, " ");
}
}
if (!linkPathNoBT.empty()) {
linkPath.emplace_back(std::move(linkPathNoBT));
}
}
for (std::string const& libDir : cli.GetDirectories()) {
linkPath +=
cmStrCat(" ", libPathFlag, this->ConvertToOutputForExisting(libDir),
libPathTerminator, " ");
for (BT<std::string> libDir : cli.GetDirectoriesWithBacktraces()) {
libDir.Value = cmStrCat(" ", libPathFlag,
this->ConvertToOutputForExisting(libDir.Value),
libPathTerminator, " ");
linkPath.emplace_back(libDir);
}
return linkPath;
}
std::string cmLinkLineComputer::ComputeRPath(cmComputeLinkInformation& cli)
+8
View File
@@ -7,12 +7,15 @@
#include "cmConfigure.h" // IWYU pragma: keep
#include <string>
#include <vector>
#include "cmStateDirectory.h"
class cmComputeLinkInformation;
class cmGeneratorTarget;
class cmOutputConverter;
template <typename T>
class BT;
class cmLinkLineComputer
{
@@ -34,6 +37,11 @@ public:
std::string const& libPathFlag,
std::string const& libPathTerminator);
void ComputeLinkPath(cmComputeLinkInformation& cli,
std::string const& libPathFlag,
std::string const& libPathTerminator,
std::vector<BT<std::string>>& linkPath);
std::string ComputeFrameworkPath(cmComputeLinkInformation& cli,
std::string const& fwSearchFlag);