/src/CMake/Source/cmGlobalGeneratorFactory.h
Line | Count | Source |
1 | | /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
2 | | file LICENSE.rst or https://cmake.org/licensing for details. */ |
3 | | #pragma once |
4 | | |
5 | | #include "cmConfigure.h" // IWYU pragma: keep |
6 | | |
7 | | #include "cmDocumentationEntry.h" // IWYU pragma: export |
8 | | #include "cmGlobalGenerator.h" // IWYU pragma: keep |
9 | | |
10 | | // TODO The following headers are parts of the `cmGlobalGeneratorFactory` |
11 | | // public API, so could be defined as export to IWYU |
12 | | #include <string> |
13 | | #include <vector> |
14 | | |
15 | | #include <cm/memory> |
16 | | |
17 | | class cmake; |
18 | | |
19 | | /** \class cmGlobalGeneratorFactory |
20 | | * \brief Responable for creating cmGlobalGenerator instances |
21 | | * |
22 | | * Subclasses of this class generate instances of cmGlobalGenerator. |
23 | | */ |
24 | | class cmGlobalGeneratorFactory |
25 | | { |
26 | | public: |
27 | 210 | virtual ~cmGlobalGeneratorFactory() = default; |
28 | | |
29 | | /** Create a GlobalGenerator */ |
30 | | virtual std::unique_ptr<cmGlobalGenerator> CreateGlobalGenerator( |
31 | | std::string const& n, cmake* cm) const = 0; |
32 | | |
33 | | /** Get the documentation entry for this factory */ |
34 | | virtual cmDocumentationEntry GetDocumentation() const = 0; |
35 | | |
36 | | /** Get the names of the current registered generators */ |
37 | | virtual std::vector<std::string> GetGeneratorNames() const = 0; |
38 | | |
39 | | /** Determine whether or not this generator supports toolsets */ |
40 | | virtual bool SupportsToolset() const = 0; |
41 | | |
42 | | /** Determine whether or not this generator supports platforms */ |
43 | | virtual bool SupportsPlatform() const = 0; |
44 | | |
45 | | /** Get the list of supported platforms name for this generator */ |
46 | | virtual std::vector<std::string> GetKnownPlatforms() const = 0; |
47 | | |
48 | | /** If the generator supports platforms, get its default. */ |
49 | | virtual std::string GetDefaultPlatformName() const = 0; |
50 | | }; |
51 | | |
52 | | template <typename T> |
53 | | class cmGlobalGeneratorSimpleFactory : public cmGlobalGeneratorFactory |
54 | | { |
55 | | public: |
56 | | /** Create a GlobalGenerator */ |
57 | | std::unique_ptr<cmGlobalGenerator> CreateGlobalGenerator( |
58 | | std::string const& name, cmake* cm) const override |
59 | 0 | { |
60 | 0 | if (name != T::GetActualName()) { |
61 | 0 | return std::unique_ptr<cmGlobalGenerator>(); |
62 | 0 | } |
63 | 0 | return std::unique_ptr<cmGlobalGenerator>(cm::make_unique<T>(cm)); |
64 | 0 | } Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>::CreateGlobalGenerator(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cmake*) const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalUnixMakefileGenerator3>::CreateGlobalGenerator(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cmake*) const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaGenerator>::CreateGlobalGenerator(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cmake*) const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaMultiGenerator>::CreateGlobalGenerator(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cmake*) const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalWatcomWMakeGenerator>::CreateGlobalGenerator(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cmake*) const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalFastbuildGenerator>::CreateGlobalGenerator(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cmake*) const |
65 | | |
66 | | /** Get the documentation entry for this factory */ |
67 | | cmDocumentationEntry GetDocumentation() const override |
68 | 0 | { |
69 | 0 | return T::GetDocumentation(); |
70 | 0 | } Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>::GetDocumentation() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalUnixMakefileGenerator3>::GetDocumentation() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaGenerator>::GetDocumentation() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaMultiGenerator>::GetDocumentation() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalWatcomWMakeGenerator>::GetDocumentation() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalFastbuildGenerator>::GetDocumentation() const |
71 | | |
72 | | /** Get the names of the current registered generators */ |
73 | | std::vector<std::string> GetGeneratorNames() const override |
74 | 0 | { |
75 | 0 | return { T::GetActualName() }; |
76 | 0 | } Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>::GetGeneratorNames() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalUnixMakefileGenerator3>::GetGeneratorNames() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaGenerator>::GetGeneratorNames() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaMultiGenerator>::GetGeneratorNames() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalWatcomWMakeGenerator>::GetGeneratorNames() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalFastbuildGenerator>::GetGeneratorNames() const |
77 | | |
78 | | /** Determine whether or not this generator supports toolsets */ |
79 | 0 | bool SupportsToolset() const override { return T::SupportsToolset(); }Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>::SupportsToolset() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalUnixMakefileGenerator3>::SupportsToolset() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaGenerator>::SupportsToolset() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaMultiGenerator>::SupportsToolset() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalWatcomWMakeGenerator>::SupportsToolset() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalFastbuildGenerator>::SupportsToolset() const |
80 | | |
81 | | /** Determine whether or not this generator supports platforms */ |
82 | 0 | bool SupportsPlatform() const override { return T::SupportsPlatform(); }Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>::SupportsPlatform() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalUnixMakefileGenerator3>::SupportsPlatform() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaGenerator>::SupportsPlatform() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaMultiGenerator>::SupportsPlatform() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalWatcomWMakeGenerator>::SupportsPlatform() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalFastbuildGenerator>::SupportsPlatform() const |
83 | | |
84 | | /** Get the list of supported platforms name for this generator */ |
85 | | std::vector<std::string> GetKnownPlatforms() const override |
86 | 0 | { |
87 | | // default is no platform supported |
88 | 0 | return {}; |
89 | 0 | } Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>::GetKnownPlatforms() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalUnixMakefileGenerator3>::GetKnownPlatforms() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaGenerator>::GetKnownPlatforms() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaMultiGenerator>::GetKnownPlatforms() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalWatcomWMakeGenerator>::GetKnownPlatforms() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalFastbuildGenerator>::GetKnownPlatforms() const |
90 | | |
91 | 0 | std::string GetDefaultPlatformName() const override { return {}; }Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>::GetDefaultPlatformName() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalUnixMakefileGenerator3>::GetDefaultPlatformName() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaGenerator>::GetDefaultPlatformName() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalNinjaMultiGenerator>::GetDefaultPlatformName() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalWatcomWMakeGenerator>::GetDefaultPlatformName() const Unexecuted instantiation: cmGlobalGeneratorSimpleFactory<cmGlobalFastbuildGenerator>::GetDefaultPlatformName() const |
92 | | }; |