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
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