From ec58b1504d28513ae4a972b4d2a32bfed01dec4a Mon Sep 17 00:00:00 2001
From: Eidolon <furyhunter600@gmail.com>
Date: Sat, 10 Dec 2022 02:19:05 -0600
Subject: [PATCH] sdl: SDL version-guard controller type and hidapi

---
 src/sdl/i_gamepad.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/sdl/i_gamepad.c b/src/sdl/i_gamepad.c
index dbafc1f63a..28f9681bec 100644
--- a/src/sdl/i_gamepad.c
+++ b/src/sdl/i_gamepad.c
@@ -39,8 +39,10 @@ static boolean InitGamepadSubsystems(void)
 {
 	if (M_CheckParm("-noxinput"))
 		SDL_SetHintWithPriority(SDL_HINT_XINPUT_ENABLED, "0", SDL_HINT_OVERRIDE);
+#if SDL_VERSION_ATLEAST(2,0,9)
 	if (M_CheckParm("-nohidapi"))
 		SDL_SetHintWithPriority(SDL_HINT_JOYSTICK_HIDAPI, "0", SDL_HINT_OVERRIDE);
+#endif
 
 	if (SDL_WasInit(GAMEPAD_INIT_FLAGS) == 0)
 	{
@@ -199,6 +201,7 @@ static boolean Controller_OpenDevice(UINT8 which, INT32 devindex)
 
 		CONS_Debug(DBG_GAMELOGIC, M_GetText("Controller %d: %s\n"), which, SDL_GameControllerName(controller->dev));
 
+#if SDL_VERSION_ATLEAST(2,0,12)
 	#define GAMEPAD_TYPE_CASE(ctrl) \
 		case SDL_CONTROLLER_TYPE_##ctrl: \
 			controller->info->type = GAMEPAD_TYPE_##ctrl; \
@@ -211,15 +214,22 @@ static boolean Controller_OpenDevice(UINT8 which, INT32 devindex)
 			GAMEPAD_TYPE_CASE(XBOXONE);
 			GAMEPAD_TYPE_CASE(PS3);
 			GAMEPAD_TYPE_CASE(PS4);
+#if SDL_VERSION_ATLEAST(2,0,14)
 			GAMEPAD_TYPE_CASE(PS5);
+#endif
 			GAMEPAD_TYPE_CASE(NINTENDO_SWITCH_PRO);
+#if SDL_VERSION_ATLEAST(2,0,16)
 			GAMEPAD_TYPE_CASE(GOOGLE_STADIA);
 			GAMEPAD_TYPE_CASE(AMAZON_LUNA);
+#endif
 			GAMEPAD_TYPE_CASE(VIRTUAL);
 			default: break;
 		}
-
 	#undef GAMEPAD_BUTTON_CASE
+#else
+		// Under older versions of SDL, we aren't provided controller type information.
+		controller->info->type = GAMEPAD_TYPE_UNKNOWN;
+#endif // SDL_VERSION_ATLEAST(2,0,12)
 
 		// Check the device vendor and product to find out what controller this actually is
 		Uint16 vendor = SDL_JoystickGetDeviceVendor(devindex);
-- 
GitLab