Split the modules and include files between weston and libweston

The backends are now installed in lib/libweston-0, and the include
files that will be used by libweston in include/libweston-0. The other
modules and weston-specific include files are kept in the old paths.
A new wet_load_module() is added to load plugins in the old path,
which is not part of libweston, but weston only and defined in main.c.
To allow that to be used by out of tree weston plugins, the function
is declared in a new weston.h, installed in include/weston.

The -0 in the paths is the abi version of libweston, and it will also
be used by the libweston .so. If the abi changes the number will need
to be increased.

Signed-off-by: Giulio Camuffo <giuliocamuffo@gmail.com>
Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
dev
Giulio Camuffo 9 years ago committed by Pekka Paalanen
parent be2b11a7c0
commit 179fcda31f
  1. 25
      Makefile.am
  2. 2
      configure.ac
  3. 3
      ivi-shell/ivi-layout.c
  4. 2
      src/compositor.c
  5. 47
      src/main.c
  6. 5
      src/weston.h
  7. 2
      src/weston.pc.in

@ -5,6 +5,8 @@ noinst_PROGRAMS =
libexec_PROGRAMS = libexec_PROGRAMS =
moduledir = $(libdir)/weston moduledir = $(libdir)/weston
module_LTLIBRARIES = module_LTLIBRARIES =
libweston_moduledir = $(libdir)/libweston-${LIBWESTON_ABI_VERSION}
libweston_module_LTLIBRARIES =
noinst_LTLIBRARIES = noinst_LTLIBRARIES =
BUILT_SOURCES = BUILT_SOURCES =
@ -50,6 +52,7 @@ AM_CPPFLAGS = \
-I$(top_builddir)/protocol \ -I$(top_builddir)/protocol \
-DDATADIR='"$(datadir)"' \ -DDATADIR='"$(datadir)"' \
-DMODULEDIR='"$(moduledir)"' \ -DMODULEDIR='"$(moduledir)"' \
-DLIBWESTON_MODULEDIR='"$(libweston_moduledir)"' \
-DLIBEXECDIR='"$(libexecdir)"' \ -DLIBEXECDIR='"$(libexecdir)"' \
-DBINDIR='"$(bindir)"' -DBINDIR='"$(bindir)"'
@ -212,8 +215,8 @@ pkgconfig_DATA = src/weston.pc
wayland_sessiondir = $(datadir)/wayland-sessions wayland_sessiondir = $(datadir)/wayland-sessions
dist_wayland_session_DATA = src/weston.desktop dist_wayland_session_DATA = src/weston.desktop
westonincludedir = $(includedir)/weston libwestonincludedir = $(includedir)/libweston-${LIBWESTON_ABI_VERSION}
westoninclude_HEADERS = \ libwestoninclude_HEADERS = \
src/version.h \ src/version.h \
src/compositor.h \ src/compositor.h \
src/compositor-drm.h \ src/compositor-drm.h \
@ -223,19 +226,21 @@ westoninclude_HEADERS = \
src/compositor-wayland.h \ src/compositor-wayland.h \
src/compositor-x11.h \ src/compositor-x11.h \
src/timeline-object.h \ src/timeline-object.h \
src/weston.h \
shared/matrix.h \ shared/matrix.h \
shared/config-parser.h \ shared/config-parser.h \
shared/zalloc.h \ shared/zalloc.h \
shared/platform.h shared/platform.h
westonincludedir = $(includedir)/weston
westoninclude_HEADERS = src/weston.h
if ENABLE_IVI_SHELL if ENABLE_IVI_SHELL
westoninclude_HEADERS += \ westoninclude_HEADERS += \
ivi-shell/ivi-layout-export.h ivi-shell/ivi-layout-export.h
endif endif
if ENABLE_EGL if ENABLE_EGL
module_LTLIBRARIES += gl-renderer.la libweston_module_LTLIBRARIES += gl-renderer.la
gl_renderer_la_LDFLAGS = -module -avoid-version gl_renderer_la_LDFLAGS = -module -avoid-version
gl_renderer_la_LIBADD = $(COMPOSITOR_LIBS) $(EGL_LIBS) gl_renderer_la_LIBADD = $(COMPOSITOR_LIBS) $(EGL_LIBS)
gl_renderer_la_CFLAGS = \ gl_renderer_la_CFLAGS = \
@ -252,7 +257,7 @@ gl_renderer_la_SOURCES = \
endif endif
if ENABLE_X11_COMPOSITOR if ENABLE_X11_COMPOSITOR
module_LTLIBRARIES += x11-backend.la libweston_module_LTLIBRARIES += x11-backend.la
x11_backend_la_LDFLAGS = -module -avoid-version x11_backend_la_LDFLAGS = -module -avoid-version
x11_backend_la_LIBADD = $(COMPOSITOR_LIBS) $(X11_COMPOSITOR_LIBS) \ x11_backend_la_LIBADD = $(COMPOSITOR_LIBS) $(X11_COMPOSITOR_LIBS) \
libshared-cairo.la libshared-cairo.la
@ -278,7 +283,7 @@ INPUT_BACKEND_SOURCES = \
shared/helpers.h shared/helpers.h
if ENABLE_DRM_COMPOSITOR if ENABLE_DRM_COMPOSITOR
module_LTLIBRARIES += drm-backend.la libweston_module_LTLIBRARIES += drm-backend.la
drm_backend_la_LDFLAGS = -module -avoid-version drm_backend_la_LDFLAGS = -module -avoid-version
drm_backend_la_LIBADD = \ drm_backend_la_LIBADD = \
$(COMPOSITOR_LIBS) \ $(COMPOSITOR_LIBS) \
@ -309,7 +314,7 @@ endif
endif endif
if ENABLE_WAYLAND_COMPOSITOR if ENABLE_WAYLAND_COMPOSITOR
module_LTLIBRARIES += wayland-backend.la libweston_module_LTLIBRARIES += wayland-backend.la
wayland_backend_la_LDFLAGS = -module -avoid-version wayland_backend_la_LDFLAGS = -module -avoid-version
wayland_backend_la_LIBADD = \ wayland_backend_la_LIBADD = \
$(COMPOSITOR_LIBS) \ $(COMPOSITOR_LIBS) \
@ -332,7 +337,7 @@ nodist_wayland_backend_la_SOURCES = \
endif endif
if ENABLE_HEADLESS_COMPOSITOR if ENABLE_HEADLESS_COMPOSITOR
module_LTLIBRARIES += headless-backend.la libweston_module_LTLIBRARIES += headless-backend.la
headless_backend_la_LDFLAGS = -module -avoid-version headless_backend_la_LDFLAGS = -module -avoid-version
headless_backend_la_LIBADD = $(COMPOSITOR_LIBS) libshared.la headless_backend_la_LIBADD = $(COMPOSITOR_LIBS) libshared.la
headless_backend_la_CFLAGS = $(COMPOSITOR_CFLAGS) $(AM_CFLAGS) headless_backend_la_CFLAGS = $(COMPOSITOR_CFLAGS) $(AM_CFLAGS)
@ -343,7 +348,7 @@ headless_backend_la_SOURCES = \
endif endif
if ENABLE_FBDEV_COMPOSITOR if ENABLE_FBDEV_COMPOSITOR
module_LTLIBRARIES += fbdev-backend.la libweston_module_LTLIBRARIES += fbdev-backend.la
fbdev_backend_la_LDFLAGS = -module -avoid-version fbdev_backend_la_LDFLAGS = -module -avoid-version
fbdev_backend_la_LIBADD = \ fbdev_backend_la_LIBADD = \
$(COMPOSITOR_LIBS) \ $(COMPOSITOR_LIBS) \
@ -365,7 +370,7 @@ fbdev_backend_la_SOURCES = \
endif endif
if ENABLE_RDP_COMPOSITOR if ENABLE_RDP_COMPOSITOR
module_LTLIBRARIES += rdp-backend.la libweston_module_LTLIBRARIES += rdp-backend.la
rdp_backend_la_LDFLAGS = -module -avoid-version rdp_backend_la_LDFLAGS = -module -avoid-version
rdp_backend_la_LIBADD = $(COMPOSITOR_LIBS) \ rdp_backend_la_LIBADD = $(COMPOSITOR_LIBS) \
$(RDP_COMPOSITOR_LIBS) \ $(RDP_COMPOSITOR_LIBS) \

@ -3,6 +3,7 @@ m4_define([weston_minor_version], [11])
m4_define([weston_micro_version], [90]) m4_define([weston_micro_version], [90])
m4_define([weston_version], m4_define([weston_version],
[weston_major_version.weston_minor_version.weston_micro_version]) [weston_major_version.weston_minor_version.weston_micro_version])
m4_define([libweston_abi_version], [0])
AC_PREREQ([2.64]) AC_PREREQ([2.64])
AC_INIT([weston], AC_INIT([weston],
@ -17,6 +18,7 @@ AC_SUBST([WESTON_VERSION_MAJOR], [weston_major_version])
AC_SUBST([WESTON_VERSION_MINOR], [weston_minor_version]) AC_SUBST([WESTON_VERSION_MINOR], [weston_minor_version])
AC_SUBST([WESTON_VERSION_MICRO], [weston_micro_version]) AC_SUBST([WESTON_VERSION_MICRO], [weston_micro_version])
AC_SUBST([WESTON_VERSION], [weston_version]) AC_SUBST([WESTON_VERSION], [weston_version])
AC_SUBST([LIBWESTON_ABI_VERSION], [libweston_abi_version])
AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])

@ -60,6 +60,7 @@
#include <string.h> #include <string.h>
#include <assert.h> #include <assert.h>
#include "weston.h"
#include "compositor.h" #include "compositor.h"
#include "ivi-shell.h" #include "ivi-shell.h"
#include "ivi-layout-export.h" #include "ivi-layout-export.h"
@ -2071,7 +2072,7 @@ load_controller_modules(struct weston_compositor *compositor, const char *module
end = strchrnul(p, ','); end = strchrnul(p, ',');
snprintf(buffer, sizeof buffer, "%.*s", (int)(end - p), p); snprintf(buffer, sizeof buffer, "%.*s", (int)(end - p), p);
controller_module_init = weston_load_module(buffer, "controller_module_init"); controller_module_init = wet_load_module(buffer, "controller_module_init");
if (!controller_module_init) if (!controller_module_init)
return -1; return -1;

@ -4791,7 +4791,7 @@ weston_load_module(const char *name, const char *entrypoint)
if (builddir) if (builddir)
snprintf(path, sizeof path, "%s/.libs/%s", builddir, name); snprintf(path, sizeof path, "%s/.libs/%s", builddir, name);
else else
snprintf(path, sizeof path, "%s/%s", MODULEDIR, name); snprintf(path, sizeof path, "%s/%s", LIBWESTON_MODULEDIR, name);
} else { } else {
snprintf(path, sizeof path, "%s", name); snprintf(path, sizeof path, "%s", name);
} }

@ -40,12 +40,14 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <libinput.h> #include <libinput.h>
#include <sys/time.h> #include <sys/time.h>
#include <linux/limits.h>
#ifdef HAVE_LIBUNWIND #ifdef HAVE_LIBUNWIND
#define UNW_LOCAL_ONLY #define UNW_LOCAL_ONLY
#include <libunwind.h> #include <libunwind.h>
#endif #endif
#include "weston.h"
#include "compositor.h" #include "compositor.h"
#include "../shared/os-compatibility.h" #include "../shared/os-compatibility.h"
#include "../shared/helpers.h" #include "../shared/helpers.h"
@ -690,6 +692,49 @@ weston_create_listening_socket(struct wl_display *display, const char *socket_na
return 0; return 0;
} }
WL_EXPORT void *
wet_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;
}
static int static int
load_modules(struct weston_compositor *ec, const char *modules, load_modules(struct weston_compositor *ec, const char *modules,
int *argc, char *argv[]) int *argc, char *argv[])
@ -706,7 +751,7 @@ load_modules(struct weston_compositor *ec, const char *modules,
while (*p) { while (*p) {
end = strchrnul(p, ','); end = strchrnul(p, ',');
snprintf(buffer, sizeof buffer, "%.*s", (int) (end - p), p); snprintf(buffer, sizeof buffer, "%.*s", (int) (end - p), p);
module_init = weston_load_module(buffer, "module_init"); module_init = wet_load_module(buffer, "module_init");
if (!module_init) if (!module_init)
return -1; return -1;
if (module_init(ec, argc, argv) < 0) if (module_init(ec, argc, argv) < 0)

@ -30,7 +30,7 @@
extern "C" { extern "C" {
#endif #endif
#include "compositor.h" #include <compositor.h>
void void
screenshooter_create(struct weston_compositor *ec); screenshooter_create(struct weston_compositor *ec);
@ -60,6 +60,9 @@ weston_watch_process(struct weston_process *process);
struct weston_config * struct weston_config *
wet_get_config(struct weston_compositor *compositor); wet_get_config(struct weston_compositor *compositor);
void *
wet_load_module(const char *name, const char *entrypoint);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

@ -9,4 +9,4 @@ Name: Weston Plugin API
Description: Header files for Weston plugin development Description: Header files for Weston plugin development
Version: @WESTON_VERSION@ Version: @WESTON_VERSION@
Requires.private: wayland-server pixman-1 xkbcommon Requires.private: wayland-server pixman-1 xkbcommon
Cflags: -I${includedir} Cflags: -I${includedir}/weston -I{includedir}/libweston-@LIBWESTON_ABI_VERSION@

Loading…
Cancel
Save