resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmTargetPropCommandBase.h
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
5 #include "cmConfigure.h" // IWYU pragma: keep
6
7 #include <string>
8 #include <vector>
9
10 class cmExecutionStatus;
11 class cmMakefile;
12 class cmTarget;
13
14 class cmTargetPropCommandBase
15 {
16 public:
17   cmTargetPropCommandBase(cmExecutionStatus& status);
18   virtual ~cmTargetPropCommandBase() = default;
19
20   void SetError(std::string const& e);
21
22   enum ArgumentFlags
23   {
24     NO_FLAGS = 0x0,
25     PROCESS_BEFORE = 0x1,
26     PROCESS_AFTER = 0x2,
27     PROCESS_SYSTEM = 0x3,
28     PROCESS_REUSE_FROM = 0x4
29   };
30
31   bool HandleArguments(std::vector<std::string> const& args,
32                        const std::string& prop,
33                        ArgumentFlags flags = NO_FLAGS);
34
35 protected:
36   std::string Property;
37   cmTarget* Target = nullptr;
38   cmMakefile* Makefile;
39
40   virtual void HandleInterfaceContent(cmTarget* tgt,
41                                       const std::vector<std::string>& content,
42                                       bool prepend, bool system);
43   virtual bool PopulateTargetProperties(
44     const std::string& scope, const std::vector<std::string>& content,
45     bool prepend, bool system);
46
47 private:
48   virtual void HandleMissingTarget(const std::string& name) = 0;
49
50   virtual bool HandleDirectContent(cmTarget* tgt,
51                                    const std::vector<std::string>& content,
52                                    bool prepend, bool system) = 0;
53
54   virtual std::string Join(const std::vector<std::string>& content) = 0;
55
56   bool ProcessContentArgs(std::vector<std::string> const& args,
57                           unsigned int& argIndex, bool prepend, bool system);
58
59   cmExecutionStatus& Status;
60 };