def test_multiple_clibs(self): self.top_node.make_node("foo.c").write(DUMMY_CLIB % {"name": "foo"}) self.top_node.make_node("bar.c").write(DUMMY_CLIB % {"name": "bar"}) builder = DistutilsBuilder() extensions = [ CompiledLibrary("bar", ["bar.c"]), CompiledLibrary("foo", ["foo.c"]) ] for extension in extensions: builder.build_compiled_library(extension)
def flatten_compiled_libraries(top_node, subpackage): ret = [] d = top_node.find_dir(subpackage.rdir) root_name = ".".join(subpackage.rdir.split("/")) for library in list(subpackage.compiled_libraries.values()): sources = [d.make_node(s).path_from(top_node) for s in library.sources] full_name = root_name + ".%s" % library.name ret.append(CompiledLibrary(full_name, sources)) return ret
def flatten_subpackage_compiled_libraries(spkg, top_node): """Translate the compiled libraries from a subpackage relatively to the given top node. Source files and include directories paths are all translated relatively to the top node. Returns ------- d : dict {name: clib} dictionary Example ------- Defining in /foo/bar the compiled library:: CompiledLibrary("fubar", sources=["src/fubar.c"]) and top_node corresponding to /foo, the extension would be translated as:: CompiledLibrary("fubar", sources=["bar/src/fubar.c"]) """ local_node = top_node.find_dir(spkg.rdir) if local_node is None: raise IOError("Path %s not found" % \ os.path.join(top_node.abspath(), spkg.rdir)) elif local_node == top_node: raise ValueError("Subpackage in top directory ??") ret = {} for name, clib in list(spkg.compiled_libraries.items()): nodes = [] for source in clib.sources: _nodes = local_node.ant_glob(source) if len(_nodes) < 1: raise IOError("Pattern %r did not resolve to anything !" % source) else: nodes.extend(_nodes) sources = [node.path_from(top_node) for node in nodes] include_dirs = [ local_node.find_node(d).path_from(top_node) \ for d in clib.include_dirs] parent_pkg = spkg.rdir.replace(os.sep, ".") full_name = ".".join([parent_pkg, name]) ret[full_name] = CompiledLibrary(full_name, sources, include_dirs) return ret
def _parse_libraries(libraries): ret = {} if len(libraries) > 0: if not list(libraries.keys()) == ["default"]: raise NotImplementedError( "Non default library not yet supported") default = libraries["default"] for k in ["packages", "py_modules", "install_requires", "sub_directory"]: if k in default: ret[k] = default[k] ret["extensions"] = {} for k, v in default.get("extensions", {}).items(): ret["extensions"][k] = Extension.from_parse_dict(v) ret["compiled_libraries"] = {} for k, v in default.get("compiled_libraries", {}).items(): ret["compiled_libraries"][k] = \ CompiledLibrary.from_parse_dict(v) return ret
def test_clib_simple(self): self.top_node.make_node("foo.c").write(DUMMY_CLIB % {"name": "foo"}) builder = DistutilsBuilder() extension = CompiledLibrary("foo", ["foo.c"]) builder.build_compiled_library(extension)