コード例 #1
0
ファイル: cross.py プロジェクト: cneira/gub
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
コード例 #2
0
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
コード例 #3
0
ファイル: cross.py プロジェクト: cneira/gub
 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,))
コード例 #4
0
 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, ))