Kaynağa Gözat

Merge topic 'stop_parsing_after_first_script_arg' into release-3.26

f9e8a067c2 cmake: Stop parsing after `--` when detecting script mode

Acked-by: Kitware Robot <[email protected]>
Merge-request: !8186
Brad King 3 yıl önce
ebeveyn
işleme
7f90210dd6

+ 7 - 5
Source/cmakemain.cxx

@@ -303,6 +303,13 @@ int do_cmake(int ac, char const* const* av)
   for (decltype(inputArgs.size()) i = 0; i < inputArgs.size(); ++i) {
     std::string const& arg = inputArgs[i];
     bool matched = false;
+
+    // Only in script mode do we stop parsing instead
+    // of preferring the last mode flag provided
+    if (arg == "--" && workingMode == cmake::SCRIPT_MODE) {
+      parsedArgs = inputArgs;
+      break;
+    }
     for (auto const& m : arguments) {
       if (m.matches(arg)) {
         matched = true;
@@ -311,11 +318,6 @@ int do_cmake(int ac, char const* const* av)
         }
         return 1; // failed to parse
       }
-      // Only in script mode do we stop parsing instead
-      // of preferring the last mode flag provided
-      if (arg == "--" && workingMode == cmake::SCRIPT_MODE) {
-        break;
-      }
     }
     if (!matched) {
       parsedArgs.emplace_back(av[i]);

+ 10 - 0
Tests/RunCMake/CommandLine/P_P_in_arbitrary_args_2-stdout.txt

@@ -0,0 +1,10 @@
+^-- CMAKE_ARGC='6'
+-- CMAKE_ARGV1='-P'
+-- CMAKE_ARGV2='[^']*/Tests/RunCMake/CommandLine/P_arbitrary_args.cmake'
+-- CMAKE_ARGV3='--'
+-- CMAKE_ARGV4='-P'
+-- CMAKE_ARGV5='-o'
+-- CMAKE_ARGV6=''
+-- CMAKE_ARGV7=''
+-- CMAKE_ARGV8=''
+-- CMAKE_ARGV9=''$

+ 1 - 0
Tests/RunCMake/CommandLine/RunCMakeTest.cmake

@@ -56,6 +56,7 @@ run_cmake_command(P_no-file ${CMAKE_COMMAND} -P nosuchscriptfile.cmake)
 run_cmake_command(P_args ${CMAKE_COMMAND} -P "${RunCMake_SOURCE_DIR}/P_args.cmake" relative/path "${RunCMake_SOURCE_DIR}")
 run_cmake_command(P_arbitrary_args ${CMAKE_COMMAND} -P "${RunCMake_SOURCE_DIR}/P_arbitrary_args.cmake" -- -DFOO -S -B --fresh --version)
 run_cmake_command(P_P_in_arbitrary_args ${CMAKE_COMMAND} -P "${RunCMake_SOURCE_DIR}/P_arbitrary_args.cmake" -- -P "${RunCMake_SOURCE_DIR}/non_existing.cmake")
+run_cmake_command(P_P_in_arbitrary_args_2 ${CMAKE_COMMAND} -P "${RunCMake_SOURCE_DIR}/P_arbitrary_args.cmake" -- -P -o)
 run_cmake_command(P_fresh ${CMAKE_COMMAND} -P "${RunCMake_SOURCE_DIR}/P_fresh.cmake" --fresh)
 
 run_cmake_command(build-no-dir