Browse Source

cmExecuteProcessCommand: Report keyword errors via argument parser results

Brad King 3 years ago
parent
commit
e56108f629

+ 4 - 8
Source/cmExecuteProcessCommand.cxx

@@ -47,7 +47,7 @@ bool cmExecuteProcessCommand(std::vector<std::string> const& args,
     return false;
   }
 
-  struct Arguments
+  struct Arguments : public ArgumentParser::ParseResult
   {
     std::vector<std::vector<std::string>> Commands;
     std::string OutputVariable;
@@ -95,14 +95,10 @@ bool cmExecuteProcessCommand(std::vector<std::string> const& args,
       .Bind("COMMAND_ERROR_IS_FATAL"_s, &Arguments::CommandErrorIsFatal);
 
   std::vector<std::string> unparsedArguments;
-  std::vector<cm::string_view> keywordsMissingValue;
-  Arguments const arguments =
-    parser.Parse(args, &unparsedArguments, &keywordsMissingValue);
+  Arguments const arguments = parser.Parse(args, &unparsedArguments);
 
-  if (!keywordsMissingValue.empty()) {
-    status.SetError(cmStrCat(" called with no value for ",
-                             keywordsMissingValue.front(), "."));
-    return false;
+  if (arguments.MaybeReportError(status.GetMakefile())) {
+    return true;
   }
   if (!unparsedArguments.empty()) {
     status.SetError(" given unknown argument \"" + unparsedArguments.front() +

+ 3 - 1
Tests/RunCMake/execute_process/EchoCommand3-stderr.txt

@@ -1,2 +1,4 @@
 CMake Error at .*EchoCommand.cmake:.*\(execute_process\):
-  execute_process called with no value for COMMAND_ECHO.
+  Error after keyword "COMMAND_ECHO":
+
+    missing required value

+ 4 - 1
Tests/RunCMake/execute_process/EncodingMissing-stderr.txt

@@ -1,4 +1,7 @@
 ^CMake Error at EncodingMissing.cmake:[0-9]+ \(execute_process\):
-  execute_process called with no value for ENCODING.
+  Error after keyword "ENCODING":
+
+    missing required value
+
 Call Stack \(most recent call first\):
   CMakeLists.txt:[0-9]+ \(include\)$