Removed `-lgtop_sysdeps'. This is gmodule loaded from the backend open
2000-01-22 Martin Baulig <martin@home-of-linux.org> * configure.in (LIBGTOP_LIBS): Removed `-lgtop_sysdeps'. This is gmodule loaded from the backend open function. * lib/init.c (glibtop_init_s): Don't call glibtop_open_s () here. * init-backend.c: Added support for a "ExtraLibs" section in the backend description file.
This commit is contained in:
committed by
Martin Baulig
parent
d567c86818
commit
e8c90833e8
10
ChangeLog
10
ChangeLog
@@ -1,3 +1,13 @@
|
|||||||
|
2000-01-22 Martin Baulig <martin@home-of-linux.org>
|
||||||
|
|
||||||
|
* configure.in (LIBGTOP_LIBS): Removed `-lgtop_sysdeps'. This
|
||||||
|
is gmodule loaded from the backend open function.
|
||||||
|
|
||||||
|
* lib/init.c (glibtop_init_s): Don't call glibtop_open_s () here.
|
||||||
|
|
||||||
|
* init-backend.c: Added support for a "ExtraLibs" section in the
|
||||||
|
backend description file.
|
||||||
|
|
||||||
2000-01-22 Martin Baulig <martin@home-of-linux.org>
|
2000-01-22 Martin Baulig <martin@home-of-linux.org>
|
||||||
|
|
||||||
* include/glibtop/ppp.h (glibtop_get_ppp): Added `use_isdn' and
|
* include/glibtop/ppp.h (glibtop_get_ppp): Added `use_isdn' and
|
||||||
|
@@ -340,7 +340,7 @@ LIBGTOP_SERVER='$(bindir)/libgtop_server'
|
|||||||
|
|
||||||
LIBGTOP_EXTRA_LIBS="$LIBGTOP_EXTRA_LIBS $GLIB_LIBS $LIBGTOP_XML_LIB"
|
LIBGTOP_EXTRA_LIBS="$LIBGTOP_EXTRA_LIBS $GLIB_LIBS $LIBGTOP_XML_LIB"
|
||||||
|
|
||||||
LIBGTOP_LIBS="$LIBGTOP_LIBS -lgtop_sysdeps -lgtop_common -lgtop"
|
LIBGTOP_LIBS="$LIBGTOP_LIBS -lgtop_common -lgtop"
|
||||||
|
|
||||||
LIBGTOP_NAMES_LIBS="$LIBGTOP_LIBS -lgtop_names"
|
LIBGTOP_NAMES_LIBS="$LIBGTOP_LIBS -lgtop_names"
|
||||||
|
|
||||||
|
@@ -79,6 +79,32 @@ _get_library_filename (xmlDocPtr doc, xmlNodePtr cur, const char *directory)
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GSList *
|
||||||
|
_parse_extra_libs (xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, const char *dir)
|
||||||
|
{
|
||||||
|
GSList *list = NULL;
|
||||||
|
|
||||||
|
/* We don't care what the top level element name is */
|
||||||
|
cur = cur->childs;
|
||||||
|
while (cur != NULL) {
|
||||||
|
if ((!strcmp (cur->name, "ExtraLib")) && (cur->ns == ns)) {
|
||||||
|
xmlNodePtr sub = cur->childs;
|
||||||
|
|
||||||
|
while (sub != NULL) {
|
||||||
|
if ((!strcmp (sub->name, "ShlibName")) && (sub->ns == ns))
|
||||||
|
list = g_slist_append
|
||||||
|
(list, _get_library_filename (doc, sub, dir));
|
||||||
|
|
||||||
|
sub = sub->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cur = cur->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
static glibtop_backend_entry *
|
static glibtop_backend_entry *
|
||||||
_parseBackend (xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, const char *dir)
|
_parseBackend (xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, const char *dir)
|
||||||
{
|
{
|
||||||
@@ -105,6 +131,9 @@ _parseBackend (xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur, const char *dir)
|
|||||||
if ((!strcmp (sub->name, "ShlibName")) && (sub->ns == ns))
|
if ((!strcmp (sub->name, "ShlibName")) && (sub->ns == ns))
|
||||||
ret->shlib_name = _get_library_filename (doc, sub, dir);
|
ret->shlib_name = _get_library_filename (doc, sub, dir);
|
||||||
|
|
||||||
|
if ((!strcmp (sub->name, "ExtraLibs")) && (sub->ns == ns))
|
||||||
|
ret->extra_libs = _parse_extra_libs (doc, ns, sub, dir);
|
||||||
|
|
||||||
sub = sub->next;
|
sub = sub->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -262,8 +262,6 @@ glibtop_init_s (glibtop **server_ptr, unsigned long features, unsigned flags)
|
|||||||
return server;
|
return server;
|
||||||
|
|
||||||
if ((server->flags & _GLIBTOP_INIT_STATE_SYSDEPS) == 0) {
|
if ((server->flags & _GLIBTOP_INIT_STATE_SYSDEPS) == 0) {
|
||||||
glibtop_open_s (server, "glibtop", features, flags);
|
|
||||||
|
|
||||||
server->sysdeps.pointer_size = sizeof (void*)*8;
|
server->sysdeps.pointer_size = sizeof (void*)*8;
|
||||||
|
|
||||||
server->flags |= _GLIBTOP_INIT_STATE_SYSDEPS;
|
server->flags |= _GLIBTOP_INIT_STATE_SYSDEPS;
|
||||||
@@ -271,3 +269,4 @@ glibtop_init_s (glibtop **server_ptr, unsigned long features, unsigned flags)
|
|||||||
|
|
||||||
return server;
|
return server;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,6 +31,40 @@
|
|||||||
|
|
||||||
#include <gmodule.h>
|
#include <gmodule.h>
|
||||||
|
|
||||||
|
static void
|
||||||
|
unload_module (gpointer data, gpointer user_data)
|
||||||
|
{
|
||||||
|
g_module_close (data);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
load_extra_libs (glibtop *server, glibtop_backend_entry *entry)
|
||||||
|
{
|
||||||
|
GSList *list;
|
||||||
|
GSList *loaded_here = NULL;
|
||||||
|
|
||||||
|
for (list = entry->extra_libs; list; list = list->next) {
|
||||||
|
const gchar *filename = list->data;
|
||||||
|
GModule *module;
|
||||||
|
|
||||||
|
module = g_module_open (filename, G_MODULE_BIND_LAZY);
|
||||||
|
if (!module) {
|
||||||
|
glibtop_warn_r (server, "Cannot open extra shared library `%s' "
|
||||||
|
"for backend `%s' (%s)", filename, entry->name,
|
||||||
|
g_module_error ());
|
||||||
|
g_slist_foreach (loaded_here, unload_module, NULL);
|
||||||
|
return -GLIBTOP_ERROR_NO_SUCH_BACKEND;
|
||||||
|
}
|
||||||
|
|
||||||
|
loaded_here = g_slist_prepend (loaded_here, module);
|
||||||
|
}
|
||||||
|
|
||||||
|
entry->_priv->extra_modules = g_slist_concat
|
||||||
|
(loaded_here, entry->_priv->extra_modules);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
glibtop_open_backend_l (glibtop *server, const char *backend_name,
|
glibtop_open_backend_l (glibtop *server, const char *backend_name,
|
||||||
u_int64_t features, const char **backend_args)
|
u_int64_t features, const char **backend_args)
|
||||||
@@ -45,12 +79,19 @@ glibtop_open_backend_l (glibtop *server, const char *backend_name,
|
|||||||
if (!entry->_priv) {
|
if (!entry->_priv) {
|
||||||
entry->_priv = g_new0 (glibtop_backend_module, 1);
|
entry->_priv = g_new0 (glibtop_backend_module, 1);
|
||||||
|
|
||||||
|
if (entry->extra_libs) {
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
retval = load_extra_libs (server, entry);
|
||||||
|
if (retval < 0) return retval;
|
||||||
|
}
|
||||||
|
|
||||||
entry->_priv->module = g_module_open (entry->shlib_name,
|
entry->_priv->module = g_module_open (entry->shlib_name,
|
||||||
G_MODULE_BIND_LAZY);
|
G_MODULE_BIND_LAZY);
|
||||||
if (!entry->_priv->module) {
|
if (!entry->_priv->module) {
|
||||||
glibtop_warn_r (server, "Cannot open shared library `%s' "
|
glibtop_warn_r (server, "Cannot open shared library `%s' "
|
||||||
"for backend `%s'", entry->shlib_name,
|
"for backend `%s' (%s)", entry->shlib_name,
|
||||||
entry->name);
|
entry->name, g_module_error ());
|
||||||
return -GLIBTOP_ERROR_NO_SUCH_BACKEND;
|
return -GLIBTOP_ERROR_NO_SUCH_BACKEND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user