@@ -2442,6 +2442,8 @@ def __init__(self, modules, module_policy, archinfo, osinfo, ccinfo, cc_min_vers
24422442 self ._not_using_because = collections .defaultdict (set )
24432443
24442444 ModulesChooser ._validate_dependencies_exist (self ._modules )
2445+ self ._options .enabled_modules = ModulesChooser ._expand_wildcards_in_user_selection (self ._modules , self ._options .enabled_modules )
2446+ self ._options .disabled_modules = ModulesChooser ._expand_wildcards_in_user_selection (self ._modules , self ._options .disabled_modules )
24452447 ModulesChooser ._validate_user_selection (
24462448 self ._modules , self ._options .enabled_modules , self ._options .disabled_modules )
24472449
@@ -2519,6 +2521,21 @@ def _validate_dependencies_exist(modules):
25192521 for module in modules .values ():
25202522 module .dependencies_exist (modules )
25212523
2524+ @staticmethod
2525+ def _expand_wildcards_in_user_selection (modules , user_selected_modules ):
2526+ valid_module_name_with_wildcard = re .compile (r'^[a-z0-9_*]+$' )
2527+ public_modules = [modname for modname , modinfo in modules .items () if modinfo .is_public ()]
2528+ def expand (user_selected_module ):
2529+ if not valid_module_name_with_wildcard .match (user_selected_module ):
2530+ logging .error ("Invalid module name with wildcard: %s" , user_selected_module )
2531+ return []
2532+ regex_from_wildcards = re .compile ("^%s$" % user_selected_module .replace ('*' , '[a-z0-9_]+' ))
2533+ matching_modules = [mod for mod in public_modules if regex_from_wildcards .match (mod )]
2534+ if not matching_modules :
2535+ logging .warning ("Wildcard '%s' did not match any modules" , user_selected_module )
2536+ return matching_modules
2537+ return flatten ([expand (mod ) if '*' in mod else [mod ] for mod in user_selected_modules ])
2538+
25222539 @staticmethod
25232540 def _validate_user_selection (modules , enabled_modules , disabled_modules ):
25242541 for modname in enabled_modules :
0 commit comments