From: Quentin Glidic <sardemff7+...@sardemff7.net> Signed-off-by: Quentin Glidic <sardemff7+...@sardemff7.net> --- ivi-shell/ivi-layout.c | 3 ++- lib/libweston.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ lib/libweston.h | 2 ++ src/compositor-drm.c | 9 +++++---- src/compositor-fbdev.c | 3 ++- src/compositor-wayland.c | 5 +++-- src/compositor-x11.c | 5 +++-- src/compositor.c | 44 -------------------------------------------- src/compositor.h | 3 --- src/main.c | 4 ++-- 10 files changed, 66 insertions(+), 59 deletions(-)
diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c index f7c4f27..fe2e47f 100644 --- a/ivi-shell/ivi-layout.c +++ b/ivi-shell/ivi-layout.c @@ -60,6 +60,7 @@ #include <string.h> #include <assert.h> +#include "libweston.h" #include "compositor.h" #include "ivi-layout-export.h" #include "ivi-layout-private.h" @@ -2853,7 +2854,7 @@ 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 = weston_load_module(buffer, "controller_module_init"); + controller_module_init = libweston_load_module(buffer, "controller_module_init"); if (!controller_module_init) return -1; diff --git a/lib/libweston.c b/lib/libweston.c index 801d137..da21f8e 100644 --- a/lib/libweston.c +++ b/lib/libweston.c @@ -1,3 +1,7 @@ + +#include <limits.h> +#include <dlfcn.h> + #include "shared/zalloc.h" #include "libweston-internal.h" @@ -22,6 +26,49 @@ libweston_uninit(struct libweston_context *context) free(context); } +WL_EXPORT void * +libweston_load_module(const char *name, const char *entrypoint) +{ + const char *builddir = getenv("WESTON_BUILD_DIR"); + char path[PATH_MAX]; + void *module, *init; + + if (name == NULL) + return NULL; + + if (name[0] != '/') { + if (builddir) + snprintf(path, sizeof path, "%s/.libs/%s", builddir, name); + else + snprintf(path, sizeof path, "%s/%s", MODULEDIR, name); + } else { + snprintf(path, sizeof path, "%s", name); + } + + module = dlopen(path, RTLD_NOW | RTLD_NOLOAD); + if (module) { + weston_log("Module '%s' already loaded\n", path); + dlclose(module); + return NULL; + } + + weston_log("Loading module '%s'\n", path); + module = dlopen(path, RTLD_NOW); + if (!module) { + weston_log("Failed to load module: %s\n", dlerror()); + return NULL; + } + + init = dlsym(module, entrypoint); + if (!init) { + weston_log("Failed to lookup init function: %s\n", dlerror()); + dlclose(module); + return NULL; + } + + return init; +} + WL_EXPORT int libweston_load_backend(struct libweston_context *context, enum libweston_backend preffered) { diff --git a/lib/libweston.h b/lib/libweston.h index ca98df1..9d1bfc1 100644 --- a/lib/libweston.h +++ b/lib/libweston.h @@ -9,6 +9,8 @@ struct libweston_context; struct libweston_context *libweston_init(struct weston_compositor *compositor); void libweston_uninit(struct libweston_context *context); +void *libweston_load_module(const char *name, const char *entrypoint); + enum libweston_backend { LIBWESTON_BACKEND_NONE = 0, }; diff --git a/src/compositor-drm.c b/src/compositor-drm.c index 8b9882e..04de95e 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -46,6 +46,7 @@ #include <gbm.h> #include <libudev.h> +#include "libweston.h" #include "shared/helpers.h" #include "shared/timespec-util.h" #include "libbacklight.h" @@ -608,13 +609,13 @@ drm_output_set_gamma(struct weston_output *output_base, } /* Determine the type of vblank synchronization to use for the output. - * + * * The pipe parameter indicates which CRTC is in use. Knowing this, we * can determine which vblank sequence type to use for it. Traditional * cards had only two CRTCs, with CRTC 0 using no special flags, and * CRTC 1 using DRM_VBLANK_SECONDARY. The first bit of the pipe * parameter indicates this. - * + * * Bits 1-5 of the pipe parameter are 5 bit wide pipe number between * 0-31. If this is non-zero it indicates we're dealing with a * multi-gpu situation and we need to calculate the vblank sync @@ -1525,8 +1526,8 @@ create_gbm_device(int fd) { struct gbm_device *gbm; - gl_renderer = weston_load_module("gl-renderer.so", - "gl_renderer_interface"); + gl_renderer = libweston_load_module("gl-renderer.so", + "gl_renderer_interface"); if (!gl_renderer) return NULL; diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c index 36d7ae0..e46b5cf 100644 --- a/src/compositor-fbdev.c +++ b/src/compositor-fbdev.c @@ -42,6 +42,7 @@ #include <libudev.h> +#include "libweston.h" #include "shared/helpers.h" #include "compositor.h" #include "launcher-util.h" @@ -790,7 +791,7 @@ fbdev_backend_create(struct weston_compositor *compositor, int *argc, char *argv if (pixman_renderer_init(compositor) < 0) goto out_launcher; } else { - gl_renderer = weston_load_module("gl-renderer.so", + gl_renderer = libweston_load_module("gl-renderer.so", "gl_renderer_interface"); if (!gl_renderer) { weston_log("could not load gl renderer\n"); diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c index d1c020d..244807a 100644 --- a/src/compositor-wayland.c +++ b/src/compositor-wayland.c @@ -39,6 +39,7 @@ #include <wayland-egl.h> #include <wayland-cursor.h> +#include "libweston.h" #include "compositor.h" #include "gl-renderer.h" #include "pixman-renderer.h" @@ -2240,8 +2241,8 @@ wayland_backend_create(struct weston_compositor *compositor, int use_pixman, b->use_pixman = use_pixman; if (!b->use_pixman) { - gl_renderer = weston_load_module("gl-renderer.so", - "gl_renderer_interface"); + gl_renderer = libweston_load_module("gl-renderer.so", + "gl_renderer_interface"); if (!gl_renderer) b->use_pixman = 1; } diff --git a/src/compositor-x11.c b/src/compositor-x11.c index b70c119..cac96cb 100644 --- a/src/compositor-x11.c +++ b/src/compositor-x11.c @@ -49,6 +49,7 @@ #include <xkbcommon/xkbcommon.h> +#include "libweston.h" #include "compositor.h" #include "gl-renderer.h" #include "pixman-renderer.h" @@ -1552,8 +1553,8 @@ init_gl_renderer(struct x11_backend *b) { int ret; - gl_renderer = weston_load_module("gl-renderer.so", - "gl_renderer_interface"); + gl_renderer = libweston_load_module("gl-renderer.so", + "gl_renderer_interface"); if (!gl_renderer) return -1; diff --git a/src/compositor.c b/src/compositor.c index 56eefc4..5b698d1 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -44,7 +44,6 @@ #include <unistd.h> #include <math.h> #include <linux/input.h> -#include <dlfcn.h> #include <signal.h> #include <setjmp.h> #include <sys/time.h> @@ -4964,49 +4963,6 @@ weston_version(int *major, int *minor, int *micro) *micro = WESTON_VERSION_MICRO; } -WL_EXPORT void * -weston_load_module(const char *name, const char *entrypoint) -{ - const char *builddir = getenv("WESTON_BUILD_DIR"); - char path[PATH_MAX]; - void *module, *init; - - if (name == NULL) - return NULL; - - if (name[0] != '/') { - if (builddir) - snprintf(path, sizeof path, "%s/.libs/%s", builddir, name); - else - snprintf(path, sizeof path, "%s/%s", MODULEDIR, name); - } else { - snprintf(path, sizeof path, "%s", name); - } - - module = dlopen(path, RTLD_NOW | RTLD_NOLOAD); - if (module) { - weston_log("Module '%s' already loaded\n", path); - dlclose(module); - return NULL; - } - - weston_log("Loading module '%s'\n", path); - module = dlopen(path, RTLD_NOW); - if (!module) { - weston_log("Failed to load module: %s\n", dlerror()); - return NULL; - } - - init = dlsym(module, entrypoint); - if (!init) { - weston_log("Failed to lookup init function: %s\n", dlerror()); - dlclose(module); - return NULL; - } - - return init; -} - /** Destroys the compositor. * diff --git a/src/compositor.h b/src/compositor.h index 10dd641..7b6b013 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -1691,9 +1691,6 @@ weston_transformed_region(int width, int height, int32_t scale, pixman_region32_t *src, pixman_region32_t *dest); -void * -weston_load_module(const char *name, const char *entrypoint); - int weston_parse_transform(const char *transform, uint32_t *out); diff --git a/src/main.c b/src/main.c index 922e46e..2425fda 100644 --- a/src/main.c +++ b/src/main.c @@ -479,7 +479,7 @@ load_modules(struct weston_compositor *ec, const char *modules, while (*p) { end = strchrnul(p, ','); snprintf(buffer, sizeof buffer, "%.*s", (int) (end - p), p); - module_init = weston_load_module(buffer, "module_init"); + module_init = libweston_load_module(buffer, "module_init"); if (!module_init) return -1; if (module_init(ec, argc, argv) < 0) @@ -647,7 +647,7 @@ load_backend_old(struct weston_compositor *compositor, const char *backend, struct weston_config *config, struct weston_backend_config *config_base); - backend_init = weston_load_module(backend, "backend_init"); + backend_init = libweston_load_module(backend, "backend_init"); if (!backend_init) return -1; -- 2.6.4 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel