resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmLocalCommonGenerator.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 <map>
8 #include <string>
9 #include <vector>
10
11 #include "cmLocalGenerator.h"
12
13 class cmGeneratorTarget;
14 class cmGlobalGenerator;
15 class cmMakefile;
16 class cmSourceFile;
17
18 /** \class cmLocalCommonGenerator
19  * \brief Common infrastructure for Makefile and Ninja local generators.
20  */
21 class cmLocalCommonGenerator : public cmLocalGenerator
22 {
23 protected:
24   enum class WorkDir
25   {
26     TopBin,
27     CurBin,
28   };
29
30 public:
31   cmLocalCommonGenerator(cmGlobalGenerator* gg, cmMakefile* mf, WorkDir wd);
32   ~cmLocalCommonGenerator() override;
33
34   std::vector<std::string> const& GetConfigNames() const
35   {
36     return this->ConfigNames;
37   }
38
39   std::string const& GetWorkingDirectory() const;
40
41   std::string MaybeRelativeToWorkDir(std::string const& path) const;
42
43   std::string GetTargetFortranFlags(cmGeneratorTarget const* target,
44                                     std::string const& config) override;
45
46   void ComputeObjectFilenames(
47     std::map<cmSourceFile const*, std::string>& mapping,
48     cmGeneratorTarget const* gt = nullptr) override;
49
50 protected:
51   WorkDir WorkingDirectory;
52
53   std::vector<std::string> ConfigNames;
54
55   friend class cmCommonTargetGenerator;
56 };