From 90d9c793484d755d1e405fbfc82f80960d1f22f5 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 13 Mar 2025 11:44:48 -0400 Subject: [PATCH 1/2] file(MAKE_DIRECTORY): Do not make directories for command keywords In commit 95323c90a1 (file(MAKE_DIRECTORY): Add optional RESULT keyword to capture failure., 2024-06-16, v3.31.0-rc1~414^2) we computed an updated range of arguments, that name directories to be created, before the `RESULT` keyword. However, we forgot to use it in the loop. Fixes: #26768 --- Source/cmFileCommand.cxx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index 92e6b3e813..435534dc61 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -919,9 +919,7 @@ bool HandleMakeDirectoryCommand(std::vector const& args, } std::string expr; - for (std::string const& arg : - cmMakeRange(args).advance(1)) // Get rid of subcommand - { + for (std::string const& arg : argsRange) { const std::string* cdir = &arg; if (!cmsys::SystemTools::FileIsFullPath(arg)) { expr = From a039a1655d18648b6af18d8aef9cac0b342ef225 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 13 Mar 2025 11:54:11 -0400 Subject: [PATCH 2/2] file(MAKE_DIRECTORY): Clarify formatting of unexpected arguments error --- Source/cmFileCommand.cxx | 2 +- .../MAKE_DIRECTORY-after-RESULT-result.txt | 1 + .../MAKE_DIRECTORY-after-RESULT-stderr.txt | 8 ++++++++ .../file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT.cmake | 6 ++++++ Tests/RunCMake/file-MAKE_DIRECTORY/RunCMakeTest.cmake | 1 + 5 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT-result.txt create mode 100644 Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT-stderr.txt create mode 100644 Tests/RunCMake/file-MAKE_DIRECTORY/MAKE_DIRECTORY-after-RESULT.cmake diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index 435534dc61..d589a7a677 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -908,7 +908,7 @@ bool HandleMakeDirectoryCommand(std::vector const& args, cmMakeRange(cm::begin(unparsedArguments), cm::end(unparsedArguments)), "\n"); status.SetError("MAKE_DIRECTORY called with unexpected\n" - "arguments:\n" + + "arguments:\n " + unexpectedArgsStr); return false; } 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 0000000000..d00491fd7e --- /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 0000000000..1602e43ae9 --- /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 0000000000..40743f85a2 --- /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 1eacd9065e..77d16e1ce3 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-FAIL) 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)