Esempio n. 1
0
def symbols_whyneeded(task):
    """check why 'target' needs to link to 'subsystem'"""
    bld = task.env.bld
    tgt_list = get_tgt_list(bld)

    why = Options.options.WHYNEEDED.split(":")
    if len(why) != 2:
        raise Utils.WafError("usage: WHYNEEDED=TARGET:DEPENDENCY")
    target = why[0]
    subsystem = why[1]

    build_symbol_sets(bld, tgt_list)
    build_library_names(bld, tgt_list)
    build_syslib_sets(bld, tgt_list)

    Logs.info("Checking why %s needs to link to %s" % (target, subsystem))
    if not target in bld.env.used_symbols:
        Logs.warn("unable to find target '%s' in used_symbols dict" % target)
        return
    if not subsystem in bld.env.public_symbols:
        Logs.warn("unable to find subsystem '%s' in public_symbols dict" % subsystem)
        return
    overlap = bld.env.used_symbols[target].intersection(bld.env.public_symbols[subsystem])
    if not overlap:
        Logs.info("target '%s' doesn't use any public symbols from '%s'" % (target, subsystem))
    else:
        Logs.info("target '%s' uses symbols %s from '%s'" % (target, overlap, subsystem))
Esempio n. 2
0
def symbols_whyneeded(task):
    """check why 'target' needs to link to 'subsystem'"""
    bld = task.env.bld
    tgt_list = get_tgt_list(bld)

    why = Options.options.WHYNEEDED.split(":")
    if len(why) != 2:
        raise Errors.WafError("usage: WHYNEEDED=TARGET:DEPENDENCY")
    target = why[0]
    subsystem = why[1]

    build_symbol_sets(bld, tgt_list)
    build_library_names(bld, tgt_list)
    build_syslib_sets(bld, tgt_list)

    Logs.info("Checking why %s needs to link to %s" % (target, subsystem))
    if not target in bld.env.used_symbols:
        Logs.warn("unable to find target '%s' in used_symbols dict" % target)
        return
    if not subsystem in bld.env.public_symbols:
        Logs.warn("unable to find subsystem '%s' in public_symbols dict" % subsystem)
        return
    overlap = bld.env.used_symbols[target].intersection(bld.env.public_symbols[subsystem])
    if not overlap:
        Logs.info("target '%s' doesn't use any public symbols from '%s'" % (target, subsystem))
    else:
        Logs.info("target '%s' uses symbols %s from '%s'" % (target, overlap, subsystem))
Esempio n. 3
0
def symbols_syslibcheck(task):
    '''check the syslib dependencies'''
    bld = task.env.bld
    tgt_list = get_tgt_list(bld)

    build_syslib_sets(bld, tgt_list)
    check_syslib_collisions(bld, tgt_list)

    for t in tgt_list:
        check_syslib_dependencies(bld, t)
Esempio n. 4
0
def symbols_syslibcheck(task):
    '''check the syslib dependencies'''
    bld = task.env.bld
    tgt_list = get_tgt_list(bld)

    build_syslib_sets(bld, tgt_list)
    check_syslib_collisions(bld, tgt_list)

    for t in tgt_list:
        check_syslib_dependencies(bld, t)
Esempio n. 5
0
def symbols_dupcheck(task, fail_on_error=False):
    '''check for symbols defined in two different subsystems'''
    bld = task.env.bld
    tgt_list = get_tgt_list(bld)

    targets = LOCAL_CACHE(bld, 'TARGET_TYPE')

    build_library_dict(bld, tgt_list)
    for t in tgt_list:
        if t.samba_type == 'BINARY':
            binname = os_path_relpath(t.link_task.outputs[0].abspath(bld.env), os.getcwd())
            symbols_dupcheck_binary(bld, binname, fail_on_error)
Esempio n. 6
0
def symbols_dupcheck(task, fail_on_error=False):
    '''check for symbols defined in two different subsystems'''
    bld = task.env.bld
    tgt_list = get_tgt_list(bld)

    targets = LOCAL_CACHE(bld, 'TARGET_TYPE')

    build_library_dict(bld, tgt_list)
    for t in tgt_list:
        if t.samba_type == 'BINARY':
            binname = os_path_relpath(t.link_task.outputs[0].abspath(bld.env), os.getcwd())
            symbols_dupcheck_binary(bld, binname, fail_on_error)
Esempio n. 7
0
def symbols_symbolcheck(task):
    '''check the internal dependency lists'''
    bld = task.env.bld
    tgt_list = get_tgt_list(bld)

    build_symbol_sets(bld, tgt_list)
    build_library_names(bld, tgt_list)

    for t in tgt_list:
        t.autodeps = set()
        if getattr(t, 'source', ''):
            build_autodeps(bld, t)

    for t in tgt_list:
        check_dependencies(bld, t)

    for t in tgt_list:
        check_library_deps(bld, t)
Esempio n. 8
0
def symbols_symbolcheck(task):
    '''check the internal dependency lists'''
    bld = task.env.bld
    tgt_list = get_tgt_list(bld)

    build_symbol_sets(bld, tgt_list)
    build_library_names(bld, tgt_list)

    for t in tgt_list:
        t.autodeps = set()
        if getattr(t, 'source', ''):
            build_autodeps(bld, t)

    for t in tgt_list:
        check_dependencies(bld, t)

    for t in tgt_list:
        check_library_deps(bld, t)
Esempio n. 9
0
def check_project_rules(bld):
    '''check the project rules - ensuring the targets are sane'''

    loops = {}
    inc_loops = {}

    tgt_list = get_tgt_list(bld)

    add_samba_attributes(bld, tgt_list)

    force_project_rules = (Options.options.SHOWDEPS or
                           Options.options.SHOW_DUPLICATES)

    if not force_project_rules and load_samba_deps(bld, tgt_list):
        return

    global tstart
    tstart = time.clock()

    bld.new_rules = True
    Logs.info("Checking project rules ...")

    debug('deps: project rules checking started')

    expand_subsystem_deps(bld)

    debug("deps: expand_subsystem_deps: %f" % (time.clock() - tstart))

    replace_grouping_libraries(bld, tgt_list)

    debug("deps: replace_grouping_libraries: %f" % (time.clock() - tstart))

    build_direct_deps(bld, tgt_list)

    debug("deps: build_direct_deps: %f" % (time.clock() - tstart))

    break_dependency_loops(bld, tgt_list)

    debug("deps: break_dependency_loops: %f" % (time.clock() - tstart))

    if Options.options.SHOWDEPS:
            show_dependencies(bld, Options.options.SHOWDEPS, set())

    calculate_final_deps(bld, tgt_list, loops)

    debug("deps: calculate_final_deps: %f" % (time.clock() - tstart))

    if Options.options.SHOW_DUPLICATES:
            show_object_duplicates(bld, tgt_list)

    # run the various attribute generators
    for f in [ build_dependencies, build_includes, add_init_functions ]:
        debug('deps: project rules checking %s', f)
        for t in tgt_list: f(t)
        debug("deps: %s: %f" % (f, time.clock() - tstart))

    debug('deps: project rules stage1 completed')

    if not check_duplicate_sources(bld, tgt_list):
        Logs.error("Duplicate sources present - aborting")
        sys.exit(1)

    debug("deps: check_duplicate_sources: %f" % (time.clock() - tstart))

    if not bld.check_group_ordering(tgt_list):
        Logs.error("Bad group ordering - aborting")
        sys.exit(1)

    debug("deps: check_group_ordering: %f" % (time.clock() - tstart))

    show_final_deps(bld, tgt_list)

    debug("deps: show_final_deps: %f" % (time.clock() - tstart))

    debug('deps: project rules checking completed - %u targets checked',
          len(tgt_list))

    if not bld.is_install:
        save_samba_deps(bld, tgt_list)

    debug("deps: save_samba_deps: %f" % (time.clock() - tstart))

    Logs.info("Project rules pass")
Esempio n. 10
0
def check_project_rules(bld):
    '''check the project rules - ensuring the targets are sane'''

    loops = {}
    inc_loops = {}

    tgt_list = get_tgt_list(bld)

    add_samba_attributes(bld, tgt_list)

    force_project_rules = (Options.options.SHOWDEPS or
                           Options.options.SHOW_DUPLICATES)

    if not force_project_rules and load_samba_deps(bld, tgt_list):
        return

    global tstart
    tstart = time.clock()

    bld.new_rules = True
    Logs.info("Checking project rules ...")

    debug('deps: project rules checking started')

    expand_subsystem_deps(bld)

    debug("deps: expand_subsystem_deps: %f" % (time.clock() - tstart))

    replace_grouping_libraries(bld, tgt_list)

    debug("deps: replace_grouping_libraries: %f" % (time.clock() - tstart))

    build_direct_deps(bld, tgt_list)

    debug("deps: build_direct_deps: %f" % (time.clock() - tstart))

    break_dependency_loops(bld, tgt_list)

    debug("deps: break_dependency_loops: %f" % (time.clock() - tstart))

    if Options.options.SHOWDEPS:
            show_dependencies(bld, Options.options.SHOWDEPS, set())

    calculate_final_deps(bld, tgt_list, loops)

    debug("deps: calculate_final_deps: %f" % (time.clock() - tstart))

    if Options.options.SHOW_DUPLICATES:
            show_object_duplicates(bld, tgt_list)

    # run the various attribute generators
    for f in [ build_dependencies, build_includes, add_init_functions ]:
        debug('deps: project rules checking %s', f)
        for t in tgt_list: f(t)
        debug("deps: %s: %f" % (f, time.clock() - tstart))

    debug('deps: project rules stage1 completed')

    if not check_duplicate_sources(bld, tgt_list):
        Logs.error("Duplicate sources present - aborting")
        sys.exit(1)

    debug("deps: check_duplicate_sources: %f" % (time.clock() - tstart))

    if not bld.check_group_ordering(tgt_list):
        Logs.error("Bad group ordering - aborting")
        sys.exit(1)

    debug("deps: check_group_ordering: %f" % (time.clock() - tstart))

    show_final_deps(bld, tgt_list)

    debug("deps: show_final_deps: %f" % (time.clock() - tstart))

    debug('deps: project rules checking completed - %u targets checked',
          len(tgt_list))

    if not bld.is_install:
        save_samba_deps(bld, tgt_list)

    debug("deps: save_samba_deps: %f" % (time.clock() - tstart))

    Logs.info("Project rules pass")