瀏覽代碼

cmake: In -P mode ignore extra paths on the command line

Fixes: #23748
Robert Maynard 3 年之前
父節點
當前提交
846a650ff7

+ 2 - 1
Source/cmake.cxx

@@ -1796,7 +1796,8 @@ void cmake::SetHomeDirectoryViaCommandLine(std::string const& path)
   }
 
   auto prev_path = this->GetHomeDirectory();
-  if (prev_path != path && !prev_path.empty()) {
+  if (prev_path != path && !prev_path.empty() &&
+      this->GetWorkingMode() == NORMAL_MODE) {
     this->IssueMessage(MessageType::WARNING,
                        cmStrCat("Ignoring extra path from command line:\n \"",
                                 prev_path, "\""));

+ 6 - 0
Tests/RunCMake/CommandLine/P_args-stdout.txt

@@ -0,0 +1,6 @@
+^-- CMAKE_ARGC='5'
+-- CMAKE_ARGV1='-P'
+-- CMAKE_ARGV2='[^']*/Tests/RunCMake/CommandLine/P_args.cmake'
+-- CMAKE_ARGV3='relative/path'
+-- CMAKE_ARGV4='[^']*/Tests/RunCMake/CommandLine'
+-- CMAKE_ARGV5=''$

+ 6 - 0
Tests/RunCMake/CommandLine/P_args.cmake

@@ -0,0 +1,6 @@
+message(STATUS "CMAKE_ARGC='${CMAKE_ARGC}'")
+message(STATUS "CMAKE_ARGV1='${CMAKE_ARGV1}'")
+message(STATUS "CMAKE_ARGV2='${CMAKE_ARGV2}'")
+message(STATUS "CMAKE_ARGV3='${CMAKE_ARGV3}'")
+message(STATUS "CMAKE_ARGV4='${CMAKE_ARGV4}'")
+message(STATUS "CMAKE_ARGV5='${CMAKE_ARGV5}'")

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

@@ -52,6 +52,7 @@ run_cmake_command(G_no-arg ${CMAKE_COMMAND} -B DummyBuildDir -G)
 run_cmake_command(G_bad-arg ${CMAKE_COMMAND} -B DummyBuildDir -G NoSuchGenerator)
 run_cmake_command(P_no-arg ${CMAKE_COMMAND} -P)
 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)
 run_cmake_command(P_fresh ${CMAKE_COMMAND} -P "${RunCMake_SOURCE_DIR}/P_fresh.cmake" --fresh)