resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmGlobalVisualStudioVersionedGenerator.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 <memory>
8 #include <string>
9
10 #include <cm/optional>
11
12 #include "cmGlobalVisualStudio10Generator.h"
13 #include "cmGlobalVisualStudio14Generator.h"
14 #include "cmGlobalVisualStudioGenerator.h"
15 #include "cmVSSetupHelper.h"
16
17 class cmGlobalGeneratorFactory;
18 class cmMakefile;
19 class cmake;
20
21 /** \class cmGlobalVisualStudioVersionedGenerator  */
22 class cmGlobalVisualStudioVersionedGenerator
23   : public cmGlobalVisualStudio14Generator
24 {
25 public:
26   static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory15();
27   static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory16();
28   static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory17();
29
30   bool MatchesGeneratorName(const std::string& name) const override;
31
32   bool SetGeneratorInstance(std::string const& i, cmMakefile* mf) override;
33
34   bool GetVSInstance(std::string& dir) const;
35
36   cm::optional<std::string> FindMSBuildCommandEarly(cmMakefile* mf) override;
37
38   cm::optional<std::string> GetVSInstanceVersion() const override;
39
40   AuxToolset FindAuxToolset(std::string& version,
41                             std::string& props) const override;
42
43   bool IsStdOutEncodingSupported() const override;
44
45   bool IsUtf8EncodingSupported() const override;
46
47   const char* GetAndroidApplicationTypeRevision() const override;
48
49 protected:
50   cmGlobalVisualStudioVersionedGenerator(
51     VSVersion version, cmake* cm, const std::string& name,
52     std::string const& platformInGeneratorName);
53
54   bool InitializeWindows(cmMakefile* mf) override;
55   bool SelectWindowsStoreToolset(std::string& toolset) const override;
56
57   // Used to verify that the Desktop toolset for the current generator is
58   // installed on the machine.
59   bool IsWindowsDesktopToolsetInstalled() const override;
60
61   // These aren't virtual because we need to check if the selected version
62   // of the toolset is installed
63   bool IsWindowsStoreToolsetInstalled() const;
64
65   // Check for a Win 8 SDK known to the registry or VS installer tool.
66   bool IsWin81SDKInstalled() const;
67
68   std::string GetWindows10SDKMaxVersionDefault(cmMakefile*) const override;
69
70   virtual bool ProcessGeneratorInstanceField(std::string const& key,
71                                              std::string const& value);
72
73   std::string FindMSBuildCommand() override;
74   std::string FindDevEnvCommand() override;
75
76 private:
77   class Factory15;
78   friend class Factory15;
79   class Factory16;
80   friend class Factory16;
81   class Factory17;
82   friend class Factory17;
83   mutable cmVSSetupAPIHelper vsSetupAPIHelper;
84
85   bool ParseGeneratorInstance(std::string const& is, cmMakefile* mf);
86
87   std::string GeneratorInstance;
88   std::string GeneratorInstanceVersion;
89   cm::optional<std::string> LastGeneratorInstanceString;
90 };