X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=include%2Fvlc_modules_macros.h;h=567a34412d68906faad77a1fe008a9a03a6bc2bf;hb=64f00cf6a017e766ccc1b2b9d094d67a7c0c6cee;hp=3a7642871c0481007bca592ec7a869d2cff29dcb;hpb=d8e17ad4f32d842b8754dd6a79c6a6ae0762646d;p=vlc diff --git a/include/vlc_modules_macros.h b/include/vlc_modules_macros.h index 3a7642871c..567a34412d 100644 --- a/include/vlc_modules_macros.h +++ b/include/vlc_modules_macros.h @@ -32,6 +32,12 @@ # define MODULE_NAME main #endif +/** + * Current plugin ABI version + */ +# define MODULE_SYMBOL 0_9_0f +# define MODULE_SUFFIX "__0_9_0f" + /***************************************************************************** * Add a few defines. You do not want to read this section. Really. *****************************************************************************/ @@ -41,7 +47,7 @@ * if user has #defined MODULE_NAME foo, then we will need: * #define MODULE_STRING "foo" * - * and, if __BUILTIN__ is set, we will also need: + * and, if HAVE_DYNAMIC_PLUGINS is NOT set, we will also need: * #define MODULE_FUNC( zog ) module_foo_zog * * this can't easily be done with the C preprocessor, thus a few ugly hacks. @@ -56,26 +62,18 @@ /* If the module is built-in, then we need to define foo_InitModule instead * of InitModule. Same for Activate- and DeactivateModule. */ -#if defined( __BUILTIN__ ) -# define E_( function ) CONCATENATE( function, MODULE_NAME ) -# define __VLC_SYMBOL( symbol ) CONCATENATE( symbol, MODULE_NAME ) -#elif defined( __PLUGIN__ ) +#if defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__) # define E_( function ) CONCATENATE( function, MODULE_SYMBOL ) # define __VLC_SYMBOL( symbol ) CONCATENATE( symbol, MODULE_SYMBOL ) -#endif - -#if defined( __BUILTIN__ ) || defined( HAVE_SHARED_LIBVLC ) -# define DECLARE_SYMBOLS struct _u_n_u_s_e_d_ -# define STORE_SYMBOLS struct _u_n_u_s_e_d_ #else -# define DECLARE_SYMBOLS module_symbols_t* p_symbols = NULL -# define STORE_SYMBOLS p_symbols = p_module->p_symbols +# define E_( function ) CONCATENATE( function, MODULE_NAME ) +# define __VLC_SYMBOL( symbol ) CONCATENATE( symbol, MODULE_NAME ) #endif #if defined( __PLUGIN__ ) && ( defined( WIN32 ) || defined( UNDER_CE ) ) # define DLL_SYMBOL __declspec(dllexport) # define CDECL_SYMBOL __cdecl -#elif HAVE_ATTRIBUTE_VISIBILITY +#elif defined (HAVE_ATTRIBUTE_VISIBILITY) # define DLL_SYMBOL __attribute__((visibility("default"))) # define CDECL_SYMBOL #else @@ -109,50 +107,25 @@ E_(vlc_entry) ( module_t *p_module ); #endif #define vlc_module_begin( ) \ - DECLARE_SYMBOLS; \ EXTERN_SYMBOL DLL_SYMBOL int CDECL_SYMBOL \ __VLC_SYMBOL(vlc_entry) ( module_t *p_module ) \ { \ - int i_shortcut = 1, res; \ - size_t i_config = (size_t)(-1); \ module_config_t *p_config = NULL; \ - STORE_SYMBOLS; \ - p_module->b_submodule = VLC_FALSE; \ - p_module->b_unloadable = VLC_TRUE; \ - p_module->b_reentrant = VLC_TRUE; \ - p_module->psz_object_name = MODULE_STRING; \ - p_module->psz_shortname = NULL; \ - p_module->psz_longname = MODULE_STRING; \ - p_module->psz_help = NULL; \ - p_module->pp_shortcuts[ 0 ] = MODULE_STRING; \ - for( unsigned i = 1; i < MODULE_SHORTCUT_MAX; i++ ) \ - p_module->pp_shortcuts[i] = NULL; \ - p_module->i_cpu = 0; \ - p_module->psz_program = NULL; \ - p_module->psz_capability = ""; \ - p_module->i_score = 1; \ - p_module->pf_activate = NULL; \ - p_module->pf_deactivate = NULL; \ + if (vlc_module_set (p_module, VLC_MODULE_NAME, \ + (void *)(MODULE_STRING))) \ + goto error; \ { \ module_t *p_submodule = p_module /* the ; gets added */ #define vlc_module_end( ) \ - p_submodule->pp_shortcuts[ i_shortcut ] = NULL; \ } \ - res = config_Duplicate( p_module, p_config, ++i_config ); \ - for( size_t i = 0; i < i_config; i++ ) \ - { \ - if( p_config[ i ].i_action ) \ - { \ - free( p_config[ i ].ppf_action ); \ - free( p_config[ i ].ppsz_action_text ); \ - } \ - } \ - free( p_config ); \ - if (res) \ - return res; \ - (void)i_shortcut; \ + (void)p_config; \ return VLC_SUCCESS; \ + \ + error: \ + /* FIXME: config_Free( p_module ); */ \ + /* FIXME: cleanup submodules objects ??? */ \ + return VLC_EGENERIC; \ } \ struct _u_n_u_s_e_d_ /* the ; gets added */ @@ -161,32 +134,37 @@ E_(vlc_entry) ( module_t *p_module ); p_submodule = vlc_submodule_create( p_module ) #define add_requirement( cap ) \ - vlc_module_set (p_module, VLC_MODULE_CPU_REQUIREMENT, \ - (void *)(CPU_CAPABILITY_##cap)) + if (vlc_module_set (p_module, VLC_MODULE_CPU_REQUIREMENT, \ + (void *)(intptr_t)(CPU_CAPABILITY_##cap))) goto error #define add_shortcut( shortcut ) \ - vlc_module_set (p_submodule, VLC_MODULE_SHORTCUT, (void*)(shortcut)) + if (vlc_module_set (p_submodule, VLC_MODULE_SHORTCUT, (void*)(shortcut))) \ + goto error #define set_shortname( shortname ) \ - vlc_module_set (p_submodule, VLC_MODULE_SHORTNAME, (void*)(shortname)) + if (vlc_module_set (p_submodule, VLC_MODULE_SHORTNAME, \ + (void*)(shortname))) goto error; #define set_description( desc ) \ - vlc_module_set (p_submodule, VLC_MODULE_DESCRIPTION, (void*)(desc)) + if (vlc_module_set (p_submodule, VLC_MODULE_DESCRIPTION, (void*)(desc))) \ + goto error #define set_help( help ) \ - vlc_module_set (p_submodule, VLC_MODULE_HELP, (void*)(help)) + if (vlc_module_set (p_submodule, VLC_MODULE_HELP, (void*)(help))) \ + goto error #define set_capability( cap, score ) \ - vlc_module_set (p_submodule, VLC_MODULE_CAPABILITY, (void *)(cap)); \ - vlc_module_set (p_submodule, VLC_MODULE_SCORE, (void *)(score)) - -#define set_program( program ) \ - vlc_module_set (p_submodule, VLC_MODULE_PROGRAM, (void *)(program)) + if (vlc_module_set (p_submodule, VLC_MODULE_CAPABILITY, (void *)(cap)) \ + || vlc_module_set (p_submodule, VLC_MODULE_SCORE, \ + (void *)(intptr_t)(score))) \ + goto error #define set_callbacks( activate, deactivate ) \ - vlc_module_set (p_submodule, VLC_MODULE_CB_OPEN, (void *)(activate)); \ - vlc_module_set (p_submodule, VLC_MODULE_CB_CLOSE, (void *)(deactivate)) + if (vlc_module_set (p_submodule, VLC_MODULE_CB_OPEN, (void *)(activate)) \ + || vlc_module_set (p_submodule, VLC_MODULE_CB_CLOSE, \ + (void *)(deactivate))) \ + goto error #define linked_with_a_crap_library_which_uses_atexit( ) \ - vlc_module_set (p_submodule, VLC_MODULE_UNLOADABLE, NULL) + if (vlc_module_set (p_submodule, VLC_MODULE_UNLOADABLE, NULL)) goto error