CMake Nightly Date Stamp
[kiteware-cmake.git] / Source / cmTargetPropCommandBase.h
blobac50b4d75b92e8b03b3e9801492226463d43c7a6
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
5 #include "cmConfigure.h" // IWYU pragma: keep
7 #include <string>
8 #include <vector>
10 class cmExecutionStatus;
11 class cmMakefile;
12 class cmTarget;
14 class cmTargetPropCommandBase
16 public:
17 cmTargetPropCommandBase(cmExecutionStatus& status);
18 virtual ~cmTargetPropCommandBase() = default;
20 void SetError(std::string const& e);
22 enum ArgumentFlags
24 NO_FLAGS = 0x0,
25 PROCESS_BEFORE = 0x1,
26 PROCESS_AFTER = 0x2,
27 PROCESS_SYSTEM = 0x4,
28 PROCESS_REUSE_FROM = 0x8
31 bool HandleArguments(std::vector<std::string> const& args,
32 const std::string& prop, unsigned int flags = NO_FLAGS);
34 protected:
35 std::string Property;
36 cmTarget* Target = nullptr;
37 cmMakefile* Makefile;
39 virtual void HandleInterfaceContent(cmTarget* tgt,
40 const std::vector<std::string>& content,
41 bool prepend, bool system);
42 virtual bool PopulateTargetProperties(
43 const std::string& scope, const std::vector<std::string>& content,
44 bool prepend, bool system);
46 private:
47 virtual void HandleMissingTarget(const std::string& name) = 0;
49 virtual bool HandleDirectContent(cmTarget* tgt,
50 const std::vector<std::string>& content,
51 bool prepend, bool system) = 0;
53 virtual std::string Join(const std::vector<std::string>& content) = 0;
55 bool ProcessContentArgs(std::vector<std::string> const& args,
56 unsigned int& argIndex, bool prepend, bool system);
58 cmExecutionStatus& Status;