On Monday, 13 January 2014 at 19:18:17 UTC, Russel Winder wrote:
On Mon, 2014-01-13 at 15:05 +0000, Dejan Lekic wrote:
[…]
I simply define version in my main module (module which contains the main() function). I am planning to submit a DIP about something that is related to this. - I think we really need a way to specify version of package, and maybe even version of a module (similar to how the new Java module system works - see project Jigsaw). D does not offer this. I humbly believe it should be part of the language as it could be used also for building versions of dynamic libraries.

For the version number to be available to SCons it cannot be embedded in the D source code. (Unless I am missing some really useful trick. :-)

Anyway, back to the topic.
Say my main() function is in the org.dlang.myapp module.
If I want to have information about version of the artifact, my myapp.d starts with the following two lines of D code:
module org.dlang.myapp;
version = 1_3_21_4; // major_minor_micro_qualifier

Python uses a tuple:

        (<major>, <minor>, <bugfix>, <annotation>)

which seems to work very well: it needs very little reprocessing to be
used in most contexts.

Naturally, build tool looks for the version line when I need it.

template DeclareVersion(T...)
{
     static if (T.length == 4)
     {
         alias Version = T;
     }
     else
     {
         static assert(false, "Version declaration must be of the
form Version!(major, minor, bugfix, annotation)");
     }
}

enum Version
{
     major = 0,
     minor = 1,
     bugfix = 2,
     annotation = 3,
}

//main.d
alias AppVersion = DeclareVersion!("1", "3", "21", "4");

import std.stdio;

void main()
{
     writeln(AppVersion[Version.major]);
}

Kind of neat, it's even accessible at compile time and gets
compiled into the source.

Reply via email to