Exemplo n.º 1
0
def get_graph(filepath, prefilter=None, maxdepth=None):
    if not DelphiGraph.filepath_is_graph(filepath):
        # pre filter
        projview = False
        if prefilter: # projview
            projview = True

        # trace
        tracer = DepTracer()
        filepath = tracer.trace_write(filepath, maxdepth=maxdepth, projview=projview)
    # load from file
    dg = DelphiGraph.from_file(filepath)
    return dg
Exemplo n.º 2
0
def build(filepath, use_graph=None, target_dir=None):
    transform = {}

    if not DelphiGraph.filepath_is_graph(filepath):
        fpabs = os.path.abspath(filepath)
        abspath = os.path.dirname(fpabs)
        relpath = "."
        filename = os.path.basename(fpabs)
        stdlibpath = DelphiCompiler.get_stdlibpath(libonly=True, relative_to=abspath)
        includepath = ";".join(stdlibpath)

        if use_graph:
            dg = DelphiGraph.from_file(use_graph)
            df = dg.rootnode
            includepath = prepare_path(dg, use_abspath=abspath)

        return do_compile(transform, abspath, relpath, filename, includepath, target_dir=target_dir)

    else:
        # load from file
        dg = DelphiGraph.from_file(filepath)
        df = dg.rootnode
        targets = df.collect_nodes(lambda n: n.filetype in (FileTypes.Program, FileTypes.Library, FileTypes.Package))
        target = targets[0]

        includepath = prepare_path(dg)

        try:
            # XXX seems to be redundant at times, not understood when
            do_dfm_conversion(transform, dg)
            exitcode = do_compile(
                transform, dg.abspath, target.path, target.filename, includepath, target_dir=target_dir
            )
        finally:
            for (orig, new) in transform.items():
                io.rename(new, orig)

        return exitcode