[Lazarus] Conditional compilation depending on Lazarus version?
Mark Morgan Lloyd
markMLl.lazarus at telemetry.co.uk
Sat Mar 24 19:35:12 CET 2012
Sven Barth wrote:
> Am 22.03.2012 14:10, schrieb Mark Morgan Lloyd:
>> Sven Barth wrote:
>>> Am 22.03.2012 13:28, schrieb Mark Morgan Lloyd:
>>>> Sven Barth wrote:
>>>>> Am 22.03.2012 11:32, schrieb Reinier Olislagers:
>>>>
>>>>>> I realize that the code above will be compiled by FPC, not Lazarus;
>>>>>> perhaps it is possible to set an environment variable LAZARUSREVISION
>>>>>> and/or LAZARUSVERSION and get these into FPC macros in some way?
>>>>>
>>>>> The revision is not possible (when using development versions you
>>>>> should try to use the latest revision), but for version you can use
>>>>> the unit LCLVersion. Just add it to the uses clause and then you can
>>>>> use e.g.:
>>>>>
>>>>> {$if lcl_fullversion>=93100}
>>>>> // code that should work with 0.9.31 or newer
>>>>> {$endif}
>>>>
>>>> For the record, can you easily say what version of FPC introduced this
>>>> capability?
>>>>
>>>
>>> According to a svn blame for the corresponding code this is in there
>>> at least since 2005 (when FPC switched from CVS to SVN and thus no
>>> older history is available to the public)
>>
>> Which probably makes it safe for 2.2.4, which corresponds approximately
>> to 0.9.24.1 by which time the new-format lcl_fullversion etc. were
>> available.
>
> These constants were introduced EXACTLY for the purpose to use them in
> ifdefs. So yes, they are safe to use in this way ;)
I've been having a bit of a play with this. Using the example above, am
I correct in saying that this works
{$if lcl_fullversion>=93100}
// code that should work with 0.9.31 or newer
{$endif}
but this doesn't
{$ifdef lcl_fullversion }
// code that should work with any version that defines lcl_fullversion
{$endif}
As a variation of the latter, am I correct in saying that ifdef can't be
used to check whether a function or procedure is implemented in some
imported unit?
--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk
[Opinions above are the author's, not those of his employers or colleagues]
More information about the Lazarus
mailing list