summaryrefslogtreecommitdiff
path: root/plugins/pychrysalide/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/pychrysalide/core.c')
-rw-r--r--plugins/pychrysalide/core.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/plugins/pychrysalide/core.c b/plugins/pychrysalide/core.c
index 38e3c7c..98f94b6 100644
--- a/plugins/pychrysalide/core.c
+++ b/plugins/pychrysalide/core.c
@@ -42,6 +42,7 @@
#include <common/environment.h>
#include <common/extstr.h>
#include <core/core.h>
+#include <core/logs.h>
#include <core/paths.h>
#include <plugins/pglist.h>
#include <plugins/self.h>
@@ -399,6 +400,9 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)
PyObject *result; /* Module Python à retourner */
bool status; /* Bilan des inclusions */
int ret; /* Bilan de préparatifs */
+#ifdef PYTHON_PACKAGE
+ Dl_info info; /* Informations dynamiques */
+#endif
GPluginModule *self; /* Représentation interne */
PluginStatusFlags self_flags; /* Fanions à mettre à jour */
@@ -529,6 +533,32 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)
set_batch_mode();
+ /**
+ * Si cette extension pour Python est chargée depuis un dépôt Python,
+ * elle ne se trouve pas dans le répertoire classique des extensions et
+ * n'est donc pas chargée et enregistrée comme attendu.
+ *
+ * Cet enregistrement est donc forcé ici.
+ */
+
+#ifdef PYTHON_PACKAGE
+
+ ret = dladdr(__FUNCTION__, &info);
+ if (ret == 0)
+ {
+ LOG_ERROR_DL_N("dladdr");
+ Py_DECREF(result);
+ result = NULL;
+ goto exit;
+ }
+
+ self = g_plugin_module_new(info.dli_fname);
+ assert(self != NULL);
+
+ register_plugin(self);
+
+#endif
+
init_all_plugins(false);
lock_plugin_list_for_reading();