Wolfgang Thallergcc 15.1.0ada185d1 year agoHistory
92 lines · 2.3 KB · D
RawDownload
#!/usr/bin/env dub/++dub.sdl:name "gen_druntime_sources"+/// Written in the D programming language.import std.stdio;import std.file;import std.path;import std.range;import std.string;import std.algorithm; string[] filterList = [    "./Makefile.in", "./Makefile.am",    "./gcc/config.d.in", "./gcc/libbacktrace.d.in", "./gcc/drtstuff.c",    "./LICENSE.txt", "./MERGE",    "./rt/dylib_fixes.c"]; struct Files{    string[] baseList, cppList;    string[][string] sysList;} void main(string[] args){    Files[string] fileMap;     foreach(entry; ".".dirEntries(SpanMode.depth).filter!(a => !filterList.canFind(a)))    {        if (entry.name.startsWith("./config/"))            continue;         if(entry.isFile)        {            auto ext = entry.extension.empty ? "" : entry.extension[1 .. $];            if(!(ext in fileMap))                fileMap[ext] = Files.init;             string sentry = entry[2 .. $];             if(entry.name.startsWith("./core/stdcpp/"))                fileMap[ext].cppList ~= sentry;            else if(entry.name.startsWith("./core/sys/"))            {                auto components = entry.pathSplitter;                components.popFrontN(3);                fileMap[ext].sysList[components.front] ~= sentry;            }            else                fileMap[ext].baseList ~= sentry;        }    }     foreach(extEntry; fileMap.byKeyValue.array.sort!"a.key < b.key")    {        auto ext = extEntry.key;        auto value = extEntry.value;        writeList("DRUNTIME_" ~ ext.toUpper() ~ "SOURCES", value.baseList);        writeList("DRUNTIME_" ~ ext.toUpper() ~ "SOURCES_STDCXX", value.cppList);        foreach(entry; value.sysList.byKeyValue.array.sort!"a.key < b.key")        {            writeList("DRUNTIME_" ~ ext.toUpper() ~ "SOURCES_" ~ entry.key.toUpper(), entry.value);        }    }} void writeList(string name, string[] values, bool force = false){    if (!force && values.empty)        return;     values = sort(values).array();    writeln();    writef("%s =", name);    size_t line = name.length + 3;    foreach(entry; values)    {        if(line + entry.length > 70)        {            line = 0;            writeln(` \`);            write('\t');        }        else            write(" ");        write(entry);        line += entry.length + 1;    }    writeln();}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t