summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2022-04-20 15:29:59 (GMT)
committerKitware Robot <kwrobot@kitware.com>2022-04-20 15:30:05 (GMT)
commit1d5285887ce86fc10e0ca346d0255392dc1649e3 (patch)
tree7ef8fdec45217c83bc16b0a8798d89aa45350069 /Source
parentdcd5b904a982a42ef29322ee7ac30d2fac2863ef (diff)
parent62f4a41647b146cebf9250e3ee873cb55d9bd7b6 (diff)
downloadCMake-1d5285887ce86fc10e0ca346d0255392dc1649e3.zip
CMake-1d5285887ce86fc10e0ca346d0255392dc1649e3.tar.gz
CMake-1d5285887ce86fc10e0ca346d0255392dc1649e3.tar.bz2
Merge topic 'command-line-argument-bool'
62f4a41647 Refactor: Use cmCommandLineArgument::setTo{True,Value}() 0645d08c98 cmCommandLineArgument: Add setToTrue() and setToValue() helpers Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Acked-by: Robert Maynard <robertjmaynard@gmail.com> Merge-request: !7181
Diffstat (limited to 'Source')
-rw-r--r--Source/cmCommandLineArgument.h50
-rw-r--r--Source/cmake.cxx10
-rw-r--r--Source/cmakemain.cxx87
3 files changed, 71 insertions, 76 deletions
diff --git a/Source/cmCommandLineArgument.h b/Source/cmCommandLineArgument.h
index 72ab045..33c91bc 100644
--- a/Source/cmCommandLineArgument.h
+++ b/Source/cmCommandLineArgument.h
@@ -201,7 +201,57 @@ struct cmCommandLineArgument
return (parseState == ParseMode::Valid);
}
+ template <typename... Values>
+ static std::function<FunctionSignature> setToTrue(Values&&... values)
+ {
+ return ArgumentLambdaHelper<FunctionSignature>::generateSetToTrue(
+ std::forward<Values>(values)...);
+ }
+
+ template <typename... Values>
+ static std::function<FunctionSignature> setToValue(Values&&... values)
+ {
+ return ArgumentLambdaHelper<FunctionSignature>::generateSetToValue(
+ std::forward<Values>(values)...);
+ }
+
private:
+ template <typename T>
+ class ArgumentLambdaHelper;
+
+ template <typename... CallState>
+ class ArgumentLambdaHelper<bool(const std::string&, CallState...)>
+ {
+ public:
+ static std::function<bool(const std::string&, CallState...)>
+ generateSetToTrue(bool& value1)
+ {
+ return [&value1](const std::string&, CallState&&...) -> bool {
+ value1 = true;
+ return true;
+ };
+ }
+
+ static std::function<bool(const std::string&, CallState...)>
+ generateSetToTrue(bool& value1, bool& value2)
+ {
+ return [&value1, &value2](const std::string&, CallState&&...) -> bool {
+ value1 = true;
+ value2 = true;
+ return true;
+ };
+ }
+
+ static std::function<bool(const std::string&, CallState...)>
+ generateSetToValue(std::string& value1)
+ {
+ return [&value1](const std::string& arg, CallState&&...) -> bool {
+ value1 = arg;
+ return true;
+ };
+ }
+ };
+
std::string extract_single_value(std::string const& input,
ParseMode& parseState) const
{
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 5bfc4c8..1c027ad 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -565,10 +565,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
"No install directory specified for --install-prefix",
CommandArgument::Values::One, PrefixLambda },
CommandArgument{ "--find-package", CommandArgument::Values::Zero,
- [&](std::string const&, cmake*) -> bool {
- findPackageMode = true;
- return true;
- } },
+ CommandArgument::setToTrue(findPackageMode) },
};
for (decltype(args.size()) i = 1; i < args.size(); ++i) {
std::string const& arg = args[i];
@@ -876,10 +873,7 @@ void cmake::SetArgs(const std::vector<std::string>& args)
CommandArgument{ "-P", "-P must be followed by a file name.",
CommandArgument::Values::One,
CommandArgument::RequiresSeparator::No,
- [&](std::string const&, cmake*) -> bool {
- scriptMode = true;
- return true;
- } },
+ CommandArgument::setToTrue(scriptMode) },
CommandArgument{ "-D", "-D must be followed with VAR=VALUE.",
CommandArgument::Values::One,
CommandArgument::RequiresSeparator::No,
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index 28be166..41c6c12 100644
--- a/Source/cmakemain.cxx
+++ b/Source/cmakemain.cxx
@@ -9,6 +9,7 @@
#include <climits>
#include <cstdio>
#include <cstring>
+#include <functional>
#include <iostream>
#include <sstream>
#include <string>
@@ -262,37 +263,17 @@ int do_cmake(int ac, char const* const* av)
return true;
} },
CommandArgument{ "--system-information", CommandArgument::Values::Zero,
- [&](std::string const&) -> bool {
- sysinfo = true;
- return true;
- } },
+ CommandArgument::setToTrue(sysinfo) },
CommandArgument{ "-N", CommandArgument::Values::Zero,
- [&](std::string const&) -> bool {
- view_only = true;
- return true;
- } },
+ CommandArgument::setToTrue(view_only) },
CommandArgument{ "-LAH", CommandArgument::Values::Zero,
- [&](std::string const&) -> bool {
- list_all_cached = true;
- list_help = true;
- return true;
- } },
+ CommandArgument::setToTrue(list_all_cached, list_help) },
CommandArgument{ "-LA", CommandArgument::Values::Zero,
- [&](std::string const&) -> bool {
- list_all_cached = true;
- return true;
- } },
+ CommandArgument::setToTrue(list_all_cached) },
CommandArgument{ "-LH", CommandArgument::Values::Zero,
- [&](std::string const&) -> bool {
- list_cached = true;
- list_help = true;
- return true;
- } },
+ CommandArgument::setToTrue(list_cached, list_help) },
CommandArgument{ "-L", CommandArgument::Values::Zero,
- [&](std::string const&) -> bool {
- list_cached = true;
- return true;
- } },
+ CommandArgument::setToTrue(list_cached) },
CommandArgument{ "-P", "No script specified for argument -P",
CommandArgument::Values::One,
CommandArgument::RequiresSeparator::No,
@@ -510,15 +491,9 @@ int do_build(int ac, char const* const* av)
std::vector<CommandArgument> arguments = {
CommandArgument{ "--preset", CommandArgument::Values::One,
- [&](std::string const& value) -> bool {
- presetName = value;
- return true;
- } },
+ CommandArgument::setToValue(presetName) },
CommandArgument{ "--list-presets", CommandArgument::Values::Zero,
- [&](std::string const&) -> bool {
- listPresets = true;
- return true;
- } },
+ CommandArgument::setToTrue(listPresets) },
CommandArgument{ "-j", CommandArgument::Values::ZeroOrOne,
CommandArgument::RequiresSeparator::No, jLambda },
CommandArgument{ "--parallel", CommandArgument::Values::ZeroOrOne,
@@ -527,15 +502,9 @@ int do_build(int ac, char const* const* av)
CommandArgument{ "--target", CommandArgument::Values::OneOrMore,
targetLambda },
CommandArgument{ "--config", CommandArgument::Values::One,
- [&](std::string const& value) -> bool {
- config = value;
- return true;
- } },
+ CommandArgument::setToValue(config) },
CommandArgument{ "--clean-first", CommandArgument::Values::Zero,
- [&](std::string const&) -> bool {
- cleanFirst = true;
- return true;
- } },
+ CommandArgument::setToTrue(cleanFirst) },
CommandArgument{ "--resolve-package-references",
CommandArgument::Values::One, resolvePackagesLambda },
CommandArgument{ "-v", CommandArgument::Values::Zero, verboseLambda },
@@ -545,10 +514,7 @@ int do_build(int ac, char const* const* av)
CommandArgument{ "--use-stderr", CommandArgument::Values::Zero,
[](std::string const&) -> bool { return true; } },
CommandArgument{ "--", CommandArgument::Values::Zero,
- [&](std::string const&) -> bool {
- nativeOptionsPassed = true;
- return true;
- } },
+ CommandArgument::setToTrue(nativeOptionsPassed) },
};
if (ac >= 3) {
@@ -831,31 +797,16 @@ int do_install(int ac, char const* const* av)
std::vector<CommandArgument> arguments = {
CommandArgument{ "--config", CommandArgument::Values::One,
- [&](std::string const& value) -> bool {
- config = value;
- return true;
- } },
+ CommandArgument::setToValue(config) },
CommandArgument{ "--component", CommandArgument::Values::One,
- [&](std::string const& value) -> bool {
- component = value;
- return true;
- } },
- CommandArgument{ "--default-directory-permissions",
- CommandArgument::Values::One,
- [&](std::string const& value) -> bool {
- defaultDirectoryPermissions = value;
- return true;
- } },
+ CommandArgument::setToValue(component) },
+ CommandArgument{
+ "--default-directory-permissions", CommandArgument::Values::One,
+ CommandArgument::setToValue(defaultDirectoryPermissions) },
CommandArgument{ "--prefix", CommandArgument::Values::One,
- [&](std::string const& value) -> bool {
- prefix = value;
- return true;
- } },
+ CommandArgument::setToValue(prefix) },
CommandArgument{ "--strip", CommandArgument::Values::Zero,
- [&](std::string const&) -> bool {
- strip = true;
- return true;
- } },
+ CommandArgument::setToTrue(strip) },
CommandArgument{ "-v", CommandArgument::Values::Zero, verboseLambda },
CommandArgument{ "--verbose", CommandArgument::Values::Zero,
verboseLambda }