Hi
A few months ago, I submitted a patch to Sam, for dynamic loading of ALSA,
which made it to the CVS. Later on, I improved my original patch a bit (I
think the original patch could break some configurations), and sent it to
Sam. It didn’t ever get any reply to that one though, so I try to repost
it here.
The configure script hacks aren’t really too good though, and could be
improved by someone who knows autoconf/automake/m4 better than me.
// Martin
-------------- next part --------------
diff -ur SDL12-orig/acinclude.m4 SDL12/acinclude.m4
— SDL12-orig/acinclude.m4 2004-05-06 18:55:06.000000000 +0300
+++ SDL12/acinclude.m4 2004-06-01 13:49:37.000000000 +0300
@@ -20,6 +20,153 @@
])#
+# — alsa.m4 —
+#
+dnl Configure Paths for Alsa
+dnl Some modifications by Richard Boulton
+dnl Christopher Lansdown
+dnl Jaroslav Kysela
+dnl Last modification: alsa.m4,v 1.22 2002/05/27 11:14:20 tiwai Exp
+dnl AM_PATH_ALSA([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for libasound, and define ALSA_CFLAGS and ALSA_LIBS as appropriate.
+dnl enables arguments --with-alsa-prefix=
+dnl --with-alsa-enc-prefix=
+dnl --disable-alsatest (this has no effect, as yet)
+dnl
+dnl For backwards compatibility, if ACTION_IF_NOT_FOUND is not specified,
+dnl and the alsa libraries are not found, a fatal AC_MSG_ERROR() will result.
+dnl
+AC_DEFUN(AM_PATH_ALSA,
+[dnl Save the original CFLAGS, LDFLAGS, and LIBS
+alsa_save_CFLAGS="$CFLAGS"
+alsa_save_LDFLAGS="$LDFLAGS"
+alsa_save_LIBS="$LIBS"
+alsa_found=yes
+
+dnl
+dnl Get the cflags and libraries for alsa
+dnl
+AC_ARG_WITH(alsa-prefix,
+[ --with-alsa-prefix=PFX Prefix where Alsa library is installed(optional)],
+[alsa_prefix="$withval"], [alsa_prefix=""])
+
+AC_ARG_WITH(alsa-inc-prefix,
+[ --with-alsa-inc-prefix=PFX Prefix where include libraries are (optional)],
+[alsa_inc_prefix="$withval"], [alsa_inc_prefix=""])
+
+dnl FIXME: this is not yet implemented
+AC_ARG_ENABLE(alsatest,
+[ --disable-alsatest Do not try to compile and run a test Alsa program],
+[enable_alsatest=no],
+[enable_alsatest=yes])
+
+dnl Add any special include directories
+AC_MSG_CHECKING(for ALSA CFLAGS)
+if test “$alsa_inc_prefix” != “” ; then
- ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix"
- CFLAGS="$CFLAGS -I$alsa_inc_prefix"
+fi
+AC_MSG_RESULT($ALSA_CFLAGS)
+dnl add any special lib dirs
+AC_MSG_CHECKING(for ALSA LDFLAGS)
+if test “$alsa_prefix” != “” ; then
- ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix"
- LDFLAGS="$LDFLAGS $ALSA_LIBS"
+fi
+dnl add the alsa library
+ALSA_LIBS="$ALSA_LIBS -lasound -lm -ldl -lpthread"
+LIBS=echo $LIBS | sed 's/-lm//'
+LIBS=echo $LIBS | sed 's/-ldl//'
+LIBS=echo $LIBS | sed 's/-lpthread//'
+LIBS=echo $LIBS | sed 's/ //'
+LIBS="$ALSA_LIBS $LIBS"
+AC_MSG_RESULT($ALSA_LIBS)
+
+dnl Check for a working version of libasound that is of the right version.
+min_alsa_version=ifelse([$1], ,0.1.1,$1)
+AC_MSG_CHECKING(for libasound headers version >= $min_alsa_version)
+no_alsa=""
- alsa_min_major_version=`echo $min_alsa_version | \
-
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
- alsa_min_minor_version=`echo $min_alsa_version | \
-
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
- alsa_min_micro_version=`echo $min_alsa_version | \
-
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+AC_LANG_SAVE
+AC_LANG_C
+AC_TRY_COMPILE([
+#include <alsa/asoundlib.h>
+], [
+/* ensure backward compatibility */
+#if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR)
+#define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR
+#endif
+#if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR)
+#define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR
+#endif
+#if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR)
+#define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR
+#endif
+
+# if(SND_LIB_MAJOR > $alsa_min_major_version)
- exit(0);
+# else
+# if(SND_LIB_MAJOR < $alsa_min_major_version)
+# error not present
+# endif
+# if(SND_LIB_MINOR > $alsa_min_minor_version)
- exit(0);
+# else
+# if(SND_LIB_MINOR < $alsa_min_minor_version)
+# error not present
+# endif
+# if(SND_LIB_SUBMINOR < $alsa_min_micro_version)
+# error not present
+# endif
+# endif
+# endif
+exit(0);
+],
- [AC_MSG_RESULT(found.)],
- [AC_MSG_RESULT(not present.)
- ifelse([$3], , [AC_MSG_ERROR(Sufficiently new version of libasound not found.)])
- alsa_found=no]
+)
+AC_LANG_RESTORE
+dnl Now that we know that we have the right version, let’s see if we have the library and not just the headers.
+AC_CHECK_LIB([asound], [snd_ctl_open],
- [ifelse([$3], , [AC_MSG_ERROR(No linkable libasound was found.)])
- alsa_found=no]
+)
+CFLAGS="$alsa_save_CFLAGS"
+LDFLAGS="$alsa_save_LDFLAGS"
+LIBS="$alsa_save_LIBS"
+if test “x$alsa_found” = “xyes” ; then
- ifelse([$2], , :, [$2])
+else - ifelse([$3], , :, [$3])
- CFLAGS="$alsa_save_CFLAGS"
- LDFLAGS="$alsa_save_LDFLAGS"
- LIBS="$alsa_save_LIBS"
- ALSA_CFLAGS=""
- ALSA_LIBS=""
+fi
+dnl That should be it. Now just export out symbols:
+AC_SUBST(ALSA_CFLAGS)
+AC_SUBST(ALSA_LIBS)
+])
+
+
+
+#
— esd.m4 —
Configure paths for ESD
diff -ur SDL12-orig/configure.in SDL12/configure.in
— SDL12-orig/configure.in 2004-05-06 18:55:06.000000000 +0300
+++ SDL12/configure.in 2004-05-06 18:55:06.000000000 +0300
@@ -282,39 +282,53 @@
[ --enable-alsa support the ALSA audio API [default=yes]],
, enable_alsa=yes)
if test x$enable_audio = xyes -a x$enable_alsa = xyes; then
-
AC_MSG_CHECKING(for ALSA audio support) have_alsa=no
-
AC_TRY_COMPILE([
-
#include <alsa/asoundlib.h>
-
],[
-
#if SND_LIB_VERSION < ((0<<16)|(9<<8)|0)
-
#error Your version of ALSA is too old
-
#endif
-
snd_pcm_t *pcm_handle;
-
],[
-
AC_CHECK_LIB(asound, snd_pcm_open, have_alsa=yes)
-
])
-
AM_PATH_ALSA(0.9.0, have_alsa=yes) if test x$have_alsa = xyes; then AC_ARG_ENABLE(alsa-shared,
[ --enable-alsa-shared dynamically load ALSA audio support [default=yes]],
, enable_alsa_shared=yes)
-
alsa_lib=`ls /usr/lib/libasound.so.* | sed 's/.*\/\(.*\)/\1/; q'`
-
if test "x`echo $ALSA_LIBS | grep -- -L`" = "x"; then
-
if test "x`ls /usr/lib/libasound.so.* 2> /dev/null`" != "x"; then
-
ALSA_LIBS="-L/usr/lib $ALSA_LIBS"
-
else if test "x`ls /usr/local/lib/libasound.so.* 2> /dev/null`" != "x"; then
-
ALSA_LIBS="-L/usr/local/lib $ALSA_LIBS"
-
fi; fi
-
fi
-
alsa_lib_spec=`echo $ALSA_LIBS | sed 's/.*-L\([[^ ]]*\).*/\1\/libasound.so.*/'`
-
alsa_lib=`ls $alsa_lib_spec | sed 's/.*\/\(.*\)/\1/; q'`
-
echo "-- $alsa_lib_spec -> $alsa_lib"
-
if test x$use_dlopen != xyes && \ test x$enable_alsa_shared = xyes; then AC_MSG_ERROR([You must have dlopen() support and use the --enable-dlopen option]) fi if test x$use_dlopen = xyes && \ test x$enable_alsa_shared = xyes && test x$alsa_lib != x; then
-
CFLAGS="$CFLAGS -DALSA_SUPPORT -DALSA_DYNAMIC=\$(alsa_lib)"
-
CFLAGS="$CFLAGS -DALSA_SUPPORT -DALSA_DYNAMIC=\$(alsa_lib) $ALSA_CFLAGS" AC_SUBST(alsa_lib)
-
AC_MSG_CHECKING(for dlvsym)
-
use_dlvsym=no
-
AC_TRY_COMPILE([
-
#include <stdio.h>
-
#define __USE_GNU
-
#include <dlfcn.h>
-
],[
-
dlvsym(NULL,"","");
-
],[
-
use_dlvsym=yes
-
])
-
AC_MSG_RESULT($use_dlvsym);
-
if test x$use_dlvsym = xyes; then
-
CFLAGS="$CFLAGS -DUSE_DLVSYM"
-
fi else
-
CFLAGS="$CFLAGS -DALSA_SUPPORT"
-
SYSTEM_LIBS="$SYSTEM_LIBS -lasound"
-
CFLAGS="$CFLAGS -DALSA_SUPPORT $ALSA_CFLAGS"
-
SYSTEM_LIBS="$SYSTEM_LIBS $ALSA_LIBS" fi AUDIO_SUBDIRS="$AUDIO_SUBDIRS alsa" AUDIO_DRIVERS="$AUDIO_DRIVERS alsa/libaudio_alsa.la"
-
else
-
fiAC_MSG_RESULT($have_alsa) fi
}
diff -ur SDL12-orig/src/audio/alsa/SDL_alsa_audio.c SDL12/src/audio/alsa/SDL_alsa_audio.c
— SDL12-orig/src/audio/alsa/SDL_alsa_audio.c 2004-03-02 14:49:16.000000000 +0200
+++ SDL12/src/audio/alsa/SDL_alsa_audio.c 2004-06-01 13:50:25.000000000 +0300
@@ -42,7 +42,9 @@
#include “SDL_alsa_audio.h”
#ifdef ALSA_DYNAMIC
+#ifdef USE_DLVSYM
#define __USE_GNU
+#endif
#include <dlfcn.h>
#include “SDL_name.h”
#include “SDL_loadso.h”
@@ -134,7 +136,11 @@
retval = 0;
for (i = 0; i < SDL_TABLESIZE(alsa_functions); i++) {
/* alsa_functions[i].func = SDL_LoadFunction(alsa_handle,alsa_functions[i].name);/
+#ifdef USE_DLVSYM
*alsa_functions[i].func = dlvsym(alsa_handle,alsa_functions[i].name,“ALSA_0.9”);
-
if (!*alsa_functions[i].func)
+#endif
-
*alsa_functions[i].func = dlsym(alsa_handle,alsa_functions[i].name); if (!*alsa_functions[i].func) { retval = -1; UnloadALSALibrary();