cmFileSet.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file LICENSE.rst or https://cmake.org/licensing for details. */
  3. #pragma once
  4. #include <cstddef>
  5. #include <map>
  6. #include <memory>
  7. #include <string>
  8. #include <vector>
  9. #include <cm/string_view>
  10. #include <cmext/string_view>
  11. #include "cmListFileCache.h"
  12. #include "cmPropertyMap.h"
  13. #include "cmValue.h"
  14. namespace cm {
  15. namespace GenEx {
  16. struct Context;
  17. }
  18. }
  19. class cmCompiledGeneratorExpression;
  20. struct cmGeneratorExpressionDAGChecker;
  21. class cmGeneratorTarget;
  22. class cmMakefile;
  23. enum class cmFileSetVisibility
  24. {
  25. Private,
  26. Public,
  27. Interface,
  28. };
  29. cm::static_string_view cmFileSetVisibilityToName(cmFileSetVisibility vis);
  30. cmFileSetVisibility cmFileSetVisibilityFromName(cm::string_view name,
  31. cmMakefile* mf);
  32. bool cmFileSetVisibilityIsForSelf(cmFileSetVisibility vis);
  33. bool cmFileSetVisibilityIsForInterface(cmFileSetVisibility vis);
  34. bool cmFileSetTypeCanBeIncluded(std::string const& type);
  35. class cmFileSet
  36. {
  37. public:
  38. cmFileSet(cmMakefile* makefile, std::string name, std::string type,
  39. cmFileSetVisibility visibility);
  40. std::string const& GetName() const { return this->Name; }
  41. std::string const& GetType() const { return this->Type; }
  42. cmFileSetVisibility GetVisibility() const { return this->Visibility; }
  43. cmMakefile* GetMakefile() const { return this->Makefile; }
  44. void CopyEntries(cmFileSet const* fs);
  45. void ClearDirectoryEntries();
  46. void AddDirectoryEntry(BT<std::string> directories);
  47. std::vector<BT<std::string>> const& GetDirectoryEntries() const
  48. {
  49. return this->DirectoryEntries;
  50. }
  51. void ClearFileEntries();
  52. void AddFileEntry(BT<std::string> files);
  53. std::vector<BT<std::string>> const& GetFileEntries() const
  54. {
  55. return this->FileEntries;
  56. }
  57. std::vector<std::unique_ptr<cmCompiledGeneratorExpression>>
  58. CompileFileEntries() const;
  59. std::vector<std::unique_ptr<cmCompiledGeneratorExpression>>
  60. CompileDirectoryEntries() const;
  61. std::vector<std::string> EvaluateDirectoryEntries(
  62. std::vector<std::unique_ptr<cmCompiledGeneratorExpression>> const& cges,
  63. cm::GenEx::Context const& context, cmGeneratorTarget const* target,
  64. cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
  65. void EvaluateFileEntry(
  66. std::vector<std::string> const& dirs,
  67. std::map<std::string, std::vector<std::string>>& filesPerDir,
  68. std::unique_ptr<cmCompiledGeneratorExpression> const& cge,
  69. cm::GenEx::Context const& context, cmGeneratorTarget const* target,
  70. cmGeneratorExpressionDAGChecker* dagChecker = nullptr) const;
  71. static bool IsValidName(std::string const& name);
  72. //! Set/Get a property of this file set
  73. void SetProperty(std::string const& prop, cmValue value);
  74. void SetProperty(std::string const& prop, std::nullptr_t)
  75. {
  76. this->SetProperty(prop, cmValue{ nullptr });
  77. }
  78. void RemoveProperty(std::string const& prop)
  79. {
  80. this->SetProperty(prop, cmValue{ nullptr });
  81. }
  82. void SetProperty(std::string const& prop, std::string const& value)
  83. {
  84. this->SetProperty(prop, cmValue{ value });
  85. }
  86. void AppendProperty(std::string const& prop, std::string const& value,
  87. bool asString = false);
  88. cmValue GetProperty(std::string const& prop) const;
  89. private:
  90. cmMakefile* Makefile;
  91. std::string Name;
  92. std::string Type;
  93. cmFileSetVisibility Visibility;
  94. std::vector<BT<std::string>> DirectoryEntries;
  95. std::vector<BT<std::string>> FileEntries;
  96. cmPropertyMap Properties;
  97. std::vector<BT<std::string>> CompileOptions;
  98. std::vector<BT<std::string>> CompileDefinitions;
  99. std::vector<BT<std::string>> IncludeDirectories;
  100. static std::string const propCOMPILE_DEFINITIONS;
  101. static std::string const propCOMPILE_OPTIONS;
  102. static std::string const propINCLUDE_DIRECTORIES;
  103. };