Esempio n. 1
0
    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)
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
    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)