cmGeneratorExpressionEvaluationFile.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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 "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. namespace cm {
  13. namespace GenEx {
  14. struct Context;
  15. }
  16. }
  17. class cmGeneratorTarget;
  18. class cmLocalGenerator;
  19. class cmGeneratorExpressionEvaluationFile
  20. {
  21. public:
  22. cmGeneratorExpressionEvaluationFile(
  23. std::string input, std::string target,
  24. std::unique_ptr<cmCompiledGeneratorExpression> outputFileExpr,
  25. std::unique_ptr<cmCompiledGeneratorExpression> condition,
  26. bool inputIsContent, std::string newLineCharacter, mode_t permissions,
  27. cmPolicies::PolicyStatus policyStatusCMP0070);
  28. void Generate(cmLocalGenerator* lg);
  29. std::vector<std::string> GetFiles() const { return this->Files; }
  30. void CreateOutputFile(cmLocalGenerator* lg, std::string const& config);
  31. private:
  32. void Generate(cmLocalGenerator* lg, std::string const& config,
  33. std::string const& lang,
  34. cmCompiledGeneratorExpression* inputExpression,
  35. std::map<std::string, std::string>& outputFiles, mode_t perm);
  36. std::string GetInputFileName(cmLocalGenerator const* lg);
  37. std::string GetOutputFileName(cm::GenEx::Context const& context,
  38. cmGeneratorTarget* target);
  39. enum PathRole
  40. {
  41. PathForInput,
  42. PathForOutput
  43. };
  44. std::string FixRelativePath(std::string const& filePath, PathRole role,
  45. cmLocalGenerator const* lg);
  46. std::string const Input;
  47. std::string const Target;
  48. std::unique_ptr<cmCompiledGeneratorExpression> const OutputFileExpr;
  49. std::unique_ptr<cmCompiledGeneratorExpression> const Condition;
  50. std::vector<std::string> Files;
  51. bool const InputIsContent;
  52. std::string const NewLineCharacter;
  53. cmPolicies::PolicyStatus PolicyStatusCMP0070;
  54. mode_t Permissions;
  55. };