1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
5 #include "cmConfigure.h" // IWYU pragma: keep
10 #include <cm/optional>
12 #include "cmGlobalVisualStudio10Generator.h"
13 #include "cmGlobalVisualStudio14Generator.h"
14 #include "cmGlobalVisualStudioGenerator.h"
15 #include "cmVSSetupHelper.h"
17 class cmGlobalGeneratorFactory;
21 /** \class cmGlobalVisualStudioVersionedGenerator */
22 class cmGlobalVisualStudioVersionedGenerator
23 : public cmGlobalVisualStudio14Generator
26 static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory15();
27 static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory16();
28 static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory17();
30 bool MatchesGeneratorName(const std::string& name) const override;
32 bool SetGeneratorInstance(std::string const& i, cmMakefile* mf) override;
34 bool GetVSInstance(std::string& dir) const;
36 cm::optional<std::string> FindMSBuildCommandEarly(cmMakefile* mf) override;
38 cm::optional<std::string> GetVSInstanceVersion() const override;
40 AuxToolset FindAuxToolset(std::string& version,
41 std::string& props) const override;
43 bool IsStdOutEncodingSupported() const override;
45 bool IsUtf8EncodingSupported() const override;
47 const char* GetAndroidApplicationTypeRevision() const override;
50 cmGlobalVisualStudioVersionedGenerator(
51 VSVersion version, cmake* cm, const std::string& name,
52 std::string const& platformInGeneratorName);
54 bool InitializeWindows(cmMakefile* mf) override;
55 bool SelectWindowsStoreToolset(std::string& toolset) const override;
57 // Used to verify that the Desktop toolset for the current generator is
58 // installed on the machine.
59 bool IsWindowsDesktopToolsetInstalled() const override;
61 // These aren't virtual because we need to check if the selected version
62 // of the toolset is installed
63 bool IsWindowsStoreToolsetInstalled() const;
65 // Check for a Win 8 SDK known to the registry or VS installer tool.
66 bool IsWin81SDKInstalled() const;
68 std::string GetWindows10SDKMaxVersionDefault(cmMakefile*) const override;
70 virtual bool ProcessGeneratorInstanceField(std::string const& key,
71 std::string const& value);
73 std::string FindMSBuildCommand() override;
74 std::string FindDevEnvCommand() override;
78 friend class Factory15;
80 friend class Factory16;
82 friend class Factory17;
83 mutable cmVSSetupAPIHelper vsSetupAPIHelper;
85 bool ParseGeneratorInstance(std::string const& is, cmMakefile* mf);
87 std::string GeneratorInstance;
88 std::string GeneratorInstanceVersion;
89 cm::optional<std::string> LastGeneratorInstanceString;