mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-13 01:29:02 -05:00
cmLinkLineComputer: Add ComputeLinkPath overload with backtraces
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user