cmTargetPropCommandBase.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 <string>
  6. #include <vector>
  7. class cmExecutionStatus;
  8. class cmMakefile;
  9. class cmTarget;
  10. class cmTargetPropCommandBase
  11. {
  12. public:
  13. cmTargetPropCommandBase(cmExecutionStatus& status);
  14. virtual ~cmTargetPropCommandBase() = default;
  15. void SetError(std::string const& e);
  16. enum ArgumentFlags
  17. {
  18. NO_FLAGS = 0x0,
  19. PROCESS_BEFORE = 0x1,
  20. PROCESS_AFTER = 0x2,
  21. PROCESS_SYSTEM = 0x3,
  22. PROCESS_REUSE_FROM = 0x4
  23. };
  24. bool HandleArguments(std::vector<std::string> const& args,
  25. const std::string& prop,
  26. ArgumentFlags flags = NO_FLAGS);
  27. protected:
  28. std::string Property;
  29. cmTarget* Target = nullptr;
  30. cmMakefile* Makefile;
  31. virtual void HandleInterfaceContent(cmTarget* tgt,
  32. const std::vector<std::string>& content,
  33. bool prepend, bool system);
  34. private:
  35. virtual void HandleMissingTarget(const std::string& name) = 0;
  36. virtual bool HandleDirectContent(cmTarget* tgt,
  37. const std::vector<std::string>& content,
  38. bool prepend, bool system) = 0;
  39. virtual std::string Join(const std::vector<std::string>& content) = 0;
  40. bool ProcessContentArgs(std::vector<std::string> const& args,
  41. unsigned int& argIndex, bool prepend, bool system);
  42. bool PopulateTargetProperies(const std::string& scope,
  43. const std::vector<std::string>& content,
  44. bool prepend, bool system);
  45. cmExecutionStatus& Status;
  46. };