Bläddra i källkod

Refactor: `cmGlobalGeneratorFactory::GetDocumentation` returns entry

Before, a documentation entry was in/out parameter.
Now it's a normal return value.

This also makes possible to eliminate defaulted default ctor
for `cmDocumentationEntry` for C++ 11.

Also, simplify `cmake::AppendGlobalGeneratorsDocumentation()`.
Alex Turbov 3 år sedan
förälder
incheckning
6e3e8827fa

+ 0 - 1
Source/cmDocumentationEntry.h

@@ -10,7 +10,6 @@
 struct cmDocumentationEntry
 struct cmDocumentationEntry
 {
 {
 #if __cplusplus <= 201103L
 #if __cplusplus <= 201103L
-  cmDocumentationEntry() = default;
   cmDocumentationEntry(const std::string& name, const std::string& brief)
   cmDocumentationEntry(const std::string& name, const std::string& brief)
     : Name{ name }
     : Name{ name }
     , Brief{ brief }
     , Brief{ brief }

+ 3 - 4
Source/cmGlobalBorlandMakefileGenerator.cxx

@@ -60,11 +60,10 @@ cmGlobalBorlandMakefileGenerator::CreateLocalGenerator(cmMakefile* mf)
   return std::unique_ptr<cmLocalGenerator>(std::move(lg));
   return std::unique_ptr<cmLocalGenerator>(std::move(lg));
 }
 }
 
 
-void cmGlobalBorlandMakefileGenerator::GetDocumentation(
-  cmDocumentationEntry& entry)
+cmDocumentationEntry cmGlobalBorlandMakefileGenerator::GetDocumentation()
 {
 {
-  entry.Name = cmGlobalBorlandMakefileGenerator::GetActualName();
-  entry.Brief = "Generates Borland makefiles.";
+  return { cmGlobalBorlandMakefileGenerator::GetActualName(),
+           "Generates Borland makefiles." };
 }
 }
 
 
 std::vector<cmGlobalGenerator::GeneratedMakeCommand>
 std::vector<cmGlobalGenerator::GeneratedMakeCommand>

+ 1 - 2
Source/cmGlobalBorlandMakefileGenerator.h

@@ -13,7 +13,6 @@
 class cmLocalGenerator;
 class cmLocalGenerator;
 class cmMakefile;
 class cmMakefile;
 class cmake;
 class cmake;
-struct cmDocumentationEntry;
 
 
 /** \class cmGlobalBorlandMakefileGenerator
 /** \class cmGlobalBorlandMakefileGenerator
  * \brief Write a Borland makefiles.
  * \brief Write a Borland makefiles.
@@ -38,7 +37,7 @@ public:
   static std::string GetActualName() { return "Borland Makefiles"; }
   static std::string GetActualName() { return "Borland Makefiles"; }
 
 
   /** Get the documentation entry for this generator.  */
   /** Get the documentation entry for this generator.  */
-  static void GetDocumentation(cmDocumentationEntry& entry);
+  static cmDocumentationEntry GetDocumentation();
 
 
   //! Create a local generator appropriate to this Global Generator
   //! Create a local generator appropriate to this Global Generator
   std::unique_ptr<cmLocalGenerator> CreateLocalGenerator(
   std::unique_ptr<cmLocalGenerator> CreateLocalGenerator(

+ 7 - 4
Source/cmGlobalGeneratorFactory.h

@@ -4,6 +4,10 @@
 
 
 #include "cmConfigure.h" // IWYU pragma: keep
 #include "cmConfigure.h" // IWYU pragma: keep
 
 
+#include "cmDocumentationEntry.h" // IWYU pragma: export
+
+// TODO The following headers are parts of the `cmGlobalGeneratorFactory`
+// public API, so could be defined as export to IWYU
 #include <string>
 #include <string>
 #include <vector>
 #include <vector>
 
 
@@ -11,7 +15,6 @@
 
 
 class cmGlobalGenerator;
 class cmGlobalGenerator;
 class cmake;
 class cmake;
-struct cmDocumentationEntry;
 
 
 /** \class cmGlobalGeneratorFactory
 /** \class cmGlobalGeneratorFactory
  * \brief Responable for creating cmGlobalGenerator instances
  * \brief Responable for creating cmGlobalGenerator instances
@@ -28,7 +31,7 @@ public:
     const std::string& n, bool allowArch, cmake* cm) const = 0;
     const std::string& n, bool allowArch, cmake* cm) const = 0;
 
 
   /** Get the documentation entry for this factory */
   /** Get the documentation entry for this factory */
-  virtual void GetDocumentation(cmDocumentationEntry& entry) const = 0;
+  virtual cmDocumentationEntry GetDocumentation() const = 0;
 
 
   /** Get the names of the current registered generators */
   /** Get the names of the current registered generators */
   virtual std::vector<std::string> GetGeneratorNames() const = 0;
   virtual std::vector<std::string> GetGeneratorNames() const = 0;
@@ -62,9 +65,9 @@ public:
   }
   }
 
 
   /** Get the documentation entry for this factory */
   /** Get the documentation entry for this factory */
-  void GetDocumentation(cmDocumentationEntry& entry) const override
+  cmDocumentationEntry GetDocumentation() const override
   {
   {
-    T::GetDocumentation(entry);
+    return T::GetDocumentation();
   }
   }
 
 
   /** Get the names of the current registered generators */
   /** Get the names of the current registered generators */

+ 5 - 5
Source/cmGlobalGhsMultiGenerator.cxx

@@ -15,7 +15,6 @@
 
 
 #include "cmCustomCommand.h"
 #include "cmCustomCommand.h"
 #include "cmCustomCommandLines.h"
 #include "cmCustomCommandLines.h"
-#include "cmDocumentationEntry.h"
 #include "cmGeneratedFileStream.h"
 #include "cmGeneratedFileStream.h"
 #include "cmGeneratorTarget.h"
 #include "cmGeneratorTarget.h"
 #include "cmGhsMultiGpj.h"
 #include "cmGhsMultiGpj.h"
@@ -58,11 +57,12 @@ cmGlobalGhsMultiGenerator::CreateLocalGenerator(cmMakefile* mf)
     cm::make_unique<cmLocalGhsMultiGenerator>(this, mf));
     cm::make_unique<cmLocalGhsMultiGenerator>(this, mf));
 }
 }
 
 
-void cmGlobalGhsMultiGenerator::GetDocumentation(cmDocumentationEntry& entry)
+cmDocumentationEntry cmGlobalGhsMultiGenerator::GetDocumentation()
 {
 {
-  entry.Name = GetActualName();
-  entry.Brief =
-    "Generates Green Hills MULTI files (experimental, work-in-progress).";
+  return {
+    GetActualName(),
+    "Generates Green Hills MULTI files (experimental, work-in-progress)."
+  };
 }
 }
 
 
 void cmGlobalGhsMultiGenerator::ComputeTargetObjectDirectory(
 void cmGlobalGhsMultiGenerator::ComputeTargetObjectDirectory(

+ 1 - 2
Source/cmGlobalGhsMultiGenerator.h

@@ -18,7 +18,6 @@ class cmGeneratorTarget;
 class cmLocalGenerator;
 class cmLocalGenerator;
 class cmMakefile;
 class cmMakefile;
 class cmake;
 class cmake;
-struct cmDocumentationEntry;
 
 
 class cmGlobalGhsMultiGenerator : public cmGlobalGenerator
 class cmGlobalGhsMultiGenerator : public cmGlobalGenerator
 {
 {
@@ -46,7 +45,7 @@ public:
   std::string GetName() const override { return GetActualName(); }
   std::string GetName() const override { return GetActualName(); }
 
 
   /// Overloaded methods. @see cmGlobalGenerator::GetDocumentation()
   /// Overloaded methods. @see cmGlobalGenerator::GetDocumentation()
-  static void GetDocumentation(cmDocumentationEntry& entry);
+  static cmDocumentationEntry GetDocumentation();
 
 
   /**
   /**
    * Utilized by the generator factory to determine if this generator
    * Utilized by the generator factory to determine if this generator

+ 3 - 5
Source/cmGlobalJOMMakefileGenerator.cxx

@@ -6,7 +6,6 @@
 
 
 #include <cmext/algorithm>
 #include <cmext/algorithm>
 
 
-#include "cmDocumentationEntry.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGenerator.h"
 #include "cmMakefile.h"
 #include "cmMakefile.h"
 #include "cmState.h"
 #include "cmState.h"
@@ -36,11 +35,10 @@ void cmGlobalJOMMakefileGenerator::EnableLanguage(
   this->cmGlobalUnixMakefileGenerator3::EnableLanguage(l, mf, optional);
   this->cmGlobalUnixMakefileGenerator3::EnableLanguage(l, mf, optional);
 }
 }
 
 
-void cmGlobalJOMMakefileGenerator::GetDocumentation(
-  cmDocumentationEntry& entry)
+cmDocumentationEntry cmGlobalJOMMakefileGenerator::GetDocumentation()
 {
 {
-  entry.Name = cmGlobalJOMMakefileGenerator::GetActualName();
-  entry.Brief = "Generates JOM makefiles.";
+  return { cmGlobalJOMMakefileGenerator::GetActualName(),
+           "Generates JOM makefiles." };
 }
 }
 
 
 void cmGlobalJOMMakefileGenerator::PrintCompilerAdvice(std::ostream& os,
 void cmGlobalJOMMakefileGenerator::PrintCompilerAdvice(std::ostream& os,

+ 1 - 2
Source/cmGlobalJOMMakefileGenerator.h

@@ -13,7 +13,6 @@
 
 
 class cmMakefile;
 class cmMakefile;
 class cmake;
 class cmake;
-struct cmDocumentationEntry;
 
 
 /** \class cmGlobalJOMMakefileGenerator
 /** \class cmGlobalJOMMakefileGenerator
  * \brief Write a JOM makefiles.
  * \brief Write a JOM makefiles.
@@ -39,7 +38,7 @@ public:
   static std::string GetActualName() { return "NMake Makefiles JOM"; }
   static std::string GetActualName() { return "NMake Makefiles JOM"; }
 
 
   /** Get the documentation entry for this generator.  */
   /** Get the documentation entry for this generator.  */
-  static void GetDocumentation(cmDocumentationEntry& entry);
+  static cmDocumentationEntry GetDocumentation();
 
 
   /**
   /**
    * Try to determine system information such as shared library
    * Try to determine system information such as shared library

+ 3 - 5
Source/cmGlobalMSYSMakefileGenerator.cxx

@@ -4,7 +4,6 @@
 
 
 #include "cmsys/FStream.hxx"
 #include "cmsys/FStream.hxx"
 
 
-#include "cmDocumentationEntry.h"
 #include "cmMakefile.h"
 #include "cmMakefile.h"
 #include "cmState.h"
 #include "cmState.h"
 #include "cmStringAlgorithms.h"
 #include "cmStringAlgorithms.h"
@@ -53,9 +52,8 @@ void cmGlobalMSYSMakefileGenerator::EnableLanguage(
   }
   }
 }
 }
 
 
-void cmGlobalMSYSMakefileGenerator::GetDocumentation(
-  cmDocumentationEntry& entry)
+cmDocumentationEntry cmGlobalMSYSMakefileGenerator::GetDocumentation()
 {
 {
-  entry.Name = cmGlobalMSYSMakefileGenerator::GetActualName();
-  entry.Brief = "Generates MSYS makefiles.";
+  return { cmGlobalMSYSMakefileGenerator::GetActualName(),
+           "Generates MSYS makefiles." };
 }
 }

+ 1 - 2
Source/cmGlobalMSYSMakefileGenerator.h

@@ -11,7 +11,6 @@
 
 
 class cmMakefile;
 class cmMakefile;
 class cmake;
 class cmake;
-struct cmDocumentationEntry;
 
 
 /** \class cmGlobalMSYSMakefileGenerator
 /** \class cmGlobalMSYSMakefileGenerator
  * \brief Write a NMake makefiles.
  * \brief Write a NMake makefiles.
@@ -36,7 +35,7 @@ public:
   static std::string GetActualName() { return "MSYS Makefiles"; }
   static std::string GetActualName() { return "MSYS Makefiles"; }
 
 
   /** Get the documentation entry for this generator.  */
   /** Get the documentation entry for this generator.  */
-  static void GetDocumentation(cmDocumentationEntry& entry);
+  static cmDocumentationEntry GetDocumentation();
 
 
   /**
   /**
    * Try to determine system information such as shared library
    * Try to determine system information such as shared library

+ 3 - 5
Source/cmGlobalMinGWMakefileGenerator.cxx

@@ -2,7 +2,6 @@
    file Copyright.txt or https://cmake.org/licensing for details.  */
    file Copyright.txt or https://cmake.org/licensing for details.  */
 #include "cmGlobalMinGWMakefileGenerator.h"
 #include "cmGlobalMinGWMakefileGenerator.h"
 
 
-#include "cmDocumentationEntry.h"
 #include "cmMakefile.h"
 #include "cmMakefile.h"
 #include "cmState.h"
 #include "cmState.h"
 #include "cmSystemTools.h"
 #include "cmSystemTools.h"
@@ -19,9 +18,8 @@ cmGlobalMinGWMakefileGenerator::cmGlobalMinGWMakefileGenerator(cmake* cm)
   cm->GetState()->SetMinGWMake(true);
   cm->GetState()->SetMinGWMake(true);
 }
 }
 
 
-void cmGlobalMinGWMakefileGenerator::GetDocumentation(
-  cmDocumentationEntry& entry)
+cmDocumentationEntry cmGlobalMinGWMakefileGenerator::GetDocumentation()
 {
 {
-  entry.Name = cmGlobalMinGWMakefileGenerator::GetActualName();
-  entry.Brief = "Generates a make file for use with mingw32-make.";
+  return { cmGlobalMinGWMakefileGenerator::GetActualName(),
+           "Generates a make file for use with mingw32-make." };
 }
 }

+ 1 - 2
Source/cmGlobalMinGWMakefileGenerator.h

@@ -11,7 +11,6 @@
 
 
 class cmMakefile;
 class cmMakefile;
 class cmake;
 class cmake;
-struct cmDocumentationEntry;
 
 
 /** \class cmGlobalMinGWMakefileGenerator
 /** \class cmGlobalMinGWMakefileGenerator
  * \brief Write a NMake makefiles.
  * \brief Write a NMake makefiles.
@@ -35,5 +34,5 @@ public:
   static std::string GetActualName() { return "MinGW Makefiles"; }
   static std::string GetActualName() { return "MinGW Makefiles"; }
 
 
   /** Get the documentation entry for this generator.  */
   /** Get the documentation entry for this generator.  */
-  static void GetDocumentation(cmDocumentationEntry& entry);
+  static cmDocumentationEntry GetDocumentation();
 };
 };

+ 5 - 11
Source/cmGlobalNMakeMakefileGenerator.cxx

@@ -8,7 +8,6 @@
 
 
 #include "cmsys/RegularExpression.hxx"
 #include "cmsys/RegularExpression.hxx"
 
 
-#include "cmDocumentationEntry.h"
 #include "cmDuration.h"
 #include "cmDuration.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGenerator.h"
 #include "cmMakefile.h"
 #include "cmMakefile.h"
@@ -80,11 +79,10 @@ void cmGlobalNMakeMakefileGenerator::CheckNMakeFeatures()
     cmSystemTools::OP_LESS, this->NMakeVersion, "9");
     cmSystemTools::OP_LESS, this->NMakeVersion, "9");
 }
 }
 
 
-void cmGlobalNMakeMakefileGenerator::GetDocumentation(
-  cmDocumentationEntry& entry)
+cmDocumentationEntry cmGlobalNMakeMakefileGenerator::GetDocumentation()
 {
 {
-  entry.Name = cmGlobalNMakeMakefileGenerator::GetActualName();
-  entry.Brief = "Generates NMake makefiles.";
+  return { cmGlobalNMakeMakefileGenerator::GetActualName(),
+           "Generates NMake makefiles." };
 }
 }
 
 
 void cmGlobalNMakeMakefileGenerator::PrintCompilerAdvice(
 void cmGlobalNMakeMakefileGenerator::PrintCompilerAdvice(
@@ -128,12 +126,8 @@ void cmGlobalNMakeMakefileGenerator::PrintBuildCommandAdvice(std::ostream& os,
   if (jobs != cmake::NO_BUILD_PARALLEL_LEVEL) {
   if (jobs != cmake::NO_BUILD_PARALLEL_LEVEL) {
     // nmake does not support parallel build level
     // nmake does not support parallel build level
     // see https://msdn.microsoft.com/en-us/library/afyyse50.aspx
     // see https://msdn.microsoft.com/en-us/library/afyyse50.aspx
-
-    /* clang-format off */
-    os <<
-      "Warning: NMake does not support parallel builds. "
-      "Ignoring parallel build command line option.\n";
-    /* clang-format on */
+    os << "Warning: NMake does not support parallel builds. "
+          "Ignoring parallel build command line option.\n";
   }
   }
 
 
   this->cmGlobalUnixMakefileGenerator3::PrintBuildCommandAdvice(
   this->cmGlobalUnixMakefileGenerator3::PrintBuildCommandAdvice(

+ 1 - 2
Source/cmGlobalNMakeMakefileGenerator.h

@@ -15,7 +15,6 @@
 
 
 class cmMakefile;
 class cmMakefile;
 class cmake;
 class cmake;
-struct cmDocumentationEntry;
 
 
 /** \class cmGlobalNMakeMakefileGenerator
 /** \class cmGlobalNMakeMakefileGenerator
  * \brief Write a NMake makefiles.
  * \brief Write a NMake makefiles.
@@ -45,7 +44,7 @@ public:
   }
   }
 
 
   /** Get the documentation entry for this generator.  */
   /** Get the documentation entry for this generator.  */
-  static void GetDocumentation(cmDocumentationEntry& entry);
+  static cmDocumentationEntry GetDocumentation();
 
 
   /**
   /**
    * Try to determine system information such as shared library
    * Try to determine system information such as shared library

+ 6 - 7
Source/cmGlobalNinjaGenerator.cxx

@@ -25,7 +25,6 @@
 #include "cmsys/FStream.hxx"
 #include "cmsys/FStream.hxx"
 
 
 #include "cmCxxModuleMapper.h"
 #include "cmCxxModuleMapper.h"
-#include "cmDocumentationEntry.h"
 #include "cmFileSet.h"
 #include "cmFileSet.h"
 #include "cmFortranParser.h"
 #include "cmFortranParser.h"
 #include "cmGeneratedFileStream.h"
 #include "cmGeneratedFileStream.h"
@@ -554,10 +553,10 @@ codecvt::Encoding cmGlobalNinjaGenerator::GetMakefileEncoding() const
   return this->NinjaExpectedEncoding;
   return this->NinjaExpectedEncoding;
 }
 }
 
 
-void cmGlobalNinjaGenerator::GetDocumentation(cmDocumentationEntry& entry)
+cmDocumentationEntry cmGlobalNinjaGenerator::GetDocumentation()
 {
 {
-  entry.Name = cmGlobalNinjaGenerator::GetActualName();
-  entry.Brief = "Generates build.ninja files.";
+  return { cmGlobalNinjaGenerator::GetActualName(),
+           "Generates build.ninja files." };
 }
 }
 
 
 // Implemented in all cmGlobaleGenerator sub-classes.
 // Implemented in all cmGlobaleGenerator sub-classes.
@@ -3211,10 +3210,10 @@ cmGlobalNinjaMultiGenerator::cmGlobalNinjaMultiGenerator(cmake* cm)
   cm->GetState()->SetNinjaMulti(true);
   cm->GetState()->SetNinjaMulti(true);
 }
 }
 
 
-void cmGlobalNinjaMultiGenerator::GetDocumentation(cmDocumentationEntry& entry)
+cmDocumentationEntry cmGlobalNinjaMultiGenerator::GetDocumentation()
 {
 {
-  entry.Name = cmGlobalNinjaMultiGenerator::GetActualName();
-  entry.Brief = "Generates build-<Config>.ninja files.";
+  return { cmGlobalNinjaMultiGenerator::GetActualName(),
+           "Generates build-<Config>.ninja files." };
 }
 }
 
 
 std::string cmGlobalNinjaMultiGenerator::ExpandCFGIntDir(
 std::string cmGlobalNinjaMultiGenerator::ExpandCFGIntDir(

+ 2 - 3
Source/cmGlobalNinjaGenerator.h

@@ -35,7 +35,6 @@ class cmMakefile;
 class cmOutputConverter;
 class cmOutputConverter;
 class cmStateDirectory;
 class cmStateDirectory;
 class cmake;
 class cmake;
-struct cmDocumentationEntry;
 
 
 /**
 /**
  * \class cmGlobalNinjaGenerator
  * \class cmGlobalNinjaGenerator
@@ -193,7 +192,7 @@ public:
   /** Get encoding used by generator for ninja files */
   /** Get encoding used by generator for ninja files */
   codecvt::Encoding GetMakefileEncoding() const override;
   codecvt::Encoding GetMakefileEncoding() const override;
 
 
-  static void GetDocumentation(cmDocumentationEntry& entry);
+  static cmDocumentationEntry GetDocumentation();
 
 
   void EnableLanguage(std::vector<std::string> const& languages,
   void EnableLanguage(std::vector<std::string> const& languages,
                       cmMakefile* mf, bool optional) override;
                       cmMakefile* mf, bool optional) override;
@@ -656,7 +655,7 @@ public:
       new cmGlobalGeneratorSimpleFactory<cmGlobalNinjaMultiGenerator>());
       new cmGlobalGeneratorSimpleFactory<cmGlobalNinjaMultiGenerator>());
   }
   }
 
 
-  static void GetDocumentation(cmDocumentationEntry& entry);
+  static cmDocumentationEntry GetDocumentation();
 
 
   std::string GetName() const override
   std::string GetName() const override
   {
   {

+ 3 - 5
Source/cmGlobalUnixMakefileGenerator3.cxx

@@ -11,7 +11,6 @@
 #include <cmext/algorithm>
 #include <cmext/algorithm>
 #include <cmext/memory>
 #include <cmext/memory>
 
 
-#include "cmDocumentationEntry.h"
 #include "cmGeneratedFileStream.h"
 #include "cmGeneratedFileStream.h"
 #include "cmGeneratorTarget.h"
 #include "cmGeneratorTarget.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGenerator.h"
@@ -71,11 +70,10 @@ cmGlobalUnixMakefileGenerator3::CreateLocalGenerator(cmMakefile* mf)
     cm::make_unique<cmLocalUnixMakefileGenerator3>(this, mf));
     cm::make_unique<cmLocalUnixMakefileGenerator3>(this, mf));
 }
 }
 
 
-void cmGlobalUnixMakefileGenerator3::GetDocumentation(
-  cmDocumentationEntry& entry)
+cmDocumentationEntry cmGlobalUnixMakefileGenerator3::GetDocumentation()
 {
 {
-  entry.Name = cmGlobalUnixMakefileGenerator3::GetActualName();
-  entry.Brief = "Generates standard UNIX makefiles.";
+  return { cmGlobalUnixMakefileGenerator3::GetActualName(),
+           "Generates standard UNIX makefiles." };
 }
 }
 
 
 void cmGlobalUnixMakefileGenerator3::ComputeTargetObjectDirectory(
 void cmGlobalUnixMakefileGenerator3::ComputeTargetObjectDirectory(

+ 1 - 2
Source/cmGlobalUnixMakefileGenerator3.h

@@ -24,7 +24,6 @@ class cmLocalUnixMakefileGenerator3;
 class cmMakefile;
 class cmMakefile;
 class cmMakefileTargetGenerator;
 class cmMakefileTargetGenerator;
 class cmake;
 class cmake;
-struct cmDocumentationEntry;
 
 
 /** \class cmGlobalUnixMakefileGenerator3
 /** \class cmGlobalUnixMakefileGenerator3
  * \brief Write a Unix makefiles.
  * \brief Write a Unix makefiles.
@@ -101,7 +100,7 @@ public:
   bool SupportsCustomCommandDepfile() const override { return true; }
   bool SupportsCustomCommandDepfile() const override { return true; }
 
 
   /** Get the documentation entry for this generator.  */
   /** Get the documentation entry for this generator.  */
-  static void GetDocumentation(cmDocumentationEntry& entry);
+  static cmDocumentationEntry GetDocumentation();
 
 
   std::unique_ptr<cmLocalGenerator> CreateLocalGenerator(
   std::unique_ptr<cmLocalGenerator> CreateLocalGenerator(
     cmMakefile* mf) override;
     cmMakefile* mf) override;

+ 4 - 5
Source/cmGlobalVisualStudio11Generator.cxx

@@ -7,7 +7,6 @@
 #include <utility>
 #include <utility>
 #include <vector>
 #include <vector>
 
 
-#include "cmDocumentationEntry.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGeneratorFactory.h"
 #include "cmGlobalGeneratorFactory.h"
 #include "cmGlobalVisualStudioGenerator.h"
 #include "cmGlobalVisualStudioGenerator.h"
@@ -74,11 +73,11 @@ public:
     return std::unique_ptr<cmGlobalGenerator>(std::move(ret));
     return std::unique_ptr<cmGlobalGenerator>(std::move(ret));
   }
   }
 
 
-  void GetDocumentation(cmDocumentationEntry& entry) const override
+  cmDocumentationEntry GetDocumentation() const override
   {
   {
-    entry.Name = std::string(vs11generatorName) + " [arch]";
-    entry.Brief = "Deprecated.  Generates Visual Studio 2012 project files.  "
-                  "Optional [arch] can be \"Win64\" or \"ARM\".";
+    return { std::string(vs11generatorName) + " [arch]",
+             "Deprecated.  Generates Visual Studio 2012 project files.  "
+             "Optional [arch] can be \"Win64\" or \"ARM\"." };
   }
   }
 
 
   std::vector<std::string> GetGeneratorNames() const override
   std::vector<std::string> GetGeneratorNames() const override

+ 4 - 5
Source/cmGlobalVisualStudio12Generator.cxx

@@ -6,7 +6,6 @@
 #include <sstream>
 #include <sstream>
 #include <vector>
 #include <vector>
 
 
-#include "cmDocumentationEntry.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGeneratorFactory.h"
 #include "cmGlobalGeneratorFactory.h"
 #include "cmGlobalVisualStudioGenerator.h"
 #include "cmGlobalVisualStudioGenerator.h"
@@ -62,11 +61,11 @@ public:
     return std::unique_ptr<cmGlobalGenerator>();
     return std::unique_ptr<cmGlobalGenerator>();
   }
   }
 
 
-  void GetDocumentation(cmDocumentationEntry& entry) const override
+  cmDocumentationEntry GetDocumentation() const override
   {
   {
-    entry.Name = std::string(vs12generatorName) + " [arch]";
-    entry.Brief = "Generates Visual Studio 2013 project files.  "
-                  "Optional [arch] can be \"Win64\" or \"ARM\".";
+    return { std::string(vs12generatorName) + " [arch]",
+             "Generates Visual Studio 2013 project files.  "
+             "Optional [arch] can be \"Win64\" or \"ARM\"." };
   }
   }
 
 
   std::vector<std::string> GetGeneratorNames() const override
   std::vector<std::string> GetGeneratorNames() const override

+ 4 - 5
Source/cmGlobalVisualStudio14Generator.cxx

@@ -7,7 +7,6 @@
 
 
 #include <cm/vector>
 #include <cm/vector>
 
 
-#include "cmDocumentationEntry.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGeneratorFactory.h"
 #include "cmGlobalGeneratorFactory.h"
 #include "cmGlobalVisualStudioGenerator.h"
 #include "cmGlobalVisualStudioGenerator.h"
@@ -64,11 +63,11 @@ public:
     return std::unique_ptr<cmGlobalGenerator>();
     return std::unique_ptr<cmGlobalGenerator>();
   }
   }
 
 
-  void GetDocumentation(cmDocumentationEntry& entry) const override
+  cmDocumentationEntry GetDocumentation() const override
   {
   {
-    entry.Name = std::string(vs14generatorName) + " [arch]";
-    entry.Brief = "Generates Visual Studio 2015 project files.  "
-                  "Optional [arch] can be \"Win64\" or \"ARM\".";
+    return { std::string(vs14generatorName) + " [arch]",
+             "Generates Visual Studio 2015 project files.  "
+             "Optional [arch] can be \"Win64\" or \"ARM\"." };
   }
   }
 
 
   std::vector<std::string> GetGeneratorNames() const override
   std::vector<std::string> GetGeneratorNames() const override

+ 4 - 5
Source/cmGlobalVisualStudio9Generator.cxx

@@ -6,7 +6,6 @@
 #include <utility>
 #include <utility>
 #include <vector>
 #include <vector>
 
 
-#include "cmDocumentationEntry.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGeneratorFactory.h"
 #include "cmGlobalGeneratorFactory.h"
 #include "cmGlobalVisualStudioGenerator.h"
 #include "cmGlobalVisualStudioGenerator.h"
@@ -62,11 +61,11 @@ public:
     return std::unique_ptr<cmGlobalGenerator>(std::move(ret));
     return std::unique_ptr<cmGlobalGenerator>(std::move(ret));
   }
   }
 
 
-  void GetDocumentation(cmDocumentationEntry& entry) const override
+  cmDocumentationEntry GetDocumentation() const override
   {
   {
-    entry.Name = std::string(vs9generatorName) + " [arch]";
-    entry.Brief = "Generates Visual Studio 2008 project files.  "
-                  "Optional [arch] can be \"Win64\" or \"IA64\".";
+    return { std::string(vs9generatorName) + " [arch]",
+             "Generates Visual Studio 2008 project files.  "
+             "Optional [arch] can be \"Win64\" or \"IA64\"." };
   }
   }
 
 
   std::vector<std::string> GetGeneratorNames() const override
   std::vector<std::string> GetGeneratorNames() const override

+ 12 - 13
Source/cmGlobalVisualStudioVersionedGenerator.cxx

@@ -14,7 +14,6 @@
 #include "cmsys/Glob.hxx"
 #include "cmsys/Glob.hxx"
 #include "cmsys/RegularExpression.hxx"
 #include "cmsys/RegularExpression.hxx"
 
 
-#include "cmDocumentationEntry.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGeneratorFactory.h"
 #include "cmGlobalGeneratorFactory.h"
 #include "cmMakefile.h"
 #include "cmMakefile.h"
@@ -255,11 +254,11 @@ public:
     return std::unique_ptr<cmGlobalGenerator>();
     return std::unique_ptr<cmGlobalGenerator>();
   }
   }
 
 
-  void GetDocumentation(cmDocumentationEntry& entry) const override
+  cmDocumentationEntry GetDocumentation() const override
   {
   {
-    entry.Name = std::string(vs15generatorName) + " [arch]";
-    entry.Brief = "Generates Visual Studio 2017 project files.  "
-                  "Optional [arch] can be \"Win64\" or \"ARM\".";
+    return { std::string(vs15generatorName) + " [arch]",
+             "Generates Visual Studio 2017 project files.  "
+             "Optional [arch] can be \"Win64\" or \"ARM\"." };
   }
   }
 
 
   std::vector<std::string> GetGeneratorNames() const override
   std::vector<std::string> GetGeneratorNames() const override
@@ -351,11 +350,11 @@ public:
     return std::unique_ptr<cmGlobalGenerator>();
     return std::unique_ptr<cmGlobalGenerator>();
   }
   }
 
 
-  void GetDocumentation(cmDocumentationEntry& entry) const override
+  cmDocumentationEntry GetDocumentation() const override
   {
   {
-    entry.Name = std::string(vs16generatorName);
-    entry.Brief = "Generates Visual Studio 2019 project files.  "
-                  "Use -A option to specify architecture.";
+    return { std::string(vs16generatorName),
+             "Generates Visual Studio 2019 project files.  "
+             "Use -A option to specify architecture." };
   }
   }
 
 
   std::vector<std::string> GetGeneratorNames() const override
   std::vector<std::string> GetGeneratorNames() const override
@@ -416,11 +415,11 @@ public:
     return std::unique_ptr<cmGlobalGenerator>();
     return std::unique_ptr<cmGlobalGenerator>();
   }
   }
 
 
-  void GetDocumentation(cmDocumentationEntry& entry) const override
+  cmDocumentationEntry GetDocumentation() const override
   {
   {
-    entry.Name = std::string(vs17generatorName);
-    entry.Brief = "Generates Visual Studio 2022 project files.  "
-                  "Use -A option to specify architecture.";
+    return { std::string(vs17generatorName),
+             "Generates Visual Studio 2022 project files.  "
+             "Use -A option to specify architecture." };
   }
   }
 
 
   std::vector<std::string> GetGeneratorNames() const override
   std::vector<std::string> GetGeneratorNames() const override

+ 3 - 5
Source/cmGlobalWatcomWMakeGenerator.cxx

@@ -4,7 +4,6 @@
 
 
 #include <ostream>
 #include <ostream>
 
 
-#include "cmDocumentationEntry.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGenerator.h"
 #include "cmMakefile.h"
 #include "cmMakefile.h"
 #include "cmState.h"
 #include "cmState.h"
@@ -54,11 +53,10 @@ bool cmGlobalWatcomWMakeGenerator::SetSystemName(std::string const& s,
   return this->cmGlobalUnixMakefileGenerator3::SetSystemName(s, mf);
   return this->cmGlobalUnixMakefileGenerator3::SetSystemName(s, mf);
 }
 }
 
 
-void cmGlobalWatcomWMakeGenerator::GetDocumentation(
-  cmDocumentationEntry& entry)
+cmDocumentationEntry cmGlobalWatcomWMakeGenerator::GetDocumentation()
 {
 {
-  entry.Name = cmGlobalWatcomWMakeGenerator::GetActualName();
-  entry.Brief = "Generates Watcom WMake makefiles.";
+  return { cmGlobalWatcomWMakeGenerator::GetActualName(),
+           "Generates Watcom WMake makefiles." };
 }
 }
 
 
 std::vector<cmGlobalGenerator::GeneratedMakeCommand>
 std::vector<cmGlobalGenerator::GeneratedMakeCommand>

+ 1 - 2
Source/cmGlobalWatcomWMakeGenerator.h

@@ -15,7 +15,6 @@
 
 
 class cmMakefile;
 class cmMakefile;
 class cmake;
 class cmake;
-struct cmDocumentationEntry;
 
 
 /** \class cmGlobalWatcomWMakeGenerator
 /** \class cmGlobalWatcomWMakeGenerator
  * \brief Write a NMake makefiles.
  * \brief Write a NMake makefiles.
@@ -39,7 +38,7 @@ public:
   static std::string GetActualName() { return "Watcom WMake"; }
   static std::string GetActualName() { return "Watcom WMake"; }
 
 
   /** Get the documentation entry for this generator.  */
   /** Get the documentation entry for this generator.  */
-  static void GetDocumentation(cmDocumentationEntry& entry);
+  static cmDocumentationEntry GetDocumentation();
 
 
   /** Tell the generator about the target system.  */
   /** Tell the generator about the target system.  */
   bool SetSystemName(std::string const& s, cmMakefile* mf) override;
   bool SetSystemName(std::string const& s, cmMakefile* mf) override;

+ 5 - 6
Source/cmGlobalXCodeGenerator.cxx

@@ -24,7 +24,6 @@
 #include "cmCustomCommandGenerator.h"
 #include "cmCustomCommandGenerator.h"
 #include "cmCustomCommandLines.h"
 #include "cmCustomCommandLines.h"
 #include "cmCustomCommandTypes.h"
 #include "cmCustomCommandTypes.h"
-#include "cmDocumentationEntry.h"
 #include "cmGeneratedFileStream.h"
 #include "cmGeneratedFileStream.h"
 #include "cmGeneratorExpression.h"
 #include "cmGeneratorExpression.h"
 #include "cmGeneratorTarget.h"
 #include "cmGeneratorTarget.h"
@@ -149,9 +148,9 @@ public:
   std::unique_ptr<cmGlobalGenerator> CreateGlobalGenerator(
   std::unique_ptr<cmGlobalGenerator> CreateGlobalGenerator(
     const std::string& name, bool allowArch, cmake* cm) const override;
     const std::string& name, bool allowArch, cmake* cm) const override;
 
 
-  void GetDocumentation(cmDocumentationEntry& entry) const override
+  cmDocumentationEntry GetDocumentation() const override
   {
   {
-    cmGlobalXCodeGenerator::GetDocumentation(entry);
+    return cmGlobalXCodeGenerator::GetDocumentation();
   }
   }
 
 
   std::vector<std::string> GetGeneratorNames() const override
   std::vector<std::string> GetGeneratorNames() const override
@@ -4864,10 +4863,10 @@ std::string cmGlobalXCodeGenerator::ExpandCFGIntDir(
   return tmp;
   return tmp;
 }
 }
 
 
-void cmGlobalXCodeGenerator::GetDocumentation(cmDocumentationEntry& entry)
+cmDocumentationEntry cmGlobalXCodeGenerator::GetDocumentation()
 {
 {
-  entry.Name = cmGlobalXCodeGenerator::GetActualName();
-  entry.Brief = "Generate Xcode project files.";
+  return { cmGlobalXCodeGenerator::GetActualName(),
+           "Generate Xcode project files." };
 }
 }
 
 
 std::string cmGlobalXCodeGenerator::ConvertToRelativeForMake(
 std::string cmGlobalXCodeGenerator::ConvertToRelativeForMake(

+ 2 - 2
Source/cmGlobalXCodeGenerator.h

@@ -14,6 +14,7 @@
 #include <cm/optional>
 #include <cm/optional>
 #include <cm/string_view>
 #include <cm/string_view>
 
 
+#include "cmDocumentationEntry.h"
 #include "cmGlobalGenerator.h"
 #include "cmGlobalGenerator.h"
 #include "cmTransformDepfile.h"
 #include "cmTransformDepfile.h"
 #include "cmValue.h"
 #include "cmValue.h"
@@ -28,7 +29,6 @@ class cmMakefile;
 class cmSourceFile;
 class cmSourceFile;
 class cmSourceGroup;
 class cmSourceGroup;
 class cmake;
 class cmake;
-struct cmDocumentationEntry;
 
 
 /** \class cmGlobalXCodeGenerator
 /** \class cmGlobalXCodeGenerator
  * \brief Write a Unix makefiles.
  * \brief Write a Unix makefiles.
@@ -54,7 +54,7 @@ public:
   static std::string GetActualName() { return "Xcode"; }
   static std::string GetActualName() { return "Xcode"; }
 
 
   /** Get the documentation entry for this generator.  */
   /** Get the documentation entry for this generator.  */
-  static void GetDocumentation(cmDocumentationEntry& entry);
+  static cmDocumentationEntry GetDocumentation();
 
 
   //! Create a local generator appropriate to this Global Generator
   //! Create a local generator appropriate to this Global Generator
   std::unique_ptr<cmLocalGenerator> CreateLocalGenerator(
   std::unique_ptr<cmLocalGenerator> CreateLocalGenerator(

+ 5 - 7
Source/cmake.cxx

@@ -2949,17 +2949,15 @@ void cmake::AppendGlobalGeneratorsDocumentation(
   std::vector<cmDocumentationEntry>& v)
   std::vector<cmDocumentationEntry>& v)
 {
 {
   const auto defaultGenerator = this->EvaluateDefaultGlobalGenerator();
   const auto defaultGenerator = this->EvaluateDefaultGlobalGenerator();
-  const std::string defaultName = defaultGenerator->GetName();
-  bool foundDefaultOne = false;
+  const auto defaultName = defaultGenerator->GetName();
+  auto foundDefaultOne = false;
 
 
   for (const auto& g : this->Generators) {
   for (const auto& g : this->Generators) {
-    cmDocumentationEntry e;
-    g->GetDocumentation(e);
-    if (!foundDefaultOne && cmHasPrefix(e.Name, defaultName)) {
-      e.CustomNamePrefix = '*';
+    v.emplace_back(g->GetDocumentation());
+    if (!foundDefaultOne && cmHasPrefix(v.back().Name, defaultName)) {
+      v.back().CustomNamePrefix = '*';
       foundDefaultOne = true;
       foundDefaultOne = true;
     }
     }
-    v.push_back(std::move(e));
   }
   }
 }
 }