Subscription date : 24 January 2009
Messages : 12573
|
Hello,
@fabounet: Je me demandais pourquoi est-ce que tu as décidé d'utiliser dlopen, dlclose, etc. au lieu de g_module_open, g_module_close, etc. (surtout que g_module_supported est toujours utilisé dans Module Mgr)
D'après les log bzr, je vois: r792: use glibc 'dlopen' to open modules instead of GModule, to be able to use the RTLD_DEEPBIND flag.
Donc ok, d'après le man dlopen Place the lookup scope of the symbols in this library ahead of the global scope. This means that a self-contained library will use its own symbols in preference to global symbols with the same name contained in libraries that have already been loaded. This flag is not specified in POSIX.1-2001.
Il n'y a pas moyen d'avoir l'équivalent avec GModule? Car vu que g_module_supported est utilisé, il faut utiliser le module gmodule-2.0.
Ou alors, je propose de simplement de ne plus utiliser g_module_supported (d'après le code de GModule, ce n'est qu'une macro qui va voir si GModule supporte l'OS puisque GModule n'est qu'un GLIB wrapper code for dynamic module loading mais supporte aussi Windows).
Donc vérifier uniquement si 'dlopen' est disponible et si non, afficher une erreur. En conclusion, utiliser ce patch: === modified file 'CMakeLists.txt'
--- CMakeLists.txt 2012-08-18 23:05:25 +0000
+++ CMakeLists.txt 2012-08-25 10:13:32 +0000
@@ -71,7 +71,7 @@
-set (packages_required "gthread-2.0 cairo librsvg-2.0 dbus-1 dbus-glib-1 libxml-2.0 xrender gl glu pangox libcurl") +set (packages_required "glib-2.0 gthread-2.0 cairo librsvg-2.0 dbus-1 dbus-glib-1 libxml-2.0 xrender gl glu pangox libcurl") STRING (REGEX REPLACE " " ";" packages_required_semicolon ${packages_required}) pkg_check_modules ("PACKAGE" REQUIRED "${packages_required_semicolon}")
@@ -109,6 +109,9 @@
check_symbol_exists (LC_MESSAGES "locale.h" HAVE_LC_MESSAGES)
CHECK_LIBRARY_EXISTS (m sin "" HAVE_LIBM)
+check_include_files ("dlfcn.h" HAVE_DLFCN_H)
+CHECK_LIBRARY_EXISTS (dl dlopen "" HAVE_LIBDL)
+
MESSAGE (STATUS)
MESSAGE (STATUS "Cairo-Dock will be compiled with the following options :")
if (${XEXTEND_FOUND})
=== modified file 'src/gldit/CMakeLists.txt'
--- src/gldit/CMakeLists.txt 2012-07-07 01:21:45 +0000
+++ src/gldit/CMakeLists.txt 2012-08-25 10:18:14 +0000
@@ -104,7 +104,8 @@
${XEXTEND_LIBRARIES}
${LIBCRYPT_LIBS}
icon-factory
- implementations)
+ implementations
+ dl)
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/gldi.pc.in ${CMAKE_CURRENT_BINARY_DIR}/gldi.pc)
=== modified file 'src/gldit/cairo-dock-module-manager.c'
--- src/gldit/cairo-dock-module-manager.c 2012-07-28 23:36:46 +0000
+++ src/gldit/cairo-dock-module-manager.c 2012-08-25 10:21:21 +0000
@@ -179,8 +179,11 @@
void cairo_dock_load_modules_in_directory (const gchar *cModuleDirPath, GError **erreur)
{
- if (!g_module_supported ())
+ + + cd_error ("GModule unsupported (%s)", cModuleDirPath);
return;
+ if (cModuleDirPath == NULL)
cModuleDirPath = GLDI_MODULES_DIR;
cd_message ("%s (%s)", __func__, cModuleDirPath);
=== modified file 'src/gldit/gldi-config.h.in'
--- src/gldit/gldi-config.h.in 2011-12-04 14:48:31 +0000
+++ src/gldit/gldi-config.h.in 2012-08-25 10:20:24 +0000
@@ -8,6 +8,12 @@
+++
+++
(j'ai aussi ajouté GLib dans les modules à vérifier pour avoir des info à la compilation )
Qu'en penses-tu?
Concernant les plug-ins, chaque plugin n'est pas lié à GLDI (ok, ce sont des plug-ins chargés par gldi). Par contre, il n'y a pas de lien avec d'autres librairies mentionnées dans gldi.pc et certainement utilisées par les plug-ins (et les 'includes dir' ont été bien ajouté donc la compilation est ok mais le lien pas forcément).
Si je ne me trompe pas, ce n'est pas vraiment embêtant car libgldi3.so contient déjà ces liens, c'est lui qui charge les plugins et le core est normalement compilé en même temps que les plug-ins. Par contre, si on (ou un outil pour ajouter automatiquement les dépendences aux plug-ins) veut vérifier que les plug-ins utilisent bien toutes les librairies, ça peut être embêtant... Alors pour moi, c'est tout ou rien et pas en partie comme ça l'est actuellement (pourquoi que "cairo" "librsvg-2.0" "dbus-1" "dbus-glib-1" "libxml-2.0" et pas gtk, glib, gl, glu, etc.) --- CMakeLists.txt 2012-08-25 06:29:48 +0000
+++ CMakeLists.txt 2012-08-25 07:38:05 +0000
@@ -118,10 +118,8 @@
message (STATUS "=====================")
message ("")
-pkg_check_modules ("PACKAGE" REQUIRED "cairo" "librsvg-2.0" "dbus-1" "dbus-glib-1" "libxml-2.0")
--pkg_check_modules ("GLDI" REQUIRED "gldi") -set (PACKAGE_INCLUDE_DIRS "${GLDI_INCLUDE_DIRS}")
+pkg_check_modules ("PACKAGE" REQUIRED "gldi") +STRING (REGEX REPLACE "gldi;" "" PACKAGE_LIBRARIES "${PACKAGE_LIBRARIES}") add_definitions (-DGTK_DISABLE_DEPRECATED="1")
|