static
struct bt_plugin_set *(*bt_plugin_python_create_all_from_file_sym)(const char *path) =
bt_plugin_python_create_all_from_file;
+
+static
+void init_python_plugin_provider(void) {}
#else /* BT_BUILT_IN_PYTHON_PLUGIN_SUPPORT */
static GModule *python_plugin_provider_module;
static
struct bt_plugin_set *(*bt_plugin_python_create_all_from_file_sym)(const char *path);
-__attribute__((constructor)) static
+static
void init_python_plugin_provider(void) {
+ if (bt_plugin_python_create_all_from_file_sym != NULL) {
+ return;
+ }
+
BT_LOGD_STR("Loading Python plugin provider module.");
python_plugin_provider_module =
- g_module_open(PYTHON_PLUGIN_PROVIDER_FILENAME,
- G_MODULE_BIND_LOCAL);
+ g_module_open(PYTHON_PLUGIN_PROVIDER_FILENAME, 0);
if (!python_plugin_provider_module) {
- BT_LOGI("Cannot find `%s`: continuing without Python plugin support.",
- PYTHON_PLUGIN_PROVIDER_FILENAME);
+ BT_LOGI("Cannot open `%s`: %s: continuing without Python plugin support.",
+ PYTHON_PLUGIN_PROVIDER_FILENAME, g_module_error());
return;
}
}
/* Try Python plugins if support is available */
+ init_python_plugin_provider();
if (bt_plugin_python_create_all_from_file_sym) {
plugin_set = bt_plugin_python_create_all_from_file_sym(path);
if (plugin_set) {
switch (flag) {
case FTW_F:
+ {
+ struct bt_plugin_set *plugins_from_file;
+
if (name[0] == '.') {
/* Skip hidden files */
BT_LOGV("Skipping hidden file: path=\"%s\"", file);
goto end;
}
- struct bt_plugin_set *plugins_from_file =
- bt_plugin_create_all_from_file(file);
+
+ plugins_from_file = bt_plugin_create_all_from_file(file);
if (plugins_from_file) {
size_t j;
bt_put(plugins_from_file);
}
break;
+ }
case FTW_DNR:
/* Continue to next file / directory. */
BT_LOGW("Cannot enter directory: continuing: path=\"%s\"", file);