From 1bef27ee10a820ceabdcfc6389e61b7fab934eea Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sat, 2 Nov 2024 23:03:25 +0100
Subject: Load UI plugins only in case of graphical support.

---
 plugins/pychrysalide/core.c           |   6 +-
 plugins/pychrysalide/core/Makefile.am |   3 +-
 plugins/pychrysalide/core/module.c    |   2 +
 plugins/pychrysalide/core/nox.c       | 110 ++++++++++++++++++++++++++++++++++
 plugins/pychrysalide/core/nox.h       |  39 ++++++++++++
 src/core/Makefile.am                  |   1 +
 src/core/core.c                       |   1 +
 src/core/nox.c                        |  62 +++++++++++++++++++
 src/core/nox.h                        |  37 ++++++++++++
 src/gui/core/Makefile.am              |   1 +
 src/gui/core/core.c                   |   1 +
 src/gui/core/nox.c                    |  48 +++++++++++++++
 src/gui/core/nox.h                    |  37 ++++++++++++
 src/plugins/pglist.c                  |  21 +++++++
 14 files changed, 365 insertions(+), 4 deletions(-)
 create mode 100644 plugins/pychrysalide/core/nox.c
 create mode 100644 plugins/pychrysalide/core/nox.h
 create mode 100644 src/core/nox.c
 create mode 100644 src/core/nox.h
 create mode 100644 src/gui/core/nox.c
 create mode 100644 src/gui/core/nox.h

diff --git a/plugins/pychrysalide/core.c b/plugins/pychrysalide/core.c
index 8510d78..a4de749 100644
--- a/plugins/pychrysalide/core.c
+++ b/plugins/pychrysalide/core.c
@@ -61,8 +61,8 @@
 #include "analysis/module.h"
 #include "arch/module.h"
 #include "common/module.h"
+#include "core/module.h"
 #include "glibext/module.h"
-/* #include "core/module.h" */
 /* #include "debug/module.h" */
 /* #include "format/module.h" */
 /* #ifdef INCLUDE_GTK_SUPPORT */
@@ -647,8 +647,8 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)
     if (status) status = add_arch_module(result);
     if (status) status = add_common_module(result);
     if (status) status = add_glibext_module(result);
-    /*
     if (status) status = add_core_module(result);
+    /*
     if (status) status = add_debug_module(result);
     if (status) status = add_format_module(result);
 #ifdef INCLUDE_GTK_SUPPORT
@@ -670,8 +670,8 @@ PyMODINIT_FUNC PyInit_pychrysalide(void)
     if (status) status = populate_arch_module();
     if (status) status = populate_glibext_module();
     if (status) status = populate_common_module();
-    /*
     if (status) status = populate_core_module();
+    /*
     if (status) status = populate_debug_module();
     if (status) status = populate_format_module();
 #ifdef INCLUDE_GTK_SUPPORT
diff --git a/plugins/pychrysalide/core/Makefile.am b/plugins/pychrysalide/core/Makefile.am
index a50324a..5588c9f 100644
--- a/plugins/pychrysalide/core/Makefile.am
+++ b/plugins/pychrysalide/core/Makefile.am
@@ -14,7 +14,8 @@ noinst_LTLIBRARIES = libpychrysacore.la
 libpychrysacore_la_SOURCES =				\
 	constants.h constants.c					\
 	logs.h logs.c							\
-	module.h module.c
+	module.h module.c						\
+	nox.h nox.c
 
 libpychrysacore_la_CFLAGS = $(TOOLKIT_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_INTERPRETER_CFLAGS) $(LIBPYGOBJECT_CFLAGS) \
 	-I$(top_srcdir)/src -DNO_IMPORT_PYGOBJECT
diff --git a/plugins/pychrysalide/core/module.c b/plugins/pychrysalide/core/module.c
index b588057..4af0403 100644
--- a/plugins/pychrysalide/core/module.c
+++ b/plugins/pychrysalide/core/module.c
@@ -31,6 +31,7 @@
 //#include "demanglers.h"
 //#include "global.h"
 #include "logs.h"
+#include "nox.h"
 //#include "params.h"
 //#include "processors.h"
 //#include "queue.h"
@@ -105,6 +106,7 @@ bool populate_core_module(void)
     //if (result) result = populate_core_module_with_demanglers();
     //if (result) result = populate_core_module_with_global();
     if (result) result = populate_core_module_with_logs();
+    if (result) result = populate_core_module_with_nox();
     //if (result) result = populate_core_module_with_params();
     //if (result) result = populate_core_module_with_processors();
     //if (result) result = populate_core_module_with_queue();
diff --git a/plugins/pychrysalide/core/nox.c b/plugins/pychrysalide/core/nox.c
new file mode 100644
index 0000000..46a4847
--- /dev/null
+++ b/plugins/pychrysalide/core/nox.c
@@ -0,0 +1,110 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * nox.c - équivalent Python du fichier "core/nox.c"
+ *
+ * Copyright (C) 2024 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 "nox.h"
+
+
+#include <pygobject.h>
+
+
+#include <core/nox.h>
+#include <plugins/self.h>
+
+
+#include "../access.h"
+#include "../helpers.h"
+
+
+
+/* Indique la présence ou l'absence d'un affichage graphique. */
+static PyObject *py_nox_run_in_nox_mode(PyObject *, PyObject *);
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : self = objet Python concerné par l'appel.                    *
+*                args = arguments fournis à l'appel.                          *
+*                                                                             *
+*  Description : Indique la présence ou l'absence d'un affichage graphique.   *
+*                                                                             *
+*  Retour      : Statut à transmettre.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+static PyObject *py_nox_run_in_nox_mode(PyObject *self, PyObject *args)
+{
+    PyObject *result;                       /* Conversion à retourner      */
+    bool status;                            /* Statut à retransmettre      */
+
+#define NOX_RUN_IN_NOX_MODE_METHOD PYTHON_METHOD_DEF                        \
+(                                                                           \
+    run_in_nox_mode, "",                                                    \
+    METH_NOARGS, py_nox,                                                    \
+    "Tell if Chrysalide runs with a graphical support or not."              \
+    "\n"                                                                    \
+    "The result is a boolean status: *True* in case of terminal only mode." \
+)
+
+    status = run_in_nox_mode();
+
+    result = status ? Py_True : Py_False;
+    Py_INCREF(result);
+
+    return result;
+
+}
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : -                                                            *
+*                                                                             *
+*  Description : Définit une extension du module 'core' à compléter.          *
+*                                                                             *
+*  Retour      : Bilan de l'opération.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool populate_core_module_with_nox(void)
+{
+    bool result;                            /* Bilan à retourner           */
+    PyObject *module;                       /* Module à recompléter        */
+
+    static PyMethodDef py_nox_methods[] = {
+        NOX_RUN_IN_NOX_MODE_METHOD,
+        { NULL }
+    };
+
+    module = get_access_to_python_module("pychrysalide.core");
+
+    result = register_python_module_methods(module, py_nox_methods);
+
+    return result;
+
+}
diff --git a/plugins/pychrysalide/core/nox.h b/plugins/pychrysalide/core/nox.h
new file mode 100644
index 0000000..042f5a8
--- /dev/null
+++ b/plugins/pychrysalide/core/nox.h
@@ -0,0 +1,39 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * nox.h - prototypes pour l'équivalent Python du fichier "core/nox.h"
+ *
+ * Copyright (C) 2024 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_CORE_NOX_H
+#define _PLUGINS_PYCHRYSALIDE_CORE_NOX_H
+
+
+#include <Python.h>
+#include <stdbool.h>
+
+
+
+/* Définit une extension du module 'core' à compléter. */
+bool populate_core_module_with_nox(void);
+
+
+
+#endif  /* _PLUGINS_PYCHRYSALIDE_CORE_NOX_H */
diff --git a/src/core/Makefile.am b/src/core/Makefile.am
index de34d03..e1e3c4e 100644
--- a/src/core/Makefile.am
+++ b/src/core/Makefile.am
@@ -18,6 +18,7 @@ libcore4_la_SOURCES =						\
 	core.h core.c							\
 	global.h global.c						\
 	logs.h logs.c							\
+	nox.h nox.c								\
 	nproc.h nproc.c							\
 	paths.h paths.c
 
diff --git a/src/core/core.c b/src/core/core.c
index 1f40cb3..9514ee1 100644
--- a/src/core/core.c
+++ b/src/core/core.c
@@ -32,6 +32,7 @@
 static AvailableCoreComponent __loaded = ACC_NONE;
 
 
+
 /******************************************************************************
 *                                                                             *
 *  Paramètres  : flags = liste d'éléments à charger.                          *
diff --git a/src/core/nox.c b/src/core/nox.c
new file mode 100644
index 0000000..ccf9de2
--- /dev/null
+++ b/src/core/nox.c
@@ -0,0 +1,62 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * nox.c - indication de présence ou d'absence de support graphique
+ *
+ * Copyright (C) 2024 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 Chrysalide.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "nox.h"
+
+
+#include <stddef.h>
+
+
+#include "../common/compiler.h"
+
+
+
+/*  Indique la présence ou l'absence d'un affichage graphique. */
+__weak bool _run_in_nox_mode(void);
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : -                                                            *
+*                                                                             *
+*  Description : Indique la présence ou l'absence d'un affichage graphique.   *
+*                                                                             *
+*  Retour      : Statut à transmettre.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool run_in_nox_mode(void)
+{
+    bool result;                            /* Statut à retournr           */
+
+    if (_run_in_nox_mode == NULL)
+        result = true;
+    else
+        result = _run_in_nox_mode();
+
+    return result;
+
+}
diff --git a/src/core/nox.h b/src/core/nox.h
new file mode 100644
index 0000000..c2c225d
--- /dev/null
+++ b/src/core/nox.h
@@ -0,0 +1,37 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * nox.h - prototypes pour l'indication de présence ou d'absence de support graphique
+ *
+ * Copyright (C) 2024 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 Chrysalide.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef _CORE_NOX_H
+#define _CORE_NOX_H
+
+
+#include <stdbool.h>
+
+
+
+/* Indique la présence ou l'absence d'un affichage graphique. */
+bool run_in_nox_mode(void);
+
+
+
+#endif  /* _CORE_NOX_H */
diff --git a/src/gui/core/Makefile.am b/src/gui/core/Makefile.am
index 3c4cbc7..a854977 100644
--- a/src/gui/core/Makefile.am
+++ b/src/gui/core/Makefile.am
@@ -24,6 +24,7 @@ libguicore_la_CFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS)
 libguicore4_la_SOURCES =					\
 	core.h core.c							\
 	logs.h logs.c							\
+	nox.h nox.c								\
 	panels.h panels.c
 
 libguicore4_la_CFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS)
diff --git a/src/gui/core/core.c b/src/gui/core/core.c
index d02d54c..4a6809c 100644
--- a/src/gui/core/core.c
+++ b/src/gui/core/core.c
@@ -33,6 +33,7 @@
 static AvailableGuiComponent __loaded = AGC_NONE;
 
 
+
 /******************************************************************************
 *                                                                             *
 *  Paramètres  : flags = liste d'éléments à charger.                          *
diff --git a/src/gui/core/nox.c b/src/gui/core/nox.c
new file mode 100644
index 0000000..7f3ae1f
--- /dev/null
+++ b/src/gui/core/nox.c
@@ -0,0 +1,48 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * nox.c - indication de présence ou d'absence de support graphique
+ *
+ * Copyright (C) 2024 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 Chrysalide.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "nox.h"
+
+
+
+/******************************************************************************
+*                                                                             *
+*  Paramètres  : -                                                            *
+*                                                                             *
+*  Description : Indique la présence ou l'absence d'un affichage graphique.   *
+*                                                                             *
+*  Retour      : Statut à transmettre.                                        *
+*                                                                             *
+*  Remarques   : -                                                            *
+*                                                                             *
+******************************************************************************/
+
+bool _run_in_nox_mode(void)
+{
+    bool result;                            /* Statut à retournr           */
+
+    result = false;
+
+    return result;
+
+}
diff --git a/src/gui/core/nox.h b/src/gui/core/nox.h
new file mode 100644
index 0000000..e03b365
--- /dev/null
+++ b/src/gui/core/nox.h
@@ -0,0 +1,37 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * nox.h - prototypes pour l'indication de présence ou d'absence de support graphique
+ *
+ * Copyright (C) 2024 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 Chrysalide.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef _GUI_CORE_NOX_H
+#define _GUI_CORE_NOX_H
+
+
+#include <stdbool.h>
+
+
+
+/* Indique la présence ou l'absence d'un affichage graphique. */
+bool _run_in_nox_mode(void);
+
+
+
+#endif  /* _GUI_CORE_NOX_H */
diff --git a/src/plugins/pglist.c b/src/plugins/pglist.c
index 6b36d2f..e4cb825 100644
--- a/src/plugins/pglist.c
+++ b/src/plugins/pglist.c
@@ -39,6 +39,7 @@
 #include "plugin-int.h"
 #include "../common/extstr.h"
 #include "../core/logs.h"
+#include "../core/nox.h"
 #include "../core/paths.h"
 
 
@@ -255,6 +256,7 @@ static void browse_directory_for_plugins(const char *dir)
 {
     struct dirent **namelist;               /* Eléments trouvés            */
     int ret;                                /* Bilan du parcours           */
+    bool nox;                               /* Absence de support graphique*/
     char *filename;                         /* Elément à ausculter         */
     GPluginModule *plugin;                  /* Greffon à intégrer ou pas   */
 
@@ -265,8 +267,27 @@ static void browse_directory_for_plugins(const char *dir)
         return;
     }
 
+    nox = run_in_nox_mode();
+
     while (ret--)
     {
+
+        if (nox)
+        {
+#ifdef _WIN32
+#   define UI_SHARED_SUFFIX "-ui.dll"
+#else
+#   define UI_SHARED_SUFFIX "-ui.so"
+#endif
+
+            if (strstr(namelist[ret]->d_name, UI_SHARED_SUFFIX) != NULL)
+            {
+                log_variadic_message(LMT_ERROR, _("Skipping unsuitable file: %s"), namelist[ret]->d_name);
+                continue;
+            }
+
+        }
+
         filename = (char *)calloc(strlen(dir) + 1 + strlen(namelist[ret]->d_name) + 1, sizeof(char));
 
         strcpy(filename, dir);
-- 
cgit v0.11.2-87-g4458