Home Forums Wiki Doc Install Extras Screenshots Source Code Projects Blog Users Groups Register
Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Chargements des plug-ins
The latest stable release is the *3.4.0* : How to install it here.
Note: We just switched from BZR to Git on Github! (only to host the code and your future pull requests)
Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] Chargements des plug-ins
matttbe Français 2 lylambda [Read]
29 August 2012 à 16:53

matttbe, Saturday 25 August 2012 à 12:43


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,+71,@@
 
 
########### dependencies ###############
 
-set (packages_required "gthread-2.0 cairo librsvg-2.0 dbus-1 dbus-glib-1 libxml-2.0 xrender gl glu pangox libcurl")  # for the .pc
+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")  # for the .pc and to have details
 
STRING (REGEX REPLACE " " ";" packages_required_semicolon ${packages_required})  # replace blank space by semicolon => to have more details if a package is missing
 
pkg_check_modules ("PACKAGE" REQUIRED "${packages_required_semicolon}")
 
@@ -
109,+109,@@
 
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,+104,@@
     ${
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,+179,11 @@
 
 
void cairo_dock_load_modules_in_directory (const gchar *cModuleDirPathGError **erreur)
 {
-    if (!
g_module_supported ())
+    
// if (!g_module_supported ())
+    #ifndef HAVE_LIBDL
+        cd_error ("GModule unsupported (%s)"cModuleDirPath);
         return;
+    
#endif
     
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,+8,12 @@
 
/* Defined if we can crypt passwords. */
 #cmakedefine HAVE_LIBCRYPT @HAVE_LIBCRYPT@
 
+/* Define to 1 if you have the `dl' library (-ldl). */
+#cmakedefine HAVE_LIBDL @HAVE_LIBDL@
+
+
/* Define to 1 if you have the <dlfcn.h> header file. */
+#cmakedefine HAVE_DLFCN_H @HAVE_DLFCN_H@
+
 
#define GLDI_GETTEXT_PACKAGE "@GLDI_GETTEXT_PACKAGE@"
 #define GLDI_VERSION "@VERSION@"
 #define GLDI_SHARE_DATA_DIR "@GLDI_SHARE_DATA_DIR@"


(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,@@
 
message (STATUS "=====================")
 
message ("")
 
-
pkg_check_modules ("PACKAGE" REQUIRED "cairo" "librsvg-2.0" "dbus-1" "dbus-glib-1" "libxml-2.0")
-
#pkg_check_modules ("PACKAGE" REQUIRED "ig")
-pkg_check_modules ("GLDI" REQUIRED "gldi")  # we don't want to link with gldi, so we check it separately.
-set (PACKAGE_INCLUDE_DIRS "${GLDI_INCLUDE_DIRS}")
+
pkg_check_modules ("PACKAGE" REQUIRED "gldi")  # we have to link to all libs used by gldi
+STRING (REGEX REPLACE "gldi;" "" PACKAGE_LIBRARIES "${PACKAGE_LIBRARIES}")  # but we don't want to link to gldi
 
 
add_definitions (-DGTK_DISABLE_DEPRECATED="1")
 


fabounet, Tuesday 28 August 2012 à 17:59


Subscription date : 30 November 2007
Messages : 17118
je me dis que ça doit faire bizarre pour les gens de lire tes posts et de voir que j'y répond pas
rassurez-vous, ça s'est terminé sur IRC

lylambda, Wednesday 29 August 2012 à 16:53


Subscription date : 06 September 2009
Messages : 1635
C'est vrais, on était tous très inquiets

Technical discussions | Discussions techniques

Subjects Author Language Messages Last message
[Locked] Chargements des plug-ins
matttbe Français 2 lylambda [Read]
29 August 2012 à 16:53


Glx-Dock / Cairo-Dock List of forums Technical discussions | Discussions techniques Chargements des plug-ins Top

Online users :

Powered by ElementSpeak © 2007 Adrien Pilleboue, 2009-2013 Matthieu Baerts.
Dock based on CSS Dock Menu (Ndesign) with jQuery. Icons by zgegball
Cairo-Dock is a free software under GNU-GPL3 licence. First stable version created by Fabounet.
Many thanks to TuxFamily for the web Hosting and Mav for the domain name.