#* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
#*****************************************************************************/
+use IO::Handle;
use strict;
+my $srcdir = $ENV{'top_srcdir'};
+
#
# Reads to-be exported APIs
#
#
# Write header's header
#
-open my $new_sym, '> include/vlc_symbols.h.new' or die "$!";
+my $new_sym=IO::Handle->new();
+open $new_sym, '> vlc_symbols.h.new' or die "$!";
print { $new_sym }
"/*\n".
" * This file is automatically generated. DO NOT EDIT!\n".
"#ifndef __VLC_SYMBOLS_H\n".
"# define __VLC_SYMBOLS_H\n".
"\n".
+ "# ifdef HAVE_SHARED_LIBVLC\n".
+ "/*\n".
+ " * In an ideal world, plugins would include all the headers they need.\n".
+ " * But of course, many, if not all, of them don't, so we have to make sure\n".
+ " * the whole libvlc API is defined here in any case when included from a\n".
+ " * plugin.\n".
+ " */\n".
+ "# ifdef __PLUGIN__\n".
+ "# ifdef __cplusplus\n".
+ "extern \"C\" {\n".
+ "# endif\n";
+
+foreach (keys %new_APIs)
+{
+ print { $new_sym }
+ $new_APIs{$_}[0]." $_ (".$new_APIs{$_}[1].");\n";
+}
+
+print { $new_sym }
+ "# ifdef __cplusplus\n".
+ "}\n".
+ "# endif\n".
+ "# endif /* __PLUGIN__ */\n".
+ "# else /* HAVE_LIBVLC_SHARED */\n".
"/*\n".
" * This is the big VLC API structure for plugins :\n".
" * Changing its layout breaks plugin's binary compatibility,\n".
#
my @API;
my @deprecated_API;
+my $parse = 0;
+
+my $oldfd = IO::Handle->new();
+open $oldfd, "< $srcdir/include/vlc_symbols.h";
-open my $oldfd, '< include/vlc_symbols.h';
while (<$oldfd>)
{
- if (/^ void \*(\w*)_deprecated;$/)
+ if (/^struct module_symbols_t/)
+ {
+ $parse = 1;
+ }
+ elsif ($parse == 0)
+ {
+ }
+ elsif (/^ void \*(\w*)_deprecated;$/)
{
- if (defined $new_APIs{$2})
+ if (defined $new_APIs{$1})
{
- print "[info] $2 was RESTORED!\n";
+ print "[info] $1 was RESTORED!\n";
print { $new_sym }
" ".$new_APIs{$1}[0]." (*$1_inner) (".$new_APIs{$1}[1].");\n";
delete $new_APIs{$1};
#
print { $new_sym }
"};\n".
- "# if defined (__PLUGIN__)\n";
-
+ "# if defined (__PLUGIN__)\n";
+
foreach (@API)
{
print { $new_sym } "# define $_ (p_symbols)->${_}_inner\n";
}
print { $new_sym }
- "# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)\n".
+ "# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)\n".
"/******************************************************************\n".
" * STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access.\n".
" ******************************************************************/\n".
- "# define STORE_SYMBOLS( p_symbols ) \\\n";
+ "# define STORE_SYMBOLS( p_symbols ) \\\n";
foreach (@API)
{
print { $new_sym }
"\n".
- "# endif /* __PLUGIN__ */\n".
+ "# endif /* __PLUGIN__ */\n".
+ "# endif /* HAVE_SHARED_LIBVLC */\n".
"#endif /* __VLC_SYMBOLS_H */\n";
close $new_sym;
#
if ($changes != 0)
{
- rename 'include/vlc_symbols.h.new', 'include/vlc_symbols.h';
+ rename 'vlc_symbols.h.new', "$srcdir/include/vlc_symbols.h";
print "$changes API(s) changed.\n";
}
else
{
- unlink 'include/vlc_symbols.h.new';
+ unlink 'vlc_symbols.h.new';
}