Fix Cygwin building and add CI (#15566)

Co-authored-by: TrueCat17 <truecat17@gmail.com>
Co-authored-by: Anonymous Maarten <anonymous.maarten@gmail.com>
Co-authored-by: Ozkan Sezer <sezeroz@gmail.com>
This commit is contained in:
stahta01
2026-05-15 11:48:24 -04:00
committed by GitHub
parent be97a18d82
commit 6586bebfec
26 changed files with 116 additions and 78 deletions

View File

@@ -43,6 +43,7 @@ class SdlPlatform(Enum):
Haiku = "haiku"
LoongArch64 = "loongarch64"
Msys2 = "msys2"
Cygwin = "cygwin"
Linux = "linux"
MacOS = "macos"
Ios = "ios"
@@ -111,6 +112,7 @@ JOB_SPECS = {
"msys2-mingw64": JobSpec(name="Windows (msys2, mingw64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msys2, artifact="SDL-mingw64", msys2_platform=Msys2Platform.Mingw64, ),
"msys2-clang64": JobSpec(name="Windows (msys2, clang64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msys2, artifact="SDL-mingw64-clang", msys2_platform=Msys2Platform.Clang64, ),
"msys2-ucrt64": JobSpec(name="Windows (msys2, ucrt64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msys2, artifact="SDL-mingw64-ucrt", msys2_platform=Msys2Platform.Ucrt64, ),
"cygwin": JobSpec(name="Cygwin", os=JobOs.WindowsLatest, platform=SdlPlatform.Cygwin, artifact="SDL-cygwin", ),
"msvc-x64": JobSpec(name="Windows (MSVC, x64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-VC-x64", msvc_arch=MsvcArch.X64, msvc_project="VisualC/SDL.sln", ),
"msvc-x86": JobSpec(name="Windows (MSVC, x86)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-VC-x86", msvc_arch=MsvcArch.X86, msvc_project="VisualC/SDL.sln", ),
"msvc-clang-x64": JobSpec(name="Windows (MSVC, clang-cl x64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-clang-cl-x64", msvc_arch=MsvcArch.X64, clang_cl=True, ),
@@ -162,6 +164,7 @@ class StaticLibType(Enum):
class SharedLibType(Enum):
WIN32 = "SDL3.dll"
CYGDLL = "cygSDL3.dll"
SO_0 = "libSDL3.so.0"
SO = "libSDL3.so"
DYLIB = "libSDL3.0.dylib"
@@ -217,6 +220,7 @@ class JobDetails:
intel: bool = False
msys2_msystem: str = ""
msys2_packages: list[str] = dataclasses.field(default_factory=list)
cygwin_packages: list[str] = dataclasses.field(default_factory=list)
werror: bool = True
microsoft_gameinput_version: str = ""
msvc_vcvars_arch: str = ""
@@ -254,6 +258,7 @@ class JobDetails:
"shell": self.shell,
"msys2-msystem": self.msys2_msystem,
"msys2-packages": my_shlex_join(self.msys2_packages),
"cygwin-packages": my_shlex_join(self.cygwin_packages),
"android-ndk": self.android_ndk,
"java": self.java,
"intel": self.intel,
@@ -773,6 +778,24 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool, ctest_args
job.microsoft_gameinput_version = WINDOWS_GAMEINPUT_VERSION
job.cflags.append("-I$GAMEINPUT_INCLUDE")
job.cxxflags.append("-I$GAMEINPUT_INCLUDE")
case SdlPlatform.Cygwin:
job.ccache = False # Missing evict-older-than option
job.clang_tidy = False # error finding files [clang-diagnostic-error] cause might be space in command path
job.test_pkg_config = False # Linefeed issue in test_pkgconfig.sh
job.shell = "bash --noprofile --norc -eo pipefail -o igncr {0}"
job.shared_lib = SharedLibType.CYGDLL
job.static_lib = StaticLibType.A
job.cmake_arguments.append("-DSDLTEST_GDB=ON")
job.cygwin_packages.extend([
"cmake",
"gcc-core",
"gcc-g++",
"gdb",
"ninja",
"pkg-config",
"perl",
"python",
])
case SdlPlatform.Riscos:
job.ccache = False # FIXME: enable when container gets upgrade
# FIXME: Enable SDL_WERROR

View File

@@ -28,6 +28,11 @@ jobs:
with:
msystem: ${{ matrix.platform.msys2-msystem }}
install: ${{ matrix.platform.msys2-packages }}
- name: 'Set up Cygwin'
if: ${{ matrix.platform.platform == 'cygwin' }}
uses: cygwin/cygwin-install-action@master
with:
packages: ${{ matrix.platform.cygwin-packages }}
- name: 'About this job'
run: |
echo "key=${{ matrix.platform.key }}"

View File

@@ -369,9 +369,9 @@ dep_option(SDL_WAYLAND_LIBDECOR_SHARED "Dynamically load libdecor support" O
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 "WINDOWS OR CYGWIN;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)
@@ -565,19 +565,6 @@ else()
endif()
endif()
if(CYGWIN)
# We build SDL on cygwin without the UNIX emulation layer
sdl_include_directories(PUBLIC SYSTEM "/usr/include/mingw")
cmake_push_check_state()
string(APPEND CMAKE_REQUIRED_FLAGS " -mno-cygwin")
check_c_source_compiles("int main(int argc, char **argv) { return 0; }"
HAVE_GCC_NO_CYGWIN)
cmake_pop_check_state()
if(HAVE_GCC_NO_CYGWIN)
sdl_shared_link_options("-mno-cygwin")
endif()
endif()
# General includes
sdl_compile_definitions(PRIVATE "USING_GENERATED_CONFIG_H")
sdl_include_directories(
@@ -1165,7 +1152,7 @@ if(SDL_LIBC)
vsnprintf vsscanf
wcsnlen wcscmp wcsdup wcslcat wcslcpy wcslen wcsncmp wcsstr wcstol
)
if(WINDOWS)
if(WINDOWS OR CYGWIN)
list(APPEND symbols_to_check
_copysign _fseeki64 _strrev _ui64toa _uitoa _ultoa _wcsdup
)
@@ -1444,7 +1431,7 @@ if(SDL_CAMERA)
#endif()
endif()
if(UNIX OR APPLE)
if((UNIX OR APPLE) AND NOT CYGWIN)
# Relevant for Unix/Darwin only
set(DYNAPI_NEEDS_DLOPEN 1)
CheckDLOPEN()
@@ -1843,7 +1830,7 @@ elseif(EMSCRIPTEN)
CheckPTHREAD()
CheckLibUnwind()
elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
elseif(UNIX AND NOT (APPLE OR RISCOS OR HAIKU OR CYGWIN))
set(SDL_DISABLE_DLOPEN_NOTES TRUE)
if(SDL_DLOPEN_NOTES)
@@ -2234,7 +2221,7 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
set (HAVE_VSNPRINTF 0)
set (USE_POSIX_SPAWN 1)
endif()
elseif(WINDOWS)
elseif(WINDOWS OR CYGWIN)
enable_language(CXX)
check_c_source_compiles("
#include <windows.h>
@@ -2268,7 +2255,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 OR 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()
@@ -2287,7 +2274,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 OR CYGWIN) AND NOT USE_WINSDK_DIRECTX)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(PROCESSOR_ARCH "x64")
else()
@@ -4104,13 +4091,13 @@ if(SDL_SHARED)
RESOURCE "${SDL_FRAMEWORK_RESOURCES}"
)
endif()
elseif(UNIX AND NOT ANDROID)
elseif(UNIX AND NOT (ANDROID OR CYGWIN))
set_target_properties(SDL3-shared PROPERTIES
VERSION "${SDL_SO_VERSION}"
SOVERSION "${SDL_SO_VERSION_MAJOR}"
)
else()
if(WINDOWS OR CYGWIN)
if(WINDOWS)
set_target_properties(SDL3-shared PROPERTIES
PREFIX ""
)

View File

@@ -425,7 +425,7 @@ function(SDL_PrintSummary)
message(STATUS "")
endif()
if(UNIX AND NOT (ANDROID OR APPLE OR EMSCRIPTEN OR HAIKU OR RISCOS OR DJGPP))
if(UNIX AND NOT (ANDROID OR APPLE OR EMSCRIPTEN OR HAIKU OR RISCOS OR DJGPP OR CYGWIN))
if(NOT (HAVE_X11 OR HAVE_WAYLAND))
if(NOT SDL_UNIX_CONSOLE_BUILD)
message(FATAL_ERROR

View File

@@ -4,6 +4,10 @@ function(SDL_DetectCMakePlatform)
set(sdl_cmake_platform Windows)
elseif(PSP)
set(sdl_cmake_platform psp)
elseif(CYGWIN AND NOT MSYS)
set(sdl_cmake_platform Cygwin)
elseif(MSYS)
set(sdl_cmake_platform Msys)
elseif(APPLE)
if(CMAKE_SYSTEM_NAME MATCHES ".*(Darwin|MacOS).*")
set(sdl_cmake_platform macOS)

View File

@@ -84,7 +84,7 @@
# else
# define GLAPIENTRY __stdcall
# endif
#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */
#elif defined(__CYGWIN__) /* && defined(USE_OPENGL32) */ /* use native windows opengl32 */
# define GLAPI extern
# define GLAPIENTRY __stdcall
#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))

View File

@@ -317,7 +317,7 @@
#define SDL_PLATFORM_CYGWIN 1
#endif
#if (defined(_WIN32) || defined(SDL_PLATFORM_CYGWIN)) && !defined(__NGAGE__)
#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(__NGAGE__)
/**
* A preprocessor macro that is only defined if compiling for Windows.
@@ -417,7 +417,7 @@
#define SDL_PLATFORM_WIN32 1
#endif
#endif /* defined(_WIN32) || defined(SDL_PLATFORM_CYGWIN) */
#endif /* (defined(_WIN32) || defined(__CYGWIN__)) && !defined(__NGAGE__) */
/* This is to support generic "any GDK" separate from a platform-specific GDK */

View File

@@ -739,7 +739,7 @@ typedef Sint64 SDL_Time;
* <inttypes.h> should define these but this is not true all platforms.
* (for example win32) */
#ifndef SDL_PRIs64
#if defined(SDL_PLATFORM_WINDOWS)
#if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
#define SDL_PRIs64 "I64d"
#elif defined(PRId64)
#define SDL_PRIs64 PRId64
@@ -750,7 +750,7 @@ typedef Sint64 SDL_Time;
#endif
#endif
#ifndef SDL_PRIu64
#if defined(SDL_PLATFORM_WINDOWS)
#if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
#define SDL_PRIu64 "I64u"
#elif defined(PRIu64)
#define SDL_PRIu64 PRIu64
@@ -761,7 +761,7 @@ typedef Sint64 SDL_Time;
#endif
#endif
#ifndef SDL_PRIx64
#if defined(SDL_PLATFORM_WINDOWS)
#if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
#define SDL_PRIx64 "I64x"
#elif defined(PRIx64)
#define SDL_PRIx64 PRIx64
@@ -772,7 +772,7 @@ typedef Sint64 SDL_Time;
#endif
#endif
#ifndef SDL_PRIX64
#if defined(SDL_PLATFORM_WINDOWS)
#if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
#define SDL_PRIX64 "I64X"
#elif defined(PRIX64)
#define SDL_PRIX64 PRIX64
@@ -811,7 +811,7 @@ typedef Sint64 SDL_Time;
#endif
#endif
/* Specifically for the `long long` -- SDL-specific. */
#ifdef SDL_PLATFORM_WINDOWS
#if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
#ifndef SDL_NOLONGLONG
SDL_COMPILE_TIME_ASSERT(longlong_size64, sizeof(long long) == 8); /* using I64 for windows - make sure `long long` is 64 bits. */
#endif

View File

@@ -48,7 +48,7 @@
/* Thread synchronization primitives */
#include <SDL3/SDL_atomic.h>
#if defined(SDL_PLATFORM_WINDOWS)
#if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
#include <process.h> /* _beginthreadex() and _endthreadex() */
#endif
@@ -296,7 +296,7 @@ extern SDL_DECLSPEC SDL_Thread * SDLCALL SDL_CreateThreadWithProperties(SDL_Prop
/* The real implementation, hidden from the wiki, so it can show this as real functions that don't have macro magic. */
#ifndef SDL_WIKI_DOCUMENTATION_SECTION
# if defined(SDL_PLATFORM_WINDOWS)
# if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
# ifndef SDL_BeginThreadFunction
# define SDL_BeginThreadFunction _beginthreadex
# endif

View File

@@ -793,6 +793,8 @@ const char *SDL_GetPlatform(void)
return "Solaris";
#elif defined(SDL_PLATFORM_WIN32)
return "Windows";
#elif defined(SDL_PLATFORM_CYGWIN)
return "Cygwin";
#elif defined(SDL_PLATFORM_WINGDK)
return "WinGDK";
#elif defined(SDL_PLATFORM_XBOXONE)

View File

@@ -773,7 +773,7 @@ static bool mgmtthrtask_PrepDevice(void *userdata)
ret = IAudioClient2_SetClientProperties(client2, &audioProps);
if (FAILED(ret)) {
// This isn't fatal, let's log it instead of failing
SDL_LogWarn(SDL_LOG_CATEGORY_AUDIO, "IAudioClient2_SetClientProperties failed: 0x%lx", ret);
SDL_LogWarn(SDL_LOG_CATEGORY_AUDIO, "IAudioClient2_SetClientProperties failed: 0x%" SDL_PRIxSLONG, ret);
}
IAudioClient2_Release(client2);
}

View File

@@ -146,6 +146,16 @@
#define SDL_tcsstr SDL_strstr
#endif
#if defined(__LP64__)
#define SDL_PRIdSLONG "d"
#define SDL_PRIuULONG "u"
#define SDL_PRIxSLONG "x"
#else
#define SDL_PRIdSLONG "ld"
#define SDL_PRIuULONG "lu"
#define SDL_PRIxSLONG "lx"
#endif
// Set up for C function definitions, even when using C++
#ifdef __cplusplus
extern "C" {

View File

@@ -1035,7 +1035,7 @@ void windows_ShowFileDialog(void *ptr)
const char *opts[1] = { NULL };
callback(userdata, opts, getFilterIndex(dialog.nFilterIndex));
} else {
SDL_SetError("Windows error, CommDlgExtendedError: %ld", pCommDlgExtendedError());
SDL_SetError("Windows error, CommDlgExtendedError: %" SDL_PRIuULONG, pCommDlgExtendedError());
callback(userdata, NULL, -1);
}
}

View File

@@ -48,7 +48,7 @@
// These headers have system specific definitions, so aren't included above
#include <SDL3/SDL_vulkan.h>
#if defined(WIN32) || defined(_WIN32) || defined(SDL_PLATFORM_CYGWIN)
#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN 1
#endif
@@ -451,7 +451,7 @@ Sint32 SDL_DYNAPI_entry(Uint32 apiver, void *table, Uint32 tablesize)
// Obviously we can't use SDL_LoadObject() to load SDL. :)
// Also obviously, we never close the loaded library, once we accept it.
#if defined(WIN32) || defined(_WIN32) || defined(SDL_PLATFORM_CYGWIN)
#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)
static HMODULE sdlapi_lib = NULL; // The handle to the other SDL library, loaded with SDL_DYNAMIC_API_ENVVAR
static SDL_INLINE void unload_sdlapi_library(void)
@@ -509,7 +509,7 @@ static void dynapi_warn(const char *msg)
const char *caption = "SDL Dynamic API Failure!";
(void)caption;
// SDL_ShowSimpleMessageBox() is a too heavy for here.
#if (defined(WIN32) || defined(_WIN32) || defined(SDL_PLATFORM_CYGWIN)) && !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
#if (defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)) && !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
MessageBoxA(NULL, msg, caption, MB_OK | MB_ICONERROR);
#elif defined(HAVE_STDIO_H)
fprintf(stderr, "\n\n%s\n%s\n\n", caption, msg);

View File

@@ -9036,7 +9036,7 @@ static bool D3D12_INTERNAL_GetAdapterByLuid(LUID luid, IDXGIFactory1 *factory, I
IDXGIAdapter1 *adapter;
res = IDXGIFactory1_EnumAdapters1(factory, adapterIndex, &adapter);
if (FAILED(res)) {
SDL_LogError(SDL_LOG_CATEGORY_GPU, "Failed to get an adapter when iterating, i: %d, res: %ld", adapterIndex, res);
SDL_LogError(SDL_LOG_CATEGORY_GPU, "Failed to get an adapter when iterating, i: %d, res: %" SDL_PRIdSLONG, adapterIndex, res);
return false;
}
@@ -9044,7 +9044,7 @@ static bool D3D12_INTERNAL_GetAdapterByLuid(LUID luid, IDXGIFactory1 *factory, I
res = IDXGIAdapter1_GetDesc1(adapter, &adapterDesc);
if (FAILED(res)) {
IDXGIAdapter1_Release(adapter);
SDL_LogError(SDL_LOG_CATEGORY_GPU, "Failed to get description of adapter, i: %d, res %ld", adapterIndex, res);
SDL_LogError(SDL_LOG_CATEGORY_GPU, "Failed to get description of adapter, i: %d, res %" SDL_PRIdSLONG, adapterIndex, res);
return false;
}
if (SDL_memcmp(&adapterDesc.AdapterLuid, &luid, sizeof(luid)) == 0) {

View File

@@ -45,7 +45,7 @@ typedef LONG NTSTATUS;
#define _WIN32_WINNT_WIN8 0x0602
#endif
#ifdef __CYGWIN__
#if defined(__CYGWIN__) && !defined(HIDAPI_USING_SDL_RUNTIME)
#include <ntdef.h>
#include <wctype.h>
#define _wcsdup wcsdup

View File

@@ -20,7 +20,7 @@
*/
#include "SDL_internal.h"
#if defined(SDL_PLATFORM_WINDOWS)
#if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
#include "../core/windows/SDL_windows.h"
#else
#include <unistd.h>
@@ -62,7 +62,7 @@ struct SDL_IOStream
#include "../core/android/SDL_android.h"
#endif
#if defined(SDL_PLATFORM_WINDOWS)
#if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
typedef struct IOStreamWindowsData
{
@@ -478,9 +478,7 @@ SDL_IOStream *SDL_IOFromHandle(HANDLE handle, const char *mode, bool autoclose)
return iostr;
}
#endif // defined(SDL_PLATFORM_WINDOWS)
#if !defined(SDL_PLATFORM_WINDOWS)
#else
// Functions to read/write file descriptors. Not used for windows.
@@ -672,9 +670,9 @@ SDL_IOStream *SDL_IOFromFD(int fd, bool autoclose)
return iostr;
}
#endif // !defined(SDL_PLATFORM_WINDOWS)
#endif // SDL_PLATFORM_WINDOWS && !SDL_PLATFORM_CYGWIN
#if defined(HAVE_STDIO_H) && !defined(SDL_PLATFORM_WINDOWS)
#if defined(HAVE_STDIO_H) && !(defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN))
// Functions to read/write stdio file pointers. Not used for windows.
@@ -871,7 +869,7 @@ SDL_IOStream *SDL_IOFromFP(FILE *fp, bool autoclose)
return iostr;
}
#endif // !HAVE_STDIO_H && !defined(SDL_PLATFORM_WINDOWS)
#endif // HAVE_STDIO_H && !SDL_PLATFORM_WINDOWS && !SDL_PLATFORM_CYGWIN
// Functions to read/write memory pointers
@@ -965,7 +963,7 @@ static bool SDLCALL mem_close(void *userdata)
// Functions to create SDL_IOStream structures from various data sources
// private platforms might define SKIP_STDIO_DIR_TEST in their build configs, too.
#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_EMSCRIPTEN)
#if (defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)) || defined(SDL_PLATFORM_EMSCRIPTEN)
#define SKIP_STDIO_DIR_TEST 1
#endif
@@ -1101,7 +1099,7 @@ SDL_IOStream *SDL_IOFromFile(const char *file, const char *mode)
iostr = SDL_IOFromFP(fp, true);
}
#elif defined(SDL_PLATFORM_WINDOWS)
#elif defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
HANDLE handle = windows_file_open(file, mode);
if (handle != INVALID_HANDLE_VALUE) {
iostr = SDL_IOFromHandle(handle, mode, true);

View File

@@ -23,7 +23,7 @@
#ifndef SDL_iostream_c_h_
#define SDL_iostream_c_h_
#if defined(SDL_PLATFORM_WINDOWS)
#if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
SDL_IOStream *SDL_IOFromHandle(HANDLE handle, const char *mode, bool autoclose);
#else
#if defined(HAVE_STDIO_H)

View File

@@ -706,12 +706,12 @@ static void RAWINPUT_InitWindowsGamingInput(RAWINPUT_DeviceContext *ctx)
hr = __x_ABI_CWindows_CGaming_CInput_CIGamepadStatics_add_GamepadAdded(wgi_state.gamepad_statics, &gamepad_added.iface, &wgi_state.gamepad_added_token);
if (!SUCCEEDED(hr)) {
SDL_SetError("add_GamepadAdded() failed: 0x%lx", hr);
SDL_SetError("add_GamepadAdded() failed: 0x%" SDL_PRIxSLONG, hr);
}
hr = __x_ABI_CWindows_CGaming_CInput_CIGamepadStatics_add_GamepadRemoved(wgi_state.gamepad_statics, &gamepad_removed.iface, &wgi_state.gamepad_removed_token);
if (!SUCCEEDED(hr)) {
SDL_SetError("add_GamepadRemoved() failed: 0x%lx", hr);
SDL_SetError("add_GamepadRemoved() failed: 0x%" SDL_PRIxSLONG, hr);
}
}
}
@@ -1508,7 +1508,7 @@ static bool RAWINPUT_JoystickRumbleTriggers(SDL_Joystick *joystick, Uint16 left_
WindowsGamingInputGamepadState *gamepad_state = ctx->wgi_slot;
HRESULT hr = __x_ABI_CWindows_CGaming_CInput_CIGamepad_put_Vibration(gamepad_state->gamepad, ctx->vibration);
if (!SUCCEEDED(hr)) {
return SDL_SetError("Setting vibration failed: 0x%lx", hr);
return SDL_SetError("Setting vibration failed: 0x%" SDL_PRIxSLONG, hr);
}
ctx->triggers_rumbling = (left_rumble > 0 || right_rumble > 0);
return true;

View File

@@ -151,7 +151,7 @@ bool SDL_TimeToDateTime(SDL_Time ticks, SDL_DateTime *dt, bool localTime)
}
}
return SDL_SetError("SDL_DateTime conversion failed (%lu)", GetLastError());
return SDL_SetError("SDL_DateTime conversion failed (%" SDL_PRIuULONG ")", GetLastError());
}
#endif // SDL_TIME_WINDOWS

View File

@@ -37,8 +37,15 @@
#define WINAPI_PARTITION_GAMES 0
#endif // WINAPI_PARTITION_GAMES
#ifdef __CYGWIN__
// generated header d3d12.h wants to see _WIN32 defined in order to believe it's targeting windows
#define _WIN32 1
#endif
#define COBJMACROS
#include "d3d12.h"
#ifdef __CYGWIN__
#undef _WIN32
#endif
#include <dxgi1_6.h>
#include <dxgidebug.h>

View File

@@ -78,7 +78,7 @@ static RawInputIterateResult IterateRawInputThread(void)
} else if (wait_status == WAIT_INPUT) {
return RINP_CONTINUE;
} else {
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Raw input thread exiting, unexpected wait result: %lu", wait_status);
SDL_LogWarn(SDL_LOG_CATEGORY_INPUT, "Raw input thread exiting, unexpected wait result: %" SDL_PRIuULONG, wait_status);
return RINP_QUIT;
}
}

View File

@@ -1771,16 +1771,16 @@ static STDMETHODIMP SDLDropTarget_DragEnter(SDLDropTarget *target,
POINTL pt, DWORD *pdwEffect)
{
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In DragEnter at %ld, %ld", pt.x, pt.y);
". In DragEnter at %" SDL_PRIdSLONG ", %" SDL_PRIdSLONG, pt.x, pt.y);
*pdwEffect = DROPEFFECT_COPY;
POINT pnt = { pt.x, pt.y };
if (ScreenToClient(target->hwnd, &pnt)) {
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In DragEnter at %ld, %ld => window %u at %ld, %ld", pt.x, pt.y, target->window->id, pnt.x, pnt.y);
". In DragEnter at %" SDL_PRIdSLONG ", %" SDL_PRIdSLONG " => window %u at %" SDL_PRIdSLONG ", %" SDL_PRIdSLONG, pt.x, pt.y, target->window->id, pnt.x, pnt.y);
SDL_SendDropPosition(target->window, pnt.x, pnt.y);
} else {
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In DragEnter at %ld, %ld => nil, nil", pt.x, pt.y);
". In DragEnter at %" SDL_PRIdSLONG ", %" SDL_PRIdSLONG " => nil, nil", pt.x, pt.y);
}
return S_OK;
}
@@ -1790,16 +1790,16 @@ static STDMETHODIMP SDLDropTarget_DragOver(SDLDropTarget *target,
POINTL pt, DWORD *pdwEffect)
{
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In DragOver at %ld, %ld", pt.x, pt.y);
". In DragOver at %" SDL_PRIdSLONG ", %" SDL_PRIdSLONG, pt.x, pt.y);
*pdwEffect = DROPEFFECT_COPY;
POINT pnt = { pt.x, pt.y };
if (ScreenToClient(target->hwnd, &pnt)) {
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In DragOver at %ld, %ld => window %u at %ld, %ld", pt.x, pt.y, target->window->id, pnt.x, pnt.y);
". In DragOver at %" SDL_PRIdSLONG ", %" SDL_PRIdSLONG " => window %u at %" SDL_PRIdSLONG ", %" SDL_PRIdSLONG, pt.x, pt.y, target->window->id, pnt.x, pnt.y);
SDL_SendDropPosition(target->window, pnt.x, pnt.y);
} else {
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In DragOver at %ld, %ld => nil, nil", pt.x, pt.y);
". In DragOver at %" SDL_PRIdSLONG ", %" SDL_PRIdSLONG " => nil, nil", pt.x, pt.y);
}
return S_OK;
}
@@ -1820,11 +1820,11 @@ static STDMETHODIMP SDLDropTarget_Drop(SDLDropTarget *target,
POINT pnt = { pt.x, pt.y };
if (ScreenToClient(target->hwnd, &pnt)) {
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In Drop at %ld, %ld => window %u at %ld, %ld", pt.x, pt.y, target->window->id, pnt.x, pnt.y);
". In Drop at %" SDL_PRIdSLONG ", %" SDL_PRIdSLONG " => window %u at %" SDL_PRIdSLONG ", %" SDL_PRIdSLONG, pt.x, pt.y, target->window->id, pnt.x, pnt.y);
SDL_SendDropPosition(target->window, pnt.x, pnt.y);
} else {
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In Drop at %ld, %ld => nil, nil", pt.x, pt.y);
". In Drop at %" SDL_PRIdSLONG ", %" SDL_PRIdSLONG " => nil, nil", pt.x, pt.y);
}
{
@@ -1832,7 +1832,7 @@ static STDMETHODIMP SDLDropTarget_Drop(SDLDropTarget *target,
HRESULT hres;
hres = pDataObject->lpVtbl->EnumFormatEtc(pDataObject, DATADIR_GET, &pEnumFormatEtc);
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In Drop for EnumFormatEtc, HRESULT is %08lx", hres);
". In Drop for EnumFormatEtc, HRESULT is %08" SDL_PRIxSLONG, hres);
if (hres == S_OK) {
FORMATETC fetc;
while (pEnumFormatEtc->lpVtbl->Next(pEnumFormatEtc, 1, &fetc, NULL) == S_OK) {
@@ -1864,7 +1864,7 @@ static STDMETHODIMP SDLDropTarget_Drop(SDLDropTarget *target,
STGMEDIUM med;
HRESULT hres = pDataObject->lpVtbl->GetData(pDataObject, &fetc, &med);
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In Drop File for GetData, format %08x '%s', HRESULT is %08lx",
". In Drop File for GetData, format %08x '%s', HRESULT is %08" SDL_PRIxSLONG,
fetc.cfFormat, format_mime, hres);
if (SUCCEEDED(hres)) {
const size_t bsize = GlobalSize(med.hGlobal);
@@ -1912,7 +1912,7 @@ static STDMETHODIMP SDLDropTarget_Drop(SDLDropTarget *target,
STGMEDIUM med;
HRESULT hres = pDataObject->lpVtbl->GetData(pDataObject, &fetc, &med);
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In Drop Text for GetData, format %08x '%s', HRESULT is %08lx",
". In Drop Text for GetData, format %08x '%s', HRESULT is %08" SDL_PRIxSLONG,
fetc.cfFormat, format_mime, hres);
if (SUCCEEDED(hres)) {
const size_t bsize = GlobalSize(med.hGlobal);
@@ -1958,7 +1958,7 @@ static STDMETHODIMP SDLDropTarget_Drop(SDLDropTarget *target,
STGMEDIUM med;
HRESULT hres = pDataObject->lpVtbl->GetData(pDataObject, &fetc, &med);
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In Drop Text for GetData, format %08x '%s', HRESULT is %08lx",
". In Drop Text for GetData, format %08x '%s', HRESULT is %08" SDL_PRIxSLONG,
fetc.cfFormat, format_mime, hres);
if (SUCCEEDED(hres)) {
const size_t bsize = GlobalSize(med.hGlobal);
@@ -2012,7 +2012,7 @@ static STDMETHODIMP SDLDropTarget_Drop(SDLDropTarget *target,
STGMEDIUM med;
HRESULT hres = pDataObject->lpVtbl->GetData(pDataObject, &fetc, &med);
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In Drop Text for GetData, format %08x '%s', HRESULT is %08lx",
". In Drop Text for GetData, format %08x '%s', HRESULT is %08" SDL_PRIxSLONG,
fetc.cfFormat, format_mime, hres);
if (SUCCEEDED(hres)) {
const size_t bsize = GlobalSize(med.hGlobal);
@@ -2058,7 +2058,7 @@ static STDMETHODIMP SDLDropTarget_Drop(SDLDropTarget *target,
STGMEDIUM med;
HRESULT hres = pDataObject->lpVtbl->GetData(pDataObject, &fetc, &med);
SDL_LogTrace(SDL_LOG_CATEGORY_INPUT,
". In Drop File for GetData, format %08x '%s', HRESULT is %08lx",
". In Drop File for GetData, format %08x '%s', HRESULT is %08" SDL_PRIxSLONG,
fetc.cfFormat, format_mime, hres);
if (SUCCEEDED(hres)) {
const size_t bsize = GlobalSize(med.hGlobal);

View File

@@ -374,7 +374,7 @@ if(MACOS)
testnativecocoa.m
testnativex11.c
)
elseif(WINDOWS)
elseif(WINDOWS OR CYGWIN)
add_sdl_test_executable(testnative BUILD_DEPENDENT NEEDS_RESOURCES TESTUTILS SOURCES testnative.c testnativew32.c)
elseif(HAVE_X11 OR HAVE_WAYLAND)
add_sdl_test_executable(testnative BUILD_DEPENDENT NEEDS_RESOURCES TESTUTILS SOURCES testnative.c)
@@ -671,7 +671,7 @@ function(add_sdl_test TEST TARGET)
COMMAND ${command}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
if(WIN32 AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.27")
if((WIN32 OR CYGWIN) AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.27")
set_property(TEST ${TEST} APPEND PROPERTY ENVIRONMENT_MODIFICATION "PATH=path_list_prepend:$<TARGET_RUNTIME_DLL_DIRS:${TARGET}>")
endif()
if(NOT notrackmem)

View File

@@ -107,7 +107,7 @@ int main(int argc, char *argv[]) {
if (print_arguments) {
int print_i;
#ifdef SDL_PLATFORM_WINDOWS
#if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
/* reopen stdout as binary to prevent newline conversion */
_setmode(_fileno(stdout), _O_BINARY);
#endif
@@ -145,7 +145,7 @@ int main(int argc, char *argv[]) {
continue;
}
#ifdef SDL_PLATFORM_WINDOWS
#if defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
if (strerror_s(error, sizeof(error), errno) != 0) {
SDL_strlcpy(error, "Unknown error", sizeof(error));
}

View File

@@ -934,7 +934,9 @@ static int SDLCALL stdlib_sscanf(void *arg)
#pragma GCC diagnostic pop
#endif
#ifdef _WIN64
#if defined(SDL_PLATFORM_CYGWIN)
#define SIZE_FORMAT "zu"
#elif defined(_WIN64)
#define SIZE_FORMAT "I64u"
#elif defined(SDL_PLATFORM_WIN32)
#define SIZE_FORMAT "I32u"