We need a script to update all of dmd's paraphernalia. By this I'm putting the task up for grabs and am describing it.

The script would require git to be installed, and would orchestrate git commands to freshen the installation. Either a tag can be given, or the script would automatically detect the latest "semistable" release, or even the script can be told to get the latest and greatest. The exact tagging convention is to be defined later.

The trick with such tools is they must "just work". That means wherever and however you installed dmd, the script should be able to detect everything it needs for a successful update. This means: dmd and rdmd binary locations, druntime and phobos library locations, and druntime and phobos import locations.

The way I'm thinking this all can be done is by running dmd -v against a small do-nothing program that imports one std module, for example std.stdio. The run will print (among other things):

binary    dmd
version   v2.054
config    /Users/john/dmd.conf
parse     test
importall test
import    object        (/Users/john/code/dmd/druntime/import/object.di)
import    std.stdio     (/Users/john/code/dmd/phobos/std/stdio.d)
...

Simple parsing reveals the location of the configuration file and the locations of druntime and std imports. Further simple parsing of the conf file reveals the location of libraries.

With this information in hand, the script goes and fetches the appropriate code in the appropriate places.

Also, the tool needs to do all of its work transactionally, i.e. first download everything next to the target with an added suffix (e.g. ".tmp"). Only after a full successful download, the tool would rename everything .tmp to its final name (an operation that can't fail under most circumstances).

If anyone is willing to take up working on this, it would be great. D itself is a great candidate as the language to write the tool in, and has the advantage of being more portable than shell scripts.

We'll add the tool to the tools/ repository and offer it with the standard distribution.


Thanks,

Andrei

Reply via email to