CMake/Source/cmGlobalVisualStudioVersionedGenerator.h
Brad King bba1a23da9 VS: Consolidate Windows SDK major version selection dispatch
Make logic choosing between Windows 10 SDKs and the Windows 8.1 SDK
easier to follow by consolidating it in the VS 14 generator.  The only
information we need from VS 15+ generators is whether the 8.1 SDK is
installed.
2023-08-10 09:33:20 -04:00

102 lines
3.1 KiB
C++

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#pragma once
#include "cmConfigure.h" // IWYU pragma: keep
#include <memory>
#include <string>
#include <cm/optional>
#include "cmGlobalVisualStudio10Generator.h"
#include "cmGlobalVisualStudio14Generator.h"
#include "cmGlobalVisualStudioGenerator.h"
#include "cmVSSetupHelper.h"
class cmGlobalGeneratorFactory;
class cmMakefile;
class cmake;
/** \class cmGlobalVisualStudioVersionedGenerator */
class cmGlobalVisualStudioVersionedGenerator
: public cmGlobalVisualStudio14Generator
{
public:
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory15();
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory16();
static std::unique_ptr<cmGlobalGeneratorFactory> NewFactory17();
bool MatchesGeneratorName(const std::string& name) const override;
bool SetGeneratorInstance(std::string const& i, cmMakefile* mf) override;
bool GetVSInstance(std::string& dir) const;
cm::optional<std::string> FindMSBuildCommandEarly(cmMakefile* mf) override;
cm::optional<std::string> GetVSInstanceVersion() const override;
AuxToolset FindAuxToolset(std::string& version,
std::string& props) const override;
bool IsStdOutEncodingSupported() const override;
bool IsUtf8EncodingSupported() const override;
bool IsScanDependenciesSupported() const override;
const char* GetAndroidApplicationTypeRevision() const override;
bool CheckCxxModuleSupport() override
{
return this->SupportsCxxModuleDyndep();
}
bool SupportsCxxModuleDyndep() const override
{
return this->Version >= cmGlobalVisualStudioGenerator::VSVersion::VS17;
}
protected:
cmGlobalVisualStudioVersionedGenerator(
VSVersion version, cmake* cm, const std::string& name,
std::string const& platformInGeneratorName);
bool SelectWindowsStoreToolset(std::string& toolset) const override;
// Used to verify that the Desktop toolset for the current generator is
// installed on the machine.
bool IsWindowsDesktopToolsetInstalled() const override;
// These aren't virtual because we need to check if the selected version
// of the toolset is installed
bool IsWindowsStoreToolsetInstalled() const;
// Check for a Win 8 SDK known to the registry or VS installer tool.
bool IsWin81SDKInstalled() const override;
std::string GetWindows10SDKMaxVersionDefault(cmMakefile*) const override;
virtual bool ProcessGeneratorInstanceField(std::string const& key,
std::string const& value);
std::string FindMSBuildCommand() override;
std::string FindDevEnvCommand() override;
private:
class Factory15;
friend class Factory15;
class Factory16;
friend class Factory16;
class Factory17;
friend class Factory17;
mutable cmVSSetupAPIHelper vsSetupAPIHelper;
bool ParseGeneratorInstance(std::string const& is, cmMakefile* mf);
void SetVSVersionVar(cmMakefile* mf);
std::string GeneratorInstance;
std::string GeneratorInstanceVersion;
cm::optional<std::string> LastGeneratorInstanceString;
};