]> git.sesse.net Git - vlc/commitdiff
Linux: determine data path at run-time from library path
authorRémi Denis-Courmont <remi@remlab.net>
Tue, 20 Mar 2012 18:31:32 +0000 (20:31 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Tue, 20 Mar 2012 18:31:32 +0000 (20:31 +0200)
src/Makefile.am
src/posix/dirs.c
src/posix/linux_specific.c

index a8cecab9fa7a0d3985baedc23c563f161f53fb85..cd06794d2d286fee808dcdad3ac2231d275a2ad4 100644 (file)
@@ -169,7 +169,7 @@ AM_CPPFLAGS = $(INCICONV) \
        -DMODULE_STRING=\"main\" \
        -DLOCALEDIR=\"$(localedir)\" \
        -DSYSCONFDIR=\"$(sysconfdir)\" \
-       -DDATA_PATH=\"$(vlcdatadir)\" \
+       -DPKGDATADIR=\"$(vlcdatadir)\" \
        -DPKGLIBDIR=\"$(vlclibdir)\"
 AM_CFLAGS = $(CFLAGS_libvlccore)
 
index e23f883b4310b52df1474375a7757ca97e0067c9..87c785728e7e93a3592a22505ed4f4b8a33f43c1 100644 (file)
@@ -35,6 +35,7 @@
 #include <assert.h>
 #include <limits.h>
 
+#if !defined (__linux__)
 /**
  * Determines the shared data directory
  *
  */
 char *config_GetDataDirDefault (void)
 {
-    return strdup (DATA_PATH);
+    return strdup (PKGDATADIR);
 }
 
-#if !defined (__linux__)
 /**
  * Determines the architecture-dependent data directory
  *
index 7cc7a78766b296cb8eeffcf254db4c9b0cf5c80c..f7d8290b48aa6d62c40c9644b4d41a4fd829a9b3 100644 (file)
@@ -26,7 +26,8 @@
 #include <string.h>
 
 #include <vlc_common.h>
-#include "../libvlc.h"
+#include "libvlc.h"
+#include "config/configuration.h"
 
 char *config_GetLibDir (void)
 {
@@ -73,3 +74,29 @@ char *config_GetLibDir (void)
 error:
     return (path != NULL) ? path : strdup (PKGLIBDIR);
 }
+
+char *config_GetDataDirDefault (void)
+{
+    char *libdir = config_GetLibDir ();
+    if (libdir == NULL)
+        return NULL; /* OOM */
+
+    char *datadir = NULL;
+
+    /* There are no clean ways to do this, are there?
+     * Due to multilibs, we cannot simply append ../share/. */
+    char *p = strstr (libdir, "/lib/");
+    if (p != NULL)
+    {
+        char *p2;
+        /* Deal with nested "lib" directories. Grmbl. */
+        while ((p2 = strstr (p + 4, "/lib/")) != NULL)
+            p = p2;
+        *p = '\0';
+
+        if (unlikely(asprintf (&datadir, "%s/share/"PACKAGE, libdir) == -1))
+            datadir = NULL;
+    }
+    free (libdir);
+    return (datadir != NULL) ? datadir : strdup (PKGDATADIR);
+}