@@ -135,22 +135,24 @@ def get_bootstrap_from_recipes(cls, recipes, ctx):
135135 for name in cls .list_bootstraps ()]
136136 acceptable_bootstraps = []
137137 for bs in bootstraps :
138- ok = True
139138 if not bs .can_be_chosen_automatically :
140- ok = False
141- for recipe in bs .recipe_depends :
142- recipe = Recipe .get_recipe (recipe , ctx )
143- if any ([conflict in recipes for conflict in recipe .conflicts ]):
144- ok = False
145- break
146- for recipe in recipes :
147- recipe = Recipe .get_recipe (recipe , ctx )
148- if any ([conflict in bs .recipe_depends
149- for conflict in recipe .conflicts ]):
150- ok = False
151- break
152- if ok :
153- acceptable_bootstraps .append (bs )
139+ continue
140+ possible_dependency_lists = expand_dependencies (bs .recipe_depends )
141+ for possible_dependencies in possible_dependency_lists :
142+ ok = True
143+ for recipe in possible_dependencies :
144+ recipe = Recipe .get_recipe (recipe , ctx )
145+ if any ([conflict in recipes for conflict in recipe .conflicts ]):
146+ ok = False
147+ break
148+ for recipe in recipes :
149+ recipe = Recipe .get_recipe (recipe , ctx )
150+ if any ([conflict in possible_dependencies
151+ for conflict in recipe .conflicts ]):
152+ ok = False
153+ break
154+ if ok :
155+ acceptable_bootstraps .append (bs )
154156 info ('Found {} acceptable bootstraps: {}' .format (
155157 len (acceptable_bootstraps ),
156158 [bs .name for bs in acceptable_bootstraps ]))
@@ -264,3 +266,20 @@ def fry_eggs(self, sitepackages):
264266 if files :
265267 shprint (sh .mv , '-t' , sitepackages , * files )
266268 shprint (sh .rm , '-rf' , d )
269+
270+
271+ def expand_dependencies (recipes ):
272+ recipe_lists = [[]]
273+ for recipe in recipes :
274+ if isinstance (recipe , (tuple , list )):
275+ new_recipe_lists = []
276+ for alternative in recipe :
277+ for old_list in recipe_lists :
278+ new_list = [i for i in old_list ]
279+ new_list .append (alternative )
280+ new_recipe_lists .append (new_list )
281+ recipe_lists = new_recipe_lists
282+ else :
283+ for old_list in recipe_lists :
284+ old_list .append (recipe )
285+ return recipe_lists
0 commit comments