From 2f13fdef0a9471165751f628cb4b2ba7b83b1ae1 Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Tue, 23 Feb 2021 08:45:12 -0500
Subject: [PATCH] cmake: Document '--preset <preset>' form of the argument

This form already works.  Document it and add tests.

Issue: #21855
---
 Help/manual/cmake.1.rst                                   | 2 +-
 Source/cmakemain.cxx                                      | 2 +-
 Tests/RunCMake/CMakePresets/CMakePresets.json.in          | 8 +++++++-
 Tests/RunCMake/CMakePresets/GoodSpaces-stdout.txt         | 3 +++
 Tests/RunCMake/CMakePresets/GoodSpacesEq-stdout.txt       | 3 +++
 Tests/RunCMake/CMakePresets/GoodSpacesEq.cmake            | 0
 Tests/RunCMake/CMakePresets/NoPresetArgumentEq-result.txt | 1 +
 Tests/RunCMake/CMakePresets/NoPresetArgumentEq-stderr.txt | 2 ++
 Tests/RunCMake/CMakePresets/RunCMakeTest.cmake            | 6 ++++--
 9 files changed, 22 insertions(+), 5 deletions(-)
 create mode 100644 Tests/RunCMake/CMakePresets/GoodSpaces-stdout.txt
 create mode 100644 Tests/RunCMake/CMakePresets/GoodSpacesEq-stdout.txt
 create mode 100644 Tests/RunCMake/CMakePresets/GoodSpacesEq.cmake
 create mode 100644 Tests/RunCMake/CMakePresets/NoPresetArgumentEq-result.txt
 create mode 100644 Tests/RunCMake/CMakePresets/NoPresetArgumentEq-stderr.txt

diff --git a/Help/manual/cmake.1.rst b/Help/manual/cmake.1.rst
index b2bd1ed561..1759b9d0f2 100644
--- a/Help/manual/cmake.1.rst
+++ b/Help/manual/cmake.1.rst
@@ -377,7 +377,7 @@ Options
  about:tracing tab of Google Chrome or using a plugin for a tool like Trace
  Compass.
 
-``--preset=<preset>``
+``--preset <preset>``, ``--preset=<preset>``
  Reads a :manual:`preset <cmake-presets(7)>` from
  ``<path-to-source>/CMakePresets.json`` and
  ``<path-to-source>/CMakeUserPresets.json``. The preset specifies the
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index cd3c955d6f..4260ca2d90 100644
--- a/Source/cmakemain.cxx
+++ b/Source/cmakemain.cxx
@@ -64,7 +64,7 @@ const char* cmDocumentationUsageNote[][2] = {
 
 const char* cmDocumentationOptions[][2] = {
   CMAKE_STANDARD_OPTIONS_TABLE,
-  { "--preset=<preset>", "Specify a configure preset." },
+  { "--preset <preset>,--preset=<preset>", "Specify a configure preset." },
   { "--list-presets", "List available presets." },
   { "-E", "CMake command mode." },
   { "-L[A][H]", "List non-advanced cached variables." },
diff --git a/Tests/RunCMake/CMakePresets/CMakePresets.json.in b/Tests/RunCMake/CMakePresets/CMakePresets.json.in
index 54e41403e4..d4d183888a 100644
--- a/Tests/RunCMake/CMakePresets/CMakePresets.json.in
+++ b/Tests/RunCMake/CMakePresets/CMakePresets.json.in
@@ -132,7 +132,13 @@
     {
       "name": "Good Spaces",
       "generator": "@RunCMake_GENERATOR@",
-      "binaryDir": "${sourceDir}/build"
+      "binaryDir": "${sourceDir}/build",
+      "cacheVariables": {
+        "GOOD_SPACES": {
+          "type": "STRING",
+          "value": "1"
+        }
+      }
     },
     {
       "name": "GoodWindowsBackslash",
diff --git a/Tests/RunCMake/CMakePresets/GoodSpaces-stdout.txt b/Tests/RunCMake/CMakePresets/GoodSpaces-stdout.txt
new file mode 100644
index 0000000000..d106c45788
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/GoodSpaces-stdout.txt
@@ -0,0 +1,3 @@
+Preset CMake variables:
+
+  GOOD_SPACES:STRING="1"
diff --git a/Tests/RunCMake/CMakePresets/GoodSpacesEq-stdout.txt b/Tests/RunCMake/CMakePresets/GoodSpacesEq-stdout.txt
new file mode 100644
index 0000000000..d106c45788
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/GoodSpacesEq-stdout.txt
@@ -0,0 +1,3 @@
+Preset CMake variables:
+
+  GOOD_SPACES:STRING="1"
diff --git a/Tests/RunCMake/CMakePresets/GoodSpacesEq.cmake b/Tests/RunCMake/CMakePresets/GoodSpacesEq.cmake
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/Tests/RunCMake/CMakePresets/NoPresetArgumentEq-result.txt b/Tests/RunCMake/CMakePresets/NoPresetArgumentEq-result.txt
new file mode 100644
index 0000000000..d00491fd7e
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/NoPresetArgumentEq-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CMakePresets/NoPresetArgumentEq-stderr.txt b/Tests/RunCMake/CMakePresets/NoPresetArgumentEq-stderr.txt
new file mode 100644
index 0000000000..a53682da25
--- /dev/null
+++ b/Tests/RunCMake/CMakePresets/NoPresetArgumentEq-stderr.txt
@@ -0,0 +1,2 @@
+^CMake Error: No preset specified for --preset
+CMake Error: Run 'cmake --help' for all supported options.$
diff --git a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
index 25a7f2f044..114abc59a9 100644
--- a/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CMakePresets/RunCMakeTest.cmake
@@ -143,7 +143,8 @@ run_cmake_presets(GoodBinaryUp)
 set(CMakePresets_SOURCE_ARG "../GoodBinaryRelative")
 run_cmake_presets(GoodBinaryRelative)
 unset(CMakePresets_SOURCE_ARG)
-run_cmake_presets(GoodSpaces "--preset=Good Spaces")
+run_cmake_presets(GoodSpaces "--preset" "Good Spaces")
+run_cmake_presets(GoodSpacesEq "--preset=Good Spaces")
 if(WIN32)
   run_cmake_presets(GoodWindowsBackslash)
 endif()
@@ -206,7 +207,8 @@ endif()
 
 # Test bad command line arguments
 run_cmake_presets(NoSuchPreset)
-run_cmake_presets(NoPresetArgument --preset=)
+run_cmake_presets(NoPresetArgument --preset)
+run_cmake_presets(NoPresetArgumentEq --preset= -DA=B)
 run_cmake_presets(UseHiddenPreset)
 
 # Test CMakeUserPresets.json
-- 
GitLab