http://arsdnet.net/dcode/build2.d
To compile: dmd build2 To use: build2 [args like you'd pass to dmd...] This is very similar to my existing build.d, but makes fewer assumptions about me, instead opting to try to follow the DIP 11 design. We should be able to build off this to an almost fully functional prototype going to test the idea before touching the compiler at all. Even the pragmas (almost) work as defined. I've not throughly tested it, but it ought to work on all operating systems (note: I've only tested on linux) without dependencies with the following features: * Downloading from simple http servers. No compression, no encryption at this time. * It pre-processes dmd arguments for the -I paths described in the wiki and tries downloads to a local directory. build2 mymodule -Ihttp://myrepository.com/d The selective paths should work too but I haven't tested them yet. * It adds some support for modules downloaded directly from the web. build2 mymodule http://myrepisotory.com/d/file.d * Arguments it doesn't care about are passed unchanged to dmd. * Pass -ignore to the build process and you can do pragma(importpath, "webpath"); as described in the wiki, with one change: the wiki says it should be only for the current file. I can't find a way to do that outside the compiler... dmd -v doesn't tell you what file the pragma came from. * Automatically links .d files when doing a build at once, tries to not break or slow down incremental builds * Kinda simulates the idea of an external tool via a D function. See Tuple!(int, string) dget(string, string) in the source. * Has a simple cache - if the file is there already, use it. * If a downloaded module requires another, it keeps going What it doesn't attempt to do: * Be fast. It loops dmd like my old build.d. (I can't find a better way to do it. Even rdmd always runs dmd at least twice - check its source!) * Other protocols other than basic http, and it doesn't even support redirects yet. I wanted zero dependency so I very quickly spun my own downloader... it's fairly basic. * Any kind of archives, yet. * __FILE__ is the same. * The output is ugly including repeated errors and debug info. * It makes no attempt to hash the files since the wiki didn't decide on a syntax. * See FIXME comments in the source for some specifics
