From 1aabd118ca7663db8646c6ee9ac07b35fc3fb51b Mon Sep 17 00:00:00 2001
From: DeaDDooMER <deaddoomer@deadsoftware.ru>
Date: Mon, 2 Dec 2019 00:04:59 +0300
Subject: [PATCH] fix SDL2 for osx-ppc

---
 README                     | 7 ++++---
 src/game/sdl2/g_system.pas | 6 +++++-
 src/game/sdl2/g_touch.pas  | 6 +++++-
 src/lib/sdl2/sdl2.pas      | 2 +-
 src/lib/sdl2/sdlsyswm.inc  | 2 +-
 5 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/README b/README
index c5a6590..58c544c 100644
--- a/README
+++ b/README
@@ -14,7 +14,7 @@ Requirements:
 Create the "tmp" and "bin" directories and then run:
 
   cd src/game
-  fpc -O3 -FE../../bin -FU../../tmp Doom2DF.lpr
+  fpc -g -gl -O3 -FE../../bin -FU../../tmp Doom2DF.lpr
 
 Additionally you can add following options:
   System driver:
@@ -40,13 +40,14 @@ Additionally you can add following options:
     * -dUSE_MPG123      Build with libmpg123
     * -dUSE_OPUS        Build with libopus
   Other:
+    * -dSDL2_NODPI      Build for old libSDL2
     * -dUSE_MINIUPNPC   Build with libminiupnpc for automatic server port
                         forwarding via UPNP
     * -dENABLE_HOLMES   Build with ingame map debugger
     * -dHEADLESS        Build a headless executable for dedicated servers
 
-Replace -O3 with -g -gl to enable debugging features. Run the game with --gdb
-when using a debugger to prevent it from eating exceptions.
+Run the game with --gdb when using a debugger to prevent it from eating
+exceptions.
 
 Windows binaries will require the appropriate DLLs (SDL2.dll, SDL2_mixer.dll or
 FMODEx.dll, ENet.dll, miniupnpc.dll), unless you choose to static link them.
diff --git a/src/game/sdl2/g_system.pas b/src/game/sdl2/g_system.pas
index bfb76fb..694042c 100644
--- a/src/game/sdl2/g_system.pas
+++ b/src/game/sdl2/g_system.pas
@@ -531,11 +531,15 @@ implementation
         flags := SDL_INIT_TIMER or $00004000;
       {$ENDIF}
     {$ELSE}
-      flags := SDL_INIT_JOYSTICK or SDL_INIT_TIMER or SDL_INIT_VIDEO;
+      flags := SDL_INIT_TIMER or SDL_INIT_VIDEO;
     {$ENDIF}
     SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, '0');
     if SDL_Init(flags) <> 0 then
       raise Exception.Create('SDL: Init failed: ' + SDL_GetError);
+    {$IFNDEF HEADLESS}
+      if SDL_InitSubSystem(SDL_INIT_JOYSTICK) <> 0 then
+        e_LogWritefln('SDL: Init subsystem failed: %s', [SDL_GetError()]);
+    {$ENDIF}
     SDL_ShowCursor(SDL_DISABLE);
   end;
 
diff --git a/src/game/sdl2/g_touch.pas b/src/game/sdl2/g_touch.pas
index 6971879..23cfbc1 100644
--- a/src/game/sdl2/g_touch.pas
+++ b/src/game/sdl2/g_touch.pas
@@ -58,8 +58,12 @@ implementation
 
   begin
     founded := false;
-    if SDL_GetDisplayDPI(0, @dpi, nil, nil) <> 0 then
+    {$IFNDEF SDL2_NODPI}
+      if SDL_GetDisplayDPI(0, @dpi, nil, nil) <> 0 then
+        dpi := 96;
+    {$ELSE}
       dpi := 96;
+    {$ENDIF}
 
     sz := Trunc(g_touch_size * dpi); sw := gScreenWidth; sh := gScreenHeight;
     x := 0; y := Round(sh * g_touch_offset / 100);
diff --git a/src/lib/sdl2/sdl2.pas b/src/lib/sdl2/sdl2.pas
index 6e77ca2..ab47a82 100644
--- a/src/lib/sdl2/sdl2.pas
+++ b/src/lib/sdl2/sdl2.pas
@@ -138,7 +138,7 @@ interface
   {$ENDIF}
 
   {$IF DEFINED(UNIX)}
-    {$IF NOT DEFINED(HAIKU) AND NOT DEFINED(ANDROID)}
+    {$IF NOT DEFINED(HAIKU) AND NOT DEFINED(ANDROID) AND NOT DEFINED(DARWIN)}
       uses
         X,
         XLib;
diff --git a/src/lib/sdl2/sdlsyswm.inc b/src/lib/sdl2/sdlsyswm.inc
index e3ac0a8..5dc90fc 100644
--- a/src/lib/sdl2/sdlsyswm.inc
+++ b/src/lib/sdl2/sdlsyswm.inc
@@ -5,7 +5,7 @@
 {$ENDIF}
 
 {$IF DEFINED (LINUX) OR DEFINED(UNIX)}
-   {$IF NOT DEFINED(HAIKU) AND NOT DEFINED(ANDROID)}
+   {$IF NOT DEFINED(HAIKU) AND NOT DEFINED(ANDROID) AND NOT DEFINED(DARWIN)}
        {$DEFINE SDL_VIDEO_DRIVER_X11}
    {$ENDIF}
 {$IFEND}
-- 
2.29.2