cpack.cxx: Deduplicate "Generators" section creation code

This commit is contained in:
Alex Turbov
2022-10-26 13:21:19 +04:00
parent 9c06f0dd71
commit d7c183f35c
+24 -21
View File
@@ -5,10 +5,12 @@
#include <cstddef> #include <cstddef>
#include <functional> #include <functional>
#include <iostream> #include <iostream>
#include <iterator>
#include <map> #include <map>
#include <memory> #include <memory>
#include <sstream> #include <sstream>
#include <string> #include <string>
#include <type_traits>
#include <utility> #include <utility>
#include <vector> #include <vector>
@@ -63,6 +65,23 @@ void cpackProgressCallback(const std::string& message, float /*unused*/)
{ {
std::cout << "-- " << message << std::endl; std::cout << "-- " << message << std::endl;
} }
std::vector<cmDocumentationEntry> makeGeneratorDocs(
const cmCPackGeneratorFactory& gf)
{
const auto& generators = gf.GetGeneratorsList();
std::vector<cmDocumentationEntry> docs;
docs.reserve(generators.size());
std::transform(
generators.cbegin(), generators.cend(), std::back_inserter(docs),
[](const std::decay<decltype(generators)>::type::value_type& gen) {
return cmDocumentationEntry{ gen.first, gen.second };
});
return docs;
}
} // namespace } // namespace
// this is CPack. // this is CPack.
@@ -536,15 +555,9 @@ int main(int argc, char const* const* argv)
<< std::endl); << std::endl);
// Print out all the valid generators // Print out all the valid generators
cmDocumentation generatorDocs; cmDocumentation generatorDocs;
std::vector<cmDocumentationEntry> v; generatorDocs.SetSection("Generators",
for (auto const& g : generators.GetGeneratorsList()) { makeGeneratorDocs(generators));
cmDocumentationEntry e; std::cerr << '\n';
e.Name = g.first;
e.Brief = g.second;
v.push_back(std::move(e));
}
generatorDocs.SetSection("Generators", v);
std::cerr << "\n";
generatorDocs.PrintDocumentation(cmDocumentation::ListGenerators, generatorDocs.PrintDocumentation(cmDocumentation::ListGenerators,
std::cerr); std::cerr);
parsed = false; parsed = false;
@@ -611,22 +624,12 @@ int main(int argc, char const* const* argv)
*/ */
if (help) { if (help) {
// Construct and print requested documentation. // Construct and print requested documentation.
doc.SetName("cpack"); doc.SetName("cpack");
doc.SetSection("Name", cmDocumentationName); doc.SetSection("Name", cmDocumentationName);
doc.SetSection("Usage", cmDocumentationUsage); doc.SetSection("Usage", cmDocumentationUsage);
doc.PrependSection("Options", cmDocumentationOptions); doc.PrependSection("Options", cmDocumentationOptions);
doc.SetSection("Generators", makeGeneratorDocs(generators));
std::vector<cmDocumentationEntry> v; return !doc.PrintRequestedDocumentation(std::cout);
for (auto const& g : generators.GetGeneratorsList()) {
cmDocumentationEntry e;
e.Name = g.first;
e.Brief = g.second;
v.push_back(std::move(e));
}
doc.SetSection("Generators", v);
return doc.PrintRequestedDocumentation(std::cout) ? 0 : 1;
} }
if (cmSystemTools::GetErrorOccurredFlag()) { if (cmSystemTools::GetErrorOccurredFlag()) {