26 #include <libaudgui/init.h>
34 #define AUD_API_DECLARE
39 #undef AUD_API_DECLARE
47 .misc_api = & misc_api,
48 .playlist_api = & playlist_api,
49 .plugins_api = & plugins_api,
58 static pthread_mutex_t
mutex = PTHREAD_MUTEX_INITIALIZER;
64 fprintf (stderr,
" *** ERROR: %s is not a valid Audacious plugin.\n", filename);
65 g_module_close (module);
71 fprintf (stderr,
" *** ERROR: %s is not compatible with this version of Audacious.\n", filename);
72 g_module_close (module);
84 fprintf (stderr,
" *** ERROR: %s failed to initialize.\n", filename);
85 g_module_close (module);
91 pthread_mutex_lock (&
mutex);
96 pthread_mutex_unlock (&
mutex);
103 Plugin * header = loaded->
header;
105 switch (header->type)
116 pthread_mutex_lock (&
mutex);
117 g_module_close (loaded->
module);
119 pthread_mutex_unlock (&
mutex);
129 AUDDBG (
"Loading plugin: %s.\n", filename);
131 if (!(module = g_module_open(filename, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL)))
133 printf(
"Failed to load plugin (%s): %s\n", filename, g_module_error());
138 if (g_module_symbol (module,
"get_plugin_info", (
void *) &
func))
140 Plugin * header =
func (& api_table);
141 g_return_if_fail (header !=
NULL);
146 printf(
"Invalid plugin (%s)\n", filename);
147 g_module_close(module);
155 if (!g_file_test(path, G_FILE_TEST_IS_REGULAR))
170 assert (g_module_supported ());
175 audgui_init (& api_table);
179 #ifndef DISABLE_USER_PLUGIN_DIR