Coverage Report

Created: 2026-10-28 06:38

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/CMake/Source/cmLinkDirectoriesCommand.cxx
Line
Count
Source
1
/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2
   file LICENSE.rst or https://cmake.org/licensing for details.  */
3
#include "cmLinkDirectoriesCommand.h"
4
5
#include <utility>
6
7
#include "cmDiagnostics.h"
8
#include "cmExecutionStatus.h"
9
#include "cmGeneratorExpression.h"
10
#include "cmList.h"
11
#include "cmMakefile.h"
12
#include "cmStringAlgorithms.h"
13
#include "cmSystemTools.h"
14
15
static void AddLinkDir(cmMakefile& mf, std::string const& dir,
16
                       std::vector<std::string>& directories);
17
18
bool cmLinkDirectoriesCommand(std::vector<std::string> const& args,
19
                              cmExecutionStatus& status)
20
0
{
21
0
  cmMakefile& mf = status.GetMakefile();
22
23
0
  mf.IssueDiagnostic(cmDiagnostics::CMD_NON_TARGET_DIRECTIVE,
24
0
                     "Use of non-target directives is not recommended. "
25
0
                     "Consider target_link_directories instead.");
26
27
0
  if (args.empty()) {
28
0
    return true;
29
0
  }
30
31
0
  bool before = mf.IsOn("CMAKE_LINK_DIRECTORIES_BEFORE");
32
33
0
  auto i = args.cbegin();
34
0
  if ((*i) == "BEFORE") {
35
0
    before = true;
36
0
    ++i;
37
0
  } else if ((*i) == "AFTER") {
38
0
    before = false;
39
0
    ++i;
40
0
  }
41
42
0
  std::vector<std::string> directories;
43
0
  for (; i != args.cend(); ++i) {
44
0
    AddLinkDir(mf, *i, directories);
45
0
  }
46
47
0
  mf.AddLinkDirectory(cmList::to_string(directories), before);
48
49
0
  return true;
50
0
}
51
52
static void AddLinkDir(cmMakefile& mf, std::string const& dir,
53
                       std::vector<std::string>& directories)
54
0
{
55
0
  std::string unixPath = dir;
56
0
  cmSystemTools::ConvertToUnixSlashes(unixPath);
57
0
  if (!cmSystemTools::FileIsFullPath(unixPath) &&
58
0
      !cmGeneratorExpression::StartsWithGeneratorExpression(unixPath)) {
59
0
    unixPath =
60
0
      cmStrCat(mf.GetCurrentSourceDirectory(), '/', std::move(unixPath));
61
0
  }
62
0
  directories.push_back(unixPath);
63
0
}