Browse Source

cmGeneratorTarget: Factor TargetPropertyEntry into own source

Brad King 1 year ago
parent
commit
d0fc932528
4 changed files with 191 additions and 167 deletions
  1. 1 0
      Source/CMakeLists.txt
  2. 0 167
      Source/cmGeneratorTarget.cxx
  3. 189 0
      Source/cmGeneratorTarget_TargetPropertyEntry.cxx
  4. 1 0
      bootstrap

+ 1 - 0
Source/CMakeLists.txt

@@ -285,6 +285,7 @@ add_library(
   cmGeneratorExpression.h
   cmGeneratorTarget.cxx
   cmGeneratorTarget.h
+  cmGeneratorTarget_TargetPropertyEntry.cxx
   cmLinkItemGraphVisitor.cxx
   cmLinkItemGraphVisitor.h
   cmGetPipes.cxx

+ 0 - 167
Source/cmGeneratorTarget.cxx

@@ -118,173 +118,6 @@ cmTargetPropertyComputer::ComputeLocation<cmGeneratorTarget>(
   return tgt->GetLocation(config);
 }
 
-cmLinkImplItem cmGeneratorTarget::TargetPropertyEntry::NoLinkImplItem;
-
-class TargetPropertyEntryString : public cmGeneratorTarget::TargetPropertyEntry
-{
-public:
-  TargetPropertyEntryString(BT<std::string> propertyValue,
-                            cmLinkImplItem const& item = NoLinkImplItem)
-    : cmGeneratorTarget::TargetPropertyEntry(item)
-    , PropertyValue(std::move(propertyValue))
-  {
-  }
-
-  const std::string& Evaluate(cmLocalGenerator*, const std::string&,
-                              cmGeneratorTarget const*,
-                              cmGeneratorExpressionDAGChecker*,
-                              std::string const&) const override
-  {
-    return this->PropertyValue.Value;
-  }
-
-  cmListFileBacktrace GetBacktrace() const override
-  {
-    return this->PropertyValue.Backtrace;
-  }
-  std::string const& GetInput() const override
-  {
-    return this->PropertyValue.Value;
-  }
-
-private:
-  BT<std::string> PropertyValue;
-};
-
-class TargetPropertyEntryGenex : public cmGeneratorTarget::TargetPropertyEntry
-{
-public:
-  TargetPropertyEntryGenex(std::unique_ptr<cmCompiledGeneratorExpression> cge,
-                           cmLinkImplItem const& item = NoLinkImplItem)
-    : cmGeneratorTarget::TargetPropertyEntry(item)
-    , ge(std::move(cge))
-  {
-  }
-
-  const std::string& Evaluate(cmLocalGenerator* lg, const std::string& config,
-                              cmGeneratorTarget const* headTarget,
-                              cmGeneratorExpressionDAGChecker* dagChecker,
-                              std::string const& language) const override
-  {
-    return this->ge->Evaluate(lg, config, headTarget, dagChecker, nullptr,
-                              language);
-  }
-
-  cmListFileBacktrace GetBacktrace() const override
-  {
-    return this->ge->GetBacktrace();
-  }
-
-  std::string const& GetInput() const override { return this->ge->GetInput(); }
-
-  bool GetHadContextSensitiveCondition() const override
-  {
-    return this->ge->GetHadContextSensitiveCondition();
-  }
-
-private:
-  const std::unique_ptr<cmCompiledGeneratorExpression> ge;
-};
-
-class TargetPropertyEntryFileSet
-  : public cmGeneratorTarget::TargetPropertyEntry
-{
-public:
-  TargetPropertyEntryFileSet(
-    std::vector<std::string> dirs, bool contextSensitiveDirs,
-    std::unique_ptr<cmCompiledGeneratorExpression> entryCge,
-    const cmFileSet* fileSet, cmLinkImplItem const& item = NoLinkImplItem)
-    : cmGeneratorTarget::TargetPropertyEntry(item)
-    , BaseDirs(std::move(dirs))
-    , ContextSensitiveDirs(contextSensitiveDirs)
-    , EntryCge(std::move(entryCge))
-    , FileSet(fileSet)
-  {
-  }
-
-  const std::string& Evaluate(cmLocalGenerator* lg, const std::string& config,
-                              cmGeneratorTarget const* headTarget,
-                              cmGeneratorExpressionDAGChecker* dagChecker,
-                              std::string const& /*lang*/) const override
-  {
-    std::map<std::string, std::vector<std::string>> filesPerDir;
-    this->FileSet->EvaluateFileEntry(this->BaseDirs, filesPerDir,
-                                     this->EntryCge, lg, config, headTarget,
-                                     dagChecker);
-
-    std::vector<std::string> files;
-    for (auto const& it : filesPerDir) {
-      files.insert(files.end(), it.second.begin(), it.second.end());
-    }
-
-    static std::string filesStr;
-    filesStr = cmList::to_string(files);
-    return filesStr;
-  }
-
-  cmListFileBacktrace GetBacktrace() const override
-  {
-    return this->EntryCge->GetBacktrace();
-  }
-
-  std::string const& GetInput() const override
-  {
-    return this->EntryCge->GetInput();
-  }
-
-  bool GetHadContextSensitiveCondition() const override
-  {
-    return this->ContextSensitiveDirs ||
-      this->EntryCge->GetHadContextSensitiveCondition();
-  }
-
-private:
-  const std::vector<std::string> BaseDirs;
-  const bool ContextSensitiveDirs;
-  const std::unique_ptr<cmCompiledGeneratorExpression> EntryCge;
-  const cmFileSet* FileSet;
-};
-
-std::unique_ptr<cmGeneratorTarget::TargetPropertyEntry>
-cmGeneratorTarget::TargetPropertyEntry::Create(
-  cmake& cmakeInstance, const BT<std::string>& propertyValue,
-  bool evaluateForBuildsystem)
-{
-  if (cmGeneratorExpression::Find(propertyValue.Value) != std::string::npos) {
-    cmGeneratorExpression ge(cmakeInstance, propertyValue.Backtrace);
-    std::unique_ptr<cmCompiledGeneratorExpression> cge =
-      ge.Parse(propertyValue.Value);
-    cge->SetEvaluateForBuildsystem(evaluateForBuildsystem);
-    return std::unique_ptr<cmGeneratorTarget::TargetPropertyEntry>(
-      cm::make_unique<TargetPropertyEntryGenex>(std::move(cge)));
-  }
-
-  return std::unique_ptr<cmGeneratorTarget::TargetPropertyEntry>(
-    cm::make_unique<TargetPropertyEntryString>(propertyValue));
-}
-
-std::unique_ptr<cmGeneratorTarget::TargetPropertyEntry>
-cmGeneratorTarget::TargetPropertyEntry::CreateFileSet(
-  std::vector<std::string> dirs, bool contextSensitiveDirs,
-  std::unique_ptr<cmCompiledGeneratorExpression> entryCge,
-  const cmFileSet* fileSet, cmLinkImplItem const& item)
-{
-  return cm::make_unique<TargetPropertyEntryFileSet>(
-    std::move(dirs), contextSensitiveDirs, std::move(entryCge), fileSet, item);
-}
-
-cmGeneratorTarget::TargetPropertyEntry::TargetPropertyEntry(
-  cmLinkImplItem const& item)
-  : LinkImplItem(item)
-{
-}
-
-bool cmGeneratorTarget::TargetPropertyEntry::GetHadContextSensitiveCondition()
-  const
-{
-  return false;
-}
-
 static void CreatePropertyGeneratorExpressions(
   cmake& cmakeInstance, cmBTStringRange entries,
   std::vector<std::unique_ptr<cmGeneratorTarget::TargetPropertyEntry>>& items,

+ 189 - 0
Source/cmGeneratorTarget_TargetPropertyEntry.cxx

@@ -0,0 +1,189 @@
+/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
+   file Copyright.txt or https://cmake.org/licensing for details.  */
+/* clang-format off */
+#include "cmGeneratorTarget.h"
+/* clang-format on */
+
+#include <map>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include <cm/memory>
+
+#include "cmFileSet.h"
+#include "cmGeneratorExpression.h"
+#include "cmLinkItem.h"
+#include "cmList.h"
+#include "cmListFileCache.h"
+
+class cmLocalGenerator;
+class cmake;
+struct cmGeneratorExpressionDAGChecker;
+
+cmLinkImplItem cmGeneratorTarget::TargetPropertyEntry::NoLinkImplItem;
+
+class TargetPropertyEntryString : public cmGeneratorTarget::TargetPropertyEntry
+{
+public:
+  TargetPropertyEntryString(BT<std::string> propertyValue,
+                            cmLinkImplItem const& item = NoLinkImplItem)
+    : cmGeneratorTarget::TargetPropertyEntry(item)
+    , PropertyValue(std::move(propertyValue))
+  {
+  }
+
+  const std::string& Evaluate(cmLocalGenerator*, const std::string&,
+                              cmGeneratorTarget const*,
+                              cmGeneratorExpressionDAGChecker*,
+                              std::string const&) const override
+  {
+    return this->PropertyValue.Value;
+  }
+
+  cmListFileBacktrace GetBacktrace() const override
+  {
+    return this->PropertyValue.Backtrace;
+  }
+  std::string const& GetInput() const override
+  {
+    return this->PropertyValue.Value;
+  }
+
+private:
+  BT<std::string> PropertyValue;
+};
+
+class TargetPropertyEntryGenex : public cmGeneratorTarget::TargetPropertyEntry
+{
+public:
+  TargetPropertyEntryGenex(std::unique_ptr<cmCompiledGeneratorExpression> cge,
+                           cmLinkImplItem const& item = NoLinkImplItem)
+    : cmGeneratorTarget::TargetPropertyEntry(item)
+    , ge(std::move(cge))
+  {
+  }
+
+  const std::string& Evaluate(cmLocalGenerator* lg, const std::string& config,
+                              cmGeneratorTarget const* headTarget,
+                              cmGeneratorExpressionDAGChecker* dagChecker,
+                              std::string const& language) const override
+  {
+    return this->ge->Evaluate(lg, config, headTarget, dagChecker, nullptr,
+                              language);
+  }
+
+  cmListFileBacktrace GetBacktrace() const override
+  {
+    return this->ge->GetBacktrace();
+  }
+
+  std::string const& GetInput() const override { return this->ge->GetInput(); }
+
+  bool GetHadContextSensitiveCondition() const override
+  {
+    return this->ge->GetHadContextSensitiveCondition();
+  }
+
+private:
+  const std::unique_ptr<cmCompiledGeneratorExpression> ge;
+};
+
+class TargetPropertyEntryFileSet
+  : public cmGeneratorTarget::TargetPropertyEntry
+{
+public:
+  TargetPropertyEntryFileSet(
+    std::vector<std::string> dirs, bool contextSensitiveDirs,
+    std::unique_ptr<cmCompiledGeneratorExpression> entryCge,
+    const cmFileSet* fileSet, cmLinkImplItem const& item = NoLinkImplItem)
+    : cmGeneratorTarget::TargetPropertyEntry(item)
+    , BaseDirs(std::move(dirs))
+    , ContextSensitiveDirs(contextSensitiveDirs)
+    , EntryCge(std::move(entryCge))
+    , FileSet(fileSet)
+  {
+  }
+
+  const std::string& Evaluate(cmLocalGenerator* lg, const std::string& config,
+                              cmGeneratorTarget const* headTarget,
+                              cmGeneratorExpressionDAGChecker* dagChecker,
+                              std::string const& /*lang*/) const override
+  {
+    std::map<std::string, std::vector<std::string>> filesPerDir;
+    this->FileSet->EvaluateFileEntry(this->BaseDirs, filesPerDir,
+                                     this->EntryCge, lg, config, headTarget,
+                                     dagChecker);
+
+    std::vector<std::string> files;
+    for (auto const& it : filesPerDir) {
+      files.insert(files.end(), it.second.begin(), it.second.end());
+    }
+
+    static std::string filesStr;
+    filesStr = cmList::to_string(files);
+    return filesStr;
+  }
+
+  cmListFileBacktrace GetBacktrace() const override
+  {
+    return this->EntryCge->GetBacktrace();
+  }
+
+  std::string const& GetInput() const override
+  {
+    return this->EntryCge->GetInput();
+  }
+
+  bool GetHadContextSensitiveCondition() const override
+  {
+    return this->ContextSensitiveDirs ||
+      this->EntryCge->GetHadContextSensitiveCondition();
+  }
+
+private:
+  const std::vector<std::string> BaseDirs;
+  const bool ContextSensitiveDirs;
+  const std::unique_ptr<cmCompiledGeneratorExpression> EntryCge;
+  const cmFileSet* FileSet;
+};
+
+std::unique_ptr<cmGeneratorTarget::TargetPropertyEntry>
+cmGeneratorTarget::TargetPropertyEntry::Create(
+  cmake& cmakeInstance, const BT<std::string>& propertyValue,
+  bool evaluateForBuildsystem)
+{
+  if (cmGeneratorExpression::Find(propertyValue.Value) != std::string::npos) {
+    cmGeneratorExpression ge(cmakeInstance, propertyValue.Backtrace);
+    std::unique_ptr<cmCompiledGeneratorExpression> cge =
+      ge.Parse(propertyValue.Value);
+    cge->SetEvaluateForBuildsystem(evaluateForBuildsystem);
+    return std::unique_ptr<cmGeneratorTarget::TargetPropertyEntry>(
+      cm::make_unique<TargetPropertyEntryGenex>(std::move(cge)));
+  }
+
+  return std::unique_ptr<cmGeneratorTarget::TargetPropertyEntry>(
+    cm::make_unique<TargetPropertyEntryString>(propertyValue));
+}
+
+std::unique_ptr<cmGeneratorTarget::TargetPropertyEntry>
+cmGeneratorTarget::TargetPropertyEntry::CreateFileSet(
+  std::vector<std::string> dirs, bool contextSensitiveDirs,
+  std::unique_ptr<cmCompiledGeneratorExpression> entryCge,
+  const cmFileSet* fileSet, cmLinkImplItem const& item)
+{
+  return cm::make_unique<TargetPropertyEntryFileSet>(
+    std::move(dirs), contextSensitiveDirs, std::move(entryCge), fileSet, item);
+}
+
+cmGeneratorTarget::TargetPropertyEntry::TargetPropertyEntry(
+  cmLinkImplItem const& item)
+  : LinkImplItem(item)
+{
+}
+
+bool cmGeneratorTarget::TargetPropertyEntry::GetHadContextSensitiveCondition()
+  const
+{
+  return false;
+}

+ 1 - 0
bootstrap

@@ -381,6 +381,7 @@ CMAKE_CXX_SOURCES="\
   cmGeneratorExpressionNode \
   cmGeneratorExpressionParser \
   cmGeneratorTarget \
+  cmGeneratorTarget_TargetPropertyEntry \
   cmGetCMakePropertyCommand \
   cmGetDirectoryPropertyCommand \
   cmGetFilenameComponentCommand \