def set_cross_dependencies (package_object_dict): packs = list (package_object_dict.values ()) cross_packs = [p for p in packs if isinstance (p, AutoBuild)] sdk_packs = [p for p in packs if isinstance (p, build.SdkBuild)] tools_packs = [p for p in packs if isinstance (p, tools.AutoBuild)] other_packs = [p for p in packs if (not isinstance (p, AutoBuild) and not isinstance (p, build.SdkBuild) and not isinstance (p, build.BinaryBuild) and not isinstance (p, tools.AutoBuild) and not p.platform_name () in bootstrap_names)] pack_names = [p.platform_name () for p in packs] extra_cross_names = [] sets = dict () for p in packs: sets[p.settings.platform] = p.settings for p in list (sets.keys ()): extra_cross_names += [n for n in get_build_dependencies (sets[p]) if n not in pack_names] # Run something like lilypond/SConscript's configure # to figure-out if we need a new, Git, Make, Patch, Python, etc? # Building make & patch is cheap and dependable. bazaar_packs = [p for p in packs if isinstance (p.source, repository.Bazaar)] cvs_packs = [p for p in packs if isinstance (p.source, repository.CVS)] git_packs = [p for p in packs if isinstance (p.source, repository.Git)] patch_packs = [p for p in packs if p.patches] perl_packs = [p for p in packs if (isinstance (p, tools.CpanBuild) or isinstance (p, target.CpanBuild))] python_packs = [p for p in packs if (isinstance (p, tools.PythonBuild) or isinstance (p, target.PythonBuild))] scons_packs = [p for p in packs if (isinstance (p, tools.SConsBuild) or isinstance (p, target.SConsBuild))] subversion_packs = [p for p in packs if isinstance (p.source, repository.Subversion)] tar_packs = [p for p in packs if (isinstance (p.source, repository.TarBall) and p.platform_name () not in (bootstrap_names + ['tools::tar']))] bzip2_packs = [p for p in tar_packs if p.source.source.endswith ('bz2')] sdk_names = [s.platform_name () for s in sdk_packs] cross_names = [s.platform_name () for s in cross_packs] # No implicit dependencies on other platform's cross_names or sdk_names # try: # bin/gub -p tools linux-x86::cross/gcc mingw::cross/gcc # bin/gub -p tools linux-x86::cross/gcc def update_packs (packs=[], add=[]): for p in packs: if not misc.list_in (add, p.get_platform_build_dependencies ()): old_callback = p.get_build_dependencies p.get_build_dependencies = misc.MethodOverrider (old_callback, lambda x,y: x+y, (add,)) # OOPS # update_packs (other_packs, # [n for n in cross_names if p.settings.platform in n]) # update_packs (other_packs + cross_packs, # [n for n in sdk_names if p.settings.platform in n]) # update_packs (other_packs + cross_packs + tools_packs, bootstrap_names) for p in other_packs: add = [n for n in cross_names if p.settings.platform in n] if not misc.list_in (add, p.get_platform_build_dependencies ()): old_callback = p.get_build_dependencies p.get_build_dependencies = misc.MethodOverrider (old_callback, lambda x,y: x+y, (add,)) for p in other_packs + cross_packs: add = [n for n in sdk_names if p.settings.platform in n] if not misc.list_in (add, p.get_platform_build_dependencies ()): old_callback = p.get_build_dependencies p.get_build_dependencies = misc.MethodOverrider (old_callback, lambda x,y: x+y, (add,)) for p in other_packs + cross_packs + tools_packs: add = bootstrap_names if (p.platform_name () not in bootstrap_names and not misc.list_in (add, p.get_platform_build_dependencies ())): old_callback = p.get_build_dependencies p.get_build_dependencies = misc.MethodOverrider (old_callback, lambda x,y: x+y, (add,)) extra_names = [] rsync_packs = bazaar_packs or cvs_packs or subversion_packs for packs, names in ( (bzip2_packs, ['tools::bzip2']), (git_packs, ['tools::git']), (patch_packs, ['tools::patch']), (perl_packs, ['tools::perl']), (rsync_packs, ['tools::rsync']), (scons_packs, ['tools::scons']), (subversion_packs, ['tools::subversion']), (tar_packs, ['tools::tar']), ): if packs: extra_names += names update_packs (packs, names) if python_packs or scons_packs: extra_names += ['tools::python'] update_packs (python_packs, ['tools::python']) return extra_cross_names + extra_names
def set_cross_dependencies(package_object_dict): packs = list(package_object_dict.values()) cross_packs = [p for p in packs if isinstance(p, AutoBuild)] sdk_packs = [p for p in packs if isinstance(p, build.SdkBuild)] tools_packs = [p for p in packs if isinstance(p, tools.AutoBuild)] other_packs = [ p for p in packs if (not isinstance(p, AutoBuild) and not isinstance(p, build.SdkBuild) and not isinstance(p, build.BinaryBuild) and not isinstance(p, tools.AutoBuild) and not p.platform_name() in bootstrap_names) ] pack_names = [p.platform_name() for p in packs] extra_cross_names = [] sets = dict() for p in packs: sets[p.settings.platform] = p.settings for p in list(sets.keys()): extra_cross_names += [ n for n in get_build_dependencies(sets[p]) if n not in pack_names ] # Run something like lilypond/SConscript's configure # to figure-out if we need a new, Git, Make, Patch, Python, etc? # Building make & patch is cheap and dependable. bazaar_packs = [ p for p in packs if isinstance(p.source, repository.Bazaar) ] cvs_packs = [p for p in packs if isinstance(p.source, repository.CVS)] git_packs = [p for p in packs if isinstance(p.source, repository.Git)] patch_packs = [p for p in packs if p.patches] perl_packs = [ p for p in packs if (isinstance(p, tools.CpanBuild) or isinstance(p, target.CpanBuild)) ] python_packs = [ p for p in packs if (isinstance(p, tools.PythonBuild) or isinstance(p, target.PythonBuild)) ] scons_packs = [ p for p in packs if (isinstance(p, tools.SConsBuild) or isinstance(p, target.SConsBuild)) ] subversion_packs = [ p for p in packs if isinstance(p.source, repository.Subversion) ] tar_packs = [ p for p in packs if (isinstance(p.source, repository.TarBall) and p.platform_name() not in (bootstrap_names + ['tools::tar'])) ] bzip2_packs = [p for p in tar_packs if p.source.source.endswith('bz2')] sdk_names = [s.platform_name() for s in sdk_packs] cross_names = [s.platform_name() for s in cross_packs] # No implicit dependencies on other platform's cross_names or sdk_names # try: # bin/gub -p tools linux-x86::cross/gcc mingw::cross/gcc # bin/gub -p tools linux-x86::cross/gcc def update_packs(packs=[], add=[]): for p in packs: if not misc.list_in(add, p.get_platform_build_dependencies()): old_callback = p.get_build_dependencies p.get_build_dependencies = misc.MethodOverrider( old_callback, lambda x, y: x + y, (add, )) # OOPS # update_packs (other_packs, # [n for n in cross_names if p.settings.platform in n]) # update_packs (other_packs + cross_packs, # [n for n in sdk_names if p.settings.platform in n]) # update_packs (other_packs + cross_packs + tools_packs, bootstrap_names) for p in other_packs: add = [n for n in cross_names if p.settings.platform in n] if not misc.list_in(add, p.get_platform_build_dependencies()): old_callback = p.get_build_dependencies p.get_build_dependencies = misc.MethodOverrider( old_callback, lambda x, y: x + y, (add, )) for p in other_packs + cross_packs: add = [n for n in sdk_names if p.settings.platform in n] if not misc.list_in(add, p.get_platform_build_dependencies()): old_callback = p.get_build_dependencies p.get_build_dependencies = misc.MethodOverrider( old_callback, lambda x, y: x + y, (add, )) for p in other_packs + cross_packs + tools_packs: add = bootstrap_names if (p.platform_name() not in bootstrap_names and not misc.list_in(add, p.get_platform_build_dependencies())): old_callback = p.get_build_dependencies p.get_build_dependencies = misc.MethodOverrider( old_callback, lambda x, y: x + y, (add, )) extra_names = [] rsync_packs = bazaar_packs or cvs_packs or subversion_packs for packs, names in ( (bzip2_packs, ['tools::bzip2']), (git_packs, ['tools::git']), (patch_packs, ['tools::patch']), (perl_packs, ['tools::perl']), (rsync_packs, ['tools::rsync']), (scons_packs, ['tools::scons']), (subversion_packs, ['tools::subversion']), (tar_packs, ['tools::tar']), ): if packs: extra_names += names update_packs(packs, names) if python_packs or scons_packs: extra_names += ['tools::python'] update_packs(python_packs, ['tools::python']) return extra_cross_names + extra_names
def update_packs (packs=[], add=[]): for p in packs: if not misc.list_in (add, p.get_platform_build_dependencies ()): old_callback = p.get_build_dependencies p.get_build_dependencies = misc.MethodOverrider (old_callback, lambda x,y: x+y, (add,))
def update_packs(packs=[], add=[]): for p in packs: if not misc.list_in(add, p.get_platform_build_dependencies()): old_callback = p.get_build_dependencies p.get_build_dependencies = misc.MethodOverrider( old_callback, lambda x, y: x + y, (add, ))