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