From f91a7475490aceb7cb190894bab89896a2f462e3 Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sun, 8 Jan 2023 00:40:09 +0100
Subject: [PATCH] include: SDL_dynapi.h depends on platform defines
---
VisualC-GDK/SDL/SDL.vcxproj | 1 +
VisualC-GDK/SDL/SDL.vcxproj.filters | 3 +
VisualC-WinRT/SDL-UWP.vcxproj | 1 +
VisualC-WinRT/SDL-UWP.vcxproj.filters | 3 +
VisualC/SDL/SDL.vcxproj | 1 +
VisualC/SDL/SDL.vcxproj.filters | 3 +
docs/README-porting.md | 2 +-
include/SDL3/SDL.h | 1 +
include/SDL3/SDL_atomic.h | 2 +-
include/SDL3/SDL_oldnames.h | 2 +-
include/SDL3/SDL_opengles.h | 2 +-
include/SDL3/SDL_opengles2.h | 2 +-
include/SDL3/SDL_platform.h | 181 +--------------
include/SDL3/SDL_platform_defines.h | 210 ++++++++++++++++++
include/SDL3/SDL_stdinc.h | 2 +-
include/SDL3/SDL_syswm.h | 2 +-
include/build_config/SDL_build_config.h | 2 +-
include/build_config/SDL_build_config.h.cmake | 2 +-
.../build_config/SDL_build_config_android.h | 2 +-
.../SDL_build_config_emscripten.h | 2 +-
include/build_config/SDL_build_config_ios.h | 2 +-
include/build_config/SDL_build_config_macos.h | 2 +-
.../build_config/SDL_build_config_minimal.h | 2 +-
include/build_config/SDL_build_config_ngage.h | 2 +-
.../build_config/SDL_build_config_windows.h | 2 +-
.../build_config/SDL_build_config_wingdk.h | 2 +-
include/build_config/SDL_build_config_winrt.h | 2 +-
include/build_config/SDL_build_config_xbox.h | 2 +-
src/SDL_internal.h | 7 +-
29 files changed, 249 insertions(+), 200 deletions(-)
create mode 100644 include/SDL3/SDL_platform_defines.h
diff --git a/VisualC-GDK/SDL/SDL.vcxproj b/VisualC-GDK/SDL/SDL.vcxproj
index d6df2314de51..0481c83e14db 100644
--- a/VisualC-GDK/SDL/SDL.vcxproj
+++ b/VisualC-GDK/SDL/SDL.vcxproj
@@ -332,6 +332,7 @@
<ClInclude Include="..\..\include\SDL3\SDL_opengles2_khrplatform.h" />
<ClInclude Include="..\..\include\SDL3\SDL_pixels.h" />
<ClInclude Include="..\..\include\SDL3\SDL_platform.h" />
+ <ClInclude Include="..\..\include\SDL3\SDL_platform_defines.h" />
<ClInclude Include="..\..\include\SDL3\SDL_power.h" />
<ClInclude Include="..\..\include\SDL3\SDL_quit.h" />
<ClInclude Include="..\..\include\SDL3\SDL_rect.h" />
diff --git a/VisualC-GDK/SDL/SDL.vcxproj.filters b/VisualC-GDK/SDL/SDL.vcxproj.filters
index 4db42dd26ddd..bc84abc5e69e 100644
--- a/VisualC-GDK/SDL/SDL.vcxproj.filters
+++ b/VisualC-GDK/SDL/SDL.vcxproj.filters
@@ -300,6 +300,9 @@
<ClInclude Include="..\..\include\SDL3\SDL_platform.h">
<Filter>API Headers</Filter>
</ClInclude>
+ <ClInclude Include="..\..\include\SDL3\SDL_platform_defines.h">
+ <Filter>API Headers</Filter>
+ </ClInclude>
<ClInclude Include="..\..\include\SDL3\SDL_power.h">
<Filter>API Headers</Filter>
</ClInclude>
diff --git a/VisualC-WinRT/SDL-UWP.vcxproj b/VisualC-WinRT/SDL-UWP.vcxproj
index 04b21ff445ad..0ca94fdc2cf8 100644
--- a/VisualC-WinRT/SDL-UWP.vcxproj
+++ b/VisualC-WinRT/SDL-UWP.vcxproj
@@ -70,6 +70,7 @@
<ClInclude Include="..\include\SDL3\SDL_opengles2.h" />
<ClInclude Include="..\include\SDL3\SDL_pixels.h" />
<ClInclude Include="..\include\SDL3\SDL_platform.h" />
+ <ClInclude Include="..\include\SDL3\SDL_platform_defines.h" />
<ClInclude Include="..\include\SDL3\SDL_power.h" />
<ClInclude Include="..\include\SDL3\SDL_quit.h" />
<ClInclude Include="..\include\SDL3\SDL_rect.h" />
diff --git a/VisualC-WinRT/SDL-UWP.vcxproj.filters b/VisualC-WinRT/SDL-UWP.vcxproj.filters
index 7127c2c191f7..c6941033ac42 100644
--- a/VisualC-WinRT/SDL-UWP.vcxproj.filters
+++ b/VisualC-WinRT/SDL-UWP.vcxproj.filters
@@ -108,6 +108,9 @@
<ClInclude Include="..\include\SDL3\SDL_platform.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\include\SDL3\SDL_platform_defines.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
<ClInclude Include="..\include\SDL3\SDL_power.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/VisualC/SDL/SDL.vcxproj b/VisualC/SDL/SDL.vcxproj
index 756ea5934c4e..b9ff71973c96 100644
--- a/VisualC/SDL/SDL.vcxproj
+++ b/VisualC/SDL/SDL.vcxproj
@@ -278,6 +278,7 @@
<ClInclude Include="..\..\include\SDL3\SDL_opengles2_khrplatform.h" />
<ClInclude Include="..\..\include\SDL3\SDL_pixels.h" />
<ClInclude Include="..\..\include\SDL3\SDL_platform.h" />
+ <ClInclude Include="..\..\include\SDL3\SDL_platform_defines.h" />
<ClInclude Include="..\..\include\SDL3\SDL_power.h" />
<ClInclude Include="..\..\include\SDL3\SDL_quit.h" />
<ClInclude Include="..\..\include\SDL3\SDL_rect.h" />
diff --git a/VisualC/SDL/SDL.vcxproj.filters b/VisualC/SDL/SDL.vcxproj.filters
index acb558a16627..8897d2fc8332 100644
--- a/VisualC/SDL/SDL.vcxproj.filters
+++ b/VisualC/SDL/SDL.vcxproj.filters
@@ -297,6 +297,9 @@
<ClInclude Include="..\..\include\SDL3\SDL_platform.h">
<Filter>API Headers</Filter>
</ClInclude>
+ <ClInclude Include="..\..\include\SDL3\SDL_platform_defines.h">
+ <Filter>API Headers</Filter>
+ </ClInclude>
<ClInclude Include="..\..\include\SDL3\SDL_power.h">
<Filter>API Headers</Filter>
</ClInclude>
diff --git a/docs/README-porting.md b/docs/README-porting.md
index 9bd24568d33c..e2e4d0faa77f 100644
--- a/docs/README-porting.md
+++ b/docs/README-porting.md
@@ -6,7 +6,7 @@ Porting
The first thing you have to do when porting to a new platform, is look at
include/SDL_platform.h and create an entry there for your operating system.
The standard format is "__PLATFORM__", where PLATFORM is the name of the OS.
-Ideally SDL_platform.h will be able to auto-detect the system it's building
+Ideally SDL_platform_defines.h will be able to auto-detect the system it's building
on based on C preprocessor symbols.
There are two basic ways of building SDL at the moment:
diff --git a/include/SDL3/SDL.h b/include/SDL3/SDL.h
index 74c8105cd472..123bd8552190 100644
--- a/include/SDL3/SDL.h
+++ b/include/SDL3/SDL.h
@@ -60,6 +60,7 @@
#include <SDL3/SDL_mutex.h>
#include <SDL3/SDL_pixels.h>
#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
#include <SDL3/SDL_power.h>
#include <SDL3/SDL_quit.h>
#include <SDL3/SDL_rect.h>
diff --git a/include/SDL3/SDL_atomic.h b/include/SDL3/SDL_atomic.h
index a2722af2b4c3..3a332a055405 100644
--- a/include/SDL3/SDL_atomic.h
+++ b/include/SDL3/SDL_atomic.h
@@ -60,7 +60,7 @@
#define SDL_atomic_h_
#include <SDL3/SDL_stdinc.h>
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
#include <SDL3/SDL_begin_code.h>
diff --git a/include/SDL3/SDL_oldnames.h b/include/SDL3/SDL_oldnames.h
index 9807a28e2f94..dd1d635e4efd 100644
--- a/include/SDL3/SDL_oldnames.h
+++ b/include/SDL3/SDL_oldnames.h
@@ -28,7 +28,7 @@
#ifndef SDL_oldnames_h_
#define SDL_oldnames_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
/* The new function names are recommended, but if you want to have the
* old names available while you are in the process of migrating code
diff --git a/include/SDL3/SDL_opengles.h b/include/SDL3/SDL_opengles.h
index 37cb983ea617..93a75424f52f 100644
--- a/include/SDL3/SDL_opengles.h
+++ b/include/SDL3/SDL_opengles.h
@@ -24,7 +24,7 @@
*
* This is a simple file to encapsulate the OpenGL ES 1.X API headers.
*/
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
#ifdef __IOS__
#include <OpenGLES/ES1/gl.h>
diff --git a/include/SDL3/SDL_opengles2.h b/include/SDL3/SDL_opengles2.h
index 616c3ad2a77a..57cf7e87b7f5 100644
--- a/include/SDL3/SDL_opengles2.h
+++ b/include/SDL3/SDL_opengles2.h
@@ -24,7 +24,7 @@
*
* This is a simple file to encapsulate the OpenGL ES 2.0 API headers.
*/
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
#if !defined(_MSC_VER) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS)
diff --git a/include/SDL3/SDL_platform.h b/include/SDL3/SDL_platform.h
index 27db71d22d99..a9decea89864 100644
--- a/include/SDL3/SDL_platform.h
+++ b/include/SDL3/SDL_platform.h
@@ -22,190 +22,13 @@
/**
* \file SDL_platform.h
*
- * Try to get a standard set of platform defines.
+ * Header file for platform functions.
*/
#ifndef SDL_platform_h_
#define SDL_platform_h_
-#if defined(_AIX)
-#undef __AIX__
-#define __AIX__ 1
-#endif
-#if defined(__HAIKU__)
-#undef __HAIKU__
-#define __HAIKU__ 1
-#endif
-#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__)
-#undef __BSDI__
-#define __BSDI__ 1
-#endif
-#if defined(_arch_dreamcast)
-#undef __DREAMCAST__
-#define __DREAMCAST__ 1
-#endif
-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
-#undef __FREEBSD__
-#define __FREEBSD__ 1
-#endif
-#if defined(hpux) || defined(__hpux) || defined(__hpux__)
-#undef __HPUX__
-#define __HPUX__ 1
-#endif
-#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE)
-#undef __IRIX__
-#define __IRIX__ 1
-#endif
-#if (defined(linux) || defined(__linux) || defined(__linux__))
-#undef __LINUX__
-#define __LINUX__ 1
-#endif
-#if defined(ANDROID) || defined(__ANDROID__)
-#undef __ANDROID__
-#undef __LINUX__ /* do we need to do this? */
-#define __ANDROID__ 1
-#endif
-#if defined(__NGAGE__)
-#undef __NGAGE__
-#define __NGAGE__ 1
-#endif
-
-#if defined(__APPLE__)
-/* lets us know what version of macOS we're compiling on */
-#include <AvailabilityMacros.h>
-#include <TargetConditionals.h>
-
-/* Fix building with older SDKs that don't define these
- See this for more information:
- https://stackoverflow.com/questions/12132933/preprocessor-macro-for-os-x-targets
-*/
-#ifndef TARGET_OS_MACCATALYST
-#define TARGET_OS_MACCATALYST 0
-#endif
-#ifndef TARGET_OS_IOS
-#define TARGET_OS_IOS 0
-#endif
-#ifndef TARGET_OS_IPHONE
-#define TARGET_OS_IPHONE 0
-#endif
-#ifndef TARGET_OS_TV
-#define TARGET_OS_TV 0
-#endif
-#ifndef TARGET_OS_SIMULATOR
-#define TARGET_OS_SIMULATOR 0
-#endif
-
-#if TARGET_OS_TV
-#undef __TVOS__
-#define __TVOS__ 1
-#endif
-#if TARGET_OS_IPHONE
-#undef __IOS__
-#define __IOS__ 1
-#else
-#undef __MACOS__
-#define __MACOS__ 1
-#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
-# error SDL for macOS only supports deploying on 10.7 and above.
-#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1070 */
-#endif /* TARGET_OS_IPHONE */
-#endif /* defined(__APPLE__) */
-
-#if defined(__NetBSD__)
-#undef __NETBSD__
-#define __NETBSD__ 1
-#endif
-#if defined(__OpenBSD__)
-#undef __OPENBSD__
-#define __OPENBSD__ 1
-#endif
-#if defined(__OS2__) || defined(__EMX__)
-#undef __OS2__
-#define __OS2__ 1
-#endif
-#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE)
-#undef __OSF__
-#define __OSF__ 1
-#endif
-#if defined(__QNXNTO__)
-#undef __QNXNTO__
-#define __QNXNTO__ 1
-#endif
-#if defined(riscos) || defined(__riscos) || defined(__riscos__)
-#undef __RISCOS__
-#define __RISCOS__ 1
-#endif
-#if defined(__sun) && defined(__SVR4)
-#undef __SOLARIS__
-#define __SOLARIS__ 1
-#endif
-
-#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
-/* Try to find out if we're compiling for WinRT, GDK or non-WinRT/GDK */
-#if defined(_MSC_VER) && defined(__has_include)
-#if __has_include(<winapifamily.h>)
-#define HAVE_WINAPIFAMILY_H 1
-#else
-#define HAVE_WINAPIFAMILY_H 0
-#endif
-
-/* If _USING_V110_SDK71_ is defined it means we are using the Windows XP toolset. */
-#elif defined(_MSC_VER) && (_MSC_VER >= 1700 && !_USING_V110_SDK71_) /* _MSC_VER == 1700 for Visual Studio 2012 */
-#define HAVE_WINAPIFAMILY_H 1
-#else
-#define HAVE_WINAPIFAMILY_H 0
-#endif
-
-#if HAVE_WINAPIFAMILY_H
-#include <winapifamily.h>
-#define WINAPI_FAMILY_WINRT (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP))
-#else
-#define WINAPI_FAMILY_WINRT 0
-#endif /* HAVE_WINAPIFAMILY_H */
-
-#if WINAPI_FAMILY_WINRT
-#undef __WINRT__
-#define __WINRT__ 1
-#elif defined(_GAMING_DESKTOP) /* GDK project configuration always defines _GAMING_XXX */
-#undef __WINGDK__
-#define __WINGDK__ 1
-#elif defined(_GAMING_XBOX_XBOXONE)
-#undef __XBOXONE__
-#define __XBOXONE__ 1
-#elif defined(_GAMING_XBOX_SCARLETT)
-#undef __XBOXSERIES__
-#define __XBOXSERIES__ 1
-#else
-#undef __WINDOWS__
-#define __WINDOWS__ 1
-#endif
-#endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */
-
-#if defined(__WINDOWS__)
-#undef __WIN32__
-#define __WIN32__ 1
-#endif
-/* This is to support generic "any GDK" separate from a platform-specific GDK */
-#if defined(__WINGDK__) || defined(__XBOXONE__) || defined(__XBOXSERIES__)
-#undef __GDK__
-#define __GDK__ 1
-#endif
-#if defined(__PSP__)
-#undef __PSP__
-#define __PSP__ 1
-#endif
-#if defined(PS2)
-#define __PS2__ 1
-#endif
-
-#if defined(__vita__)
-#define __VITA__ 1
-#endif
-
-#if defined(__3DS__)
-#undef __3DS__
-#define __3DS__ 1
-#endif
+#include <SDL3/SDL_platform_defines.h>
#include <SDL3/SDL_begin_code.h>
/* Set up for C function definitions, even when using C++ */
diff --git a/include/SDL3/SDL_platform_defines.h b/include/SDL3/SDL_platform_defines.h
new file mode 100644
index 000000000000..906861344717
--- /dev/null
+++ b/include/SDL3/SDL_platform_defines.h
@@ -0,0 +1,210 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2022 Sam Lantinga <slouken@libsdl.org>
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+*/
+
+/**
+ * \file SDL_platform_defines.h
+ *
+ * Try to get a standard set of platform defines.
+ */
+
+#ifndef SDL_platform_defines_h_
+#define SDL_platform_defines_h_
+
+#if defined(_AIX)
+#undef __AIX__
+#define __AIX__ 1
+#endif
+#if defined(__HAIKU__)
+#undef __HAIKU__
+#define __HAIKU__ 1
+#endif
+#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__)
+#undef __BSDI__
+#define __BSDI__ 1
+#endif
+#if defined(_arch_dreamcast)
+#undef __DREAMCAST__
+#define __DREAMCAST__ 1
+#endif
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
+#undef __FREEBSD__
+#define __FREEBSD__ 1
+#endif
+#if defined(hpux) || defined(__hpux) || defined(__hpux__)
+#undef __HPUX__
+#define __HPUX__ 1
+#endif
+#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE)
+#undef __IRIX__
+#define __IRIX__ 1
+#endif
+#if (defined(linux) || defined(__linux) || defined(__linux__))
+#undef __LINUX__
+#define __LINUX__ 1
+#endif
+#if defined(ANDROID) || defined(__ANDROID__)
+#undef __ANDROID__
+#undef __LINUX__ /* do we need to do this? */
+#define __ANDROID__ 1
+#endif
+#if defined(__NGAGE__)
+#undef __NGAGE__
+#define __NGAGE__ 1
+#endif
+
+#if defined(__APPLE__)
+/* lets us know what version of macOS we're compiling on */
+#include <AvailabilityMacros.h>
+#include <TargetConditionals.h>
+
+/* Fix building with older SDKs that don't define these
+ See this for more information:
+ https://stackoverflow.com/questions/12132933/preprocessor-macro-for-os-x-targets
+*/
+#ifndef TARGET_OS_MACCATALYST
+#define TARGET_OS_MACCATALYST 0
+#endif
+#ifndef TARGET_OS_IOS
+#define TARGET_OS_IOS 0
+#endif
+#ifndef TARGET_OS_IPHONE
+#define TARGET_OS_IPHONE 0
+#endif
+#ifndef TARGET_OS_TV
+#define TARGET_OS_TV 0
+#endif
+#ifndef TARGET_OS_SIMULATOR
+#define TARGET_OS_SIMULATOR 0
+#endif
+
+#if TARGET_OS_TV
+#undef __TVOS__
+#define __TVOS__ 1
+#endif
+#if TARGET_OS_IPHONE
+#undef __IOS__
+#define __IOS__ 1
+#else
+#undef __MACOS__
+#define __MACOS__ 1
+#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
+# error SDL for macOS only supports deploying on 10.7 and above.
+#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1070 */
+#endif /* TARGET_OS_IPHONE */
+#endif /* defined(__APPLE__) */
+
+#if defined(__NetBSD__)
+#undef __NETBSD__
+#define __NETBSD__ 1
+#endif
+#if defined(__OpenBSD__)
+#undef __OPENBSD__
+#define __OPENBSD__ 1
+#endif
+#if defined(__OS2__) || defined(__EMX__)
+#undef __OS2__
+#define __OS2__ 1
+#endif
+#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE)
+#undef __OSF__
+#define __OSF__ 1
+#endif
+#if defined(__QNXNTO__)
+#undef __QNXNTO__
+#define __QNXNTO__ 1
+#endif
+#if defined(riscos) || defined(__riscos) || defined(__riscos__)
+#undef __RISCOS__
+#define __RISCOS__ 1
+#endif
+#if defined(__sun) && defined(__SVR4)
+#undef __SOLARIS__
+#define __SOLARIS__ 1
+#endif
+
+#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
+/* Try to find out if we're compiling for WinRT, GDK or non-WinRT/GDK */
+#if defined(_MSC_VER) && defined(__has_include)
+#if __has_include(<winapifamily.h>)
+#define HAVE_WINAPIFAMILY_H 1
+#else
+#define HAVE_WINAPIFAMILY_H 0
+#endif
+
+/* If _USING_V110_SDK71_ is defined it means we are using the Windows XP toolset. */
+#elif defined(_MSC_VER) && (_MSC_VER >= 1700 && !_USING_V110_SDK71_) /* _MSC_VER == 1700 for Visual Studio 2012 */
+#define HAVE_WINAPIFAMILY_H 1
+#else
+#define HAVE_WINAPIFAMILY_H 0
+#endif
+
+#if HAVE_WINAPIFAMILY_H
+#include <winapifamily.h>
+#define WINAPI_FAMILY_WINRT (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP))
+#else
+#define WINAPI_FAMILY_WINRT 0
+#endif /* HAVE_WINAPIFAMILY_H */
+
+#if WINAPI_FAMILY_WINRT
+#undef __WINRT__
+#define __WINRT__ 1
+#elif defined(_GAMING_DESKTOP) /* GDK project configuration always defines _GAMING_XXX */
+#undef __WINGDK__
+#define __WINGDK__ 1
+#elif defined(_GAMING_XBOX_XBOXONE)
+#undef __XBOXONE__
+#define __XBOXONE__ 1
+#elif defined(_GAMING_XBOX_SCARLETT)
+#undef __XBOXSERIES__
+#define __XBOXSERIES__ 1
+#else
+#undef __WINDOWS__
+#define __WINDOWS__ 1
+#endif
+#endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */
+
+#if defined(__WINDOWS__)
+#undef __WIN32__
+#define __WIN32__ 1
+#endif
+/* This is to support generic "any GDK" separate from a platform-specific GDK */
+#if defined(__WINGDK__) || defined(__XBOXONE__) || defined(__XBOXSERIES__)
+#undef __GDK__
+#define __GDK__ 1
+#endif
+#if defined(__PSP__)
+#undef __PSP__
+#define __PSP__ 1
+#endif
+#if defined(PS2)
+#define __PS2__ 1
+#endif
+
+#if defined(__vita__)
+#define __VITA__ 1
+#endif
+
+#if defined(__3DS__)
+#undef __3DS__
+#define __3DS__ 1
+#endif
+
+#endif /* SDL_platform_defines_h_ */
diff --git a/include/SDL3/SDL_stdinc.h b/include/SDL3/SDL_stdinc.h
index 75fc0b5eb437..6ab791aa0156 100644
--- a/include/SDL3/SDL_stdinc.h
+++ b/include/SDL3/SDL_stdinc.h
@@ -28,7 +28,7 @@
#ifndef SDL_stdinc_h_
#define SDL_stdinc_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#include <inttypes.h>
diff --git a/include/SDL3/SDL_syswm.h b/include/SDL3/SDL_syswm.h
index 6dab7835d988..e344def97770 100644
--- a/include/SDL3/SDL_syswm.h
+++ b/include/SDL3/SDL_syswm.h
@@ -30,7 +30,7 @@
#include <SDL3/SDL_stdinc.h>
#include <SDL3/SDL_error.h>
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
#include <SDL3/SDL_video.h>
/**
diff --git a/include/build_config/SDL_build_config.h b/include/build_config/SDL_build_config.h
index d2075ffd61c2..08ee176b60a8 100644
--- a/include/build_config/SDL_build_config.h
+++ b/include/build_config/SDL_build_config.h
@@ -22,7 +22,7 @@
#ifndef SDL_build_config_h_
#define SDL_build_config_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
/**
* \file SDL_build_config.h
diff --git a/include/build_config/SDL_build_config.h.cmake b/include/build_config/SDL_build_config.h.cmake
index 87e9c65d7c8b..36cb0800a540 100644
--- a/include/build_config/SDL_build_config.h.cmake
+++ b/include/build_config/SDL_build_config.h.cmake
@@ -29,7 +29,7 @@
*/
/* General platform specific identifiers */
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
/* C language features */
#cmakedefine const @HAVE_CONST@
diff --git a/include/build_config/SDL_build_config_android.h b/include/build_config/SDL_build_config_android.h
index 4572f9aa9587..1e8262b16555 100644
--- a/include/build_config/SDL_build_config_android.h
+++ b/include/build_config/SDL_build_config_android.h
@@ -23,7 +23,7 @@
#define SDL_build_config_android_h_
#define SDL_build_config_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
/**
* \file SDL_build_config_android.h
diff --git a/include/build_config/SDL_build_config_emscripten.h b/include/build_config/SDL_build_config_emscripten.h
index b41574935437..13c7bffdbfa2 100644
--- a/include/build_config/SDL_build_config_emscripten.h
+++ b/include/build_config/SDL_build_config_emscripten.h
@@ -22,7 +22,7 @@
#ifndef SDL_build_config_emscripten_h
#define SDL_build_config_emscripten_h
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
/**
* \file SDL_build_config_emscripten.h
diff --git a/include/build_config/SDL_build_config_ios.h b/include/build_config/SDL_build_config_ios.h
index d4f14c28fb7e..721e43a51eee 100644
--- a/include/build_config/SDL_build_config_ios.h
+++ b/include/build_config/SDL_build_config_ios.h
@@ -23,7 +23,7 @@
#define SDL_build_config_ios_h_
#define SDL_build_config_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
#define HAVE_GCC_ATOMICS 1
diff --git a/include/build_config/SDL_build_config_macos.h b/include/build_config/SDL_build_config_macos.h
index f2878db25491..2d633ecbf01a 100644
--- a/include/build_config/SDL_build_config_macos.h
+++ b/include/build_config/SDL_build_config_macos.h
@@ -23,7 +23,7 @@
#define SDL_build_config_macos_h_
#define SDL_build_config_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
/* This gets us MAC_OS_X_VERSION_MIN_REQUIRED... */
#include <AvailabilityMacros.h>
diff --git a/include/build_config/SDL_build_config_minimal.h b/include/build_config/SDL_build_config_minimal.h
index 53702d257d30..c63595a5fd06 100644
--- a/include/build_config/SDL_build_config_minimal.h
+++ b/include/build_config/SDL_build_config_minimal.h
@@ -23,7 +23,7 @@
#define SDL_build_config_minimal_h_
#define SDL_build_config_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
/**
* \file SDL_build_config_minimal.h
diff --git a/include/build_config/SDL_build_config_ngage.h b/include/build_config/SDL_build_config_ngage.h
index 6ae4536940da..60b3b8e7f525 100644
--- a/include/build_config/SDL_build_config_ngage.h
+++ b/include/build_config/SDL_build_config_ngage.h
@@ -23,7 +23,7 @@
#define SDL_build_config_ngage_h_
#define SDL_build_config_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
typedef signed char int8_t;
typedef unsigned char uint8_t;
diff --git a/include/build_config/SDL_build_config_windows.h b/include/build_config/SDL_build_config_windows.h
index ecac14a058ba..7adedb0e2796 100644
--- a/include/build_config/SDL_build_config_windows.h
+++ b/include/build_config/SDL_build_config_windows.h
@@ -23,7 +23,7 @@
#define SDL_build_config_windows_h_
#define SDL_build_config_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
/* winsdkver.h defines _WIN32_MAXVER for SDK version detection. It is present since at least the Windows 7 SDK,
* but out of caution we'll only use it if the compiler supports __has_include() to confirm its presence.
diff --git a/include/build_config/SDL_build_config_wingdk.h b/include/build_config/SDL_build_config_wingdk.h
index 03c43961f28b..aaa756399ae8 100644
--- a/include/build_config/SDL_build_config_wingdk.h
+++ b/include/build_config/SDL_build_config_wingdk.h
@@ -23,7 +23,7 @@
#define SDL_build_config_wingdk_h_
#define SDL_build_config_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
/* Windows GDK does not need Windows SDK version checks because it requires
* a recent version of the Windows 10 SDK. */
diff --git a/include/build_config/SDL_build_config_winrt.h b/include/build_config/SDL_build_config_winrt.h
index 01bff80e1416..60c03801cb62 100644
--- a/include/build_config/SDL_build_config_winrt.h
+++ b/include/build_config/SDL_build_config_winrt.h
@@ -23,7 +23,7 @@
#define SDL_build_config_winrt_h_
#define SDL_build_config_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
/* Make sure the Windows SDK's NTDDI_VERSION macro gets defined. This is used
by SDL to determine which version of the Windows SDK is being used.
diff --git a/include/build_config/SDL_build_config_xbox.h b/include/build_config/SDL_build_config_xbox.h
index 5e4d0a3b9c1e..9f81d836f144 100644
--- a/include/build_config/SDL_build_config_xbox.h
+++ b/include/build_config/SDL_build_config_xbox.h
@@ -23,7 +23,7 @@
#define SDL_build_config_wingdk_h_
#define SDL_build_config_h_
-#include <SDL3/SDL_platform.h>
+#include <SDL3/SDL_platform_defines.h>
/* Windows GDK does not need Windows SDK version checks because it requires
* a recent version of the Windows 10 SDK. */
diff --git a/src/SDL_internal.h b/src/SDL_internal.h
index 09076f29bade..c4ea14958e1b 100644
--- a/src/SDL_internal.h
+++ b/src/SDL_internal.h
@@ -49,17 +49,20 @@
SDL_free(ptr); \
}
+#include "build_config/SDL_build_config.h"
+
#include "dynapi/SDL_dynapi.h"
#if SDL_DYNAMIC_API
#include "dynapi/SDL_dynapi_overrides.h"
/* force DECLSPEC off...it's all internal symbols now.
These will have actual #defines during SDL_dynapi.c only */
+#ifdef DECLSPEC
+#undef DECLSPEC
+#endif
#define DECLSPEC
#endif
-#include "build_config/SDL_build_config.h"
-
#ifdef __APPLE__
#ifndef _DARWIN_C_SOURCE
#define _DARWIN_C_SOURCE 1 /* for memset_pattern4() */