diff options
author | Brad King <brad.king@kitware.com> | 2022-04-20 15:29:59 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2022-04-20 15:30:05 (GMT) |
commit | 1d5285887ce86fc10e0ca346d0255392dc1649e3 (patch) | |
tree | 7ef8fdec45217c83bc16b0a8798d89aa45350069 /Source | |
parent | dcd5b904a982a42ef29322ee7ac30d2fac2863ef (diff) | |
parent | 62f4a41647b146cebf9250e3ee873cb55d9bd7b6 (diff) | |
download | CMake-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.h | 50 | ||||
-rw-r--r-- | Source/cmake.cxx | 10 | ||||
-rw-r--r-- | Source/cmakemain.cxx | 87 |
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 } |