From 8a18e82e9581bd490253c1b2531c2c5e70c5d62b Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 19 Jul 2022 14:29:43 -0400 Subject: cmCMakePathCommand: Report keyword errors via argument parser results --- Source/cmCMakePathCommand.cxx | 66 ++++++++++------------ .../cmake_path/BASE_DIRECTORY-no-arg-stderr.txt | 4 +- .../cmake_path/OUTPUT_VARIABLE-no-arg-stderr.txt | 4 +- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/Source/cmCMakePathCommand.cxx b/Source/cmCMakePathCommand.cxx index e604ed1..b955bcf 100644 --- a/Source/cmCMakePathCommand.cxx +++ b/Source/cmCMakePathCommand.cxx @@ -2,7 +2,6 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmCMakePathCommand.h" -#include #include #include #include @@ -44,14 +43,12 @@ public: } template - Result Parse( - std::vector const& args, - std::vector* keywordsMissingValue = nullptr) const + Result Parse(std::vector const& args) const { this->Inputs.clear(); return this->cmArgumentParser::Parse( - cmMakeRange(args).advance(Advance), &this->Inputs, keywordsMissingValue); + cmMakeRange(args).advance(Advance), &this->Inputs); } const std::vector& GetInputs() const { return this->Inputs; } @@ -82,28 +79,13 @@ public: template Result Parse(std::vector const& args) const { - this->KeywordsMissingValue.clear(); - return this->CMakePathArgumentParser::template Parse( - args, &this->KeywordsMissingValue); - } - - const std::vector& GetKeywordsMissingValue() const - { - return this->KeywordsMissingValue; + args); } bool checkOutputVariable(const Result& arguments, cmExecutionStatus& status) const { - if (std::find(this->GetKeywordsMissingValue().begin(), - this->GetKeywordsMissingValue().end(), - "OUTPUT_VARIABLE"_s) != - this->GetKeywordsMissingValue().end()) { - status.SetError("OUTPUT_VARIABLE requires an argument."); - return false; - } - if (arguments.Output && arguments.Output->empty()) { status.SetError("Invalid name for output variable."); return false; @@ -111,12 +93,9 @@ public: return true; } - -private: - mutable std::vector KeywordsMissingValue; }; -struct OutputVariable +struct OutputVariable : public ArgumentParser::ParseResult { cm::optional Output; }; @@ -288,6 +267,9 @@ bool HandleAppendCommand(std::vector const& args, const auto arguments = parser.Parse(args); + if (arguments.MaybeReportError(status.GetMakefile())) { + return true; + } if (!parser.checkOutputVariable(arguments, status)) { return false; } @@ -310,6 +292,9 @@ bool HandleAppendStringCommand(std::vector const& args, const auto arguments = parser.Parse(args); + if (arguments.MaybeReportError(status.GetMakefile())) { + return true; + } if (!parser.checkOutputVariable(arguments, status)) { return false; } @@ -337,6 +322,9 @@ bool HandleRemoveFilenameCommand(std::vector const& args, const auto arguments = parser.Parse(args); + if (arguments.MaybeReportError(status.GetMakefile())) { + return true; + } if (!parser.checkOutputVariable(arguments, status)) { return false; } @@ -367,6 +355,9 @@ bool HandleReplaceFilenameCommand(std::vector const& args, const auto arguments = parser.Parse(args); + if (arguments.MaybeReportError(status.GetMakefile())) { + return true; + } if (!parser.checkOutputVariable(arguments, status)) { return false; } @@ -394,7 +385,7 @@ bool HandleReplaceFilenameCommand(std::vector const& args, bool HandleRemoveExtensionCommand(std::vector const& args, cmExecutionStatus& status) { - struct Arguments + struct Arguments : public ArgumentParser::ParseResult { cm::optional Output; bool LastOnly = false; @@ -406,6 +397,9 @@ bool HandleRemoveExtensionCommand(std::vector const& args, Arguments const arguments = parser.Parse(args); + if (arguments.MaybeReportError(status.GetMakefile())) { + return true; + } if (!parser.checkOutputVariable(arguments, status)) { return false; } @@ -437,7 +431,7 @@ bool HandleRemoveExtensionCommand(std::vector const& args, bool HandleReplaceExtensionCommand(std::vector const& args, cmExecutionStatus& status) { - struct Arguments + struct Arguments : public ArgumentParser::ParseResult { cm::optional Output; bool LastOnly = false; @@ -449,6 +443,9 @@ bool HandleReplaceExtensionCommand(std::vector const& args, Arguments const arguments = parser.Parse(args); + if (arguments.MaybeReportError(status.GetMakefile())) { + return true; + } if (!parser.checkOutputVariable(arguments, status)) { return false; } @@ -486,6 +483,9 @@ bool HandleNormalPathCommand(std::vector const& args, const auto arguments = parser.Parse(args); + if (arguments.MaybeReportError(status.GetMakefile())) { + return true; + } if (!parser.checkOutputVariable(arguments, status)) { return false; } @@ -514,7 +514,7 @@ bool HandleTransformPathCommand( const std::string& base)>& transform, bool normalizeOption = false) { - struct Arguments + struct Arguments : public ArgumentParser::ParseResult { cm::optional Output; cm::optional BaseDirectory; @@ -529,6 +529,9 @@ bool HandleTransformPathCommand( Arguments arguments = parser.Parse(args); + if (arguments.MaybeReportError(status.GetMakefile())) { + return true; + } if (!parser.checkOutputVariable(arguments, status)) { return false; } @@ -538,13 +541,6 @@ bool HandleTransformPathCommand( return false; } - if (std::find(parser.GetKeywordsMissingValue().begin(), - parser.GetKeywordsMissingValue().end(), "BASE_DIRECTORY"_s) != - parser.GetKeywordsMissingValue().end()) { - status.SetError("BASE_DIRECTORY requires an argument."); - return false; - } - std::string baseDirectory; if (arguments.BaseDirectory) { baseDirectory = *arguments.BaseDirectory; diff --git a/Tests/RunCMake/cmake_path/BASE_DIRECTORY-no-arg-stderr.txt b/Tests/RunCMake/cmake_path/BASE_DIRECTORY-no-arg-stderr.txt index ac47545..ad7d134 100644 --- a/Tests/RunCMake/cmake_path/BASE_DIRECTORY-no-arg-stderr.txt +++ b/Tests/RunCMake/cmake_path/BASE_DIRECTORY-no-arg-stderr.txt @@ -1,2 +1,4 @@ CMake Error at .+/cmake_path/call-cmake_path.cmake:[0-9]+ \(cmake_path\): - cmake_path BASE_DIRECTORY requires an argument. + Error after keyword "BASE_DIRECTORY": + + missing required value diff --git a/Tests/RunCMake/cmake_path/OUTPUT_VARIABLE-no-arg-stderr.txt b/Tests/RunCMake/cmake_path/OUTPUT_VARIABLE-no-arg-stderr.txt index e1d6592..63289ef 100644 --- a/Tests/RunCMake/cmake_path/OUTPUT_VARIABLE-no-arg-stderr.txt +++ b/Tests/RunCMake/cmake_path/OUTPUT_VARIABLE-no-arg-stderr.txt @@ -1,2 +1,4 @@ CMake Error at .+/cmake_path/call-cmake_path.cmake:[0-9]+ \(cmake_path\): - cmake_path OUTPUT_VARIABLE requires an argument. + Error after keyword "OUTPUT_VARIABLE": + + missing required value -- cgit v0.12