From: Rémi Denis-Courmont Date: Mon, 25 Jan 2010 19:07:15 +0000 (+0200) Subject: Add vlc-cache-gen to generate the plugins cache off-line X-Git-Tag: 1.1.0-ff~884 X-Git-Url: https://git.sesse.net/?p=vlc;a=commitdiff_plain;h=f974baf1756aebf491bfc51858de432540ea0959 Add vlc-cache-gen to generate the plugins cache off-line --- diff --git a/bin/Makefile.am b/bin/Makefile.am index d90c6d596a..009d7b239b 100644 --- a/bin/Makefile.am +++ b/bin/Makefile.am @@ -2,6 +2,7 @@ # bin_PROGRAMS = vlc noinst_PROGRAMS = vlc-static +vlclib_PROGRAMS = vlc-cache-gen EXTRA_PROGRAMS = vlc-wrapper AM_CFLAGS = `$(VLC_CONFIG) --cflags vlc` @@ -46,3 +47,7 @@ endif vlc_win32_rc.$(OBJEXT): $(top_builddir)/share/vlc_win32_rc.rc $(WINDRES) --include-dir $(top_srcdir)/share -i $< -o $@ +vlc_cache_gen_SOURCES = cachegen.c +vlc_cache_gen_LDADD = \ + ../compat/libcompat.la \ + ../src/libvlc.la ../src/libvlccore.la diff --git a/bin/cachegen.c b/bin/cachegen.c new file mode 100644 index 0000000000..5792ea1965 --- /dev/null +++ b/bin/cachegen.c @@ -0,0 +1,107 @@ +/***************************************************************************** + * cachegen.c: LibVLC plugins cache generator + ***************************************************************************** + * Copyright (C) 2010 Rémi Denis-Courmont + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#ifdef HAVE_GETOPT_H +# include +#endif + +static void version (void) +{ + puts ("LibVLC plugins cache generation version "VERSION); +} + +static void usage (const char *path) +{ + printf ("Usage: %s \n" + "Generate the LibVLC plugins cache " + "for the specified plugins directory.\n", path); +} + +/* Explicit HACK */ +extern void LocaleFree (const char *); +extern char *FromLocale (const char *); + +int main (int argc, char *argv[]) +{ + static const struct option opts[] = + { + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, 'V' }, + { NULL, no_argument, NULL, '\0'} + }; + + setlocale (LC_CTYPE, ""); /* needed by FromLocale() */ + + int c; + while ((c = getopt_long (argc, argv, "hV", opts, NULL)) != -1) + switch (c) + { + case 'h': + usage (argv[0]); + return 0; + case 'V': + version (); + return 0; + default: + usage (argv[0]); + return 1; + } + + for (int i = optind; i < argc; i++) + { + /* 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) + abort (); + + const char *const vlc_argv[] = { + "--ignore-config", + "--quiet", + arg, + NULL, + }; + + libvlc_exception_t ex; + libvlc_exception_init (&ex); + + libvlc_instance_t *vlc = libvlc_new (3, vlc_argv, &ex); + if (vlc != NULL) + libvlc_release (vlc); + free (arg); + if (vlc == NULL) + fprintf (stderr, "No plugins in %s\n", path); + LocaleFree (path); + if (vlc == NULL) + return 1; + } + + return 0; +}