From: Chris Johns <chr...@rtems.org> - Optionally add support for 'default-by-family' to allow option to be set by a family and so all related BSPs
Close #4468 --- wscript | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/wscript b/wscript index 6626fafb74..61253b4a0b 100755 --- a/wscript +++ b/wscript @@ -592,9 +592,6 @@ class BSPItem(Item): arch_bsps = bsps.setdefault(data["arch"].strip(), {}) arch_bsps[data["bsp"].strip()] = self - def prepare_configure(self, conf, cic): - conf.env.BSP_FAMILY = self.data["family"] - def prepare_build(self, bld, bic): return BuildItemContext( bic.includes + bld.env.BSP_INCLUDES.split(), [], [], [] @@ -695,12 +692,18 @@ class OptionItem(Item): return True return False - def default_value(self, variant): + def default_value(self, variant, family): value = self.data["default"] for default in self.data["default-by-variant"]: if OptionItem._is_variant(default["variants"], variant): value = default["value"] break + if 'default-by-family' in self.data: + for default in self.data["default-by-family"]: + if 'families' in default: + if OptionItem._is_variant(default["families"], family): + value = default["value"] + break if value is None: return value if isinstance(value, list): @@ -709,8 +712,8 @@ class OptionItem(Item): return value return self.data["format"].format(value) - def do_defaults(self, variant): - value = self.default_value(variant) + def do_defaults(self, variant, family): + value = self.default_value(variant, family) if value is None: return description = self.data["description"] @@ -917,7 +920,7 @@ class OptionItem(Item): value = cic.cp.getboolean(conf.variant, name) cic.add_option(name) except configparser.NoOptionError: - value = self.default_value(conf.env.ARCH_BSP) + value = self.default_value(conf.env.ARCH_BSP, conf.env.ARCH_FAMILY) except ValueError as ve: conf.fatal( "Invalid value for configuration option {}: {}".format(name, ve) @@ -933,7 +936,7 @@ class OptionItem(Item): value = cic.cp.get(conf.variant, name) cic.add_option(name) except configparser.NoOptionError: - value = self.default_value(conf.env.ARCH_BSP) + value = self.default_value(conf.env.ARCH_BSP, conf.env.ARCH_FAMILY) if value is None: return value try: @@ -952,7 +955,7 @@ class OptionItem(Item): cic.add_option(name) value = no_unicode(value) except configparser.NoOptionError: - value = self.default_value(conf.env.ARCH_BSP) + value = self.default_value(conf.env.ARCH_BSP, conf.env.ARCH_FAMILY) return value def _script(self, conf, cic, value, arg): @@ -1365,12 +1368,23 @@ def configure_variant(conf, cp, bsp_map, path_list, top_group, variant): conf.setenv(variant) arch, bsp_name = variant.split("/") bsp_base = bsp_map.get(bsp_name, bsp_name) + + try: + bsp_item = bsps[arch][bsp_base] + except KeyError: + conf.fatal("No such base BSP: '{}'".format(variant)) + + family = bsp_item.data['family'] + arch_bsp = arch + "/" + bsp_base + arch_family = arch + "/" + family conf.env["ARCH"] = arch conf.env["ARCH_BSP"] = arch_bsp + conf.env["ARCH_FAMILY"] = arch_family conf.env["BSP_BASE"] = bsp_base conf.env["BSP_NAME"] = bsp_name + conf.env["BSP_FAMILY"] = family conf.env["DEST_OS"] = "rtems" # For the enabled-by evaluation we have to use the base BSP defined by the @@ -1385,10 +1399,6 @@ def configure_variant(conf, cp, bsp_map, path_list, top_group, variant): items[conf.env.TOPGROUP].configure(conf, cic) - try: - bsp_item = bsps[arch][bsp_base] - except KeyError: - conf.fatal("No such base BSP: '{}'".format(variant)) bsp_item.configure(conf, cic) options = set([o[0].upper() for o in cp.items(variant)]) -- 2.24.1 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel