summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-04-27 21:41:52 -0700
committerMarcel Holtmann <marcel@holtmann.org>2009-04-27 21:41:52 -0700
commite3fafb1cb55307f6c5f118872d72abdd03011cbd (patch)
tree910a28296e4769ae2e14f465b7123611bf10f788
parent5a5c569add1d4cc9eb8aaf8be40eac2bf8c97bd3 (diff)
downloadconnman-e3fafb1cb55307f6c5f118872d72abdd03011cbd.tar.gz
connman-e3fafb1cb55307f6c5f118872d72abdd03011cbd.tar.bz2
connman-e3fafb1cb55307f6c5f118872d72abdd03011cbd.zip
Add infrastructure for built-in plugins
-rw-r--r--.gitignore1
-rw-r--r--Makefile.am2
-rw-r--r--include/plugin.h4
-rw-r--r--plugins/Makefile.am24
-rw-r--r--src/Makefile.am5
-rw-r--r--src/plugin.c9
6 files changed, 37 insertions, 8 deletions
diff --git a/.gitignore b/.gitignore
index 6aa6a4e7..2b32d749 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,6 +33,7 @@ src/connman.conf
src/connman.service
src/*-connman.rules
plugins/connman.policy
+plugins/builtin.h
scripts/connman
scripts/udhcpc-script
scripts/dhclient-script
diff --git a/Makefile.am b/Makefile.am
index b4c0917d..31665787 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
-SUBDIRS = gdbus include src plugins client tools scripts test doc
+SUBDIRS = gdbus include plugins src client tools scripts test doc
pkgconfigdir = $(libdir)/pkgconfig
diff --git a/include/plugin.h b/include/plugin.h
index 21ecd0ef..db76ad9f 100644
--- a/include/plugin.h
+++ b/include/plugin.h
@@ -80,9 +80,7 @@ struct connman_plugin_desc {
*/
#ifdef CONNMAN_PLUGIN_BUILTIN
#define CONNMAN_PLUGIN_DEFINE(name, description, version, priority, init, exit) \
- extern struct connman_plugin_desc connman_builtin_ ## name \
- __attribute__ ((visibility("default"))); \
- struct connman_plugin_desc connman_builtin_ ## name = { \
+ struct connman_plugin_desc __connman_builtin_ ## name = { \
#name, description, version, priority, init, exit \
};
#else
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index db3977fc..7c9d0544 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -3,6 +3,9 @@ plugindir = $(libdir)/connman/plugins
plugin_LTLIBRARIES =
+builtin_modules =
+builtin_sources =
+
if LOOPBACK
plugin_LTLIBRARIES += loopback.la
endif
@@ -112,6 +115,16 @@ if FAKE
plugin_LTLIBRARIES += fake.la
endif
+noinst_LTLIBRARIES = libbuiltin.la
+
+libbuiltin_la_SOURCES = $(builtin_sources)
+libbuiltin_la_LDFLAGS =
+libbuiltin_la_CFLAGS = $(AM_CFLAGS) -DCONNMAN_PLUGIN_BUILTIN
+
+BUILT_SOURCES = builtin.h
+
+nodist_libbuiltin_la_SOURCES = $(BUILT_SOURCES)
+
AM_LDFLAGS = -no-undefined -module -avoid-version
statedir = $(localstatedir)/run/connman
@@ -126,11 +139,20 @@ AM_CFLAGS = -fvisibility=hidden @GLIB_CFLAGS@ @GDBUS_CFLAGS@
INCLUDES = -I$(top_builddir)/include
-CLEANFILES = connman.policy
+CLEANFILES = $(BUILT_SOURCES) connman.policy
EXTRA_DIST = polkit.policy
MAINTAINERCLEANFILES = Makefile.in
+builtin.h:
+ echo "" > $@
+ list='$(builtin_modules)'; for i in $$list; \
+ do echo "extern struct connman_plugin_desc __connman_builtin_$$i;" > $@; done
+ echo "static struct connman_plugin_desc *__connman_builtin[] = {" >> $@
+ list='$(builtin_modules)'; for i in $$list; \
+ do echo "&__connman_builtin_$$i," >> $@; done
+ echo "NULL };" >> $@
+
connman.policy: polkit.policy
cp $< $@
diff --git a/src/Makefile.am b/src/Makefile.am
index 9051c7f0..9a1738c4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -23,7 +23,8 @@ rules_DATA = 92-connman.rules
endif
endif
-connmand_LDADD = @GDBUS_LIBS@ @GLIB_LIBS@ @GTHREAD_LIBS@ @UDEV_LIBS@ -ldl
+connmand_LDADD = $(top_builddir)/plugins/libbuiltin.la \
+ @GDBUS_LIBS@ @GLIB_LIBS@ @GTHREAD_LIBS@ @UDEV_LIBS@ -ldl
connmand_LDFLAGS = -Wl,--export-dynamic -Wl,--version-script=connman.ver
@@ -46,7 +47,7 @@ AM_CFLAGS = @UDEV_CFLAGS@ @GTHREAD_CFLAGS@ @GLIB_CFLAGS@ @GDBUS_CFLAGS@ \
-DPLUGINDIR=\""$(plugindir)"\" \
-DSTORAGEDIR=\""$(storagedir)\""
-INCLUDES = -I$(top_builddir)/include
+INCLUDES = -I$(top_builddir)/include -I$(top_builddir)/plugins
EXTRA_DIST = connman-dbus.conf connman-polkit.conf connman.rules
diff --git a/src/plugin.c b/src/plugin.c
index 36e816bd..23caa0a8 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -74,15 +74,21 @@ static gboolean add_plugin(void *handle, struct connman_plugin_desc *desc)
return TRUE;
}
+#include "builtin.h"
+
int __connman_plugin_init(const char *pattern, const char *exclude)
{
GSList *list;
GDir *dir;
const gchar *file;
gchar *filename;
+ unsigned int i;
DBG("");
+ for (i = 0; __connman_builtin[i]; i++)
+ add_plugin(NULL, __connman_builtin[i]);
+
dir = g_dir_open(PLUGINDIR, 0, NULL);
if (dir != NULL) {
while ((file = g_dir_read_name(dir)) != NULL) {
@@ -157,7 +163,8 @@ void __connman_plugin_cleanup(void)
if (plugin->active == TRUE && plugin->desc->exit)
plugin->desc->exit();
- dlclose(plugin->handle);
+ if (plugin->handle != NULL)
+ dlclose(plugin->handle);
g_free(plugin);
}