diff --git a/src/shared/a_modes.inc b/src/shared/a_modes.inc
index 35e29d6ec289341da8ddd68f270baa17b10ce5d6..9f7caa47b27a923ccabf38375e260aae619c1254 100644 (file)
--- a/src/shared/a_modes.inc
+++ b/src/shared/a_modes.inc
// compiler options, common for all game modules
// compiler options, common for all game modules
-{$MODE DELPHI}
-{$MODESWITCH NESTEDPROCVARS+}
-{$MODESWITCH DUPLICATELOCALS-}
-{.$MODESWITCH CBLOCKS+}
+{$MODE OBJFPC}
+
{$MODESWITCH ADVANCEDRECORDS+}
{$MODESWITCH ADVANCEDRECORDS+}
+{$MODESWITCH ALLOWINLINE+}
+{$MODESWITCH ANSISTRINGS+} // Allow use of ansistrings.
+{$MODESWITCH AUTODEREF+} // Automatic (silent) dereferencing of typed pointers.
+{$MODESWITCH CLASS+}
+{$MODESWITCH CLASSICPROCVARS+} // Use classical procedural variables.
+{$MODESWITCH DEFAULTPARAMETERS+} // Allow use of default parameter values.
+{$MODESWITCH DUPLICATELOCALS-} // Allow local variables in class methods to have the same names as properties of the class.
+{$MODESWITCH EXCEPTIONS+}
+{$MODESWITCH HINTDIRECTIVE+} // Support the hint directives (deprecated, platform etc.)
+{$MODESWITCH INITFINAL+} // Allow use of Initialization and Finalization
+{.$MODESWITCH ISOUNARYMINUS-} // Unary minus as required by ISO pascal.
+{$MODESWITCH MACPROCVARS-} // Use mac-style procedural variables.
+{$MODESWITCH NESTEDCOMMENTS-}
+{$MODESWITCH NESTEDPROCVARS+}
+{$MODESWITCH OBJPAS+}
+{$MODESWITCH OUT+} // Allow use of the out parameter type.
+{$MODESWITCH PCHARTOSTRING+}
+{$MODESWITCH POINTERTOPROCVAR+} // Allow silent conversion of pointers to procedural variables.
+{$MODESWITCH PROPERTIES+}
+{$MODESWITCH REPEATFORWARD+} // Implementation and Forward declaration must match completely.
+{$MODESWITCH RESULT+}
+{$MODESWITCH TYPEHELPERS+} // Allow the use of type helpers.
+{$MODESWITCH UNICODESTRINGS-}
+
+{$IFDEF DARWIN}
+ {$MODESWITCH OBJECTIVEC1}
+{$ENDIF}
+
{$ASSERTIONS ON}
{$ASSERTIONS ON}
+{$BITPACKING OFF}
+{$BOOLEVAL OFF}
+{$COPERATORS ON}
+{$EXTENDEDSYNTAX ON}
+{$IFDEF CPU386}
+ {$FPUTYPE SSE}
+{$ENDIF}
+{$GOTO ON}
+{$IEEEERRORS OFF}
+{$INLINE ON}
{$LONGSTRINGS ON}
{$LONGSTRINGS ON}
+{$MACRO OFF}
+{$OBJECTCHECKS OFF}
{$OVERFLOWCHECKS OFF}
{$OVERFLOWCHECKS OFF}
+{$POINTERMATH ON}
{$RANGECHECKS OFF}
{$RANGECHECKS OFF}
-{.$STATIC ON}
-{$TYPEDADDRESS OFF}
+{$SAFEFPUEXCEPTIONS OFF}
+{$SCOPEDENUMS ON} // this may be changed later
+{$SMARTLINK ON}
+{$TYPEDADDRESS ON}
+{$TYPEINFO ON}
{$VARSTRINGCHECKS OFF}
{$VARSTRINGCHECKS OFF}
-{$EXTENDEDSYNTAX ON}
-{$B-}
-{$S-}
+
+{$S-} // disable stack checking
+{$MMX-} // get lost, mmx
+
+{$IF DEFINED(D2F_DEBUG)}
+ {$STACKFRAMES ON}
+ {$HINTS OFF}
+{$ELSE}
+ {$STACKFRAMES OFF}
+ {$HINTS OFF}
+ {$DEFINE D2F_MORE_OPTIM}
+{$ENDIF}
+{$WARNINGS ON}
+{.$NOTES ON}
+
+{$IF DEFINED(D2F_DEBUG_OPTIM) or DEFINED(D2F_MORE_OPTIM)}
+ {$OPTIMIZATION DEADVALUES}
+ {$OPTIMIZATION CONSTPROP}
+ {$OPTIMIZATION DEADSTORE}
+{$ENDIF}
+
+{$IFDEF WIN32}
+ {$IFNDEF MSWINDOWS}
+ {$DEFINE MSWINDOWS}
+ {$ENDIF}
+{$ENDIF}
{$IFDEF MSWINDOWS}
{$IFNDEF WINDOWS}
{$DEFINE WINDOWS}
{$ENDIF WINDOWS}
{$IFDEF MSWINDOWS}
{$IFNDEF WINDOWS}
{$DEFINE WINDOWS}
{$ENDIF WINDOWS}
-{$ENDIF MSWINDOWS}
+{$ENDIF}
+
+(* --------- Build options check --------- *)
+
+{$IFDEF HEADLESS}
+ {$DEFINE USE_SYSSTUB}
+ {$IF DEFINED(USE_SDL) OR DEFINED(USE_SDL2)}
+ {$WARNING System drivers not supported in headless mode. Force stub driver...}
+ {$UNDEF USE_SDL}
+ {$UNDEF USE_SDL2}
+ {$ENDIF}
+ {$DEFINE USE_GLSTUB}
+ {$IF DEFINED(USE_GLES1) OR DEFINED(USE_OPENGL)}
+ {$WARNING Render drivers not needed in headless mode. Force stub driver...}
+ {$UNDEF USE_GLES1}
+ {$UNDEF USE_OPENGL}
+ {$ENDIF}
+ {$IFDEF ENABLE_HOLMES}
+ {$WARNING Holmes in headless mode has no sense. Disabled.}
+ {$UNDEF ENABLE_HOLMES}
+ {$ENDIF}
+ {$IFDEF ENABLE_MENU}
+ {$WARNING Menu in headless mode has no sense. Disabled.}
+ {$UNDEF ENABLE_MENU}
+ {$DEFINE DISABLE_MENU}
+ {$ENDIF}
+ {$IFDEF ENABLE_TOUCH}
+ {$WARNING Touch screen in headless mode has no sense. Disabled.}
+ {$UNDEF ENABLE_TOUCH}
+ {$DEFINE DISABLE_TOUCH}
+ {$ENDIF}
+ {$IFDEF ENABLE_GFX}
+ {$WARNING GFX in headless mode has no sense. Disabled.}
+ {$UNDEF ENABLE_GFX}
+ {$DEFINE DISABLE_GFX}
+ {$ENDIF}
+ {$IFDEF ENABLE_GIBS}
+ {$WARNING Gibs in headless mode has no sense. Disabled.}
+ {$UNDEF ENABLE_GIBS}
+ {$DEFINE DISABLE_GIBS}
+ {$ENDIF}
+ {$IFDEF ENABLE_SHELLS}
+ {$WARNING Shells in headless mode has no sense. Disabled.}
+ {$UNDEF ENABLE_SHELLS}
+ {$DEFINE DISABLE_SHELLS}
+ {$ENDIF}
+ {$IFDEF ENABLE_CORPSES}
+ {$WARNING Corpses in headless mode has no sense. Disabled.}
+ {$UNDEF ENABLE_CORPSES}
+ {$DEFINE DISABLE_CORPSES}
+ {$ENDIF}
+ {$IFDEF ENABLE_RENDER}
+ {$WARNING Render in headless mode has no sense. Disabled.}
+ {$UNDEF ENABLE_RENDER}
+ {$DEFINE DISABLE_RENDER}
+ {$ENDIF}
+ {$IFDEF ENABLE_SYSTEM}
+ {$WARNING System in headless mode has no sense. Disabled.}
+ {$UNDEF ENABLE_SYSTEM}
+ {$DEFINE DISABLE_SYSTEM}
+ {$ENDIF}
+{$ENDIF}
+
+{$IF DEFINED(ENABLE_MENU) AND DEFINED(DISABLE_MENU)}
+ {$ERROR Select ENABLE_MENU or DISABLE_MENU}
+{$ELSEIF NOT DEFINED(ENABLE_MENU) AND NOT DEFINED(DISABLE_MENU)}
+ // defaut ENABLE/DISABLE menu
+ {$IFDEF HEADLESS}
+ {$DEFINE DISABLE_MENU}
+ {$ELSE}
+ {$DEFINE ENABLE_MENU}
+ {$ENDIF}
+{$ENDIF}
+
+{$IF DEFINED(ENABLE_TOUCH) AND DEFINED(DISABLE_TOUCH)}
+ {$ERROR Select ENABLE_TOUCH or DISABLE_TOUCH}
+{$ELSEIF NOT DEFINED(ENABLE_TOUCH) AND NOT DEFINED(DISABLE_TOUCH)}
+ // defaut ENABLE/DISABLE touch
+ {$IFDEF HEADLESS}
+ {$DEFINE DISABLE_TOUCH}
+ {$ELSE}
+ {$DEFINE ENABLE_TOUCH}
+ {$ENDIF}
+{$ENDIF}
+
+{$IF DEFINED(ENABLE_GFX) AND DEFINED(DISABLE_GFX)}
+ {$ERROR Select ENABLE_GFX or DISABLE_GFX}
+{$ELSEIF NOT DEFINED(ENABLE_GFX) AND NOT DEFINED(DISABLE_GFX)}
+ // default ENABLE/DISABLE gfx
+ {$IFDEF HEADLESS}
+ {$DEFINE DISABLE_GFX}
+ {$ELSE}
+ {$DEFINE ENABLE_GFX}
+ {$ENDIF}
+{$ENDIF}
+
+{$IF DEFINED(ENABLE_GIBS) AND DEFINED(DISABLE_GIBS)}
+ {$ERROR Select ENABLE_GIBS or DISABLE_GIBS}
+{$ELSEIF NOT DEFINED(ENABLE_GIBS) AND NOT DEFINED(DISABLE_GIBS)}
+ // default ENABLE/DISABLE gibs
+ {$IFDEF HEADLESS}
+ {$DEFINE DISABLE_GIBS}
+ {$ELSE}
+ {$DEFINE ENABLE_GIBS}
+ {$ENDIF}
+{$ENDIF}
+
+{$IF DEFINED(ENABLE_SHELLS) AND DEFINED(DISABLE_SHELLS)}
+ {$ERROR Select ENABLE_SHELLS or DISABLE_SHELLS}
+{$ELSEIF NOT DEFINED(ENABLE_SHELLS) AND NOT DEFINED(DISABLE_SHELLS)}
+ // default ENABLE/DISABLE gibs
+ {$IFDEF HEADLESS}
+ {$DEFINE DISABLE_SHELLS}
+ {$ELSE}
+ {$DEFINE ENABLE_SHELLS}
+ {$ENDIF}
+{$ENDIF}
+
+{$IF DEFINED(ENABLE_CORPSES) AND DEFINED(DISABLE_CORPSES)}
+ {$ERROR Select ENABLE_CORPSES or DISABLE_CORPSES}
+{$ELSEIF NOT DEFINED(ENABLE_CORPSES) AND NOT DEFINED(DISABLE_CORPSES)}
+ // default ENABLE/DISABLE corpses
+ {$IFDEF HEADLESS}
+ {$DEFINE DISABLE_CORPSES}
+ {$ELSE}
+ {$DEFINE ENABLE_CORPSES}
+ {$ENDIF}
+{$ENDIF}
+
+{$IF DEFINED(ENABLE_RENDER) AND DEFINED(DISABLE_RENDER)}
+ {$ERROR Select ENABLE_RENDER or DISABLE_RENDER}
+{$ELSEIF NOT DEFINED(ENABLE_RENDER) AND NOT DEFINED(DISABLE_RENDER)}
+ // default ENABLE/DISABLE render
+ {$IFDEF HEADLESS}
+ {$DEFINE DISABLE_RENDER}
+ {$ELSE}
+ {$DEFINE ENABLE_RENDER}
+ {$ENDIF}
+{$ENDIF}
+
+{$IF DEFINED(ENABLE_SYSTEM) AND DEFINED(DISABLE_SYSTEM)}
+ {$ERROR Select ENABLE_SYSTEM or DISABLE_SYSTEM}
+{$ELSEIF NOT DEFINED(ENABLE_SYSTEM) AND NOT DEFINED(DISABLE_SYSTEM)}
+ // default ENABLE/DISABLE system driver
+ {$IFDEF HEADLESS}
+ {$DEFINE DISABLE_SYSTEM}
+ {$ELSE}
+ {$DEFINE ENABLE_SYSTEM}
+ {$ENDIF}
+{$ENDIF}
+
+{$IF DEFINED(USE_SYSSTUB)}
+ {$IF DEFINED(USE_SDL) OR DEFINED(USE_SDL2)}
+ {$ERROR Only one system driver must be selected!}
+ {$ENDIF}
+{$ELSEIF DEFINED(USE_SDL)}
+ {$IF DEFINED(USE_SYSSTUB) OR DEFINED(USE_SDL2)}
+ {$ERROR Only one system driver must be selected!}
+ {$ENDIF}
+{$ELSEIF DEFINED(USE_SDL2)}
+ {$IF DEFINED(USE_SYSSTUB) OR DEFINED(USE_SDL)}
+ {$ERROR Only one system driver must be selected!}
+ {$ENDIF}
+{$ELSE}
+ {$DEFINE USE_SDL2}
+ {.$ERROR System driver not selected. Use -dUSE_SYSSTUB or -dUSE_SDL or -dUSE_SDL2}
+{$ENDIF}
+
+{$IF DEFINED(USE_SOUNDSTUB)}
+ {$IF DEFINED(USE_SDLMIXER) OR DEFINED(USE_FMOD) OR DEFINED(USE_OPENAL)}
+ {$ERROR Only one sound driver must be selected!}
+ {$ENDIF}
+{$ELSEIF DEFINED(USE_SDLMIXER)}
+ {$IF DEFINED(USE_SOUNDSTUB) OR DEFINED(USE_FMOD) OR DEFINED(USE_OPENAL)}
+ {$ERROR Only one sound driver must be selected!}
+ {$ENDIF}
+{$ELSEIF DEFINED(USE_FMOD)}
+ {$IF DEFINED(USE_SOUNDSTUB) OR DEFINED(USE_SDLMIXER) OR DEFINED(USE_OPENAL)}
+ {$ERROR Only one sound driver must be selected!}
+ {$ENDIF}
+{$ELSEIF DEFINED(USE_OPENAL)}
+ {$IF DEFINED(USE_SOUNDSTUB) OR DEFINED(USE_SDLMIXER) OR DEFINED(USE_FMOD)}
+ {$ERROR Only one sound driver must be selected!}
+ {$ENDIF}
+{$ELSE}
+ {$IFDEF IN_TOOLS}
+ {$DEFINE USE_SOUNDSTUB}
+ {$ELSE}
+ {$ERROR Sound driver not selected. Use -dUSE_SOUNDSTUB or -dUSE_SDLMIXER or -dUSE_FMOD or -dUSE_OPENAL}
+ {$ENDIF}
+{$ENDIF}
+
+{$IF DEFINED(USE_GLSTUB)}
+ {$IF DEFINED(USE_GLES1) OR DEFINED(USE_OPENGL) OR DEFINED(USE_STUBRENDER) OR DEFINED(USE_NEWGL)}
+ {$ERROR Only one render driver must be selected!}
+ {$ENDIF}
+{$ELSEIF DEFINED(USE_GLES1)}
+ {$IF DEFINED(USE_GLSTUB) OR DEFINED(USE_OPENGL) OR DEFINED(USE_STUBRENDER) OR DEFINED(USE_NEWGL)}
+ {$ERROR Only one render driver must be selected!}
+ {$ENDIF}
+{$ELSEIF DEFINED(USE_OPENGL)}
+ {$IF DEFINED(USE_GLSTUB) OR DEFINED(USE_GLES1) OR DEFINED(USE_STUBRENDER) OR DEFINED(USE_NEWGL)}
+ {$ERROR Only one render driver must be selected!}
+ {$ENDIF}
+{$ELSEIF DEFINED(USE_STUBRENDER)}
+ {$IF DEFINED(USE_GLSTUB) OR DEFINED(USE_OPENGL) OR DEFINED(USE_GLES1) OR DEFINED(USE_NEWGL)}
+ {$ERROR Only one render driver must be selected!}
+ {$ENDIF}
+{$ELSEIF DEFINED(USE_NEWGL)}
+ {$IF DEFINED(USE_GLSTUB) OR DEFINED(USE_OPENGL) OR DEFINED(USE_GLES1) OR DEFINED(USE_STUBRENDER)}
+ {$ERROR Only one render driver must be selected!}
+ {$ENDIF}
+{$ELSEIF DEFINED(ENABLE_RENDER)}
+ {$DEFINE USE_OPENGL}
+ {.$ERROR Render driver not selected. Use -dUSE_OPENGL or -dUSE_GLES1}
+{$ENDIF}
+
+{$IFDEF DISABLE_RENDER}
+ {$UNDEF USE_GLSTUB}
+ {$UNDEF USE_GLES1}
+ {$UNDEF USE_OPENGL}
+ {$UNDEF USE_STUBRENDER}
+{$ENDIF}
+
+{$IFDEF ENABLE_HOLMES}
+ {$IFDEF DISABLE_SYSTEM}
+ {$FATAL System driver required for current Holmes implementation}
+ {$ENDIF}
+ {$IFDEF DISABLE_RENDER}
+ {$FATAL Render driver required for current Holmes implementation}
+ {$ENDIF}
+ {$IFNDEF USE_SDL2}
+ {$FATAL SDL2 required for current Holmes implementation}
+ {$ENDIF}
+ {$IFNDEF USE_OPENGL}
+ {$FATAL Desktop OpenGL required for current Holmes implementation}
+ {$ENDIF}
+{$ENDIF}
+
+{$IFDEF ENABLE_TOUCH}
+ {$IFDEF DISABLE_SYSTEM}
+ {$FATAL System driver required for current touch implementation}
+ {$ENDIF}
+{$ENDIF}