summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>2009-11-18 23:08:50 +0000
committerColin Guthrie <cguthrie@mandriva.org>2009-11-30 09:24:55 +0000
commit048f943234c630e088c6589828306becf63e10c5 (patch)
treee5575293eaae5b1de54ccf6ad2157eacb828a3a1
parentf7e2488b33bf9177047e0239f73cc92dc6549903 (diff)
Dynamically build the paths to the modules
-rw-r--r--configure.ac4
-rw-r--r--src/Makefile.am6
-rw-r--r--src/paprefs.cc84
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 a45092c..3da4be0 100644
--- a/src/paprefs.cc
+++ b/src/paprefs.cc
@@ -31,6 +31,8 @@
#include <dbus/dbus.h>
#include <gdk/gdkx.h>
+#include <pulse/version.h>
+
#define PA_GCONF_ROOT "/system/pulseaudio"
#define PA_GCONF_PATH_MODULES PA_GCONF_ROOT"/modules"
@@ -108,6 +110,10 @@ public:
void showInstallButton(Gtk::Button *button, bool available);
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
packageKitAvailable,
@@ -331,33 +337,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() {
@@ -614,22 +636,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");
}