Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import std.stdio, std.file, std.path, std.range, std.string, std.algorithm ;
- string[] filterList = ["./test_runner.d", "./Makefile.in", "./gcc/config.d.in", "./gcc/libbacktrace.d.in", "./phobos-ver-syms.in",
- "./Makefile.am", "./LICENSE_1_0.txt", "./README.txt", "./rt/dylib_fixes.c"];
- struct Files
- {
- string[] baseList, cppList, gcList, gcStubList;
- string[][string] sysList;
- }
- void main(string[] args)
- {
- Files[string] fileMap;
- foreach(entry; ".".dirEntries(SpanMode.depth).filter!(a => !filterList.canFind(a)))
- {
- 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("./gc/"))
- fileMap[ext].gcList ~= sentry;
- else if(entry.name.startsWith("./gcstub/"))
- fileMap[ext].gcStubList ~= sentry;
- else 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);
- writeList("DRUNTIME_" ~ ext.toUpper() ~ "SOURCES_GC", value.gcList);
- writeList("DRUNTIME_" ~ ext.toUpper() ~ "SOURCES_GCSTUB", value.gcStubList);
- 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)
- {
- if(values.empty)
- return;
- values = sort(values).array();
- 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();
- writeln();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement