paprefs (0.9.9-2) 0002-Dynamically-build-the-paths-to-the-modules.patch

Summary

 configure.ac    |    4 +-
 src/Makefile.am |    6 ++--
 src/paprefs.cc  |   84 ++++++++++++++++++++++++++++++++++++++++++++------------
 3 files changed, 72 insertions(+), 22 deletions(-)

    
download this patch

Patch contents

From 469a691ab0a973a2aa88c7e7a82344a3f5173ece Mon Sep 17 00:00:00 2001
From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Date: Wed, 18 Nov 2009 23:08:50 +0000
Subject: [PATCH 2/3] Dynamically build the paths to the modules

---
 configure.ac    |    4 +-
 src/Makefile.am |    6 ++--
 src/paprefs.cc  |   84 +++++++++++++++++++++++++++++++++++++++++++-----------
 3 files changed, 72 insertions(+), 22 deletions(-)

diff --git a/configure.ac b/configure.ac
index aa0e4bd..4c7c880 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,8 +43,8 @@ AC_SUBST(GUILIBS_CFLAGS)
 AC_SUBST(GUILIBS_LIBS)
 
 PKG_CHECK_MODULES(LIBPULSE, libpulse)
-LIBPULSE_MODLIBEXECDIR=`pkg-config libpulse --variable modlibexecdir`
-AC_SUBST(LIBPULSE_MODLIBEXECDIR)
+LIBPULSE_MODLIBDIR=`pkg-config libpulse --variable libdir`
+AC_SUBST(LIBPULSE_MODLIBDIR)
 
 # If using GCC specifiy some additional parameters
 if test "x$GCC" = "xyes" ; then
diff --git a/src/Makefile.am b/src/Makefile.am
index 1bd3826..bacfb1a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -29,9 +29,9 @@ desktop_DATA=$(desktop_in_files:.desktop.in=.desktop)
 
 paprefs_SOURCES=paprefs.cc
 
-paprefs_LDADD=$(AM_LDADD) $(GUILIBS_LIBS)
-paprefs_CXXFLAGS=$(AM_CXXFLAGS) $(GUILIBS_CFLAGS)
-paprefs_CXXFLAGS+=-DGLADE_FILE=\"$(gladedir)/paprefs.glade\" -DLOCALEDIR=\"$(localedir)\" -DMODULESDIR=\""$(LIBPULSE_MODLIBEXECDIR)/"\" -DSHREXT=\"$(SHREXT)\"
+paprefs_LDADD=$(AM_LDADD) $(GUILIBS_LIBS) $(LIBPULSE_LIBS)
+paprefs_CXXFLAGS=$(AM_CXXFLAGS) $(GUILIBS_CFLAGS) $(LIBPULSE_CFLAGS)
+paprefs_CXXFLAGS+=-DGLADE_FILE=\"$(gladedir)/paprefs.glade\" -DLOCALEDIR=\"$(localedir)\" -DMODLIBDIR=\""$(LIBPULSE_MODLIBDIR)/"\" -DSHREXT=\"$(SHREXT)\"
 
 EXTRA_DIST = $(glade_DATA) $(desktop_in_files)
 
diff --git a/src/paprefs.cc b/src/paprefs.cc
index 677c503..808159a 100644
--- a/src/paprefs.cc
+++ b/src/paprefs.cc
@@ -32,6 +32,8 @@
 #include <dbus/dbus-glib.h>
 #include <gdk/gdkx.h>
 
+#include <pulse/version.h>
+
 #define PA_GCONF_ROOT "/system/pulseaudio"
 #define PA_GCONF_PATH_MODULES PA_GCONF_ROOT"/modules"
 
@@ -107,6 +109,10 @@ public:
     void onGConfChange(const Glib::ustring& key, const Gnome::Conf::Value& value);
 
     void installFiles(const char *a, const char *b);
+    void installModules(const char *a, const char *b);
+
+    bool moduleExists(const gchar *name);
+    gchar *modulePath(const gchar *name);
 
     bool
         rtpRecvAvailable,
@@ -348,33 +354,49 @@ void MainWindow::installFiles(const char *a, const char *b = NULL) {
     updateSensitive();
 }
 
+void MainWindow::installModules(const char *a, const char *b = NULL) {
+  gchar *ma, *mb = NULL;
+
+  ma = modulePath (a);
+  if (b != NULL)
+    mb = modulePath (b);
+
+  installFiles (ma, mb);
+
+  g_free (ma);
+  g_free (mb);
+}
+
 void MainWindow::onZeroconfDiscoverInstallButtonClicked() {
-    installFiles(MODULESDIR "module-zeroconf-discover" SHREXT);
+    installModules("module-zeroconf-discover" SHREXT);
 }
 
 void MainWindow::onZeroconfRaopDiscoverInstallButtonClicked() {
-    installFiles(MODULESDIR "module-raop-discover" SHREXT);
+    installModules("module-raop-discover" SHREXT);
 }
 
 void MainWindow::onRemoteInstallButtonClicked() {
-    installFiles(MODULESDIR "module-esound-protocol-tcp" SHREXT,
-                 MODULESDIR "module-native-protocol-tcp" SHREXT);
+    installModules("module-esound-protocol-tcp" SHREXT,
+        "module-native-protocol-tcp" SHREXT);
 }
 
 void MainWindow::onZeroconfPublishInstallButtonClicked() {
-    installFiles(MODULESDIR "module-zeroconf-publish" SHREXT);
+    installModules("module-zeroconf-publish" SHREXT);
 }
 
 void MainWindow::upnpInstallButtonClicked() {
-    installFiles("/usr/bin/rygel", MODULESDIR "module-rygel-media-server" SHREXT);
+    gchar *mpath = modulePath ("module-rygel-media-server" SHREXT);
+
+    installFiles("/usr/bin/rygel", mpath);
+    g_free (mpath);
 }
 
 void MainWindow::rtpRecvInstallButtonClicked() {
-    installFiles(MODULESDIR "module-rtp-recv" SHREXT);
+    installModules("module-rtp-recv" SHREXT);
 }
 
 void MainWindow::rtpSendInstallButtonClicked() {
-    installFiles(MODULESDIR "module-rtp-send" SHREXT);
+    installModules("module-rtp-send" SHREXT);
 }
 
 void MainWindow::writeToGConfCombine() {
@@ -631,22 +653,50 @@ void MainWindow::readFromGConf() {
     updateSensitive();
 }
 
+gchar * MainWindow::modulePath(const gchar *name) {
+  gchar *path, *pulsedir, *c;
+
+  pulsedir = g_strdup_printf ("pulse-%s", pa_get_library_version ());
+
+  for (c = pulsedir + strlen ("pulse-"); *c != '\0'; c++) {
+    if (*c == '-') {
+      *c = '\0';
+      break;
+    }
+  }
+
+  path = g_build_filename (MODLIBDIR, pulsedir, "modules", name, NULL);
+  g_free (pulsedir);
+
+  return path;
+}
+
+bool MainWindow::moduleExists(const gchar *name) {
+  gchar *path = modulePath (name);
+  bool ret;
+
+  ret = g_file_test (path, G_FILE_TEST_EXISTS);
+
+  g_free (path);
+
+  return ret;
+}
+
 void MainWindow::checkForModules() {
 
     remoteAvailable =
-        access(MODULESDIR "module-esound-protocol-tcp" SHREXT, F_OK) == 0 ||
-        access(MODULESDIR "module-native-protocol-tcp" SHREXT, F_OK) == 0;
+        moduleExists("module-esound-protocol-tcp" SHREXT) ||
+        moduleExists("module-native-protocol-tcp" SHREXT);
 
-    zeroconfPublishAvailable = access(MODULESDIR "module-zeroconf-publish" SHREXT, F_OK) == 0;
-    zeroconfDiscoverAvailable = access(MODULESDIR "module-zeroconf-discover" SHREXT, F_OK) == 0;
+    zeroconfPublishAvailable = moduleExists("module-zeroconf-publish" SHREXT);
+    zeroconfDiscoverAvailable = moduleExists("module-zeroconf-discover" SHREXT);
 
-    zeroconfRaopDiscoverAvailable = access(MODULESDIR "module-raop-discover" SHREXT, F_OK) == 0;
+    zeroconfRaopDiscoverAvailable = moduleExists("module-raop-discover" SHREXT);
 
-    rtpRecvAvailable = access(MODULESDIR "module-rtp-recv" SHREXT, F_OK) == 0;
-    rtpSendAvailable = access(MODULESDIR "module-rtp-send" SHREXT, F_OK) == 0;
+    rtpRecvAvailable = moduleExists("module-rtp-recv" SHREXT);
+    rtpSendAvailable = moduleExists("module-rtp-send" SHREXT);
 
-    upnpAvailable =
-        access(MODULESDIR "module-rygel-media-server" SHREXT, F_OK) == 0 &&
+    upnpAvailable = moduleExists("module-rygel-media-server" SHREXT) &&
         g_find_program_in_path("rygel");
 }