Index: site_scons/libdeps.py --- site_scons/libdeps.py.orig +++ site_scons/libdeps.py @@ -61,7 +61,7 @@ syslibdeps_env_var = 'SYSLIBDEPS' missing_syslibdep = 'MISSING_LIBDEP_' class dependency(object): - Public, Private, Interface = range(3) + Public, Private, Interface = list(range(3)) def __init__(self, value, dynamic, deptype): self.target_node = value @@ -74,7 +74,7 @@ class dependency(object): class DependencyCycleError(SCons.Errors.UserError): """Exception representing a cycle discovered in library dependencies.""" - def __init__(self, first_node ): + def __init__(self, first_node): super(DependencyCycleError, self).__init__() self.cycle_nodes = [first_node] @@ -89,8 +89,8 @@ def __get_sorted_direct_libdeps(node): setattr(node.attributes, "libdeps_direct_sorted", direct_sorted) return direct_sorted -def __get_libdeps(node): +def __get_libdeps(node): """Given a SCons Node, return its library dependencies, topologically sorted. Computes the dependencies if they're not already cached. @@ -122,7 +122,7 @@ def __get_libdeps(node): marked.add(n.target_node) tsorted.append(n.target_node) - except DependencyCycleError, e: + except DependencyCycleError as e: if len(e.cycle_nodes) == 1 or e.cycle_nodes[0] != e.cycle_nodes[-1]: e.cycle_nodes.insert(0, n.target_node) raise @@ -139,6 +139,7 @@ def __get_libdeps(node): return tsorted + def __get_syslibdeps(node): """ Given a SCons Node, return its system library dependencies. @@ -150,11 +151,11 @@ def __get_syslibdeps(node): for lib in __get_libdeps(node): for syslib in node.get_env().Flatten(lib.get_env().get(syslibdeps_env_var, [])): if syslib: - if type(syslib) in (str, unicode) and syslib.startswith(missing_syslibdep): - print("Target '%s' depends on the availability of a " + if type(syslib) is str and syslib.startswith(missing_syslibdep): + print(("Target '%s' depends on the availability of a " "system provided library for '%s', " "but no suitable library was found during configuration." % - (str(node), syslib[len(missing_syslibdep):])) + (str(node), syslib[len(missing_syslibdep):]))) node.get_env().Exit(1) syslibdeps.append(syslib) setattr(node.attributes, cached_var_name, syslibdeps) @@ -170,18 +171,21 @@ def update_scanner(builder): if old_scanner: path_function = old_scanner.path_function + def new_scanner(node, env, path=()): result = old_scanner.function(node, env, path) result.extend(__get_libdeps(node)) return result else: path_function = None + def new_scanner(node, env, path=()): return __get_libdeps(node) builder.target_scanner = SCons.Scanner.Scanner(function=new_scanner, - path_function=path_function) + path_function=path_function) + def get_libdeps(source, target, env, for_signature): """Implementation of the special _LIBDEPS environment variable. @@ -191,6 +195,7 @@ def get_libdeps(source, target, env, for_signature): target = env.Flatten([target]) return __get_libdeps(target[0]) + def get_libdeps_objs(source, target, env, for_signature): objs = [] for lib in get_libdeps(source, target, env, for_signature): @@ -198,6 +203,7 @@ def get_libdeps_objs(source, target, env, for_signatur objs.extend(lib.sources) return objs + def get_syslibdeps(source, target, env, for_signature): deps = __get_syslibdeps(target[0]) lib_link_prefix = env.subst('$LIBLINKPREFIX') @@ -209,7 +215,7 @@ def get_syslibdeps(source, target, env, for_signature) # they're believed to represent library short names, that should be prefixed with -l # or the compiler-specific equivalent. I.e., 'm' becomes '-lm', but 'File("m.a") is passed # through whole cloth. - if type(d) in (str, unicode): + if type(d) is str: result.append('%s%s%s' % (lib_link_prefix, d, lib_link_suffix)) else: result.append(d) @@ -252,8 +258,8 @@ def libdeps_emitter(target, source, env): prereqs.extend(dependency(l, False, dependency.Private) for l in env.get(libdeps_env_var + '_PRIVATE', []) if l) for prereq in prereqs: - prereqWithIxes = SCons.Util.adjustixes( - prereq.target_node, lib_builder.get_prefix(env), lib_builder.get_suffix(env)) + prereqWithIxes = SCons.Util.adjustixes(prereq.target_node, lib_builder.get_prefix(env), + lib_builder.get_suffix(env)) prereq.target_node = lib_node_factory(prereqWithIxes) for t in target: @@ -264,16 +270,16 @@ def libdeps_emitter(target, source, env): for dependent in env.get('LIBDEPS_DEPENDENTS', []): if dependent is None: continue - dependentWithIxes = SCons.Util.adjustixes( - dependent, lib_builder.get_prefix(env), lib_builder.get_suffix(env)) + dependentWithIxes = SCons.Util.adjustixes(dependent, lib_builder.get_prefix(env), + lib_builder.get_suffix(env)) dependentNode = lib_node_factory(dependentWithIxes) __append_direct_libdeps(dependentNode, [dependency(target[0], False, dependency.Public)]) for dependent in env.get('PROGDEPS_DEPENDENTS', []): if dependent is None: continue - dependentWithIxes = SCons.Util.adjustixes( - dependent, prog_builder.get_prefix(env), prog_builder.get_suffix(env)) + dependentWithIxes = SCons.Util.adjustixes(dependent, prog_builder.get_prefix(env), + prog_builder.get_suffix(env)) dependentNode = prog_node_factory(dependentWithIxes) __append_direct_libdeps(dependentNode, [dependency(target[0], False, dependency.Public)]) @@ -372,9 +378,11 @@ def setup_environment(env, emitting_shared=False): if 'init-no-global-side-effects' in env.Entry(lib).get_env().get('LIBDEPS_TAGS', []): result.append(str(lib)) else: - result.extend(env.subst('$LINK_WHOLE_ARCHIVE_LIB_START' - '$TARGET' - '$LINK_WHOLE_ARCHIVE_LIB_END', target=lib).split()) + result.extend( + env.subst( + '$LINK_WHOLE_ARCHIVE_LIB_START' + '$TARGET' + '$LINK_WHOLE_ARCHIVE_LIB_END', target=lib).split()) return result env['_LIBDEPS_LIBS_WITH_TAGS'] = expand_libdeps_with_extraction_flags @@ -394,6 +402,7 @@ def setup_environment(env, emitting_shared=False): except KeyError: pass + def setup_conftests(conf): def FindSysLibDep(context, name, libs, **kwargs): var = "LIBDEPS_" + name.upper() + "_SYSLIBDEP" @@ -406,4 +415,5 @@ def setup_conftests(conf): return context.Result(result) context.env[var] = __missing_syslib(name) return context.Result(result) + conf.AddTest('FindSysLibDep', FindSysLibDep)