summaryrefslogtreecommitdiffstats
path: root/Source/cmLinkLineComputer.cxx
diff options
context:
space:
mode:
authorJustin Goshi <jgoshi@microsoft.com>2019-09-11 17:37:03 (GMT)
committerBrad King <brad.king@kitware.com>2019-09-18 17:59:07 (GMT)
commit0ac9dcb807d6e7b1f905bc9685f8ae217dfce38b (patch)
tree2689f0a999e3f061bd41c1a95950f11dc9f40405 /Source/cmLinkLineComputer.cxx
parent0c6468178a76b6a2a11791b010ab01c97855affa (diff)
downloadCMake-0ac9dcb807d6e7b1f905bc9685f8ae217dfce38b.zip
CMake-0ac9dcb807d6e7b1f905bc9685f8ae217dfce38b.tar.gz
CMake-0ac9dcb807d6e7b1f905bc9685f8ae217dfce38b.tar.bz2
cmLinkLineComputer: Add ComputeLinkPath overload with backtraces
Diffstat (limited to 'Source/cmLinkLineComputer.cxx')
-rw-r--r--Source/cmLinkLineComputer.cxx36
1 files changed, 27 insertions, 9 deletions
diff --git a/Source/cmLinkLineComputer.cxx b/Source/cmLinkLineComputer.cxx
index 91c551f..d5225db 100644
--- a/Source/cmLinkLineComputer.cxx
+++ b/Source/cmLinkLineComputer.cxx
@@ -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, " ");
}
}
- }
- for (std::string const& libDir : cli.GetDirectories()) {
- linkPath +=
- cmStrCat(" ", libPathFlag, this->ConvertToOutputForExisting(libDir),
- libPathTerminator, " ");
+ if (!linkPathNoBT.empty()) {
+ linkPath.emplace_back(std::move(linkPathNoBT));
+ }
}
- return linkPath;
+ for (BT<std::string> libDir : cli.GetDirectoriesWithBacktraces()) {
+ libDir.Value = cmStrCat(" ", libPathFlag,
+ this->ConvertToOutputForExisting(libDir.Value),
+ libPathTerminator, " ");
+ linkPath.emplace_back(libDir);
+ }
}
std::string cmLinkLineComputer::ComputeRPath(cmComputeLinkInformation& cli)