diff options
Diffstat (limited to 'plugins/pychrysalide')
| -rw-r--r-- | plugins/pychrysalide/Makefile.am | 9 | ||||
| -rw-r--r-- | plugins/pychrysalide/core.c | 55 | ||||
| -rw-r--r-- | plugins/pychrysalide/plugins/Makefile.am | 24 | ||||
| -rw-r--r-- | plugins/pychrysalide/plugins/constants.c (renamed from plugins/pychrysalide/constants.c) | 2 | ||||
| -rw-r--r-- | plugins/pychrysalide/plugins/constants.h (renamed from plugins/pychrysalide/constants.h) | 6 | ||||
| -rw-r--r-- | plugins/pychrysalide/plugins/module.c | 104 | ||||
| -rw-r--r-- | plugins/pychrysalide/plugins/module.h | 42 | ||||
| -rw-r--r-- | plugins/pychrysalide/plugins/plugin.c (renamed from plugins/pychrysalide/plugin.c) | 13 | ||||
| -rw-r--r-- | plugins/pychrysalide/plugins/plugin.h (renamed from plugins/pychrysalide/plugin.h) | 6 | 
9 files changed, 193 insertions, 68 deletions
| diff --git a/plugins/pychrysalide/Makefile.am b/plugins/pychrysalide/Makefile.am index d3b5483..b4b20ad 100644 --- a/plugins/pychrysalide/Makefile.am +++ b/plugins/pychrysalide/Makefile.am @@ -1,4 +1,6 @@ +DEFAULT_INCLUDES = -I$(top_builddir) -idirafter. +  lib_LTLIBRARIES = pychrysalide.la  libdir = $(pluginslibdir) @@ -6,10 +8,8 @@ libdir = $(pluginslibdir)  pychrysalide_la_SOURCES =				\  	access.h access.c					\ -	constants.h constants.c				\  	core.h core.c						\  	helpers.h helpers.c					\ -	plugin.h plugin.c					\  	star.h star.c						\  	strenum.h strenum.c					\  	struct.h struct.c					\ @@ -25,7 +25,8 @@ pychrysalide_la_LIBADD =				\  	glibext/libpychrysaglibext.la		\  	gtkext/libpychrysagtkext.la			\  	gui/libpychrysagui.la				\ -	mangling/libpychrysamangling.la +	mangling/libpychrysamangling.la		\ +	plugins/libpychrysaplugins.la  pychrysalide_la_LDFLAGS =					\  	-module -avoid-version					\ @@ -43,4 +44,4 @@ AM_CPPFLAGS = $(LIBPYTHON_CFLAGS) $(LIBPYGOBJECT_CFLAGS) $(LIBGTK_CFLAGS) $(LIBX  AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS) -SUBDIRS = analysis arch common core debug format glibext gtkext gui mangling +SUBDIRS = analysis arch common core debug format glibext gtkext gui mangling plugins diff --git a/plugins/pychrysalide/core.c b/plugins/pychrysalide/core.c index 7bc46e4..30d4259 100644 --- a/plugins/pychrysalide/core.c +++ b/plugins/pychrysalide/core.c @@ -49,7 +49,6 @@  #include "access.h"  #include "helpers.h" -#include "plugin.h"  #include "star.h"  #include "strenum.h"  #include "struct.h" @@ -63,6 +62,8 @@  #include "gtkext/module.h"  #include "gui/module.h"  #include "mangling/module.h" +#include "plugins/module.h" +#include "plugins/plugin.h" @@ -100,9 +101,6 @@ static bool set_version_for_gtk_namespace(const char *);  /* Point de sortie pour l'initialisation de Python. */  static void PyExit_pychrysalide(void); -/* Ajoute le module 'plugins' au module Python. */ -static bool add_plugin_module_to_python_module(PyObject *); -  /* Complète les chemins de recherches de Python. */  static void extend_python_path(const char *); @@ -371,50 +369,6 @@ static void PyExit_pychrysalide(void)  /******************************************************************************  *                                                                             * -*  Paramètres  : super = module dont la définition est à compléter.           * -*                                                                             * -*  Description : Ajoute le module 'plugins' au module Python.                 * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static bool add_plugin_module_to_python_module(PyObject *super) -{ -    bool result;                            /* Bilan à retourner           */ -    PyObject *module;                       /* Sous-module mis en place    */ - -#define PYCHRYSALIDE_PLUGINS_DOC                    \ -    "Home for all plugins without another home." - -    static PyModuleDef py_chrysalide_deguard_module = { - -        .m_base = PyModuleDef_HEAD_INIT, - -        .m_name = "pychrysalide.plugins", -        .m_doc = PYCHRYSALIDE_PLUGINS_DOC, - -        .m_size = -1, - -    }; - -    result = false; - -    module = build_python_module(super, &py_chrysalide_deguard_module); - -    result = (module != NULL); - -    assert(result); - -    return result; - -} - - -/****************************************************************************** -*                                                                             *  *  Paramètres  : -                                                            *  *                                                                             *  *  Description : Point d'entrée pour l'initialisation de Python.              * @@ -514,8 +468,6 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)      if (status) status = add_features_module(result); -    if (status) add_plugin_module_to_python_module(result); -      if (status) status = add_analysis_module(result);      if (status) status = add_arch_module(result);      if (status) status = add_common_module(result); @@ -526,8 +478,8 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)      if (status) status = add_gtkext_module(result);      if (status) status = add_gui_module(result);      if (status) status = add_mangling_module(result); +    if (status) status = add_plugins_module(result); -    if (status) status = ensure_python_plugin_module_is_registered();      if (status) status = ensure_python_string_enum_is_registered();      if (status) status = ensure_python_py_struct_is_registered(); @@ -541,6 +493,7 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)      if (status) status = populate_gtkext_module();      if (status) status = populate_gui_module();      if (status) status = populate_mangling_module(); +    if (status) status = populate_plugins_module();      if (!status)      { diff --git a/plugins/pychrysalide/plugins/Makefile.am b/plugins/pychrysalide/plugins/Makefile.am new file mode 100644 index 0000000..0ab8c15 --- /dev/null +++ b/plugins/pychrysalide/plugins/Makefile.am @@ -0,0 +1,24 @@ + +noinst_LTLIBRARIES = libpychrysaplugins.la + +libpychrysaplugins_la_SOURCES =			\ +	constants.h constants.c				\ +	plugin.h plugin.c					\ +	module.h module.c + +libpychrysaplugins_la_LIBADD =  + +libpychrysaplugins_la_LDFLAGS =  + + +devdir = $(includedir)/chrysalide/$(subdir) + +dev_HEADERS = $(libpychrysaplugins_la_SOURCES:%c=) + + +AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_CFLAGS) $(LIBPYGOBJECT_CFLAGS) \ +	-I$(top_srcdir)/src + +AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS) + +SUBDIRS =  diff --git a/plugins/pychrysalide/constants.c b/plugins/pychrysalide/plugins/constants.c index 97cf43b..9de044a 100644 --- a/plugins/pychrysalide/constants.c +++ b/plugins/pychrysalide/plugins/constants.c @@ -28,7 +28,7 @@  #include <plugins/plugin-def.h> -#include "helpers.h" +#include "../helpers.h" diff --git a/plugins/pychrysalide/constants.h b/plugins/pychrysalide/plugins/constants.h index 21f9d0e..71abcff 100644 --- a/plugins/pychrysalide/constants.h +++ b/plugins/pychrysalide/plugins/constants.h @@ -22,8 +22,8 @@   */ -#ifndef _PLUGINS_PYCHRYSALIDE_CONSTANTS_H -#define _PLUGINS_PYCHRYSALIDE_CONSTANTS_H +#ifndef _PLUGINS_PYCHRYSALIDE_PLUGINS_CONSTANTS_H +#define _PLUGINS_PYCHRYSALIDE_PLUGINS_CONSTANTS_H  #include <Python.h> @@ -35,4 +35,4 @@ bool define_plugin_module_constants(PyTypeObject *); -#endif  /* _PLUGINS_PYCHRYSALIDE_CONSTANTS_H */ +#endif  /* _PLUGINS_PYCHRYSALIDE_PLUGINS_CONSTANTS_H */ diff --git a/plugins/pychrysalide/plugins/module.c b/plugins/pychrysalide/plugins/module.c new file mode 100644 index 0000000..c38caa3 --- /dev/null +++ b/plugins/pychrysalide/plugins/module.c @@ -0,0 +1,104 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * module.c - intégration du répertoire plugins en tant que module + * + * Copyright (C) 2021 Cyrille Bagard + * + *  This file is part of Chrysalide. + * + *  Chrysalide is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 3 of the License, or + *  (at your option) any later version. + * + *  Chrysalide is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with this program; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + + +#include "module.h" + + +#include <assert.h> + + +#include "plugin.h" +#include "../helpers.h" + + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : super = module dont la définition est à compléter.           * +*                                                                             * +*  Description : Ajoute le module 'plugins' à un module Python.               * +*                                                                             * +*  Retour      : Bilan de l'opération.                                        * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +bool add_plugins_module(PyObject *super) +{ +    bool result;                            /* Bilan à retourner           */ +    PyObject *module;                       /* Sous-module mis en place    */ + +#define PYCHRYSALIDE_PLUGINS_DOC                                            \ +    "This module provides features to deal with plugins: the definitions"   \ +    " required to build new Python plugins as well as functions to"         \ +    " interact with existing plugins.\n"                                    \ +    "\n"                                                                    \ +    "The module is also the place for all plugins without another home." + +    static PyModuleDef py_chrysalide_plugins_module = { + +        .m_base = PyModuleDef_HEAD_INIT, + +        .m_name = "pychrysalide.plugins", +        .m_doc = PYCHRYSALIDE_PLUGINS_DOC, + +        .m_size = -1, + +    }; + +    module = build_python_module(super, &py_chrysalide_plugins_module); + +    result = (module != NULL); + +    return result; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : -                                                            * +*                                                                             * +*  Description : Intègre les objets du module 'plugins'.                      * +*                                                                             * +*  Retour      : Bilan de l'opération.                                        * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +bool populate_plugins_module(void) +{ +    bool result;                            /* Bilan à retourner           */ + +    result = true; + +    if (result) result = ensure_python_plugin_module_is_registered(); + +    assert(result); + +    return result; + +} diff --git a/plugins/pychrysalide/plugins/module.h b/plugins/pychrysalide/plugins/module.h new file mode 100644 index 0000000..e2b10b9 --- /dev/null +++ b/plugins/pychrysalide/plugins/module.h @@ -0,0 +1,42 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * module.h - prototypes pour l'intégration du répertoire plugins en tant que module + * + * Copyright (C) 2021 Cyrille Bagard + * + *  This file is part of Chrysalide. + * + *  Chrysalide is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 3 of the License, or + *  (at your option) any later version. + * + *  Chrysalide is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with this program; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + + +#ifndef _PLUGINS_PYCHRYSALIDE_PLUGINS_MODULE_H +#define _PLUGINS_PYCHRYSALIDE_PLUGINS_MODULE_H + + +#include <Python.h> +#include <stdbool.h> + + + +/* Ajoute le module 'plugins' à un module Python. */ +bool add_plugins_module(PyObject *); + +/* Intègre les objets du module 'plugins'. */ +bool populate_plugins_module(void); + + + +#endif  /* _PLUGINS_PYCHRYSALIDE_PLUGINS_MODULE_H */ diff --git a/plugins/pychrysalide/plugin.c b/plugins/pychrysalide/plugins/plugin.c index 88b20de..e5ee1ad 100644 --- a/plugins/pychrysalide/plugin.c +++ b/plugins/pychrysalide/plugins/plugin.c @@ -34,15 +34,16 @@  #include <common/extstr.h>  #include <plugins/dt.h> +#include <plugins/plugin-int.h>  #include <plugins/pglist.h>  #include <plugins/self.h> -#include "access.h"  #include "constants.h" -#include "core.h" -#include "helpers.h" -#include "core/constants.h" +#include "../access.h" +#include "../core.h" +#include "../helpers.h" +#include "../core/constants.h" @@ -1824,7 +1825,7 @@ PyTypeObject *get_python_plugin_module_type(void)          PyVarObject_HEAD_INIT(NULL, 0) -        .tp_name        = "pychrysalide.PluginModule", +        .tp_name        = "pychrysalide.plugins.PluginModule",          .tp_basicsize   = sizeof(PyGObject),          .tp_flags       = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, @@ -1866,7 +1867,7 @@ bool ensure_python_plugin_module_is_registered(void)      if (!PyType_HasFeature(type, Py_TPFLAGS_READY))      { -        module = get_access_to_python_module("pychrysalide"); +        module = get_access_to_python_module("pychrysalide.plugins");          dict = PyModule_GetDict(module); diff --git a/plugins/pychrysalide/plugin.h b/plugins/pychrysalide/plugins/plugin.h index 183ae4a..2a31cf2 100644 --- a/plugins/pychrysalide/plugin.h +++ b/plugins/pychrysalide/plugins/plugin.h @@ -22,8 +22,8 @@   */ -#ifndef _PLUGINS_PYCHRYSALIDE_PLUGIN_H -#define _PLUGINS_PYCHRYSALIDE_PLUGIN_H +#ifndef _PLUGINS_PYCHRYSALIDE_PLUGINS_PLUGIN_H +#define _PLUGINS_PYCHRYSALIDE_PLUGINS_PLUGIN_H  #include <Python.h> @@ -72,4 +72,4 @@ bool ensure_python_plugin_module_is_registered(void); -#endif  /* _PLUGINS_PYCHRYSALIDE_PLUGIN_H */ +#endif  /* _PLUGINS_PYCHRYSALIDE_PLUGINS_PLUGIN_H */ | 
