Coverage Report

Created: 2026-02-09 06:05

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
};