January 13, 2014
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.
1 2
Next ›   Last »