SDL: need pulseaudio >=0.9.15. call pa_threaded_mainloop_set_name only if available.

From b3861650d359984cb4d1e2472778a8c6a6348305 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Wed, 12 Jul 2023 21:39:04 +0300
Subject: [PATCH] need pulseaudio >=0.9.15. call pa_threaded_mainloop_set_name
 only if available.

---
 cmake/sdlchecks.cmake                 |  2 +-
 src/audio/pulseaudio/SDL_pulseaudio.c | 29 ++++++++++++---------------
 2 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/cmake/sdlchecks.cmake b/cmake/sdlchecks.cmake
index 0aec8607aec6..98fadf9bd449 100644
--- a/cmake/sdlchecks.cmake
+++ b/cmake/sdlchecks.cmake
@@ -160,7 +160,7 @@ endmacro()
 # - HAVE_SDL_LOADSO opt
 macro(CheckPulseAudio)
   if(SDL_PULSEAUDIO)
-    pkg_check_modules(PKG_PULSEAUDIO libpulse-simple)
+    pkg_check_modules(PKG_PULSEAUDIO libpulse-simple>=0.9.15)
     if(PKG_PULSEAUDIO_FOUND)
       set(HAVE_PULSEAUDIO TRUE)
       file(GLOB PULSEAUDIO_SOURCES ${SDL3_SOURCE_DIR}/src/audio/pulseaudio/*.c)
diff --git a/src/audio/pulseaudio/SDL_pulseaudio.c b/src/audio/pulseaudio/SDL_pulseaudio.c
index f791c463fb23..7fce74a52da5 100644
--- a/src/audio/pulseaudio/SDL_pulseaudio.c
+++ b/src/audio/pulseaudio/SDL_pulseaudio.c
@@ -52,20 +52,6 @@ static char *default_sink_name = NULL;
 static char *default_source_name = NULL;
 
 
-
-#if (PA_API_VERSION < 12)
-/** Return non-zero if the passed state is one of the connected states */
-static SDL_INLINE int PA_CONTEXT_IS_GOOD(pa_context_state_t x)
-{
-    return x == PA_CONTEXT_CONNECTING || x == PA_CONTEXT_AUTHORIZING || x == PA_CONTEXT_SETTING_NAME || x == PA_CONTEXT_READY;
-}
-/** Return non-zero if the passed state is one of the connected states */
-static SDL_INLINE int PA_STREAM_IS_GOOD(pa_stream_state_t x)
-{
-    return x == PA_STREAM_CREATING || x == PA_STREAM_READY;
-}
-#endif /* pulseaudio <= 0.9.10 */
-
 static const char *(*PULSEAUDIO_pa_get_library_version)(void);
 static pa_channel_map *(*PULSEAUDIO_pa_channel_map_init_auto)(
     pa_channel_map *, unsigned, pa_channel_map_def_t);
@@ -195,7 +181,6 @@ static int load_pulseaudio_syms(void)
 {
     SDL_PULSEAUDIO_SYM(pa_get_library_version);
     SDL_PULSEAUDIO_SYM(pa_threaded_mainloop_new);
-    SDL_PULSEAUDIO_SYM(pa_threaded_mainloop_set_name);
     SDL_PULSEAUDIO_SYM(pa_threaded_mainloop_get_api);
     SDL_PULSEAUDIO_SYM(pa_threaded_mainloop_start);
     SDL_PULSEAUDIO_SYM(pa_threaded_mainloop_stop);
@@ -238,6 +223,16 @@ static int load_pulseaudio_syms(void)
     SDL_PULSEAUDIO_SYM(pa_stream_set_write_callback);
     SDL_PULSEAUDIO_SYM(pa_stream_set_read_callback);
     SDL_PULSEAUDIO_SYM(pa_context_get_server_info);
+
+    /* optional */
+#ifdef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC
+    load_pulseaudio_sym("pa_threaded_mainloop_set_name", (void **)(char *)&PULSEAUDIO_pa_threaded_mainloop_set_name);
+#elif (PA_PROTOCOL_VERSION >= 29)
+    PULSEAUDIO_pa_threaded_mainloop_set_name = pa_threaded_mainloop_set_name;
+#else
+    PULSEAUDIO_pa_threaded_mainloop_set_name = NULL;
+#endif
+
     return 0;
 }
 
@@ -318,7 +313,9 @@ static int ConnectToPulseServer(void)
         return SDL_SetError("pa_threaded_mainloop_new() failed");
     }
 
-    PULSEAUDIO_pa_threaded_mainloop_set_name(pulseaudio_threaded_mainloop, "PulseMainloop");
+    if (PULSEAUDIO_pa_threaded_mainloop_set_name) {
+        PULSEAUDIO_pa_threaded_mainloop_set_name(pulseaudio_threaded_mainloop, "PulseMainloop");
+    }
 
     if (PULSEAUDIO_pa_threaded_mainloop_start(pulseaudio_threaded_mainloop) < 0) {
         PULSEAUDIO_pa_threaded_mainloop_free(pulseaudio_threaded_mainloop);