aboutsummaryrefslogtreecommitdiff
path: root/src/mm-base-manager.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2022-12-08 14:37:56 +0000
committerAleksander Morgado <aleksander@aleksander.es>2023-01-03 13:56:25 +0000
commit1c4da332ee6e0d948f85a63f74cb27e89075c011 (patch)
tree03a01bf796b4d435cd233c89ed3d05c562ed3fd1 /src/mm-base-manager.c
parent1dd70be4c834ba025ff16b343aa4032a8c64fb71 (diff)
build: new option to build plugins within the daemon binary
Instead of creating libmm-plugin* and libmm-shared* libraries that are dlopen()-ed on runtime, allow incorporating all plugins into the daemon binary itself. This makes the startup of the daemon much faster and also avoids issues with builds that require linker namespace isolation. Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/674
Diffstat (limited to 'src/mm-base-manager.c')
-rw-r--r--src/mm-base-manager.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/mm-base-manager.c b/src/mm-base-manager.c
index 6cdc4ae3..63ca6899 100644
--- a/src/mm-base-manager.c
+++ b/src/mm-base-manager.c
@@ -68,7 +68,9 @@ enum {
PROP_CONNECTION,
PROP_AUTO_SCAN,
PROP_FILTER_POLICY,
+#if !defined WITH_BUILTIN_PLUGINS
PROP_PLUGIN_DIR,
+#endif
PROP_INITIAL_KERNEL_EVENTS,
#if defined WITH_TESTS
PROP_ENABLE_TEST,
@@ -83,8 +85,10 @@ struct _MMBaseManagerPrivate {
gboolean auto_scan;
/* Filter policy (mask of enabled rules) */
MMFilterRule filter_policy;
+#if !defined WITH_BUILTIN_PLUGINS
/* Path to look for plugins */
gchar *plugin_dir;
+#endif
/* Path to the list of initial kernel events */
gchar *initial_kernel_events;
/* The authorization provider */
@@ -1380,7 +1384,9 @@ log_object_build_id (MMLogObject *_self)
MMBaseManager *
mm_base_manager_new (GDBusConnection *connection,
+#if !defined WITH_BUILTIN_PLUGINS
const gchar *plugin_dir,
+#endif
gboolean auto_scan,
MMFilterRule filter_policy,
const gchar *initial_kernel_events,
@@ -1395,7 +1401,9 @@ mm_base_manager_new (GDBusConnection *connection,
NULL, /* cancellable */
error,
MM_BASE_MANAGER_CONNECTION, connection,
+#if !defined WITH_BUILTIN_PLUGINS
MM_BASE_MANAGER_PLUGIN_DIR, plugin_dir,
+#endif
MM_BASE_MANAGER_AUTO_SCAN, auto_scan,
MM_BASE_MANAGER_FILTER_POLICY, filter_policy,
MM_BASE_MANAGER_INITIAL_KERNEL_EVENTS, initial_kernel_events,
@@ -1445,10 +1453,12 @@ set_property (GObject *object,
case PROP_FILTER_POLICY:
self->priv->filter_policy = g_value_get_flags (value);
break;
+#if !defined WITH_BUILTIN_PLUGINS
case PROP_PLUGIN_DIR:
g_free (self->priv->plugin_dir);
self->priv->plugin_dir = g_value_dup_string (value);
break;
+#endif
case PROP_INITIAL_KERNEL_EVENTS:
g_free (self->priv->initial_kernel_events);
self->priv->initial_kernel_events = g_value_dup_string (value);
@@ -1482,9 +1492,11 @@ get_property (GObject *object,
case PROP_FILTER_POLICY:
g_value_set_flags (value, self->priv->filter_policy);
break;
+#if !defined WITH_BUILTIN_PLUGINS
case PROP_PLUGIN_DIR:
g_value_set_string (value, self->priv->plugin_dir);
break;
+#endif
case PROP_INITIAL_KERNEL_EVENTS:
g_value_set_string (value, self->priv->initial_kernel_events);
break;
@@ -1548,7 +1560,11 @@ initable_init (GInitable *initable,
return FALSE;
/* Create plugin manager */
- self->priv->plugin_manager = mm_plugin_manager_new (self->priv->plugin_dir, self->priv->filter, error);
+ self->priv->plugin_manager = mm_plugin_manager_new (self->priv->filter,
+#if !defined WITH_BUILTIN_PLUGINS
+ self->priv->plugin_dir,
+#endif
+ error);
if (!self->priv->plugin_manager)
return FALSE;
@@ -1613,7 +1629,9 @@ finalize (GObject *object)
MMBaseManager *self = MM_BASE_MANAGER (object);
g_free (self->priv->initial_kernel_events);
+#if !defined WITH_BUILTIN_PLUGINS
g_free (self->priv->plugin_dir);
+#endif
g_hash_table_destroy (self->priv->inhibited_devices);
g_hash_table_destroy (self->priv->devices);
@@ -1704,6 +1722,7 @@ mm_base_manager_class_init (MMBaseManagerClass *manager_class)
MM_FILTER_RULE_NONE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+#if !defined WITH_BUILTIN_PLUGINS
g_object_class_install_property
(object_class, PROP_PLUGIN_DIR,
g_param_spec_string (MM_BASE_MANAGER_PLUGIN_DIR,
@@ -1711,6 +1730,7 @@ mm_base_manager_class_init (MMBaseManagerClass *manager_class)
"Where to look for plugins",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+#endif
g_object_class_install_property
(object_class, PROP_INITIAL_KERNEL_EVENTS,