From 74b735dea8e2255c53f12afea5706ad443d64785 Mon Sep 17 00:00:00 2001 From: Alex Turbov Date: Tue, 23 Aug 2022 21:39:53 +0400 Subject: =?UTF-8?q?cmDocumentation:=20`char*[][2]`=20=E2=86=92=20`cmDocume?= =?UTF-8?q?ntationEntry[N]`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use fixed size arrays of `cmDocumentationEntry` items instead of open arrays of two `char` pointers when describe program options help screens. Also, drop `const char*[][2]` overloads of methods of `cmDocumentation` and `cmDocumentationSection` classes in the sake of generic (template) appenders introduced earlier. --- Source/CMakeLists.txt | 1 - Source/CPack/cpack.cxx | 19 ++++++------------- Source/CursesDialog/ccmake.cxx | 22 ++++++++-------------- Source/QtDialog/CMakeSetup.cxx | 28 +++++++++++++--------------- Source/cmDocumentation.cxx | 36 ++++++++---------------------------- Source/cmDocumentation.h | 3 --- Source/cmDocumentationEntry.h | 2 +- Source/cmDocumentationSection.cxx | 28 ---------------------------- Source/cmDocumentationSection.h | 8 ++++---- Source/cmake.cxx | 27 ++++++++++++++++++++++++++- Source/cmake.h | 35 ++++------------------------------- Source/cmakemain.cxx | 24 ++++++++++-------------- Source/ctest.cxx | 15 +++++++-------- 13 files changed, 87 insertions(+), 161 deletions(-) delete mode 100644 Source/cmDocumentationSection.cxx diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index c268a92..c0709c6 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -196,7 +196,6 @@ add_library( cmDependsCompiler.h cmDocumentation.cxx cmDocumentationFormatter.cxx - cmDocumentationSection.cxx cmDynamicLoader.cxx cmDynamicLoader.h cmELF.h diff --git a/Source/CPack/cpack.cxx b/Source/CPack/cpack.cxx index f06946b..efb549f 100644 --- a/Source/CPack/cpack.cxx +++ b/Source/CPack/cpack.cxx @@ -25,7 +25,6 @@ #include "cmConsoleBuf.h" #include "cmDocumentation.h" #include "cmDocumentationEntry.h" -#include "cmDocumentationFormatter.h" #include "cmGlobalGenerator.h" #include "cmMakefile.h" #include "cmState.h" @@ -36,19 +35,14 @@ #include "cmake.h" namespace { -const char* cmDocumentationName[][2] = { - { nullptr, " cpack - Packaging driver provided by CMake." }, - { nullptr, nullptr } +const cmDocumentationEntry cmDocumentationName = { + nullptr, " cpack - Packaging driver provided by CMake." }; -const char* cmDocumentationUsage[][2] = { - // clang-format off - { nullptr, " cpack [options]" }, - { nullptr, nullptr } - // clang-format on -}; +const cmDocumentationEntry cmDocumentationUsage = { nullptr, + " cpack [options]" }; -const char* cmDocumentationOptions[][2] = { +const cmDocumentationEntry cmDocumentationOptions[14] = { { "-G ", "Override/define CPACK_GENERATOR" }, { "-C ", "Specify the project configuration" }, { "-D =", "Set a CPack variable." }, @@ -62,8 +56,7 @@ const char* cmDocumentationOptions[][2] = { { "-B ", "Override/define CPACK_PACKAGE_DIRECTORY" }, { "--vendor ", "Override/define CPACK_PACKAGE_VENDOR" }, { "--preset", "Read arguments from a package preset" }, - { "--list-presets", "List available package presets" }, - { nullptr, nullptr } + { "--list-presets", "List available package presets" } }; void cpackProgressCallback(const std::string& message, float /*unused*/) diff --git a/Source/CursesDialog/ccmake.cxx b/Source/CursesDialog/ccmake.cxx index 2986265..d61954a 100644 --- a/Source/CursesDialog/ccmake.cxx +++ b/Source/CursesDialog/ccmake.cxx @@ -16,7 +16,7 @@ #include "cmCursesMainForm.h" #include "cmCursesStandardIncludes.h" #include "cmDocumentation.h" -#include "cmDocumentationEntry.h" // IWYU pragma: keep +#include "cmDocumentationEntry.h" #include "cmMessageMetadata.h" #include "cmState.h" #include "cmStringAlgorithms.h" @@ -24,12 +24,11 @@ #include "cmake.h" namespace { -const char* cmDocumentationName[][2] = { - { nullptr, " ccmake - Curses Interface for CMake." }, - { nullptr, nullptr } +const cmDocumentationEntry cmDocumentationName = { + nullptr, " ccmake - Curses Interface for CMake." }; -const char* cmDocumentationUsage[][2] = { +const cmDocumentationEntry cmDocumentationUsage[2] = { { nullptr, " ccmake \n" " ccmake " }, @@ -37,17 +36,12 @@ const char* cmDocumentationUsage[][2] = { "Specify a source directory to (re-)generate a build system for " "it in the current working directory. Specify an existing build " "directory to re-generate its build system." }, - { nullptr, nullptr } }; -const char* cmDocumentationUsageNote[][2] = { - { nullptr, "Run 'ccmake --help' for more information." }, - { nullptr, nullptr } +const cmDocumentationEntry cmDocumentationUsageNote = { + nullptr, "Run 'ccmake --help' for more information." }; -const char* cmDocumentationOptions[][2] = { CMAKE_STANDARD_OPTIONS_TABLE, - { nullptr, nullptr } }; - #ifndef _WIN32 extern "C" { @@ -89,8 +83,8 @@ int main(int argc, char const* const* argv) doc.AppendSection("Usage", cmDocumentationUsageNote); } doc.AppendSection("Generators", generators); - doc.PrependSection("Options", cmDocumentationOptions); - return doc.PrintRequestedDocumentation(std::cout) ? 0 : 1; + doc.PrependSection("Options", cmake::CMAKE_STANDARD_OPTIONS_TABLE); + return !doc.PrintRequestedDocumentation(std::cout); } bool debug = false; diff --git a/Source/QtDialog/CMakeSetup.cxx b/Source/QtDialog/CMakeSetup.cxx index 3113d64..11f7fe6 100644 --- a/Source/QtDialog/CMakeSetup.cxx +++ b/Source/QtDialog/CMakeSetup.cxx @@ -23,25 +23,23 @@ #include "cmake.h" namespace { -const char* cmDocumentationName[][2] = { { nullptr, - " cmake-gui - CMake GUI." }, - { nullptr, nullptr } }; - -const char* cmDocumentationUsage[][2] = { - { nullptr, - " cmake-gui [options]\n" - " cmake-gui [options] \n" - " cmake-gui [options] \n" - " cmake-gui [options] -S -B \n" - " cmake-gui [options] --browse-manual\n" }, - { nullptr, nullptr } +const cmDocumentationEntry cmDocumentationName = { + nullptr, " cmake-gui - CMake GUI." }; -const char* cmDocumentationOptions[][2] = { +const cmDocumentationEntry cmDocumentationUsage = { + nullptr, + " cmake-gui [options]\n" + " cmake-gui [options] \n" + " cmake-gui [options] \n" + " cmake-gui [options] -S -B \n" + " cmake-gui [options] --browse-manual" +}; + +const cmDocumentationEntry cmDocumentationOptions[3] = { { "-S ", "Explicitly specify a source directory." }, { "-B ", "Explicitly specify a build directory." }, - { "--preset=", "Specify a configure preset." }, - { nullptr, nullptr } + { "--preset=", "Specify a configure preset." } }; } // anonymous namespace diff --git a/Source/cmDocumentation.cxx b/Source/cmDocumentation.cxx index 93685ad..5db8e49 100644 --- a/Source/cmDocumentation.cxx +++ b/Source/cmDocumentation.cxx @@ -17,7 +17,7 @@ #include "cmVersion.h" namespace { -const char* cmDocumentationStandardOptions[][2] = { +const cmDocumentationEntry cmDocumentationStandardOptions[20] = { { "-h,-H,--help,-help,-usage,/?", "Print usage information and exit." }, { "--version,-version,/V []", "Print version number and exit." }, { "--help-full []", "Print all help manuals and exit." }, @@ -43,20 +43,17 @@ const char* cmDocumentationStandardOptions[][2] = { { "--help-variable var []", "Print help for one variable and exit." }, { "--help-variable-list []", "List variables with help available and exit." }, - { "--help-variables []", "Print cmake-variables manual and exit." }, - { nullptr, nullptr } + { "--help-variables []", "Print cmake-variables manual and exit." } }; -const char* cmDocumentationCPackGeneratorsHeader[][2] = { - { nullptr, "The following generators are available on this platform:" }, - { nullptr, nullptr } +const cmDocumentationEntry cmDocumentationCPackGeneratorsHeader = { + nullptr, "The following generators are available on this platform:" }; -const char* cmDocumentationCMakeGeneratorsHeader[][2] = { - { nullptr, - "The following generators are available on this platform (* marks " - "default):" }, - { nullptr, nullptr } +const cmDocumentationEntry cmDocumentationCMakeGeneratorsHeader = { + nullptr, + "The following generators are available on this platform (* marks " + "default):" }; bool isOption(const char* arg) @@ -373,13 +370,6 @@ void cmDocumentation::SetSection(const char* name, this->SectionAtName(name) = std::move(section); } -void cmDocumentation::SetSection(const char* name, const char* docs[][2]) -{ - cmDocumentationSection sec{ name }; - sec.Append(docs); - this->SetSection(name, std::move(sec)); -} - void cmDocumentation::SetSections( std::map sections) { @@ -393,16 +383,6 @@ cmDocumentationSection& cmDocumentation::SectionAtName(const char* name) .first->second; } -void cmDocumentation::PrependSection(const char* name, const char* docs[][2]) -{ - this->SectionAtName(name).Prepend(docs); -} - -void cmDocumentation::AppendSection(const char* name, const char* docs[][2]) -{ - this->SectionAtName(name).Append(docs); -} - void cmDocumentation::AppendSection(const char* name, cmDocumentationEntry& docs) { diff --git a/Source/cmDocumentation.h b/Source/cmDocumentation.h index de5449a..f878acb 100644 --- a/Source/cmDocumentation.h +++ b/Source/cmDocumentation.h @@ -82,18 +82,15 @@ public: sec.Append(docs); this->SetSection(sectionName, std::move(sec)); } - void SetSection(const char* sectionName, const char* docs[][2]); void SetSections(std::map sections); /** Add the documentation to the beginning/end of the section */ - void PrependSection(const char* sectionName, const char* docs[][2]); template void PrependSection(const char* sectionName, const Iterable& docs) { this->SectionAtName(sectionName).Prepend(docs); } void PrependSection(const char* sectionName, cmDocumentationEntry& docs); - void AppendSection(const char* sectionName, const char* docs[][2]); template void AppendSection(const char* sectionName, const Iterable& docs) { diff --git a/Source/cmDocumentationEntry.h b/Source/cmDocumentationEntry.h index bad3b59..aa97391 100644 --- a/Source/cmDocumentationEntry.h +++ b/Source/cmDocumentationEntry.h @@ -13,7 +13,7 @@ struct cmDocumentationEntry std::string Brief; char CustomNamePrefix = ' '; cmDocumentationEntry() = default; - cmDocumentationEntry(const char* n, const char* b) + cmDocumentationEntry(const char* const n, const char* const b) { if (n) { this->Name = n; diff --git a/Source/cmDocumentationSection.cxx b/Source/cmDocumentationSection.cxx deleted file mode 100644 index 439da1b..0000000 --- a/Source/cmDocumentationSection.cxx +++ /dev/null @@ -1,28 +0,0 @@ -/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying - file Copyright.txt or https://cmake.org/licensing for details. */ -#include "cmDocumentationSection.h" - -void cmDocumentationSection::Append(const char* data[][2]) -{ - int i = 0; - while (data[i][1]) { - this->Entries.emplace_back(data[i][0], data[i][1]); - data += 1; - } -} - -void cmDocumentationSection::Prepend(const char* data[][2]) -{ - std::vector tmp; - int i = 0; - while (data[i][1]) { - tmp.emplace_back(data[i][0], data[i][1]); - data += 1; - } - this->Entries.insert(this->Entries.begin(), tmp.begin(), tmp.end()); -} - -void cmDocumentationSection::Append(const char* n, const char* b) -{ - this->Entries.emplace_back(n, b); -} diff --git a/Source/cmDocumentationSection.h b/Source/cmDocumentationSection.h index e1b5454..b80131d 100644 --- a/Source/cmDocumentationSection.h +++ b/Source/cmDocumentationSection.h @@ -53,12 +53,12 @@ public: } /** Append an entry to this section using NULL terminated chars */ - void Append(const char* [][2]); - void Append(const char* n, const char* b); + void Append(const char* n, const char* b) + { + this->Entries.emplace_back(n, b); + } /** prepend some documentation to this section */ - void Prepend(const char* [][2]); - template void Prepend(const Iterable& entries) { diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 36c0089..cec3e97 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -40,7 +40,6 @@ #include "cmCommands.h" #include "cmDocumentation.h" #include "cmDocumentationEntry.h" -#include "cmDocumentationFormatter.h" #include "cmDuration.h" #include "cmExternalMakefileProjectGenerator.h" #include "cmFileTimeCache.h" @@ -165,6 +164,32 @@ static void cmWarnUnusedCliWarning(const std::string& variable, int /*unused*/, } #endif +cmDocumentationEntry cmake::CMAKE_STANDARD_OPTIONS_TABLE[18] = { + { "-S ", "Explicitly specify a source directory." }, + { "-B ", "Explicitly specify a build directory." }, + { "-C ", "Pre-load a script to populate the cache." }, + { "-D [:]=", "Create or update a cmake cache entry." }, + { "-U ", "Remove matching entries from CMake cache." }, + { "-G ", "Specify a build system generator." }, + { "-T ", "Specify toolset name if supported by generator." }, + { "-A ", "Specify platform name if supported by generator." }, + { "--toolchain ", "Specify toolchain file [CMAKE_TOOLCHAIN_FILE]." }, + { "--install-prefix ", + "Specify install directory [CMAKE_INSTALL_PREFIX]." }, + { "-Wdev", "Enable developer warnings." }, + { "-Wno-dev", "Suppress developer warnings." }, + { "-Werror=dev", "Make developer warnings errors." }, + { "-Wno-error=dev", "Make developer warnings not errors." }, + { "-Wdeprecated", "Enable deprecation warnings." }, + { "-Wno-deprecated", "Suppress deprecation warnings." }, + { "-Werror=deprecated", + "Make deprecated macro and function warnings " + "errors." }, + { "-Wno-error=deprecated", + "Make deprecated macro and function warnings " + "not errors." } +}; + cmake::cmake(Role role, cmState::Mode mode, cmState::ProjectKind projectKind) : CMakeWorkingDirectory(cmSystemTools::GetCurrentWorkingDirectory()) , FileTimeCache(cm::make_unique()) diff --git a/Source/cmake.h b/Source/cmake.h index 6b585a1..325c0c5 100644 --- a/Source/cmake.h +++ b/Source/cmake.h @@ -18,6 +18,7 @@ #include #include +#include "cmDocumentationEntry.h" #include "cmGeneratedFileStream.h" #include "cmInstalledFile.h" #include "cmListFileCache.h" @@ -45,7 +46,6 @@ class cmMakefile; class cmMessenger; class cmVariableWatch; struct cmBuildOptions; -struct cmDocumentationEntry; /** \brief Represents a cmake invocation. * @@ -793,37 +793,10 @@ private: #if !defined(CMAKE_BOOTSTRAP) std::unique_ptr ProfilingOutput; #endif -}; -#define CMAKE_STANDARD_OPTIONS_TABLE \ - { "-S ", "Explicitly specify a source directory." }, \ - { "-B ", "Explicitly specify a build directory." }, \ - { "-C ", "Pre-load a script to populate the cache." }, \ - { "-D [:]=", "Create or update a cmake cache entry." }, \ - { "-U ", "Remove matching entries from CMake cache." }, \ - { "-G ", "Specify a build system generator." }, \ - { "-T ", \ - "Specify toolset name if supported by generator." }, \ - { "-A ", \ - "Specify platform name if supported by generator." }, \ - { "--toolchain ", \ - "Specify toolchain file [CMAKE_TOOLCHAIN_FILE]." }, \ - { "--install-prefix ", \ - "Specify install directory [CMAKE_INSTALL_PREFIX]." }, \ - { "-Wdev", "Enable developer warnings." }, \ - { "-Wno-dev", "Suppress developer warnings." }, \ - { "-Werror=dev", "Make developer warnings errors." }, \ - { "-Wno-error=dev", "Make developer warnings not errors." }, \ - { "-Wdeprecated", "Enable deprecation warnings." }, \ - { "-Wno-deprecated", "Suppress deprecation warnings." }, \ - { "-Werror=deprecated", \ - "Make deprecated macro and function warnings " \ - "errors." }, \ - { \ - "-Wno-error=deprecated", \ - "Make deprecated macro and function warnings " \ - "not errors." \ - } +public: + static cmDocumentationEntry CMAKE_STANDARD_OPTIONS_TABLE[18]; +}; #define FOR_EACH_C90_FEATURE(F) F(c_function_prototypes) diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx index 3f1fe6c..1ca3e55 100644 --- a/Source/cmakemain.cxx +++ b/Source/cmakemain.cxx @@ -24,7 +24,7 @@ #include "cmBuildOptions.h" #include "cmCommandLineArgument.h" #include "cmConsoleBuf.h" -#include "cmDocumentationEntry.h" // IWYU pragma: keep +#include "cmDocumentationEntry.h" #include "cmGlobalGenerator.h" #include "cmMakefile.h" #include "cmMessageMetadata.h" @@ -46,12 +46,11 @@ namespace { #ifndef CMAKE_BOOTSTRAP -const char* cmDocumentationName[][2] = { - { nullptr, " cmake - Cross-Platform Makefile Generator." }, - { nullptr, nullptr } +const cmDocumentationEntry cmDocumentationName = { + nullptr, " cmake - Cross-Platform Makefile Generator." }; -const char* cmDocumentationUsage[][2] = { +const cmDocumentationEntry cmDocumentationUsage[2] = { { nullptr, " cmake [options] \n" " cmake [options] \n" @@ -59,17 +58,14 @@ const char* cmDocumentationUsage[][2] = { { nullptr, "Specify a source directory to (re-)generate a build system for " "it in the current working directory. Specify an existing build " - "directory to re-generate its build system." }, - { nullptr, nullptr } + "directory to re-generate its build system." } }; -const char* cmDocumentationUsageNote[][2] = { - { nullptr, "Run 'cmake --help' for more information." }, - { nullptr, nullptr } +const cmDocumentationEntry cmDocumentationUsageNote = { + nullptr, "Run 'cmake --help' for more information." }; -const char* cmDocumentationOptions[][2] = { - CMAKE_STANDARD_OPTIONS_TABLE, +const cmDocumentationEntry cmDocumentationOptions[31] = { { "--preset ,--preset=", "Specify a configure preset." }, { "--list-presets[=]", "List available presets." }, { "-E", "CMake command mode." }, @@ -118,8 +114,7 @@ const char* cmDocumentationOptions[][2] = { "google-trace" }, { "--profiling-output=", "Select an output path for the profiling data enabled through " - "--profiling-format." }, - { nullptr, nullptr } + "--profiling-format." } }; #endif @@ -226,6 +221,7 @@ int do_cmake(int ac, char const* const* av) } doc.AppendSection("Generators", generators); doc.PrependSection("Options", cmDocumentationOptions); + doc.PrependSection("Options", cmake::CMAKE_STANDARD_OPTIONS_TABLE); return !doc.PrintRequestedDocumentation(std::cout); } diff --git a/Source/ctest.cxx b/Source/ctest.cxx index 9e632df..d26a0d7 100644 --- a/Source/ctest.cxx +++ b/Source/ctest.cxx @@ -11,21 +11,21 @@ #include "cmCTest.h" #include "cmConsoleBuf.h" #include "cmDocumentation.h" +#include "cmDocumentationEntry.h" #include "cmSystemTools.h" #include "CTest/cmCTestLaunch.h" #include "CTest/cmCTestScriptHandler.h" namespace { -const char* cmDocumentationName[][2] = { - { nullptr, " ctest - Testing driver provided by CMake." }, - { nullptr, nullptr } +const cmDocumentationEntry cmDocumentationName = { + nullptr, " ctest - Testing driver provided by CMake." }; -const char* cmDocumentationUsage[][2] = { { nullptr, " ctest [options]" }, - { nullptr, nullptr } }; +const cmDocumentationEntry cmDocumentationUsage = { nullptr, + " ctest [options]" }; -const char* cmDocumentationOptions[][2] = { +const cmDocumentationEntry cmDocumentationOptions[74] = { { "--preset , --preset=", "Read arguments from a test preset." }, { "--list-presets", "List available test presets." }, @@ -155,8 +155,7 @@ const char* cmDocumentationOptions[][2] = { { "--no-compress-output", "Do not compress test output when submitting." }, { "--print-labels", "Print all available test labels." }, { "--no-tests=<[error|ignore]>", - "Regard no tests found either as 'error' or 'ignore' it." }, - { nullptr, nullptr } + "Regard no tests found either as 'error' or 'ignore' it." } }; } // anonymous namespace -- cgit v0.12