From e815af118562c68794efbd310c887acd8eae800c Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 24 Jun 2015 13:53:28 +0200 Subject: First take on the cli module plus necessary infrastructure --- build/config/operation.cxx | 2 +- build/config/utility | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) (limited to 'build/config') diff --git a/build/config/operation.cxx b/build/config/operation.cxx index 89bef61..ecd805f 100644 --- a/build/config/operation.cxx +++ b/build/config/operation.cxx @@ -198,7 +198,7 @@ namespace build for (void* v: ts) { target& t (*static_cast (v)); - scope* rs (t.root_scope ()); + scope* rs (t.base_scope ().root_scope ()); if (rs == nullptr) fail << "out of project target " << t; diff --git a/build/config/utility b/build/config/utility index 83fcd75..3da990f 100644 --- a/build/config/utility +++ b/build/config/utility @@ -5,9 +5,13 @@ #ifndef BUILD_CONFIG_UTILITY #define BUILD_CONFIG_UTILITY +#include #include #include // pair +#include +#include + namespace build { class scope; @@ -37,6 +41,26 @@ namespace build template const T* optional (scope& root, const char* name); + + // Add all the values from a variable to the C-string list. T is + // either target or scope. + // + template + void + append_options (std::vector& args, T& s, const char* var) + { + if (auto val = s[var]) + { + for (const name& n: val.template as ()) + { + if (!n.type.empty () || !n.dir.empty ()) + fail << "expected option instead of " << n << + info << "in variable " << var; + + args.push_back (n.value.c_str ()); + } + } + } } } -- cgit v1.1