shebang launcher for D programs

Anders F Björklund afb at algonet.se
Sun Mar 25 01:44:16 PDT 2007


Andrei Alexandrescu (See Website For Email) skrev:

>> I'm not sure what you mean. If I import foo and bar, then rebuild
>> will include foo.o and bar.o when compiling the main D program...
>>
>> Had I used gdmd, then I *would* have needed to include foo.o/bar.o
>> (or a library containing those), but rebuild picks dependencies up:
>>
>> run.d:
>> ======
>> #!/usr/bin/env rdmd -v --verbose --compiler=rebuild
> 
> Great. For some reason, it didn't work in my initial tests; I guess I've
> been sloppy somewhere.
> 
> Any chance you make the --compiler=rebuild a default? Or is rebuild a
> separate product? (If so, that's not an attractive option.)

Let's see now...

rdmd as it stands at the moment is intended for dmd/gdmd, which means
that it won't work with multi-module programs (implicitly, that is...)
And Build/Bud or alternatively Rebuild are separate products as you say,
so it probably shouldn't be made the default option (even if it works)

Bud: http://dsource.org/projects/build/
Rebuild: http://dsource.org/projects/dsss/

But this is the same for all D programs, not just the "script" variant,
with the regular D compilers you need to give it all the object files
like you do with C/C++ compilers but with these alternative "build"
compilers you only give it the first program like you do with javac.

i.e. even if you do use your own modules, you *could* compile those into
a library and then link that with all your scripts using a -l option...
It's just that the "build" tools do this for you, and can also be taught
to pick up external libraries using: "version(build) pragma(link, baz);"

So I think it's fair to have the rdmd program default to using dmd/gdmd,
even if bud/rebuild do exist as an optional (and recommended) D add-on ?

> Essentially what you want is to make rdmd do the deed flag-free:
> 
> $ rdmd prog args
> 
> does whatever it takes to build prog.d (if necessary) and then runs it
> passing args. Each extra needed flag cuts your cult following in half. :o)

Currently this can be done by recompiling rdmd... (assuming here that
the rdmd source code eventually gets included in the DMD distribution)

This is the section to modify:
     char[] exepath, dfilepath, compiler = "dmd", tmpdir = "/tmp";
     version (GNU)
     {
         compiler = "gdmd";
     }
     version (Windows)
     {
         tmpdir = toString(getenv("TEMP"));
     }

Maybe it could even use a configuration file for those two options.
(i.e. a simple INI file for overriding --compiler and --tmpdir ?)

--anders



More information about the Digitalmars-d mailing list