Merge topic 'file-MAKE_DIRECTORY-result-var' into release-4.0

41d91387f6 Merge branch 'backport-3.31-file-MAKE_DIRECTORY-result-var'
3dd701c068 Merge branch 'backport-3.31-file-MAKE_DIRECTORY-result-var' (early part)
397ec37528 file(MAKE_DIRECTORY): Do not make directories for command keywords
a039a1655d file(MAKE_DIRECTORY): Clarify formatting of unexpected arguments error
90d9c79348 file(MAKE_DIRECTORY): Do not make directories for command keywords

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !10467
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index eebe674..e9f234f 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -864,7 +864,7 @@
         cmMakeRange(cm::begin(unparsedArguments), cm::end(unparsedArguments)),
         "\n");
       status.SetError("MAKE_DIRECTORY called with unexpected\n"
-                      "arguments:\n" +
+                      "arguments:\n  " +
                       unexpectedArgsStr);
       return false;
     }
@@ -875,9 +875,7 @@
   }
 
   std::string expr;
-  for (std::string const& arg :
-       cmMakeRange(args).advance(1)) // Get rid of subcommand
-  {
+  for (std::string const& arg : argsRange) {
     std::string const* cdir = &arg;
     if (!cmsys::SystemTools::FileIsFullPath(arg)) {
       expr =
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT-result.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT-stderr.txt b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT-stderr.txt
new file mode 100644
index 0000000..1602e43
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT-stderr.txt
@@ -0,0 +1,8 @@
+^CMake Error at [^
+]*/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT\.cmake:[0-9]+ \(file\):
+  file MAKE_DIRECTORY called with unexpected
+
+  arguments:
+
+    [^
+]*/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT-build/after$
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT.cmake
new file mode 100644
index 0000000..40743f8
--- /dev/null
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT.cmake
@@ -0,0 +1,6 @@
+file(MAKE_DIRECTORY
+  "${CMAKE_CURRENT_BINARY_DIR}/before"
+  RESULT resultVal
+  "${CMAKE_CURRENT_BINARY_DIR}/after"
+)
+message(STATUS "Result=${resultVal}")
diff --git a/Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake b/Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake
index 1eacd90..77d16e1 100644
--- a/Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake
+++ b/Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake
@@ -5,3 +5,4 @@
 run_cmake_script(MAKE_DIRECTORY-Result-one-dir-SUCCESS)
 run_cmake_script(MAKE_DIRECTORY-Result-many-dirs-FAIL)
 run_cmake_script(MAKE_DIRECTORY-Result-many-dirs-SUCCESS)
+run_cmake_script(MAKE_DIRECTORY-after-RESULT)