From 9f71deeeb0f8e6fe2c29f209fc96f466fc2831b6 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 16 Mar 2020 08:06:15 +0200 Subject: Rework config::{omitted,required,optional}() into unified config_lookup() --- libbuild2/cc/compile-rule.cxx | 2 +- libbuild2/cc/init.cxx | 15 ++++++------ libbuild2/cc/module.cxx | 53 +++++++++++++++++++++++-------------------- libbuild2/cc/module.hxx | 5 ++-- 4 files changed, 40 insertions(+), 35 deletions(-) (limited to 'libbuild2/cc') diff --git a/libbuild2/cc/compile-rule.cxx b/libbuild2/cc/compile-rule.cxx index 1cefcc5..a8916cf 100644 --- a/libbuild2/cc/compile-rule.cxx +++ b/libbuild2/cc/compile-rule.cxx @@ -5321,7 +5321,7 @@ namespace build2 extra, /* root_pre */ {string (x) + '.'}, /* root_modules */ "", /* root_post */ - nullopt, /* config */ + nullopt, /* config_module */ false, /* buildfile */ "the cc module", 2); /* verbosity */ diff --git a/libbuild2/cc/init.cxx b/libbuild2/cc/init.cxx index 202c612..723b678 100644 --- a/libbuild2/cc/init.cxx +++ b/libbuild2/cc/init.cxx @@ -244,8 +244,9 @@ namespace build2 // load_module (rs, rs, "cc.core.guess", loc); - // Configure. + // Configuration. // + using config::lookup_config; // Adjust module priority (compiler). // @@ -261,21 +262,21 @@ namespace build2 // // rs.assign ("cc.poptions") += cast_null ( - config::optional (rs, "config.cc.poptions")); + lookup_config (rs, "config.cc.poptions", nullptr)); rs.assign ("cc.coptions") += cast_null ( - config::optional (rs, "config.cc.coptions")); + lookup_config (rs, "config.cc.coptions", nullptr)); rs.assign ("cc.loptions") += cast_null ( - config::optional (rs, "config.cc.loptions")); + lookup_config (rs, "config.cc.loptions", nullptr)); rs.assign ("cc.aoptions") += cast_null ( - config::optional (rs, "config.cc.aoptions")); + lookup_config (rs, "config.cc.aoptions", nullptr)); rs.assign ("cc.libs") += cast_null ( - config::optional (rs, "config.cc.libs")); + lookup_config (rs, "config.cc.libs", nullptr)); - if (lookup l = config::omitted (rs, "config.cc.reprocess").first) + if (lookup l = lookup_config (rs, "config.cc.reprocess")) rs.assign ("cc.reprocess") = *l; // Load the bin.config module. diff --git a/libbuild2/cc/module.cxx b/libbuild2/cc/module.cxx index 138a11b..70cbc47 100644 --- a/libbuild2/cc/module.cxx +++ b/libbuild2/cc/module.cxx @@ -48,6 +48,10 @@ namespace build2 const variable& config_c_coptions (vp["config.cc.coptions"]); const variable& config_c_loptions (vp["config.cc.loptions"]); + // Configuration. + // + using config::lookup_config; + // config.x // strings mode; @@ -56,9 +60,9 @@ namespace build2 // default value every time will be a waste. So try without a default // first. // - auto p (config::omitted (rs, config_x)); + lookup l (lookup_config (new_config, rs, config_x)); - if (!p.first) + if (!l) { // If there is a config.x value for one of the modules that can hint // us the toolchain, load it's .guess module. This makes sure that @@ -113,17 +117,16 @@ namespace build2 // user changes the source of the pattern/mode, this one will get // updated as well. // - p = config::required ( - rs, - config_x, - move (d), - false, - cc_loaded ? config::save_default_commented : 0); + l = lookup_config (new_config, + rs, + config_x, + move (d), + cc_loaded ? config::save_default_commented : 0); } // Split the value into the compiler path and mode. // - const strings& v (cast (*p.first)); + const strings& v (cast (l)); path xc; { @@ -145,9 +148,9 @@ namespace build2 // x_info = &build2::cc::guess ( x, x_lang, move (xc), - cast_null (config::omitted (rs, config_x_id).first), - cast_null (config::omitted (rs, config_x_version).first), - cast_null (config::omitted (rs, config_x_target).first), + cast_null (lookup_config (rs, config_x_id)), + cast_null (lookup_config (rs, config_x_version)), + cast_null (lookup_config (rs, config_x_target)), mode, cast_null (rs[config_c_poptions]), cast_null (rs[config_x_poptions]), @@ -155,8 +158,6 @@ namespace build2 cast_null (rs[config_x_coptions]), cast_null (rs[config_c_loptions]), cast_null (rs[config_x_loptions])); - - new_ = p.second; } const compiler_info& xi (*x_info); @@ -338,6 +339,10 @@ namespace build2 const compiler_info& xi (*x_info); const target_triplet& tt (cast (rs[x_target])); + // Configuration. + // + using config::lookup_config; + // config.x.{p,c,l}options // config.x.libs // @@ -365,24 +370,24 @@ namespace build2 // x.coptions += # Note: '+='. // rs.assign (x_poptions) += cast_null ( - config::optional (rs, config_x_poptions)); + lookup_config (rs, config_x_poptions, nullptr)); rs.assign (x_coptions) += cast_null ( - config::optional (rs, config_x_coptions)); + lookup_config (rs, config_x_coptions, nullptr)); rs.assign (x_loptions) += cast_null ( - config::optional (rs, config_x_loptions)); + lookup_config (rs, config_x_loptions, nullptr)); rs.assign (x_aoptions) += cast_null ( - config::optional (rs, config_x_aoptions)); + lookup_config (rs, config_x_aoptions, nullptr)); rs.assign (x_libs) += cast_null ( - config::optional (rs, config_x_libs)); + lookup_config (rs, config_x_libs, nullptr)); // config.x.std overrides x.std // { - lookup l (config::omitted (rs, config_x_std).first); + lookup l (lookup_config (rs, config_x_std)); const string* v; if (l.defined ()) @@ -407,7 +412,7 @@ namespace build2 // if (x_translatable_headers != nullptr) { - lookup l (config::omitted (rs, *config_x_translatable_headers).first); + lookup l (lookup_config (rs, *config_x_translatable_headers)); // @@ MODHDR: if(modules) ? // @@ -533,10 +538,10 @@ namespace build2 } #endif - // If this is a new value (e.g., we are configuring), then print the - // report at verbosity level 2 and up (-v). + // If this is a configuration with new values, then print the report + // at verbosity level 2 and up (-v). // - if (verb >= (new_ ? 2 : 3)) + if (verb >= (new_config ? 2 : 3)) { const strings& mode (cast (rs[x_mode])); diff --git a/libbuild2/cc/module.hxx b/libbuild2/cc/module.hxx index 4eca976..28e8d51 100644 --- a/libbuild2/cc/module.hxx +++ b/libbuild2/cc/module.hxx @@ -66,6 +66,8 @@ namespace build2 size_t sys_lib_dirs_extra; size_t sys_inc_dirs_extra; + bool new_config = false; // See guess() and init() for details. + private: // Defined in gcc.cxx. // @@ -82,9 +84,6 @@ namespace build2 pair msvc_library_search_dirs (const process_path&, scope&) const; - - private: - bool new_; // See guess() and init() for details. }; class LIBBUILD2_CC_SYMEXPORT module: public build2::module, -- cgit v1.1