[PATCH weston 2/3] modules: Drop module_init as a shared init function

Giulio Camuffo giuliocamuffo at gmail.com
Mon Jul 11 09:05:38 UTC 2016


2016-07-04 15:58 GMT+02:00 Quentin Glidic <sardemff7+wayland at sardemff7.net>:
> From: Quentin Glidic <sardemff7+git at sardemff7.net>
>
> 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 <sardemff7+git at sardemff7.net>
> ---
>  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");

Why do you keep the fallback for "module_init" here? Modules developed
against an older weston won't likely work anyway due to other changes,
so i think we can just jump to the new entrypoint name.

> +       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
> wayland-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list