ee5efd2
diff --git a/Makefile.am b/Makefile.am
ee5efd2
index 507a02f..8db04da 100644
ee5efd2
--- a/Makefile.am
ee5efd2
+++ b/Makefile.am
ee5efd2
@@ -19,7 +19,7 @@
ee5efd2
 dist_doc_DATA = README
ee5efd2
 
ee5efd2
 EXTRA_DIST = bootstrap.sh autogen.sh LGPL libcanberra.schemas
ee5efd2
-SUBDIRS = libltdl src gtkdoc doc
ee5efd2
+SUBDIRS = src gtkdoc doc
ee5efd2
 
ee5efd2
 MAINTAINERCLEANFILES = README
ee5efd2
 noinst_DATA = README
ee5efd2
@@ -51,7 +51,7 @@ ACLOCAL_AMFLAGS = -I m4
ee5efd2
 README:
ee5efd2
 	rm -f README
ee5efd2
 	$(MAKE) -C doc README
ee5efd2
-	cd $(srcdir) && ln -s doc/README README
ee5efd2
+	ln -s doc/README README
ee5efd2
 
ee5efd2
 homepage: all dist
ee5efd2
 	test -d $$HOME/homepage/private
ee5efd2
diff --git a/bootstrap.sh b/bootstrap.sh
ee5efd2
index abeb4f6..29d356f 100755
ee5efd2
--- a/bootstrap.sh
ee5efd2
+++ b/bootstrap.sh
ee5efd2
@@ -18,7 +18,7 @@
ee5efd2
 # License along with libcanberra. If not, see
ee5efd2
 # <http://www.gnu.org/licenses/>.
ee5efd2
 
ee5efd2
-VERSION=1.9
ee5efd2
+VERSION=1.10
ee5efd2
 
ee5efd2
 run_versioned() {
ee5efd2
     local P
ee5efd2
@@ -42,6 +42,15 @@ run_versioned() {
ee5efd2
 
ee5efd2
 set -ex
ee5efd2
 
ee5efd2
+# We check for this here, because if pkg-config is not found in the
ee5efd2
+# system, it's likely that the pkg.m4 macro file is also not present,
ee5efd2
+# which will make PKG_PROG_PKG_CONFIG be undefined and the generated
ee5efd2
+# configure file faulty.
ee5efd2
+if ! pkg-config --version &>/dev/null; then
ee5efd2
+    echo "pkg-config is required to bootstrap this program" &>/dev/null
ee5efd2
+    exit 1
ee5efd2
+fi
ee5efd2
+
ee5efd2
 if [ "x$1" = "xam" ] ; then
ee5efd2
     run_versioned automake "$VERSION" -a -c --foreign
ee5efd2
     ./config.status
ee5efd2
@@ -54,7 +63,7 @@ else
ee5efd2
 
ee5efd2
     mkdir -p m4
ee5efd2
     gtkdocize --copy --flavour no-tmpl --docdir gtkdoc
ee5efd2
-    "$LIBTOOLIZE" -c --force --ltdl --recursive
ee5efd2
+    "$LIBTOOLIZE" -c --force --recursive
ee5efd2
     run_versioned aclocal "$VERSION" -I m4
ee5efd2
     run_versioned autoconf 2.63 -Wall
ee5efd2
     run_versioned autoheader 2.63
ee5efd2
diff --git a/configure.ac b/configure.ac
ee5efd2
index 3f1a841..51dc305 100644
ee5efd2
--- a/configure.ac
ee5efd2
+++ b/configure.ac
ee5efd2
@@ -21,7 +21,7 @@
ee5efd2
 
ee5efd2
 AC_PREREQ(2.63)
ee5efd2
 
ee5efd2
-AC_INIT([libcanberra], 0.11, [mzyvopnaoreen (at) 0pointer (dot) de])
ee5efd2
+AC_INIT([libcanberra],[0.11],[mzyvopnaoreen (at) 0pointer (dot) de])
ee5efd2
 AC_CONFIG_SRCDIR([src/common.c])
ee5efd2
 AC_CONFIG_HEADERS([config.h])
ee5efd2
 AC_CONFIG_MACRO_DIR(m4)
ee5efd2
@@ -65,9 +65,32 @@ done
ee5efd2
 
ee5efd2
 #### libtool stuff ####
ee5efd2
 LT_PREREQ(2.2)
ee5efd2
-LT_CONFIG_LTDL_DIR([libltdl])
ee5efd2
 LT_INIT([dlopen win32-dll disable-static])
ee5efd2
-LTDL_INIT([convenience recursive])
ee5efd2
+
ee5efd2
+dnl Unfortunately, even up to libtool 2.2.6a there is no way to know
ee5efd2
+dnl exactly which version of libltdl is present in the system, so we
ee5efd2
+dnl just assume that it's a working version as long as we have the
ee5efd2
+dnl library and the header files.
ee5efd2
+dnl
ee5efd2
+dnl As an extra safety device, check for lt_dladvise_init() which is
ee5efd2
+dnl only implemented in libtool 2.x, and refine as we go if we have
ee5efd2
+dnl refined requirements.
ee5efd2
+dnl
ee5efd2
+dnl Check the header files first since the system may have a
ee5efd2
+dnl libltdl.so for runtime, but no headers, and we want to bail out as
ee5efd2
+dnl soon as possible.
ee5efd2
+dnl
ee5efd2
+dnl We don't need any special variable for this though, since the user
ee5efd2
+dnl can give the proper place to find libltdl through the standard
ee5efd2
+dnl variables like LDFLAGS and CPPFLAGS.
ee5efd2
+
ee5efd2
+AC_CHECK_HEADER([ltdl.h],
ee5efd2
+    [AC_CHECK_LIB([ltdl], [lt_dladvise_init], [LIBLTDL=-lltdl], [LIBLTDL=])],
ee5efd2
+    [LIBLTDL=])
ee5efd2
+
ee5efd2
+AS_IF([test "x$LIBLTDL" = "x"],
ee5efd2
+    [AC_MSG_ERROR([Unable to find libltdl.])])
ee5efd2
+AC_SUBST([LIBLTDL])
ee5efd2
 
ee5efd2
 #### Determine build environment ####
ee5efd2
 
ee5efd2
@@ -109,7 +132,6 @@ AC_TYPE_SIZE_T
ee5efd2
 AC_CHECK_TYPES(ssize_t, , [AC_DEFINE([ssize_t], [signed long],
ee5efd2
     [Define ssize_t if it is not done by the standard libs.])])
ee5efd2
 AC_TYPE_OFF_T
ee5efd2
-AC_TYPE_SIGNAL
ee5efd2
 AC_TYPE_UID_T
ee5efd2
 
ee5efd2
 #### Check for libs ####
ee5efd2
@@ -158,20 +180,12 @@ AM_ICONV
ee5efd2
 
ee5efd2
 #### pkg-config ####
ee5efd2
 
ee5efd2
-# Check for pkg-config manually first, as if its not installed the
ee5efd2
-# PKG_PROG_PKG_CONFIG macro won't be defined.
ee5efd2
-AC_CHECK_PROG(have_pkg_config, pkg-config, yes, no)
ee5efd2
-
ee5efd2
-if test x"$have_pkg_config" = "xno"; then
ee5efd2
-    AC_MSG_ERROR(pkg-config is required to install this program)
ee5efd2
-fi
ee5efd2
-
ee5efd2
 PKG_PROG_PKG_CONFIG
ee5efd2
 
ee5efd2
 #### ALSA support (optional) ####
ee5efd2
 
ee5efd2
 AC_ARG_ENABLE([alsa],
ee5efd2
-    AC_HELP_STRING([--disable-alsa], [Disable optional ALSA support]),
ee5efd2
+    AS_HELP_STRING([--disable-alsa], [Disable optional ALSA support]),
ee5efd2
         [
ee5efd2
             case "${enableval}" in
ee5efd2
                 yes) alsa=yes ;;
ee5efd2
@@ -203,7 +217,7 @@ AC_SUBST(ALSA_LIBS)
ee5efd2
 ### OSS support (optional) ###
ee5efd2
 
ee5efd2
 AC_ARG_ENABLE([oss],
ee5efd2
-    AC_HELP_STRING([--disable-oss], [Disable optional OSS support]),
ee5efd2
+    AS_HELP_STRING([--disable-oss], [Disable optional OSS support]),
ee5efd2
         [
ee5efd2
             case "${enableval}" in
ee5efd2
                 yes) oss=yes ;;
ee5efd2
@@ -233,7 +247,7 @@ fi
ee5efd2
 ### PulseAudio (optional) ####
ee5efd2
 
ee5efd2
 AC_ARG_ENABLE([pulse],
ee5efd2
-    AC_HELP_STRING([--disable-pulse], [Disable optional PulseAudio support]),
ee5efd2
+    AS_HELP_STRING([--disable-pulse], [Disable optional PulseAudio support]),
ee5efd2
         [
ee5efd2
             case "${enableval}" in
ee5efd2
                 yes) pulse=yes ;;
ee5efd2
@@ -274,7 +288,7 @@ AC_SUBST(PULSE_LIBS)
ee5efd2
 #### GStreamer support (optional) ####
ee5efd2
 
ee5efd2
 AC_ARG_ENABLE([gstreamer],
ee5efd2
-    AC_HELP_STRING([--disable-gstreamer], [Disable optional GStreamer support]),
ee5efd2
+    AS_HELP_STRING([--disable-gstreamer], [Disable optional GStreamer support]),
ee5efd2
         [
ee5efd2
             case "${enableval}" in
ee5efd2
                 yes) gstreamer=yes ;;
ee5efd2
@@ -306,7 +320,7 @@ AC_SUBST(GSTREAMER_LIBS)
ee5efd2
 ### Null output (optional) ####
ee5efd2
 
ee5efd2
 AC_ARG_ENABLE([null],
ee5efd2
-    AC_HELP_STRING([--disable-null], [Disable optional null output]),
ee5efd2
+    AS_HELP_STRING([--disable-null], [Disable optional null output]),
ee5efd2
         [
ee5efd2
             case "${enableval}" in
ee5efd2
                 yes) null=yes ;;
ee5efd2
@@ -326,7 +340,7 @@ fi
ee5efd2
 ### GTK (optional) ####
ee5efd2
 
ee5efd2
 AC_ARG_ENABLE([gtk],
ee5efd2
-    AC_HELP_STRING([--disable-gtk], [Disable optional GTK+ support]),
ee5efd2
+    AS_HELP_STRING([--disable-gtk], [Disable optional GTK+ support]),
ee5efd2
         [
ee5efd2
             case "${enableval}" in
ee5efd2
                 yes) gtk=yes ;;
ee5efd2
@@ -368,7 +382,7 @@ AM_CONDITIONAL([HAVE_GTK], [test "x$HAVE_GTK" = x1])
ee5efd2
 #### TDB cache support (optional) ####
ee5efd2
 
ee5efd2
 AC_ARG_ENABLE([tdb],
ee5efd2
-    AC_HELP_STRING([--disable-tdb], [Disable optional tdb support]),
ee5efd2
+    AS_HELP_STRING([--disable-tdb], [Disable optional tdb support]),
ee5efd2
         [
ee5efd2
             case "${enableval}" in
ee5efd2
                 yes) tdb=yes ;;
ee5efd2
@@ -415,7 +429,7 @@ fi
ee5efd2
 ### LYNX documentation generation ###
ee5efd2
 
ee5efd2
 AC_ARG_ENABLE([lynx],
ee5efd2
-        AC_HELP_STRING([--disable-lynx], [Turn off lynx usage for documentation generation]),
ee5efd2
+        AS_HELP_STRING([--disable-lynx], [Turn off lynx usage for documentation generation]),
ee5efd2
                 [
ee5efd2
                         case "${enableval}" in
ee5efd2
                                 yes) lynx=yes ;;
ee5efd2
@@ -561,7 +575,6 @@ GTK_DOC_CHECK(1.9)
ee5efd2
 
ee5efd2
 AC_CONFIG_FILES([
ee5efd2
 Makefile
ee5efd2
-libltdl/Makefile
ee5efd2
 src/Makefile
ee5efd2
 libcanberra.pc
ee5efd2
 libcanberra-gtk.pc
ee5efd2
diff --git a/doc/README.html.in b/doc/README.html.in
ee5efd2
index d4a3edf..9b9cf04 100644
ee5efd2
--- a/doc/README.html.in
ee5efd2
+++ b/doc/README.html.in
ee5efd2
@@ -10,7 +10,7 @@
ee5efd2
 <body>
ee5efd2
 

libcanberra @PACKAGE_VERSION@

ee5efd2
 
ee5efd2
-

Copyright 2008 Lennart Poettering <@PACKAGE_BUGREPORT@>

ee5efd2
+

Copyright 2008-2009 Lennart Poettering <@PACKAGE_BUGREPORT@>

ee5efd2
 
ee5efd2
 
    ee5efd2
         
  • License
  • ee5efd2
    diff --git a/src/Makefile.am b/src/Makefile.am
    ee5efd2
    index d1b4d89..1fb5168 100644
    ee5efd2
    --- a/src/Makefile.am
    ee5efd2
    +++ b/src/Makefile.am
    ee5efd2
    @@ -85,8 +85,6 @@ if BUILTIN_DSO
    ee5efd2
     libcanberra_la_SOURCES += \
    ee5efd2
     	dso.c \
    ee5efd2
     	driver-order.c driver-order.h
    ee5efd2
    -libcanberra_la_CFLAGS += \
    ee5efd2
    -	$(LTDLINCL)
    ee5efd2
     libcanberra_la_LIBADD += \
    ee5efd2
     	$(LIBLTDL)
    ee5efd2
     
    ee5efd2
    diff --git a/src/map-file b/src/map-file
    ee5efd2
    index 2265ed0..902252a 100644
    ee5efd2
    --- a/src/map-file
    ee5efd2
    +++ b/src/map-file
    ee5efd2
    @@ -7,4 +7,7 @@ driver_change_props;
    ee5efd2
     driver_destroy;
    ee5efd2
     driver_open;
    ee5efd2
     driver_play;
    ee5efd2
    +lt_*;
    ee5efd2
    +dlopen_*;
    ee5efd2
    +preopen_*;
    ee5efd2
     };
    ee5efd2
    diff --git a/src/pulse.c b/src/pulse.c
    ee5efd2
    index 11d6e52..ed371de 100644
    ee5efd2
    --- a/src/pulse.c
    ee5efd2
    +++ b/src/pulse.c
    ee5efd2
    @@ -166,12 +166,27 @@ static int translate_error(int error) {
    ee5efd2
             [PA_ERR_BADSTATE]             = CA_ERROR_STATE,
    ee5efd2
             [PA_ERR_NODATA]               = CA_ERROR_IO,
    ee5efd2
             [PA_ERR_VERSION]              = CA_ERROR_NOTSUPPORTED,
    ee5efd2
    -        [PA_ERR_TOOLARGE]             = CA_ERROR_TOOBIG
    ee5efd2
    +        [PA_ERR_TOOLARGE]             = CA_ERROR_TOOBIG,
    ee5efd2
    +#ifdef PA_ERR_NOTSUPPORTED
    ee5efd2
    +        [PA_ERR_NOTSUPPORTED]         = CA_ERROR_NOTSUPPORTED,
    ee5efd2
    +#endif
    ee5efd2
    +#ifdef PA_ERR_UNKNOWN
    ee5efd2
    +        [PA_ERR_UNKNOWN]              = CA_ERROR_IO,
    ee5efd2
    +#endif
    ee5efd2
    +#ifdef PA_ERR_NOEXTENSION
    ee5efd2
    +        [PA_ERR_NOEXTENSION]          = CA_ERROR_NOTSUPPORTED,
    ee5efd2
    +#endif
    ee5efd2
    +#ifdef PA_ERR_OBSOLETE
    ee5efd2
    +        [PA_ERR_OBSOLETE]             = CA_ERROR_NOTSUPPORTED,
    ee5efd2
    +#endif
    ee5efd2
    +#ifdef PA_ERR_NOTIMPLEMENTED
    ee5efd2
    +        [PA_ERR_NOTIMPLEMENTED]       = CA_ERROR_NOTSUPPORTED
    ee5efd2
    +#endif
    ee5efd2
         };
    ee5efd2
     
    ee5efd2
         ca_assert(error >= 0);
    ee5efd2
     
    ee5efd2
    -    if (error >= PA_ERR_MAX)
    ee5efd2
    +    if (error >= PA_ERR_MAX || !table[error])
    ee5efd2
             return CA_ERROR_IO;
    ee5efd2
     
    ee5efd2
         return table[error];
    ee5efd2
    @@ -572,7 +587,7 @@ static void stream_write_cb(pa_stream *s, size_t bytes, void *userdata) {
    ee5efd2
                 goto finish;
    ee5efd2
             }
    ee5efd2
     
    ee5efd2
    -	data = NULL;
    ee5efd2
    +        data = NULL;
    ee5efd2
     
    ee5efd2
             bytes -= rbytes;
    ee5efd2
         }
    ee5efd2
    @@ -641,7 +656,11 @@ int driver_play(ca_context *c, uint32_t id, ca_proplist *proplist, ca_finish_cal
    ee5efd2
         pa_proplist *l = NULL;
    ee5efd2
         const char *n, *vol, *ct;
    ee5efd2
         char *name = NULL;
    ee5efd2
    +#if defined(PA_MAJOR) && ((PA_MAJOR > 0) || (PA_MAJOR == 0 && PA_MINOR > 9) || (PA_MAJOR == 0 && PA_MINOR == 9 && PA_MICRO >= 15))
    ee5efd2
    +    pa_volume_t v = (pa_volume_t) -1;
    ee5efd2
    +#else
    ee5efd2
         pa_volume_t v = PA_VOLUME_NORM;
    ee5efd2
    +#endif
    ee5efd2
         pa_sample_spec ss;
    ee5efd2
         ca_cache_control_t cache_control = CA_CACHE_CONTROL_NEVER;
    ee5efd2
         struct outstanding *out = NULL;
    ee5efd2
    @@ -781,7 +800,13 @@ int driver_play(ca_context *c, uint32_t id, ca_proplist *proplist, ca_finish_cal
    ee5efd2
         pa_stream_set_state_callback(out->stream, stream_state_cb, out);
    ee5efd2
         pa_stream_set_write_callback(out->stream, stream_write_cb, out);
    ee5efd2
     
    ee5efd2
    -    if (pa_stream_connect_playback(out->stream, NULL, NULL, 0, NULL, NULL) < 0) {
    ee5efd2
    +    if (pa_stream_connect_playback(out->stream, NULL, NULL,
    ee5efd2
    +#ifdef PA_STREAM_FAIL_ON_SUSPEND
    ee5efd2
    +                                   PA_STREAM_FAIL_ON_SUSPEND
    ee5efd2
    +#else
    ee5efd2
    +                                   0
    ee5efd2
    +#endif
    ee5efd2
    +                                   , NULL, NULL) < 0) {
    ee5efd2
             ret = translate_error(pa_context_errno(p->context));
    ee5efd2
             pa_threaded_mainloop_unlock(p->mainloop);
    ee5efd2
             goto finish;