Thread overview
Passing revision tag to the compiler
Mar 31, 2013
bearophile
Mar 31, 2013
Tobias Pankrath
March 31, 2013
Hello,

I'd like to include the version control revision tag in a program. In the C/C++ world I'd make my build system call the compiler like this:

   g++ -D<MY_REVISION_HERE> .....

so that the revision is available as a preprocessor symbol.

Is there an easy way to achieve the same in D? I can think of convoluted solutions, like making the build system generate a .d file containing a constant with the revision tag, but I'd naturally prefer a simpler solution.

I am using DMD, but a solution that works for other D compilers gets extra credit :-)

Thanks!

LMB
March 31, 2013
Leandro Motta Barros:

> I'd like to include the version control revision tag in a program. In
> the C/C++ world I'd make my build system call the compiler like this:
>
>    g++ -D<MY_REVISION_HERE> .....

Take a look at -version=...

Bye,
bearophile
March 31, 2013
On Sunday, 31 March 2013 at 02:00:46 UTC, Leandro Motta Barros wrote:
> Hello,
>
> I'd like to include the version control revision tag in a program. In
> the C/C++ world I'd make my build system call the compiler like this:
>
>    g++ -D<MY_REVISION_HERE> .....
>

D has no preprocessor and no way to define global variables via a cmdline switch. The -version switch can be used conditionally compile in blocks of code but wont help you to "import" a value into your program. You can however use import expressions for this.

See http://dlang.org/expression.html search import expression.

---
immutable Revision = import("revision.data");
---
And tell your VCS to always keep the revision in that file. DMD looks for imports in directories specified by the -J option.
March 31, 2013
On Sun, Mar 31, 2013 at 10:09 AM, Tobias Pankrath <tobias@pankrath.net> wrote:
> On Sunday, 31 March 2013 at 02:00:46 UTC, Leandro Motta Barros wrote:
>>
>> Hello,
>>
>>
>> I'd like to include the version control revision tag in a program. In the C/C++ world I'd make my build system call the compiler like this:
>>
>>    g++ -D<MY_REVISION_HERE> .....
>>
>
> D has no preprocessor and no way to define global variables via a cmdline switch. The -version switch can be used conditionally compile in blocks of code but wont help you to "import" a value into your program. You can however use import expressions for this.
>
> See http://dlang.org/expression.html search import expression.
>
> ---
> immutable Revision = import("revision.data");
> ---
> And tell your VCS to always keep the revision in that file. DMD looks for imports in directories specified by the -J option.

Hello Tobias,

I have (miss)used import expressions before, but I forgot I could use them here.

Thanks a lot!

LMB