]> git.sesse.net Git - vlc/blobdiff - include/vlc_modules_macros.h
failing testapi test added
[vlc] / include / vlc_modules_macros.h
index c8f476e212a5d80fc6a4ad724ccea4aef6f6c526..88ee156044dc81c09034b0aa7e747a3317badafe 100644 (file)
 #   define MODULE_NAME main
 #endif
 
+/**
+ * Current plugin ABI version
+ */
+# define MODULE_SYMBOL 0_9_0j
+# define MODULE_SUFFIX "__0_9_0j"
+
 /*****************************************************************************
  * 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.
 
 /* 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 )
-#   define DECLARE_SYMBOLS         struct _u_n_u_s_e_d_
-#   define STORE_SYMBOLS           struct _u_n_u_s_e_d_
-#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 )
-#   define DECLARE_SYMBOLS         module_symbols_t* p_symbols
-#   define STORE_SYMBOLS           p_symbols = p_module->p_symbols
+#else
+#   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
@@ -105,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 */
 
@@ -157,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