docs: def get_bootstrap_from_recipes(cls, recipes, ctx):
          '''Returns a bootstrap whose recipe requirements do not conflict with
          the given recipes.'''
          info('Trying to find a bootstrap that matches the given recipes.')
          bootstraps = [cls.get_bootstrap(name, ctx)
                        for name in cls.list_bootstraps()]
          acceptable_bootstraps = []
          for bs in bootstraps:
              if not bs.can_be_chosen_automatically:
                  continue
              possible_dependency_lists = expand_dependencies(bs.recipe_depends)
              for possible_dependencies in possible_dependency_lists:
                  ok = True
                  for recipe in possible_dependencies:
                      recipe = Recipe.get_recipe(recipe, ctx)
                      if any([conflict in recipes for conflict in recipe.conflicts]):
                          ok = False
                          break
                  for recipe in recipes:
                      try:
                          recipe = Recipe.get_recipe(recipe, ctx)
                      except ValueError:
                          conflicts = []
                      else:
                          conflicts = recipe.conflicts
                      if any([conflict in possible_dependencies
                              for conflict in conflicts]):
                          ok = False
                          break
                  if ok and bs not in acceptable_bootstraps:
                      acceptable_bootstraps.append(bs)
          info('Found {} acceptable bootstraps: {}'.format(
              len(acceptable_bootstraps),
              [bs.name for bs in acceptable_bootstraps]))
          if acceptable_bootstraps:
              info('Using the first of these: {}'
                   .format(acceptable_bootstraps[0].name))
              return acceptable_bootstraps[0]
          return None