From b976b844d28989cd3298115c25b3d89888785388 Mon Sep 17 00:00:00 2001 From: Matthew Woehlke Date: Wed, 17 Aug 2022 12:37:42 -0400 Subject: try_compile: Don't accept try_run arguments Modify cmCoreTryCompile to only recognize try_run arguments when actually parsing try_run. (The old behavior was to recognize try_run arguments for try_compile also and then complain.) This has a small chance that a try_run keyword will be consumed as part of a multi-valued keyword argument. However, this behavior is more consistent with other commands, as we don't normally treat keywords as universally reserved. Also, the code is noticeably simplified. --- Source/cmCoreTryCompile.cxx | 32 +++++------------------- Tests/RunCMake/try_compile/TryRunArgs-stderr.txt | 21 ++++++++++------ 2 files changed, 19 insertions(+), 34 deletions(-) diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index 46ee8db..7b9dc2e 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -145,6 +145,10 @@ auto const TryCompileArgParser = .BIND_LANG_PROPS(HIP) .BIND_LANG_PROPS(OBJC) .BIND_LANG_PROPS(OBJCXX) + /* keep semicolon on own line */; + +auto const TryRunArgParser = + cmArgumentParser{ TryCompileArgParser } .Bind("COMPILE_OUTPUT_VARIABLE"_s, &Arguments::CompileOutputVariable) .Bind("RUN_OUTPUT_VARIABLE"_s, &Arguments::RunOutputVariable) .Bind("RUN_OUTPUT_STDOUT_VARIABLE"_s, &Arguments::RunOutputStdOutVariable) @@ -160,7 +164,8 @@ Arguments cmCoreTryCompile::ParseArgs( cmRange::const_iterator> args, bool isTryRun) { std::vector unparsedArguments; - auto arguments = TryCompileArgParser.Parse(args, &unparsedArguments, 0); + const auto& parser = (isTryRun ? TryRunArgParser : TryCompileArgParser); + auto arguments = parser.Parse(args, &unparsedArguments, 0); if (!arguments.MaybeReportError(*(this->Makefile)) && !unparsedArguments.empty()) { std::string m = "Unknown arguments:"; @@ -194,31 +199,6 @@ Arguments cmCoreTryCompile::ParseArgs( arguments.RunWorkingDirectory->empty()) { arguments.RunWorkingDirectory = cm::nullopt; } - } else { - std::string tryRunArgs; - if (arguments.CompileOutputVariable) { - tryRunArgs = cmStrCat(tryRunArgs, " COMPILE_OUTPUT_VARIABLE\n"); - } - if (arguments.RunOutputVariable) { - tryRunArgs = cmStrCat(tryRunArgs, " RUN_OUTPUT_VARIABLE\n"); - } - if (arguments.RunOutputStdOutVariable) { - tryRunArgs = cmStrCat(tryRunArgs, " RUN_OUTPUT_STDOUT_VARIABLE\n"); - } - if (arguments.RunOutputStdErrVariable) { - tryRunArgs = cmStrCat(tryRunArgs, " RUN_OUTPUT_STDERR_VARIABLE\n"); - } - if (arguments.RunWorkingDirectory) { - tryRunArgs = cmStrCat(tryRunArgs, " WORKING_DIRECTORY\n"); - } - if (arguments.RunArgs) { - tryRunArgs = cmStrCat(tryRunArgs, " ARGS\n"); - } - if (!tryRunArgs.empty()) { - this->Makefile->IssueMessage( - MessageType::AUTHOR_WARNING, - cmStrCat("Ignoring try_run arguments for try_compile:\n", tryRunArgs)); - } } return arguments; } diff --git a/Tests/RunCMake/try_compile/TryRunArgs-stderr.txt b/Tests/RunCMake/try_compile/TryRunArgs-stderr.txt index 717c208..2a58e71 100644 --- a/Tests/RunCMake/try_compile/TryRunArgs-stderr.txt +++ b/Tests/RunCMake/try_compile/TryRunArgs-stderr.txt @@ -1,13 +1,18 @@ ^CMake Warning \(dev\) at TryRunArgs.cmake:[0-9]+ \(try_compile\): - Ignoring try_run arguments for try_compile: - - COMPILE_OUTPUT_VARIABLE - RUN_OUTPUT_VARIABLE - RUN_OUTPUT_STDOUT_VARIABLE - RUN_OUTPUT_STDERR_VARIABLE - WORKING_DIRECTORY - ARGS + Unknown arguments: + "COMPILE_OUTPUT_VARIABLE" + "compOutputVar" + "RUN_OUTPUT_VARIABLE" + "runOutputVar" + "RUN_OUTPUT_STDOUT_VARIABLE" + "runOutputStdOutVar" + "RUN_OUTPUT_STDERR_VARIABLE" + "runOutputStdErrVar" + "WORKING_DIRECTORY" + "runWorkDir" + "ARGS" + "runArgs" Call Stack \(most recent call first\): CMakeLists.txt:[0-9]+ \(include\) This warning is for project developers. Use -Wno-dev to suppress it.$ -- cgit v0.12