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));
}

Reply via email to