#endif
#include <signal.h>
#include <errno.h>
+#include <string.h>
#include "glib-compat-private.h"
return quark;
}
-#ifndef GST_REMOVE_DEPRECATED
-#ifdef GST_DISABLE_DEPRECATED
-void _gst_plugin_register_static (GstPluginDesc * desc);
-#endif
-/* this function can be called in the GCC constructor extension, before
- * the _gst_plugin_initialize() was called. In that case, we store the
- * plugin description in a list to initialize it when we open the main
- * module later on.
- * When the main module is known, we can register the plugin right away.
- */
-void
-_gst_plugin_register_static (GstPluginDesc * desc)
-{
- g_return_if_fail (desc != NULL);
-
- if (!_gst_plugin_inited) {
- /* We can't use any GLib functions here, since g_thread_init hasn't been
- * called yet, and we can't call it here either, or programs that don't
- * guard their g_thread_init calls in main() will just abort */
- ++_num_static_plugins;
- _static_plugins =
- realloc (_static_plugins, _num_static_plugins * sizeof (GstPluginDesc));
- /* assume strings in the GstPluginDesc are static const or live forever */
- _static_plugins[_num_static_plugins - 1] = *desc;
- } else {
- gst_plugin_register_static (desc->major_version, desc->minor_version,
- desc->name, desc->description, desc->plugin_init, desc->version,
- desc->license, desc->source, desc->package, desc->origin);
- }
-}
-#endif
-
/**
* gst_plugin_register_static:
* @major_version: the major version number of the GStreamer core that the
GStatBuf file_status;
GstRegistry *registry;
gboolean new_plugin = TRUE;
+ GModuleFlags flags;
g_return_val_if_fail (filename != NULL, NULL);
goto return_error;
}
- module = g_module_open (filename, G_MODULE_BIND_LOCAL);
+ flags = G_MODULE_BIND_LOCAL;
+ /* libgstpython.so is the gst-python plugin loader. It needs to be loaded with
+ * G_MODULE_BIND_LAZY.
+ *
+ * Ideally there should be a generic way for plugins to specify that they
+ * need to be loaded with _LAZY.
+ * */
+ if (strstr (filename, "libgstpython"))
+ flags |= G_MODULE_BIND_LAZY;
+
+ module = g_module_open (filename, flags);
if (module == NULL) {
GST_CAT_WARNING (GST_CAT_PLUGIN_LOADING, "module_open failed: %s",
g_module_error ());
GDir *dir;
guint hash = 0;
- recurse_dirs = ! !(flags & GST_PLUGIN_DEPENDENCY_FLAG_RECURSE);
+ recurse_dirs = !!(flags & GST_PLUGIN_DEPENDENCY_FLAG_RECURSE);
dir = g_dir_open (path, 0, &err);
if (dir == NULL) {
if (filenames == NULL || *filenames == NULL)
filenames = empty_filenames;
- recurse_into_dirs = ! !(flags & GST_PLUGIN_DEPENDENCY_FLAG_RECURSE);
- partial_names = ! !(flags & GST_PLUGIN_DEPENDENCY_FLAG_FILE_NAME_IS_SUFFIX);
+ recurse_into_dirs = !!(flags & GST_PLUGIN_DEPENDENCY_FLAG_RECURSE);
+ partial_names = !!(flags & GST_PLUGIN_DEPENDENCY_FLAG_FILE_NAME_IS_SUFFIX);
/* if we can construct the exact paths to check with the data we have, just
* stat them one by one; this is more efficient than opening the directory