Build Script in D
Nicholas Londey
londey at gmail.com
Fri Jan 11 14:33:51 PST 2013
As a relative newcomer to D I have been using to following build
script. Not very sophisticated but has been enough so far.
module build;
import std.algorithm;
import std.array;
import std.conv;
import std.exception;
import std.file;
import std.path;
import std.process;
import std.range;
import std.regex;
import std.stdio;
import std.string;
enum D_SOURCE_RULE = ctRegex!`^[a-z][a-z0-9_]*\.d$`;
enum BUILD_COMMAND_ARGS_FILE = "build_command_args.txt";
void main(string[] args)
{
enforce(args.length == 3, "Usage rdmd build.d <output bin>
<source dir>");
auto sourceFiles = map!(a => a.name)(dirEntries(args[2],
SpanMode.depth));
auto codeFiles = filter!(a => match(baseName(a),
D_SOURCE_RULE))(sourceFiles);
string[] options = ["-of" ~ args[1], "-od" ~ "obj", "-I.",
"-J.", "-Dd" ~ "doc"];
std.file.write(BUILD_COMMAND_ARGS_FILE,
to!string(joiner(chain(options, codeFiles), "\n")));
system(escapeShellCommand("dmd", "@" ~
BUILD_COMMAND_ARGS_FILE));
}
More information about the Digitalmars-d-announce
mailing list