Now, SDL2 is not recommended and suggested to use SDL3
with sdl2-compat.

-- 
Takashi Yano <takashi.y...@nifty.ne.jp>
NAME="SDL3"
VERSION=3.2.20
RELEASE=1
LICENSE="Zlib"
CATEGORY="Libs"
SUMMARY="Simple DirectMedia Layer core library"
DESCRIPTION="This is the Simple DirectMedia Layer, a general API that provides
low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL,
and 2D framebuffer across multiple platforms."
HOMEPAGE="http://www.libsdl.org/";
SRC_URI="https://github.com/libsdl-org/SDL/releases/download/release-${VERSION}/SDL3-${VERSION}.tar.gz";

inherit cmake

PKG_NAMES="libSDL3_0 libSDL3-devel"
libSDL3_0_REQUIRES="libdbus1_3 libGL1 libsamplerate0 libX11_6 libXcursor1 
libXext6 libXi6 libXinerama1 libXrandr2 libXss1" # libaudio2 libpulse-simple0
libSDL3_0_CONTENTS="usr/bin/cygSDL3-0.dll usr/share/doc/ usr/share/licenses/"
libSDL3_devel_CONTENTS="usr/include/ usr/lib/"

DISTCLEANFILES="acinclude/l*.m4"
DIFF_EXCLUDES="SDL_config.h"

CYGCMAKE_ARGS="
        -DSDL_JACK=OFF
        -DSDL_SNDIO=OFF
"

ACLOCAL_FLAGS="-I acinclude"
NO_AUTOHEADER=1
CYGCONF_ARGS="
        --enable-pthreads
        --enable-pthread-sem

        --disable-arts
        --disable-arts-shared
        --enable-esd
        --enable-esd-shared
        --enable-nas
        --enable-nas-shared
        --enable-oss
        --enable-pulseaudio
        --enable-pulseaudio-shared
        --enable-libsamplerate
        --enable-libsamplerate-shared

        --enable-video-dummy
        --enable-video-opengl
        --enable-video-opengles
        --enable-video-x11
        --enable-video-x11-scrnsaver
        --enable-video-x11-xcursor
        --enable-video-x11-xinput
        --enable-video-x11-xrandr
        --enable-video-x11-xshape
        --enable-x11-shared

        --enable-xinput
        --enable-render-d3d

        --disable-jack
        --disable-sndio
"

DOCS="README-SDL.txt README-porting.txt"

BUILD_REQUIRES="libX11-devel libGL-devel libEGL-devel libsamplerate-devel 
libesd-devel nas"
--- origsrc/SDL3-3.2.20/CMakeLists.txt  2025-08-05 01:58:55.000000000 +0900
+++ src/SDL3-3.2.20/CMakeLists.txt      2025-08-26 14:36:35.689597000 +0900
@@ -367,9 +367,9 @@ dep_option(SDL_WAYLAND_LIBDECOR_SHARED
 dep_option(SDL_RPI                 "Use Raspberry Pi video driver" ON 
"SDL_VIDEO;UNIX_SYS;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF)
 dep_option(SDL_ROCKCHIP            "Use ROCKCHIP Hardware Acceleration video 
driver" ON "SDL_VIDEO;UNIX_SYS;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF)
 dep_option(SDL_COCOA               "Use Cocoa video driver" ON "APPLE" OFF)
-dep_option(SDL_DIRECTX             "Use DirectX for Windows audio/video" ON 
"SDL_AUDIO OR SDL_VIDEO;WINDOWS" OFF)
-dep_option(SDL_XINPUT              "Use Xinput for Windows" ON "WINDOWS" OFF)
-dep_option(SDL_WASAPI              "Use the Windows WASAPI audio driver" ON 
"WINDOWS;SDL_AUDIO" OFF)
+dep_option(SDL_DIRECTX             "Use DirectX for Windows audio/video" ON 
"SDL_AUDIO OR SDL_VIDEO;WINDOWS OR CYGWIN" OFF)
+dep_option(SDL_XINPUT              "Use Xinput for Windows" ON "WINDOWS OR 
CYGWIN" OFF)
+dep_option(SDL_WASAPI              "Use the Windows WASAPI audio driver" ON 
"SDL_AUDIO" OFF)
 dep_option(SDL_RENDER_D3D          "Enable the Direct3D 9 render driver" ON 
"SDL_RENDER;SDL_DIRECTX" OFF)
 dep_option(SDL_RENDER_D3D11        "Enable the Direct3D 11 render driver" ON 
"SDL_RENDER;SDL_DIRECTX" OFF)
 dep_option(SDL_RENDER_D3D12        "Enable the Direct3D 12 render driver" ON 
"SDL_RENDER;SDL_DIRECTX" OFF)
@@ -480,7 +480,7 @@ else()
   endif()
 endif()
 
-if(CYGWIN)
+if(FALSE AND CYGWIN)
   # We build SDL on cygwin without the UNIX emulation layer
   sdl_include_directories(PUBLIC SYSTEM "/usr/include/mingw")
   cmake_push_check_state()
@@ -1262,7 +1262,7 @@ if(SDL_CAMERA)
   #endif()
 endif()
 
-if(UNIX OR APPLE)
+if(UNIX OR APPLE OR CYGWIN)
   # Relevant for Unix/Darwin only
   set(DYNAPI_NEEDS_DLOPEN 1)
   CheckDLOPEN()
@@ -1273,7 +1273,7 @@ if(UNIX OR APPLE)
   endif()
 endif()
 
-if(UNIX OR APPLE OR HAIKU OR RISCOS)
+if(UNIX OR APPLE OR HAIKU OR RISCOS OR CYGWIN)
   CheckO_CLOEXEC()
 endif()
 
@@ -1567,7 +1567,7 @@ elseif(EMSCRIPTEN)
   CheckPTHREAD()
   CheckLibUnwind()
 
-elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
+elseif((UNIX OR CYGWIN) AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
   if(SDL_AUDIO)
     if(NETBSD)
         set(SDL_AUDIO_DRIVER_NETBSD 1)
@@ -1609,7 +1609,7 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS
     set(HAVE_SDL_TRAY TRUE)
   endif()
 
-  if(UNIX)
+  if(UNIX OR CYGWIN)
     sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/unix/*.c")
 
     check_c_source_compiles("
@@ -1901,6 +1901,136 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS
     set (HAVE_VSNPRINTF 0)
     set (USE_POSIX_SPAWN 1)
   endif()
+
+  if (CYGWIN)
+    check_c_source_compiles("
+      #include <windows.h>
+      int main(int argc, char **argv) { return 0; }" HAVE_WIN32_CC)
+    sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/windows/*.c")
+    sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/windows/*.c")
+    sdl_link_dependency(base LIBS kernel32 user32 gdi32 winmm imm32 ole32 
oleaut32 version uuid advapi32 setupapi shell32 dxguid)
+  endif()
+
+  if(CYGWIN AND SDL_DIRECTX)
+    cmake_push_check_state()
+
+    #check_include_file(d3d9.h HAVE_D3D9_H)
+    #check_include_file(d3d11_1.h HAVE_D3D11_H)
+    #check_include_file(ddraw.h HAVE_DDRAW_H)
+    #check_include_file(dsound.h HAVE_DSOUND_H)
+    #check_include_file(dinput.h HAVE_DINPUT_H)
+    set(HAVE_D3D9_H TRUE)
+    set(HAVE_D3D11_H TRUE)
+    set(HAVE_DDRAW_H TRUE)
+    set(HAVE_DSOUND_H TRUE)
+    set(HAVE_DINPUT_H TRUE)
+    if(SDL_CPU_ARM32)  # !!! FIXME: this should probably check if we're !(x86 
or x86-64) instead of arm.
+      set(HAVE_DINPUT_H 0)
+    endif()
+    check_include_file(dxgi.h HAVE_DXGI_H)
+    cmake_pop_check_state()
+    if(HAVE_D3D9_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR 
HAVE_DINPUT_H)
+      set(HAVE_DIRECTX TRUE)
+      if(NOT MINGW AND NOT CYGWIN AND NOT USE_WINSDK_DIRECTX)
+        if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+          set(PROCESSOR_ARCH "x64")
+        else()
+          set(PROCESSOR_ARCH "x86")
+        endif()
+        
sdl_link_directories("$<BUILD_INTERFACE:$$ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH}>")
+        sdl_include_directories(PRIVATE SYSTEM 
"$<BUILD_INTERFACE:$ENV{DXSDK_DIR}\\Include>")
+      endif()
+    endif()
+  endif()
+
+  if(CYGWIN AND SDL_XINPUT)
+    # xinput.h may need windows.h, but does not include it itself.
+    check_c_source_compiles("
+      #include <windows.h>
+      #include <xinput.h>
+      int main(int argc, char **argv) { return 0; }" HAVE_XINPUT_H)
+  endif()
+
+  if(CYGWIN AND SDL_VIDEO)
+    set(SDL_VIDEO_DRIVER_WINDOWS 1)
+    sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/windows/*.c")
+
+    CheckOpenVR()
+
+    if(SDL_RENDER_D3D AND HAVE_D3D9_H)
+      set(SDL_VIDEO_RENDER_D3D 1)
+      set(HAVE_RENDER_D3D TRUE)
+    endif()
+    if(SDL_RENDER_D3D11 AND HAVE_D3D11_H)
+      set(SDL_VIDEO_RENDER_D3D11 1)
+      set(HAVE_RENDER_D3D11 TRUE)
+    endif()
+    if(SDL_RENDER_D3D12)
+      set(SDL_VIDEO_RENDER_D3D12 1)
+      set(HAVE_RENDER_D3D12 TRUE)
+    endif()
+    set(HAVE_SDL_VIDEO TRUE)
+  endif()
+
+  if(CYGWIN AND SDL_VIDEO)
+    if(SDL_OPENGL)
+      set(SDL_VIDEO_OPENGL 1)
+      set(SDL_VIDEO_OPENGL_WGL 1)
+      set(SDL_VIDEO_RENDER_OGL 1)
+      set(HAVE_OPENGL TRUE)
+    endif()
+
+    if(SDL_OPENGLES)
+      set(SDL_VIDEO_OPENGL_EGL 1)
+      set(SDL_VIDEO_OPENGL_ES2 1)
+      set(SDL_VIDEO_RENDER_OGL_ES2 1)
+      set(HAVE_OPENGLES TRUE)
+    endif()
+
+    if(SDL_VULKAN)
+      set(SDL_VIDEO_VULKAN 1)
+      set(HAVE_VULKAN TRUE)
+      if(SDL_RENDER_VULKAN)
+        set(SDL_VIDEO_RENDER_VULKAN 1)
+        set(HAVE_RENDER_VULKAN TRUE)
+      endif()
+    endif()
+  endif()
+
+  if(CYGWIN AND SDL_HIDAPI)
+    CheckHIDAPI()
+  endif()
+
+  if(CYGWIN AND SDL_JOYSTICK)
+    sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/windows/*.c")
+
+    set(SDL_JOYSTICK_RAWINPUT 1)
+    if(HAVE_DINPUT_H)
+      set(SDL_JOYSTICK_DINPUT 1)
+      sdl_link_dependency(joystick LIBS dinput8)
+    endif()
+    if(HAVE_XINPUT_H)
+      set(SDL_JOYSTICK_XINPUT 1)
+      set(HAVE_XINPUT TRUE)
+    endif()
+    if(HAVE_WINDOWS_GAMING_INPUT_H)
+      set(SDL_JOYSTICK_WGI 1)
+    endif()
+    if(HAVE_GAMEINPUT_H)
+      sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/gdk/*.c")
+      set(SDL_JOYSTICK_GAMEINPUT 1)
+    endif()
+    set(HAVE_SDL_JOYSTICK TRUE)
+
+    if(SDL_HAPTIC)
+      if(HAVE_DINPUT_H)
+        sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/windows/*.c")
+        set(SDL_HAPTIC_DINPUT 1)
+        set(HAVE_SDL_HAPTIC TRUE)
+      endif()
+    endif()
+  endif()
+
 elseif(WINDOWS)
   check_c_source_compiles("
     #include <windows.h>
@@ -1930,7 +2060,7 @@ elseif(WINDOWS)
     if(DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700)
         set(USE_WINSDK_DIRECTX TRUE)
     endif()
-    if(NOT MINGW AND NOT USE_WINSDK_DIRECTX)
+    if(NOT MINGW AND NOT CYGWIN AND NOT USE_WINSDK_DIRECTX)
       if("$ENV{DXSDK_DIR}" STREQUAL "")
         message(FATAL_ERROR "DIRECTX requires the \$DXSDK_DIR environment 
variable to be set")
       endif()
@@ -1949,7 +2079,7 @@ elseif(WINDOWS)
     cmake_pop_check_state()
     if(HAVE_D3D9_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR 
HAVE_DINPUT_H)
       set(HAVE_DIRECTX TRUE)
-      if(NOT MINGW AND NOT USE_WINSDK_DIRECTX)
+      if(NOT MINGW AND NOT CYGWIN AND NOT USE_WINSDK_DIRECTX)
         if(CMAKE_SIZEOF_VOID_P EQUAL 8)
           set(PROCESSOR_ARCH "x64")
         else()
@@ -2943,7 +3073,7 @@ if (SDL_DIALOG)
   if(ANDROID)
     sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/android/SDL_androiddialog.c)
     set(HAVE_SDL_DIALOG TRUE)
-  elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
+  elseif((UNIX OR CYGWIN) AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
     sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_unixdialog.c)
     sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_portaldialog.c)
     sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_zenitydialog.c)
@@ -2961,7 +3091,7 @@ if (SDL_DIALOG)
 endif()
 
 sdl_sources("${SDL3_SOURCE_DIR}/src/process/SDL_process.c")
-if(WINDOWS)
+if(WINDOWS AND NOT CYGWIN)
   sdl_glob_sources("${SDL3_SOURCE_DIR}/src/process/windows/*.c")
   set(SDL_PROCESS_WINDOWS 1)
   set(HAVE_SDL_PROCESS TRUE)
--- origsrc/SDL3-3.2.20/cmake/sdlchecks.cmake   2025-06-27 07:43:29.000000000 
+0900
+++ src/SDL3-3.2.20/cmake/sdlchecks.cmake       2025-08-25 15:51:53.858383400 
+0900
@@ -22,6 +22,35 @@ macro(FindLibraryAndSONAME _LIB)
 
     if(APPLE)
       string(REGEX REPLACE "(\\.[0-9]*)\\.[0-9\\.]*dylib$" "\\1.dylib" 
_LIB_REGEXD "${_LIB_JUSTNAME}")
+    elseif(CYGWIN)
+      set(_LIB_LIBDIR "/usr/bin")
+      string(REGEX MATCH "libpulse\\.dll\\.a" LIBPULSE ${_LIB_JUSTNAME})
+      string(REGEX MATCH "libX11\\.dll\\.a" LIBX11 ${_LIB_JUSTNAME})
+      string(REGEX MATCH "libXext\\.dll\\.a" LIBXEXT ${_LIB_JUSTNAME})
+      string(REGEX MATCH "libXcursor\\.dll\\.a" LIBXCURSOR ${_LIB_JUSTNAME})
+      string(REGEX MATCH "libXi\\.dll\\.a" LIBXI ${_LIB_JUSTNAME})
+      string(REGEX MATCH "libXfixes\\.dll\\.a" LIBXFIXES ${_LIB_JUSTNAME})
+      string(REGEX MATCH "libXrandr\\.dll\\.a" LIBXRANDR ${_LIB_JUSTNAME})
+      string(REGEX MATCH "libXrender\\.dll\\.a" LIBXRENDER ${_LIB_JUSTNAME})
+      if(LIBPULSE)
+        set(_LIB_REGEXD "cygpulse-0.dll")
+      elseif(LIBX11)
+        set(_LIB_REGEXD "cygX11-6.dll")
+      elseif(LIBXEXT)
+        set(_LIB_REGEXD "cygXext-6.dll")
+      elseif(LIBXCURSOR)
+        set(_LIB_REGEXD "cygXcursor-1.dll")
+      elseif(LIBXI)
+        set(_LIB_REGEXD "cygXi-6.dll")
+      elseif(LIBXFIXES)
+        set(_LIB_REGEXD "cygXfixes-3.dll")
+      elseif(LIBXRANDR)
+        set(_LIB_REGEXD "cygXrandr-2.dll")
+      elseif(LIBXRENDER)
+        set(_LIB_REGEXD "cygXrender-1.dll")
+      else()
+        message(FATAL_ERROR "Please fix sdlchecks.cmake: " ${_LIB_JUSTNAME})
+      endif()
     else()
       string(REGEX REPLACE "(\\.[0-9]*)\\.[0-9\\.]*$" "\\1" _LIB_REGEXD 
"${_LIB_JUSTNAME}")
     endif()
--- origsrc/SDL3-3.2.20/include/SDL3/SDL_platform_defines.h     2025-02-05 
06:57:41.000000000 +0900
+++ src/SDL3-3.2.20/include/SDL3/SDL_platform_defines.h 2025-08-25 
15:51:53.862384700 +0900
@@ -112,8 +112,7 @@
 #undef SDL_PLATFORM_LINUX
 #endif
 
-#if defined(__unix__) || defined(__unix) || defined(unix)
-
+#if defined(__unix__) || defined(__unix) || defined(unix) || 
defined(__CYGWIN__)
 /**
  * A preprocessor macro that is only defined if compiling for a Unix-like
  * system.
@@ -317,7 +316,7 @@
 #define SDL_PLATFORM_CYGWIN 1
 #endif
 
-#if defined(_WIN32) || defined(SDL_PLATFORM_CYGWIN)
+#if defined(_WIN32)
 
 /**
  * A preprocessor macro that is only defined if compiling for Windows.
--- origsrc/SDL3-3.2.20/include/SDL3/SDL_system.h       2025-01-22 
03:12:25.000000000 +0900
+++ src/SDL3-3.2.20/include/SDL3/SDL_system.h   2025-08-25 15:51:53.865394400 
+0900
@@ -49,7 +49,7 @@ extern "C" {
 /*
  * Platform specific functions for Windows
  */
-#if defined(SDL_PLATFORM_WINDOWS)
+#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN)
 
 typedef struct tagMSG MSG;
 
--- origsrc/SDL3-3.2.20/src/SDL.c       2025-07-12 23:48:56.000000000 +0900
+++ src/SDL3-3.2.20/src/SDL.c   2025-08-25 15:51:53.869395100 +0900
@@ -65,7 +65,7 @@
 
 // Initialization/Cleanup routines
 #include "timer/SDL_timer_c.h"
-#ifdef SDL_PLATFORM_WINDOWS
+#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN)
 extern bool SDL_HelperWindowCreate(void);
 extern void SDL_HelperWindowDestroy(void);
 #endif
@@ -317,7 +317,7 @@ bool SDL_InitSubSystem(SDL_InitFlags fla
     SDL_DBus_Init();
 #endif
 
-#ifdef SDL_PLATFORM_WINDOWS
+#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN)
     if (flags & (SDL_INIT_HAPTIC | SDL_INIT_JOYSTICK)) {
         if (!SDL_HelperWindowCreate()) {
             goto quit_and_error;
@@ -653,7 +653,7 @@ void SDL_Quit(void)
     SDL_bInMainQuit = true;
 
     // Quit all subsystems
-#ifdef SDL_PLATFORM_WINDOWS
+#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN)
     SDL_HelperWindowDestroy();
 #endif
     SDL_QuitSubSystem(SDL_INIT_EVERYTHING);
--- origsrc/SDL3-3.2.20/src/audio/dsp/SDL_dspaudio.c    2025-02-15 
07:16:10.000000000 +0900
+++ src/SDL3-3.2.20/src/audio/dsp/SDL_dspaudio.c        2025-08-25 
15:51:53.873386600 +0900
@@ -166,7 +166,11 @@ static bool DSP_OpenDevice(SDL_AudioDevi
     while ((0x01U << frag_spec) < device->buffer_size) {
         frag_spec++;
     }
+#ifdef __CYGWIN__
+    frag_spec |= 0x00040000; // four fragments for cygwin to avoid choppy sound
+#else
     frag_spec |= 0x00020000; // two fragments, for low latency
+#endif
 
     // Set the audio buffering parameters
 #ifdef DEBUG_AUDIO
--- origsrc/SDL3-3.2.20/src/core/SDL_core_unsupported.c 2025-02-04 
10:03:26.000000000 +0900
+++ src/SDL3-3.2.20/src/core/SDL_core_unsupported.c     2025-08-25 
15:51:53.876396700 +0900
@@ -76,7 +76,7 @@ void SDL_GDKResumeGPU(SDL_GPUDevice *dev
 
 #endif
 
-#if !defined(SDL_PLATFORM_WINDOWS)
+#if !defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
 
 SDL_DECLSPEC bool SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void 
*hInst);
 bool SDL_RegisterApp(const char *name, Uint32 style, void *hInst)
--- origsrc/SDL3-3.2.20/src/core/windows/SDL_windows.c  2025-07-12 
23:48:56.000000000 +0900
+++ src/SDL3-3.2.20/src/core/windows/SDL_windows.c      2025-08-25 
15:51:53.880397700 +0900
@@ -20,7 +20,7 @@
 */
 #include "SDL_internal.h"
 
-#if defined(SDL_PLATFORM_WINDOWS)
+#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN)
 
 #include "SDL_windows.h"
 
--- origsrc/SDL3-3.2.20/src/core/windows/SDL_windows.h  2025-03-20 
13:23:06.000000000 +0900
+++ src/SDL3-3.2.20/src/core/windows/SDL_windows.h      2025-08-25 
15:51:53.884398500 +0900
@@ -74,6 +74,24 @@
 #undef _WIN32_WINNT
 #define _WIN32_WINNT 0xA00
 #define WINVER       _WIN32_WINNT
+
+#elif defined(SDL_PLATFORM_CYGWIN)
+#ifndef STRICT
+#define STRICT 1
+#endif
+#ifndef UNICODE
+#define UNICODE 1
+#endif
+#undef WINVER
+#undef _WIN32_WINNT
+#if defined(SDL_VIDEO_RENDER_D3D12) || defined(HAVE_DXGI1_6_H)
+#define _WIN32_WINNT 0xA00 // For D3D12, 0xA00 is required
+#elif defined(HAVE_SHELLSCALINGAPI_H)
+#define _WIN32_WINNT 0x603 // For DPI support
+#else
+#define _WIN32_WINNT 0x501 // Need 0x410 for AlphaBlend() and 0x500 for 
EnumDisplayDevices(), 0x501 for raw input
+#endif
+#define WINVER _WIN32_WINNT
 #endif
 
 // See https://github.com/libsdl-org/SDL/pull/7607
@@ -92,6 +110,10 @@
 #include <windows.h>
 #include <basetyps.h> // for REFIID with broken mingw.org headers
 #include <mmreg.h>
+#ifdef __CYGWIN__
+#define SDL_WINAPI_FAMILY_PHONE 0
+#define IUnknown_QueryInterface(This,riid,ppvObject) 
(This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#endif
 
 // Routines to convert from UTF8 to native Windows text
 #define WIN_StringToUTF8W(S) SDL_iconv_string("UTF-8", "UTF-16LE", (const char 
*)(S), (SDL_wcslen(S) + 1) * sizeof(WCHAR))
--- origsrc/SDL3-3.2.20/src/dynapi/SDL_dynapi.c 2025-02-07 02:46:15.000000000 
+0900
+++ src/SDL3-3.2.20/src/dynapi/SDL_dynapi.c     2025-08-25 15:51:53.887399000 
+0900
@@ -510,7 +510,7 @@ extern SDL_NORETURN void SDL_ExitProcess
 static void SDL_InitDynamicAPILocked(void)
 {
     // this can't use SDL_getenv_unsafe_REAL, because it might allocate memory 
before the app can set their allocator.
-#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)
+#if defined(WIN32) || defined(_WIN32)
     // We've always used LoadLibraryA for this, so this has never worked with 
Unicode paths on Windows. Sorry.
     char envbuf[512];  // overflows will just report as environment variable 
being unset, but LoadLibraryA has a MAX_PATH of 260 anyhow, apparently.
     const DWORD rc = GetEnvironmentVariableA(SDL_DYNAMIC_API_ENVVAR, envbuf, 
(DWORD) sizeof (envbuf));
--- origsrc/SDL3-3.2.20/src/dynapi/SDL_dynapi_unsupported.h     2025-01-02 
00:45:52.000000000 +0900
+++ src/SDL3-3.2.20/src/dynapi/SDL_dynapi_unsupported.h 2025-08-25 
15:51:53.891400100 +0900
@@ -23,7 +23,7 @@
 #define SDL_dynapi_unsupported_h_
 
 
-#if !defined(SDL_PLATFORM_WINDOWS)
+#if !defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
 typedef struct ID3D12Device ID3D12Device;
 typedef void *SDL_WindowsMessageHook;
 #endif
--- origsrc/SDL3-3.2.20/src/joystick/windows/SDL_dinputjoystick.c       
2025-07-12 23:48:56.000000000 +0900
+++ src/SDL3-3.2.20/src/joystick/windows/SDL_dinputjoystick.c   2025-08-26 
12:09:01.045765300 +0900
@@ -376,6 +376,8 @@ DIEFFECT *CreateRumbleEffectData(Sint16
         FreeRumbleEffectData(effect);
         return NULL;
     }
+    effect->rgdwAxes[0] = DIJOFS_X;
+    effect->rgdwAxes[1] = DIJOFS_Y;
 
     effect->rglDirection = (LONG *)SDL_calloc(effect->cAxes, sizeof(LONG));
     if (!effect->rglDirection) {
@@ -913,26 +915,29 @@ bool SDL_DINPUT_JoystickRumble(SDL_Joyst
         return SDL_Unsupported();
     }
 
-    if (joystick->hwdata->ff_initialized) {
+    if (!joystick->hwdata->ff_initialized) {
+        if (!SDL_DINPUT_JoystickInitRumble(joystick, magnitude)) {
+            return false;
+        }
+        joystick->hwdata->ff_initialized = true;
+    }
+    do {
         DIPERIODIC *periodic = ((DIPERIODIC 
*)joystick->hwdata->ffeffect->lpvTypeSpecificParams);
         periodic->dwMagnitude = CONVERT_MAGNITUDE(magnitude);
+        joystick->hwdata->ffeffect->rglDirection[0] = low_frequency_rumble;
+        joystick->hwdata->ffeffect->rglDirection[1] = high_frequency_rumble;
 
-        result = 
IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref, 
joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_TYPESPECIFICPARAMS));
+        result = 
IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref, 
joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_DIRECTION | 
DIEP_TYPESPECIFICPARAMS));
         if (result == DIERR_INPUTLOST) {
             result = 
IDirectInputDevice8_Acquire(joystick->hwdata->InputDevice);
             if (SUCCEEDED(result)) {
-                result = 
IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref, 
joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_TYPESPECIFICPARAMS));
+                result = 
IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref, 
joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_DIRECTION | 
DIEP_TYPESPECIFICPARAMS));
             }
         }
         if (FAILED(result)) {
             return SetDIerror("IDirectInputDevice8::SetParameters", result);
         }
-    } else {
-        if (!SDL_DINPUT_JoystickInitRumble(joystick, magnitude)) {
-            return false;
-        }
-        joystick->hwdata->ff_initialized = true;
-    }
+    } while (false);
 
     result = IDirectInputEffect_Start(joystick->hwdata->ffeffect_ref, 1, 0);
     if (result == DIERR_INPUTLOST || result == DIERR_NOTEXCLUSIVEACQUIRED) {
--- origsrc/SDL3-3.2.20/src/joystick/windows/SDL_windowsjoystick.c      
2025-01-03 03:25:18.000000000 +0900
+++ src/SDL3-3.2.20/src/joystick/windows/SDL_windowsjoystick.c  2025-08-25 
15:51:53.895401300 +0900
@@ -54,10 +54,14 @@
 
 // local variables
 static bool s_bJoystickThread = false;
+#ifndef __CYGWIN__
 static SDL_Condition *s_condJoystickThread = NULL;
+#endif
 static SDL_Mutex *s_mutexJoyStickEnum = NULL;
+#ifndef __CYGWIN__
 static SDL_Thread *s_joystickThread = NULL;
 static bool s_bJoystickThreadQuit = false;
+#endif
 static Uint64 s_lastDeviceChange = 0;
 static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2L, 0xF16F, 0x11CF, { 0x88, 
0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } };
 
@@ -190,6 +194,7 @@ static bool SDL_CreateDeviceNotification
     return true;
 }
 
+#ifndef __CYGWIN__
 static bool SDL_WaitForDeviceNotification(SDL_DeviceNotificationData *data, 
SDL_Mutex *mutex)
 {
     MSG msg;
@@ -210,6 +215,7 @@ static bool SDL_WaitForDeviceNotificatio
     SDL_LockMutex(mutex);
     return (lastret != -1);
 }
+#endif
 
 #endif // !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
 
@@ -217,6 +223,7 @@ static bool SDL_WaitForDeviceNotificatio
 static SDL_DeviceNotificationData s_notification_data;
 #endif
 
+#ifndef __CYGWIN__
 // Function/thread to scan the system for joysticks.
 static int SDLCALL SDL_JoystickThread(void *_data)
 {
@@ -269,10 +276,12 @@ static int SDLCALL SDL_JoystickThread(vo
 
     return 1;
 }
+#endif
 
 // spin up the thread to detect hotplug of devices
 static bool SDL_StartJoystickThread(void)
 {
+#ifndef __CYGWIN__
     s_mutexJoyStickEnum = SDL_CreateMutex();
     if (!s_mutexJoyStickEnum) {
         return false;
@@ -288,11 +297,13 @@ static bool SDL_StartJoystickThread(void
     if (!s_joystickThread) {
         return false;
     }
+#endif
     return true;
 }
 
 static void SDL_StopJoystickThread(void)
 {
+#ifndef __CYGWIN__
     if (!s_joystickThread) {
         return;
     }
@@ -316,6 +327,7 @@ static void SDL_StopJoystickThread(void)
     s_mutexJoyStickEnum = NULL;
 
     s_joystickThread = NULL;
+#endif
 }
 
 void WINDOWS_AddJoystickDevice(JoyStick_DeviceData *device)
--- origsrc/SDL3-3.2.20/src/render/direct3d11/SDL_render_d3d11.c        
2025-03-06 15:39:31.000000000 +0900
+++ src/SDL3-3.2.20/src/render/direct3d11/SDL_render_d3d11.c    2025-08-25 
15:51:53.899402300 +0900
@@ -18,6 +18,10 @@
      misrepresented as being the original software.
   3. This notice may not be removed or altered from any source distribution.
 */
+#ifdef __CYGWIN__
+#define MESA_EGL_NO_X11_HEADERS
+#endif
+
 #include "SDL_internal.h"
 
 #ifdef SDL_VIDEO_RENDER_D3D11
@@ -921,7 +925,7 @@ static HRESULT D3D11_CreateSwapChain(SDL
             goto done;
         }
     } else {
-#if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK)
+#if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK) || 
defined(SDL_PLATFORM_CYGWIN)
         HWND hwnd = 
(HWND)SDL_GetPointerProperty(SDL_GetWindowProperties(renderer->window), 
SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL);
         if (!hwnd) {
             SDL_SetError("Couldn't get window handle");
--- origsrc/SDL3-3.2.20/src/video/directx/d3d12.h       2024-08-30 
09:33:52.000000000 +0900
+++ src/SDL3-3.2.20/src/video/directx/d3d12.h   2025-08-25 15:51:53.908403900 
+0900
@@ -11,7 +11,9 @@
 
  /* File created by MIDL compiler version 8.01.0628 */
 
-
+#ifdef __CYGWIN__
+#define _WIN32
+#endif
 
 /* verify that the <rpcndr.h> version is high enough to compile this file*/
 #ifndef __REQUIRED_RPCNDR_H_VERSION__
  • [ITP] SDL3 Takashi Yano via Cygwin-apps

Reply via email to