cmGeneratorExpressionEvaluationFile.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #pragma once
  4. #include "cmConfigure.h" // IWYU pragma: keep
  5. #include <map>
  6. #include <memory>
  7. #include <string>
  8. #include <vector>
  9. #include "cm_sys_stat.h"
  10. #include "cmGeneratorExpression.h"
  11. #include "cmPolicies.h"
  12. class cmGeneratorTarget;
  13. class cmLocalGenerator;
  14. class cmGeneratorExpressionEvaluationFile
  15. {
  16. public:
  17. cmGeneratorExpressionEvaluationFile(
  18. std::string input, std::string target,
  19. std::unique_ptr<cmCompiledGeneratorExpression> outputFileExpr,
  20. std::unique_ptr<cmCompiledGeneratorExpression> condition,
  21. bool inputIsContent, mode_t permissions,
  22. cmPolicies::PolicyStatus policyStatusCMP0070);
  23. void Generate(cmLocalGenerator* lg);
  24. std::vector<std::string> GetFiles() const { return this->Files; }
  25. void CreateOutputFile(cmLocalGenerator* lg, std::string const& config);
  26. private:
  27. void Generate(cmLocalGenerator* lg, const std::string& config,
  28. const std::string& lang,
  29. cmCompiledGeneratorExpression* inputExpression,
  30. std::map<std::string, std::string>& outputFiles, mode_t perm);
  31. std::string GetInputFileName(cmLocalGenerator* lg);
  32. std::string GetOutputFileName(cmLocalGenerator* lg,
  33. cmGeneratorTarget* target,
  34. const std::string& config,
  35. const std::string& lang);
  36. enum PathRole
  37. {
  38. PathForInput,
  39. PathForOutput
  40. };
  41. std::string FixRelativePath(std::string const& filePath, PathRole role,
  42. cmLocalGenerator* lg);
  43. const std::string Input;
  44. const std::string Target;
  45. const std::unique_ptr<cmCompiledGeneratorExpression> OutputFileExpr;
  46. const std::unique_ptr<cmCompiledGeneratorExpression> Condition;
  47. std::vector<std::string> Files;
  48. const bool InputIsContent;
  49. cmPolicies::PolicyStatus PolicyStatusCMP0070;
  50. mode_t Permissions;
  51. };