Index: python/boost/build/build/feature.py =================================================================== --- python/boost/build/build/feature.py (revision 47650) +++ python/boost/build/build/feature.py (working copy) @@ -122,11 +122,20 @@ feature: the name of the feature value: the default value to assign """ + + if isinstance(feature, list): + feature = feature[0] + feature = add_grist (feature) f = __all_features [feature] - if not value in f ['values']: - raise BaseException ("The specified default value, '%s' is invalid.\n" + "allowed values are: %s" % (str (value), str (f ['values']))) + if isinstance(value, list): + value = value[0] + + values = f['values'] + if not value in values: + raise BaseException ("The specified default value, '%s' is invalid.\n" + "allowed values are: %s" % (str (value), str (values))) + f ['default'] = value def defaults (features): Index: python/boost/build/build/project.py =================================================================== --- python/boost/build/build/project.py (revision 47702) +++ python/boost/build/build/project.py (working copy) @@ -573,8 +573,9 @@ return result def load_module(self, name, extra_path=None): - """Find a Python module called 'name' in Boost.Build search - path and load it. The module is not entered in sys.modules. + """Find an already loaded Python module called 'name' in sys.modules. + If the module ist not loaded, find it Boost.Build search + path and load it. The new module is not entered in sys.modules. The motivation here is to have disjoint namespace of modules loaded via 'import/using' in Jamfile, and ordinary Python modules. We don't want 'using foo' in Jamfile to load ordinary @@ -586,6 +587,13 @@ existing = self.loaded_tool_modules_.get(name) if existing: return existing + + modules = sys.modules + for class_name in modules: + if name in class_name: + module = modules[class_name] + self.loaded_tool_modules_[name] = module + return module path = extra_path if not path: