Ejemplo n.º 1
0
    def cpp_includes_definition(self):
        includes = []
        for definition in self.definitions:
            includes.extend(definition.cpp_includes_definition())
        normalized_includes = []
        for include in includes:
            normalized_include = include.strip()
            if not normalized_include.startswith('#include '):
                normalized_include = '#include ' + normalized_include
            normalized_includes.append(normalized_include)
        normalized_includes = deduplist(normalized_includes)

        std_includes = []
        lib_includes = []
        other_includes = []
        for include in normalized_includes:
            if include.endswith('.hpp>') or include.endswith('.h>'):
                lib_includes.append(include)
            elif include.endswith('"'):
                other_includes.append(include)
            elif include.endswith('>'):
                std_includes.append(include)
            else:
                raise NotImplementedError
        includes = std_includes
        if len(lib_includes) > 0:
            if len(includes) > 0:
                includes.append('')
            includes.extend(lib_includes)
        if len(other_includes) > 0:
            if len(includes) > 0:
                includes.append('')
            includes.extend(other_includes)
        return includes
Ejemplo n.º 2
0
# if project A depends on project B depends on project C, the order will be [A, B, C]
def __expand_project_references(project_name):
    project_references = []
    for project_reference in PROJECT_REFERENCES[project_name]:
        project_references.append(project_reference)
        for project_reference in __expand_project_references(project_reference):
            try:
                del project_references[project_references.index(project_reference)]
            except ValueError:
                pass
            project_references.append(project_reference)
    return project_references
PROJECT_REFERENCES_EXPANDED = {}
for project_name in PROJECT_REFERENCES.iterkeys():
    PROJECT_REFERENCES_EXPANDED[project_name] = \
        deduplist(__expand_project_references(project_name))


# Construct LIBS to get the right link order on Unix, namely requirements flow
# left to right (if A depends on B, the link order should be A B)
LIBS_EXPANDED = {}
for project_name, project_references in PROJECT_REFERENCES_EXPANDED.iteritems():
    LIBS_EXPANDED[project_name] = {}

    try:
        for platform, platform_libs in LIBS[project_name].iteritems():
            LIBS_EXPANDED[project_name].setdefault(platform, []).extend(platform_libs)
    except KeyError:
        pass

    # Add the project references' outputs to the project's libs