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:
Martin Baulig
2000-01-22 22:14:59 +00:00
committed by Martin Baulig
parent d567c86818
commit e8c90833e8
5 changed files with 84 additions and 5 deletions

View File

@@ -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>
* include/glibtop/ppp.h (glibtop_get_ppp): Added `use_isdn' and

View File

@@ -340,7 +340,7 @@ LIBGTOP_SERVER='$(bindir)/libgtop_server'
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"

View File

@@ -79,6 +79,32 @@ _get_library_filename (xmlDocPtr doc, xmlNodePtr cur, const char *directory)
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 *
_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))
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;
}
}

View File

@@ -262,8 +262,6 @@ glibtop_init_s (glibtop **server_ptr, unsigned long features, unsigned flags)
return server;
if ((server->flags & _GLIBTOP_INIT_STATE_SYSDEPS) == 0) {
glibtop_open_s (server, "glibtop", features, flags);
server->sysdeps.pointer_size = sizeof (void*)*8;
server->flags |= _GLIBTOP_INIT_STATE_SYSDEPS;
@@ -271,3 +269,4 @@ glibtop_init_s (glibtop **server_ptr, unsigned long features, unsigned flags)
return server;
}

View File

@@ -31,6 +31,40 @@
#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
glibtop_open_backend_l (glibtop *server, const char *backend_name,
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) {
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,
G_MODULE_BIND_LAZY);
if (!entry->_priv->module) {
glibtop_warn_r (server, "Cannot open shared library `%s' "
"for backend `%s'", entry->shlib_name,
entry->name);
"for backend `%s' (%s)", entry->shlib_name,
entry->name, g_module_error ());
return -GLIBTOP_ERROR_NO_SUCH_BACKEND;
}