Browse Source

Updated check for stdbool.h

If you're building in a C99 or newer environment, we'll automatically include stdbool.h.

If you're building in a C89 or C90 environment, we'll assume that stdbool.h isn't available and define bool as an unsigned char. If you have a working stdbool.h and want SDL to use it, you can either include stdbool.h before SDL headers, or define SDL_INCLUDE_STDBOOL_H in your project.

Closes https://github.com/libsdl-org/SDL/pull/10980
Sam Lantinga 6 months ago
parent
commit
039148fb0e

+ 14 - 21
include/SDL3/SDL_stdinc.h

@@ -34,34 +34,27 @@
 
 #include <SDL3/SDL_platform_defines.h>
 
-/* Most everything except Visual Studio 2013 and earlier has stdbool.h now */
-#if defined(_MSC_VER) && (_MSC_VER < 1910)
-#define SDL_DEFINE_STDBOOL
-#endif
-/* gcc-2.95 had non-standard stdbool.h */
-#if defined(__GNUC__) && (__GNUC__ < 3)
-#define SDL_DEFINE_STDBOOL
-#endif
+#include <stdarg.h>
+#include <stdint.h>
+#include <string.h>
+#include <wchar.h>
 
-#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
+    defined(SDL_INCLUDE_INTTYPES_H)
 #include <inttypes.h>
 #endif
-#include <stdarg.h>
+
 #ifndef __cplusplus
-#ifdef SDL_DEFINE_STDBOOL
-#ifndef __bool_true_false_are_defined
-#define __bool_true_false_are_defined 1
-#define bool  uint8_t
+#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
+    defined(SDL_INCLUDE_STDBOOL_H)
+#include <stdbool.h>
+#elif !defined(__bool_true_false_are_defined) && !defined(bool)
+#define bool  unsigned char
 #define false 0
 #define true  1
+#define __bool_true_false_are_defined 1
 #endif
-#else
-#include <stdbool.h>
-#endif
-#endif
-#include <stdint.h>
-#include <string.h>
-#include <wchar.h>
+#endif /* !__cplusplus */
 
 #ifndef SDL_DISABLE_ALLOCA
 # ifndef alloca

+ 2 - 0
include/SDL3/SDL_test_crc32.h

@@ -34,6 +34,8 @@
 #ifndef SDL_test_crc32_h_
 #define SDL_test_crc32_h_
 
+#include <SDL3/SDL_stdinc.h>
+
 #include <SDL3/SDL_begin_code.h>
 /* Set up for C function definitions, even when using C++ */
 #ifdef __cplusplus

+ 2 - 0
include/SDL3/SDL_test_memory.h

@@ -30,6 +30,8 @@
 #ifndef SDL_test_memory_h_
 #define SDL_test_memory_h_
 
+#include <SDL3/SDL_stdinc.h>
+
 #include <SDL3/SDL_begin_code.h>
 /* Set up for C function definitions, even when using C++ */
 #ifdef __cplusplus

+ 0 - 1
src/joystick/gdk/SDL_gameinputjoystick.c

@@ -25,7 +25,6 @@
 #include "../SDL_sysjoystick.h"
 #include "../usb_ids.h"
 
-#include <stdbool.h>
 #define COBJMACROS
 #include <gameinput.h>