From cf1eb95fb1b761cd0c5b544fc9ae7472542b559d Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Sat, 26 Jul 2025 13:50:20 -0400 Subject: [PATCH] sunaudio: don't compile in the sun audio backend if sys/audioio.h is missing. Newer Solaris-based releases, like OpenIndiana, don't include this, using Open Sound System, or something layered over OSS like PulseAudio, instead. Fixes #13405. --- CMakeLists.txt | 12 ++++++++---- configure | 16 +++++++++++++--- configure.ac | 12 ++++++++---- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ea13c80493..a324434eba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1470,10 +1470,14 @@ elseif(EMSCRIPTEN) elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU) if(SDL_AUDIO) if(SYSV5 OR SOLARIS OR HPUX) - set(SDL_AUDIO_DRIVER_SUNAUDIO 1) - file(GLOB SUN_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/sun/*.c) - list(APPEND SOURCE_FILES ${SUN_AUDIO_SOURCES}) - set(HAVE_SDL_AUDIO TRUE) + # Newer Solaris-based systems, like OpenIndiana, don't have this interface anymore. Check for the header first. + check_include_file(sys/audioio HAVE_SYS_AUDIOIO_H) + if(HAVE_SYS_AUDIOIO_H) + set(SDL_AUDIO_DRIVER_SUNAUDIO 1) + file(GLOB SUN_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/sun/*.c) + list(APPEND SOURCE_FILES ${SUN_AUDIO_SOURCES}) + set(HAVE_SDL_AUDIO TRUE) + endif() elseif(NETBSD) set(SDL_AUDIO_DRIVER_NETBSD 1) file(GLOB NETBSD_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/netbsd/*.c) diff --git a/configure b/configure index 2fa617fbd4..e4c8cdd793 100755 --- a/configure +++ b/configure @@ -28741,12 +28741,22 @@ printf "%s\n" "#define SDL_VIDEO_DRIVER_ANDROID 1" >>confdefs.h if test x$enable_audio = xyes; then case $ARCH in sysv5|solaris|hpux) + ac_fn_c_check_header_compile "$LINENO" "audio/audiolib.h" "ac_cv_header_audio_audiolib_h" "$ac_includes_default" +if test "x$ac_cv_header_audio_audiolib_h" = xyes +then : + have_sys_audiolib=yes +else $as_nop + have_sys_audiolib=no +fi + + if test x$have_sys_audiolib = xyes; then printf "%s\n" "#define SDL_AUDIO_DRIVER_SUNAUDIO 1" >>confdefs.h - SOURCES="$SOURCES $srcdir/src/audio/sun/*.c" - SUMMARY_audio="${SUMMARY_audio} sun" - have_audio=yes + SOURCES="$SOURCES $srcdir/src/audio/sun/*.c" + SUMMARY_audio="${SUMMARY_audio} sun" + have_audio=yes + fi ;; netbsd) # Don't use this on OpenBSD, it's busted. diff --git a/configure.ac b/configure.ac index c6d44a174f..45dfa96d4c 100644 --- a/configure.ac +++ b/configure.ac @@ -3869,10 +3869,14 @@ case "$host" in if test x$enable_audio = xyes; then case $ARCH in sysv5|solaris|hpux) - AC_DEFINE(SDL_AUDIO_DRIVER_SUNAUDIO, 1, [ ]) - SOURCES="$SOURCES $srcdir/src/audio/sun/*.c" - SUMMARY_audio="${SUMMARY_audio} sun" - have_audio=yes + dnl Newer Solaris-based systems, like OpenIndiana, don't have this interface anymore. Check for the header first. + AC_CHECK_HEADER(audio/audiolib.h,have_sys_audiolib=yes,have_sys_audiolib=no) + if test x$have_sys_audiolib = xyes; then + AC_DEFINE(SDL_AUDIO_DRIVER_SUNAUDIO, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/audio/sun/*.c" + SUMMARY_audio="${SUMMARY_audio} sun" + have_audio=yes + fi ;; netbsd) # Don't use this on OpenBSD, it's busted. AC_DEFINE(SDL_AUDIO_DRIVER_NETBSD, 1, [ ])