From: Quentin Glidic <[email protected]> Use different functions so we cannot load a libweston module in weston or the other way around.
Also properly namespace backend_init and use a different name for weston shells. Signed-off-by: Quentin Glidic <[email protected]> --- compositor/cms-colord.c | 5 +++-- compositor/cms-static.c | 4 ++-- compositor/main.c | 45 ++++++++++++++++++++++++++++++------- compositor/screen-share.c | 4 ++-- compositor/weston.h | 13 ++++++++++- desktop-shell/shell.c | 4 ++-- fullscreen-shell/fullscreen-shell.c | 5 +++-- ivi-shell/ivi-layout.c | 4 +++- ivi-shell/ivi-shell.c | 4 ++-- libweston/compositor-drm.c | 4 ++-- libweston/compositor-fbdev.c | 4 ++-- libweston/compositor-headless.c | 4 ++-- libweston/compositor-rdp.c | 4 ++-- libweston/compositor-wayland.c | 4 ++-- libweston/compositor-x11.c | 4 ++-- libweston/compositor.c | 23 ++++++++++++------- libweston/compositor.h | 7 +++--- tests/plugin-registry-test.c | 4 +++- tests/surface-global-test.c | 4 +++- tests/surface-screenshot.c | 5 +++-- tests/surface-test.c | 4 +++- tests/weston-test.c | 4 ++-- xwayland/launcher.c | 3 +-- 23 files changed, 111 insertions(+), 55 deletions(-) diff --git a/compositor/cms-colord.c b/compositor/cms-colord.c index b9bc9e3..b9938b9 100644 --- a/compositor/cms-colord.c +++ b/compositor/cms-colord.c @@ -33,6 +33,7 @@ #include <colord.h> #include "compositor.h" +#include "weston.h" #include "cms-helper.h" #include "shared/helpers.h" @@ -494,8 +495,8 @@ colord_cms_output_destroy(gpointer data) } WL_EXPORT int -module_init(struct weston_compositor *ec, - int *argc, char *argv[]) +wet_module_init(struct weston_compositor *ec, + int *argc, char *argv[]) { gboolean ret; GError *error = NULL; diff --git a/compositor/cms-static.c b/compositor/cms-static.c index a6bbfd4..e24501b 100644 --- a/compositor/cms-static.c +++ b/compositor/cms-static.c @@ -91,8 +91,8 @@ cms_notifier_destroy(struct wl_listener *listener, void *data) WL_EXPORT int -module_init(struct weston_compositor *ec, - int *argc, char *argv[]) +wet_module_init(struct weston_compositor *ec, + int *argc, char *argv[]) { struct cms_static *cms; struct weston_output *output; diff --git a/compositor/main.c b/compositor/main.c index 4e6b7ae..88f7911 100644 --- a/compositor/main.c +++ b/compositor/main.c @@ -704,7 +704,7 @@ weston_create_listening_socket(struct wl_display *display, const char *socket_na } WL_EXPORT void * -wet_load_module(const char *name, const char *entrypoint) +wet_load_module_entrypoint(const char *name, const char *entrypoint) { const char *builddir = getenv("WESTON_BUILD_DIR"); char path[PATH_MAX]; @@ -746,14 +746,46 @@ wet_load_module(const char *name, const char *entrypoint) return init; } +static int +wet_load_shell(struct weston_compositor *compositor, + const char *name, int *argc, char *argv[]) +{ + int (*shell_init)(struct weston_compositor *ec, + int *argc, char *argv[]); + + shell_init = wet_load_module_entrypoint(name, "wet_shell_init"); + if (!shell_init) + shell_init = wet_load_module_entrypoint(name, "module_init"); + if (!shell_init) + return -1; + if (shell_init(compositor, argc, argv) < 0) + return -1; + return 0; +} + +WL_EXPORT int +wet_load_module(struct weston_compositor *compositor, + const char *name, int *argc, char *argv[]) +{ + int (*module_init)(struct weston_compositor *ec, + int *argc, char *argv[]); + + module_init = wet_load_module_entrypoint(name, "wet_module_init"); + if (!module_init) + module_init = wet_load_module_entrypoint(name, "module_init"); + if (!module_init) + return -1; + if (module_init(compositor, argc, argv) < 0) + return -1; + return 0; +} + static int load_modules(struct weston_compositor *ec, const char *modules, int *argc, char *argv[]) { const char *p, *end; char buffer[256]; - int (*module_init)(struct weston_compositor *ec, - int *argc, char *argv[]); if (modules == NULL) return 0; @@ -763,10 +795,7 @@ load_modules(struct weston_compositor *ec, const char *modules, end = strchrnul(p, ','); snprintf(buffer, sizeof buffer, "%.*s", (int) (end - p), p); - module_init = wet_load_module(buffer, "module_init"); - if (!module_init) - return -1; - if (module_init(ec, argc, argv) < 0) + if (wet_load_module(ec, buffer, argc, argv) < 0) return -1; p = end; while (*p == ',') @@ -1714,7 +1743,7 @@ int main(int argc, char *argv[]) goto out; } - if (load_modules(ec, shell, &argc, argv) < 0) + if (wet_load_shell(ec, shell, &argc, argv) < 0) goto out; weston_config_section_get_string(section, "modules", &modules, ""); diff --git a/compositor/screen-share.c b/compositor/screen-share.c index c9e7436..ccf9f17 100644 --- a/compositor/screen-share.c +++ b/compositor/screen-share.c @@ -1105,8 +1105,8 @@ share_output_binding(struct weston_keyboard *keyboard, uint32_t time, uint32_t k } WL_EXPORT int -module_init(struct weston_compositor *compositor, - int *argc, char *argv[]) +wet_module_init(struct weston_compositor *compositor, + int *argc, char *argv[]) { struct screen_share *ss; struct weston_config *config = wet_get_config(compositor); diff --git a/compositor/weston.h b/compositor/weston.h index bff5cc1..53d2c83 100644 --- a/compositor/weston.h +++ b/compositor/weston.h @@ -61,7 +61,18 @@ struct weston_config * wet_get_config(struct weston_compositor *compositor); void * -wet_load_module(const char *name, const char *entrypoint); +wet_load_module_entrypoint(const char *name, const char *entrypoint); + +int +wet_shell_init(struct weston_compositor *ec, + int *argc, char *argv[]); + +int +wet_module_init(struct weston_compositor *ec, + int *argc, char *argv[]); +int +wet_load_module(struct weston_compositor *compositor, + const char *name, int *argc, char *argv[]); int wet_load_xwayland(struct weston_compositor *comp); diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index c72f801..2397291 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -6694,8 +6694,8 @@ handle_seat_created(struct wl_listener *listener, void *data) } WL_EXPORT int -module_init(struct weston_compositor *ec, - int *argc, char *argv[]) +wet_shell_init(struct weston_compositor *ec, + int *argc, char *argv[]) { struct weston_seat *seat; struct desktop_shell *shell; diff --git a/fullscreen-shell/fullscreen-shell.c b/fullscreen-shell/fullscreen-shell.c index 2ec2d02..f01346a 100644 --- a/fullscreen-shell/fullscreen-shell.c +++ b/fullscreen-shell/fullscreen-shell.c @@ -33,6 +33,7 @@ #include <assert.h> #include "compositor.h" +#include "compositor/weston.h" #include "fullscreen-shell-unstable-v1-server-protocol.h" #include "shared/helpers.h" @@ -819,8 +820,8 @@ bind_fullscreen_shell(struct wl_client *client, void *data, uint32_t version, } WL_EXPORT int -module_init(struct weston_compositor *compositor, - int *argc, char *argv[]) +wet_shell_init(struct weston_compositor *compositor, + int *argc, char *argv[]) { struct fullscreen_shell *shell; struct weston_seat *seat; diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c index dec4936..1866321 100644 --- a/ivi-shell/ivi-layout.c +++ b/ivi-shell/ivi-layout.c @@ -2127,7 +2127,9 @@ load_controller_modules(struct weston_compositor *compositor, const char *module end = strchrnul(p, ','); snprintf(buffer, sizeof buffer, "%.*s", (int)(end - p), p); - controller_module_init = wet_load_module(buffer, "controller_module_init"); + controller_module_init = + wet_load_module_entrypoint(buffer, + "controller_module_init"); if (!controller_module_init) return -1; diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c index 090ee4d..6d15a67 100644 --- a/ivi-shell/ivi-shell.c +++ b/ivi-shell/ivi-shell.c @@ -491,8 +491,8 @@ shell_add_bindings(struct weston_compositor *compositor, * Initialization of ivi-shell. */ WL_EXPORT int -module_init(struct weston_compositor *compositor, - int *argc, char *argv[]) +wet_shell_init(struct weston_compositor *compositor, + int *argc, char *argv[]) { struct ivi_shell *shell; struct ivi_shell_setting setting = { }; diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c index f903a3b..c6c975f 100644 --- a/libweston/compositor-drm.c +++ b/libweston/compositor-drm.c @@ -3261,8 +3261,8 @@ config_init_to_defaults(struct weston_drm_backend_config *config) } WL_EXPORT int -backend_init(struct weston_compositor *compositor, - struct weston_backend_config *config_base) +weston_backend_init(struct weston_compositor *compositor, + struct weston_backend_config *config_base) { struct drm_backend *b; struct weston_drm_backend_config config = {{ 0, }}; diff --git a/libweston/compositor-fbdev.c b/libweston/compositor-fbdev.c index e21ceca..6d4eb9f 100644 --- a/libweston/compositor-fbdev.c +++ b/libweston/compositor-fbdev.c @@ -760,8 +760,8 @@ config_init_to_defaults(struct weston_fbdev_backend_config *config) } WL_EXPORT int -backend_init(struct weston_compositor *compositor, - struct weston_backend_config *config_base) +weston_backend_init(struct weston_compositor *compositor, + struct weston_backend_config *config_base) { struct fbdev_backend *b; struct weston_fbdev_backend_config config = {{ 0, }}; diff --git a/libweston/compositor-headless.c b/libweston/compositor-headless.c index 6c22ee3..8a6f083 100644 --- a/libweston/compositor-headless.c +++ b/libweston/compositor-headless.c @@ -237,8 +237,8 @@ config_init_to_defaults(struct weston_headless_backend_config *config) } WL_EXPORT int -backend_init(struct weston_compositor *compositor, - struct weston_backend_config *config_base) +weston_backend_init(struct weston_compositor *compositor, + struct weston_backend_config *config_base) { struct headless_backend *b; struct weston_headless_backend_config config = {{ 0, }}; diff --git a/libweston/compositor-rdp.c b/libweston/compositor-rdp.c index d74dd5e..961effb 100644 --- a/libweston/compositor-rdp.c +++ b/libweston/compositor-rdp.c @@ -1298,8 +1298,8 @@ config_init_to_defaults(struct weston_rdp_backend_config *config) } WL_EXPORT int -backend_init(struct weston_compositor *compositor, - struct weston_backend_config *config_base) +weston_backend_init(struct weston_compositor *compositor, + struct weston_backend_config *config_base) { struct rdp_backend *b; struct weston_rdp_backend_config config = {{ 0, }}; diff --git a/libweston/compositor-wayland.c b/libweston/compositor-wayland.c index 1343e21..3a1f68b 100644 --- a/libweston/compositor-wayland.c +++ b/libweston/compositor-wayland.c @@ -2277,8 +2277,8 @@ config_init_to_defaults(struct weston_wayland_backend_config *config) } WL_EXPORT int -backend_init(struct weston_compositor *compositor, - struct weston_backend_config *config_base) +weston_backend_init(struct weston_compositor *compositor, + struct weston_backend_config *config_base) { struct wayland_backend *b; struct wayland_output *output; diff --git a/libweston/compositor-x11.c b/libweston/compositor-x11.c index e2e6110..27ab606 100644 --- a/libweston/compositor-x11.c +++ b/libweston/compositor-x11.c @@ -1706,8 +1706,8 @@ config_init_to_defaults(struct weston_x11_backend_config *config) } WL_EXPORT int -backend_init(struct weston_compositor *compositor, - struct weston_backend_config *config_base) +weston_backend_init(struct weston_compositor *compositor, + struct weston_backend_config *config_base) { struct x11_backend *b; struct weston_x11_backend_config config = {{ 0, }}; diff --git a/libweston/compositor.c b/libweston/compositor.c index 771f1c9..8f30b46 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -5023,7 +5023,9 @@ weston_compositor_load_backend(struct weston_compositor *compositor, if (backend < 0 || backend >= ARRAY_LENGTH(backend_map)) return -1; - backend_init = weston_load_module(backend_map[backend], "backend_init"); + backend_init = weston_load_module(backend_map[backend], "weston_backend_init"); + if (!backend_init) + backend_init = weston_load_module(backend_map[backend], "backend_init"); if (!backend_init) return -1; @@ -5033,14 +5035,19 @@ weston_compositor_load_backend(struct weston_compositor *compositor, WL_EXPORT int weston_compositor_load_xwayland(struct weston_compositor *compositor) { - int (*module_init)(struct weston_compositor *ec, - int *argc, char *argv[]); - int argc = 0; + int (*weston_module_init)(struct weston_compositor *ec); - module_init = weston_load_module("xwayland.so", "module_init"); - if (!module_init) - return -1; - if (module_init(compositor, &argc, NULL) < 0) + weston_module_init = weston_load_module("xwayland.so", "weston_module_init"); + if (!weston_module_init) { + int (*module_init)(struct weston_compositor *ec, + int *argc, char *argv[]); + int argc = 0; + + module_init = weston_load_module("xwayland.so", "module_init"); + if (!module_init || module_init(compositor, &argc, NULL) < 0) + return -1; + } else if (weston_module_init(compositor) < 0) { return -1; + } return 0; } diff --git a/libweston/compositor.h b/libweston/compositor.h index 557d2f5..3fa9b02 100644 --- a/libweston/compositor.h +++ b/libweston/compositor.h @@ -1676,11 +1676,10 @@ int noop_renderer_init(struct weston_compositor *ec); int -backend_init(struct weston_compositor *c, - struct weston_backend_config *config_base); +weston_backend_init(struct weston_compositor *c, + struct weston_backend_config *config_base); int -module_init(struct weston_compositor *compositor, - int *argc, char *argv[]); +weston_module_init(struct weston_compositor *compositor); void weston_transformed_coord(int width, int height, diff --git a/tests/plugin-registry-test.c b/tests/plugin-registry-test.c index 7fc88f3..81e26cd 100644 --- a/tests/plugin-registry-test.c +++ b/tests/plugin-registry-test.c @@ -28,6 +28,7 @@ #include <assert.h> #include "compositor.h" +#include "compositor/weston.h" #include "plugin-registry.h" static void @@ -88,7 +89,8 @@ runtime_tests(void *data) } WL_EXPORT int -module_init(struct weston_compositor *compositor, int *argc, char *argv[]) +wet_module_init(struct weston_compositor *compositor, + int *argc, char *argv[]) { struct wl_event_loop *loop; diff --git a/tests/surface-global-test.c b/tests/surface-global-test.c index b0a1d1c..ab5efd1 100644 --- a/tests/surface-global-test.c +++ b/tests/surface-global-test.c @@ -28,6 +28,7 @@ #include <assert.h> #include "compositor.h" +#include "compositor/weston.h" static void surface_to_from_global(void *data) @@ -78,7 +79,8 @@ surface_to_from_global(void *data) } WL_EXPORT int -module_init(struct weston_compositor *compositor, int *argc, char *argv[]) +wet_module_init(struct weston_compositor *compositor, + int *argc, char *argv[]) { struct wl_event_loop *loop; diff --git a/tests/surface-screenshot.c b/tests/surface-screenshot.c index 703d48b..e5510e5 100644 --- a/tests/surface-screenshot.c +++ b/tests/surface-screenshot.c @@ -33,6 +33,7 @@ #include <linux/input.h> #include "compositor.h" +#include "compositor/weston.h" #include "file-util.h" static char * @@ -212,8 +213,8 @@ out: } WL_EXPORT int -module_init(struct weston_compositor *ec, - int *argc, char *argv[]) +wet_module_init(struct weston_compositor *ec, + int *argc, char *argv[]) { weston_compositor_add_debug_binding(ec, KEY_H, trigger_binding, ec); diff --git a/tests/surface-test.c b/tests/surface-test.c index 243f8dc..28520aa 100644 --- a/tests/surface-test.c +++ b/tests/surface-test.c @@ -29,6 +29,7 @@ #include <assert.h> #include "compositor.h" +#include "compositor/weston.h" static void surface_transform(void *data) @@ -60,7 +61,8 @@ surface_transform(void *data) } WL_EXPORT int -module_init(struct weston_compositor *compositor, int *argc, char *argv[]) +wet_module_init(struct weston_compositor *compositor, + int *argc, char *argv[]) { struct wl_event_loop *loop; diff --git a/tests/weston-test.c b/tests/weston-test.c index 09d8b5e..b4d75df 100644 --- a/tests/weston-test.c +++ b/tests/weston-test.c @@ -584,8 +584,8 @@ idle_launch_client(void *data) } WL_EXPORT int -module_init(struct weston_compositor *ec, - int *argc, char *argv[]) +wet_module_init(struct weston_compositor *ec, + int *argc, char *argv[]) { struct weston_test *test; struct wl_event_loop *loop; diff --git a/xwayland/launcher.c b/xwayland/launcher.c index 614ef5b..3f8da49 100644 --- a/xwayland/launcher.c +++ b/xwayland/launcher.c @@ -342,8 +342,7 @@ const struct weston_xwayland_api api = { }; WL_EXPORT int -module_init(struct weston_compositor *compositor, - int *argc, char *argv[]) +weston_module_init(struct weston_compositor *compositor) { struct wl_display *display = compositor->wl_display; -- 2.9.0 _______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
