Override the plugins path with an environment variable...
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 12 Feb 2011 09:00:03 +0000 (11:00 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 12 Feb 2011 09:04:35 +0000 (11:04 +0200)
...rather than with a command line option. This enables extending the
set of plugins paths globally, for all LibVLC applications.

Using an environment variable seems more logical than a command line
option considering that the module bank is shared by all VLC instances
in the process. In other words, it did not belong as a parameter to
libvlc_new().

bin/cachegen.c
bin/vlc.c
extras/analyser/zsh_completion.sh
src/libvlc.c
src/modules/modules.c
test/libvlc/test.h

index e73e4a5..6fef55d 100644 (file)
@@ -91,25 +91,22 @@ int main (int argc, char *argv[])
     {
         /* Note that FromLocale() can be used before libvlc is initialized */
         const char *path = FromLocale (argv[i]);
-        char *arg;
 
-        if (asprintf (&arg, "--plugin-path=%s", path) == -1)
+        if (setenv ("VLC_PLUGIN_PATH", path, 1))
             abort ();
 
-        const char *vlc_argv[5];
+        const char *vlc_argv[4];
         int vlc_argc = 0;
 
         vlc_argv[vlc_argc++] = "--quiet";
         if (force)
             vlc_argv[vlc_argc++] = "--reset-plugins-cache";
-        vlc_argv[vlc_argc++] = arg;
         vlc_argv[vlc_argc++] = "--"; /* end of options */
         vlc_argv[vlc_argc] = NULL;
 
         libvlc_instance_t *vlc = libvlc_new (vlc_argc, vlc_argv);
         if (vlc != NULL)
             libvlc_release (vlc);
-        free (arg);
         if (vlc == NULL)
             fprintf (stderr, "No plugins in %s\n", path);
         LocaleFree (path);
index 3a49287..4299bdf 100644 (file)
--- a/bin/vlc.c
+++ b/bin/vlc.c
@@ -100,6 +100,10 @@ int main( int i_argc, const char *ppsz_argv[] )
     setenv ("GNOME_DISABLE_CRASH_DIALOG", "1", 1);
 # endif
 
+# ifdef TOP_BUILDDIR
+    setenv ("VLC_PLUGIN_PATH", TOP_BUILDDIR"/modules", 1);
+# endif
+
     /* Clear the X.Org startup notification ID. Otherwise the UI might try to
      * change the environment while the process is multi-threaded. That could
      * crash. Screw you X.Org. Next time write a thread-safe specification. */
@@ -174,14 +178,11 @@ int main( int i_argc, const char *ppsz_argv[] )
     pthread_sigmask (SIG_SETMASK, &set, NULL);
 
     /* Note that FromLocale() can be used before libvlc is initialized */
-    const char *argv[i_argc + 4];
+    const char *argv[i_argc + 3];
     int argc = 0;
 
     argv[argc++] = "--no-ignore-config";
     argv[argc++] = "--media-library";
-#ifdef TOP_BUILDDIR
-    argv[argc++] = FromLocale ("--plugin-path="TOP_BUILDDIR"/modules");
-#endif
 #ifdef TOP_SRCDIR
     argv[argc++] = FromLocale ("--data-path="TOP_SRCDIR"/share");
 #endif
index d901b1c..f10f4bf 100755 (executable)
@@ -22,6 +22,9 @@ esac
 #Distributors can run BUILDDIR=XXX ./zsh_completion.sh
 [ -z "$BUILDDIR" ] && BUILDDIR=../../
 
+VLC_PLUGIN_PATH="$BUILDDIR"
+export VLC_PLUGIN_PATH
+
 function find_libvlc {
     [ -z "$SUFFIX" ] && return 0 # linking will fail if lib isn't found
     for i in $BUILDDIR/src/.libs/libvlc.$SUFFIX $BUILDDIR/src/libvlc.$SUFFIX; do
@@ -66,15 +69,15 @@ eval $ZSH_BUILD || exit 1
 
 printf "Generating zsh completion in _vlc ... "
 
-if ! ./zsh_gen --plugin-path=$BUILDDIR >_vlc 2>/dev/null; then
+if ! ./zsh_gen >_vlc 2>/dev/null; then
     echo "
 ERROR: the generation failed.... :(
 Please press enter to verify that all the VLC modules are shown"
     read i
-    ./zsh_gen --plugin-path=$BUILDDIR -vv --list
+    ./zsh_gen -vv --list
     echo "
 If they are shown, press enter to see if you can debug the problem
-It will be reproduced by running \"./zsh_gen --plugin-path=$BUILDDIR -vvv\""
+It will be reproduced by running \"./zsh_gen -vvv\""
     read i
     ./zsh_gen --plugin-path=$BUILDDIR -vv
     exit 1
index f0cec42..53775ce 100644 (file)
@@ -473,8 +473,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
 
     if( module_count <= 1 )
     {
-        msg_Err( p_libvlc, "No modules were found, refusing to start. Check "
-                "that you properly gave a module path with --plugin-path.");
+        msg_Err( p_libvlc, "No plugins found! Check your VLC installation.");
         b_exit = true;
         i_ret = VLC_ENOITEM;
     }
index d9d19de..aa758d7 100644 (file)
@@ -853,10 +853,14 @@ static void AllocateAllPlugins( vlc_object_t *p_this, module_bank_t *p_bank )
     }
 
     /* If the user provided a plugin path, we add it to the list */
-    paths = var_InheritString( p_this, "plugin-path" );
+    paths = getenv( "VLC_PLUGIN_PATH" );
     if( paths == NULL )
         return;
 
+    paths = strdup( paths ); /* don't harm the environment ! :) */
+    if( unlikely(paths == NULL) )
+        return;
+
     for( char *buf, *path = strtok_r( paths, PATH_SEP, &buf );
          path != NULL;
          path = strtok_r( NULL, PATH_SEP, &buf ) )
@@ -966,7 +970,7 @@ static int AllocatePluginFile( vlc_object_t * p_this, module_bank_t *p_bank,
         p_module = p_cache_entry->p_module;
         p_module->b_loaded = false;
 
-        /* If plugin-path contains duplicate entries... */
+        /* If VLC_PLUGIN_PATH contains duplicate entries... */
         if( p_module->next != NULL )
             return 0; /* already taken care of that one */
 
index 2a6c84b..fc41f51 100644 (file)
@@ -53,7 +53,6 @@ static const char * test_defaults_args[] = {
     "-I",
     "dummy",
     "--no-media-library",
-    "--plugin-path=../modules",
     "--vout=dummy",
     "--aout=dummy"
 };
@@ -75,6 +74,7 @@ static inline void test_init (void)
 {
     (void)test_default_sample; /* This one may not be used */
     alarm (10); /* Make sure "make check" does not get stuck */
+    setenv( "VLC_PLUGIN_PATH", "../modules", 1 );
 }
 
 #endif /* TEST_H */