Delphi equivalent to Free Pascal's FPC define?
Asked Answered
A

3

5

Is there a compiler define that tells if source code is compiled with delphi, in the sense of an equivalent to the FPC define in Free Pascal?

I am developing a unit that should be compatible with three Pascal compilers (Lazarus / Free Pascal, Delphi and winsoft PocketStudio). There are some differences among the compilers, therefore I would like to provide some critical parts of the code in a compiler-specific version.

For Free Pascal I can write

{$IFDEF FPC}
  DoSomething;
{$ENDIF}

but what is the equivalent for Delphi?

Altostratus answered 16/1, 2014 at 23:29 Comment(4)
See documentation for predifined conditionals. DCC perhaps.Straightedge
There's none for Delphi. Is there one for PocketStudio? If there is, you can use {$IFNDEF FPC}', '{$IFNDEF POCKET_STUDIO}', '{$ELSE}{$DEFINE DELPHI}.Nickel
@KenWhite: There is one for Delphi - DCC - but only in XE and later.Armageddon
@Remy: I know, but the question has no version tags. There is none for Delphi in general.Nickel
A
8

The DCC define was added to the Delphi compiler in XE2. Prior to that, you had to use {$IFDEF VERxxx} statements to check for the presence of individual VERxxx defines for each version of Delphi, or an {$IF DECLARED(CompilerVersion)} statement for Delphi 6+.

Armageddon answered 16/1, 2014 at 23:49 Comment(2)
Are you sure about XE, not XE2?Alcina
Just know that {$IF} was introduced in D6, so you can use {$IFDEF CONDITIONALEXPRESSIONS} if you need to support earlier versions.Armageddon
S
2

Documentation predefined conditionals reveals that DCC is a predefined symbol that could be used to separate Delphi from other compilers.

Straightedge answered 16/1, 2014 at 23:45 Comment(4)
Only in Delphi XE and later, as DCC did not exist prior to XE.Armageddon
Thanks, but this should be solvable.Altostratus
It is "solvable", just ugly unless PocketStudio has something that can be tested for so Delphi is a fallback when nothing else is detected. Indy gets around this by manually defining DCC for every Delphi version prior to XE, that way it can always test for DCC when needed.Armageddon
Dropping versions that don't $if defined() also helps tremendously in simplifying include files.Fordo
A
0

Thanks for your hints.

Based on them I can now find out, if the code is compiled with Delphi or Free Pascal with the following statements:

{$IFDEF VER80}   {Delphi 1}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER90}   {Delphi 2}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER100}   {Delphi 3}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER120}   {Delphi 4}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER130}   {Delphi 5}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER140}   {Delphi 6}
{$DEFINE DELPHI}
{  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER150}   {Delphi 7}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER160}   {Delphi 8}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER170}   {Delphi 9}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER180}   {Delphi 10}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER185}   {Delphi 11 - Spacely}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER190}   {Delphi 11 - Highlander and Delphi 12}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER200}   {Delphi 12}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF VER210}   {Delphi 2010}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF DCC}   {Delphi XE and newer versions}
{$DEFINE DELPHI}
  DoSomeSpecificStuff;
{$ENDIF}

{$IFDEF FPC]   {Lazarus and Free Pascal}
  DoSomeSpecificStuff;
{$ENDIF}
Altostratus answered 16/1, 2014 at 23:30 Comment(2)
Introducing $if declared here for versions >=6 will reduce redundant parts of DoSpecificStuff, same as DCCFordo
You are right, but this formulation provides a form of backwards-compatibility. Old Pascal compilers don't support more elaborate forms of {$IFDEF} constructs.Altostratus

© 2022 - 2024 — McMap. All rights reserved.