libexec_PROGRAMS =
moduledir = $(libdir)/weston
module_LTLIBRARIES =
+libweston_moduledir = $(libdir)/libweston-${LIBWESTON_ABI_VERSION}
+libweston_module_LTLIBRARIES =
noinst_LTLIBRARIES =
BUILT_SOURCES =
-I$(top_builddir)/protocol \
-DDATADIR='"$(datadir)"' \
-DMODULEDIR='"$(moduledir)"' \
+ -DLIBWESTON_MODULEDIR='"$(libweston_moduledir)"' \
-DLIBEXECDIR='"$(libexecdir)"' \
-DBINDIR='"$(bindir)"'
wayland_sessiondir = $(datadir)/wayland-sessions
dist_wayland_session_DATA = src/weston.desktop
-westonincludedir = $(includedir)/weston
-westoninclude_HEADERS = \
+libwestonincludedir = $(includedir)/libweston-${LIBWESTON_ABI_VERSION}
+libwestoninclude_HEADERS = \
src/version.h \
src/compositor.h \
src/compositor-drm.h \
src/compositor-wayland.h \
src/compositor-x11.h \
src/timeline-object.h \
- src/weston.h \
shared/matrix.h \
shared/config-parser.h \
shared/zalloc.h \
shared/platform.h
+westonincludedir = $(includedir)/weston
+westoninclude_HEADERS = src/weston.h
+
if ENABLE_IVI_SHELL
westoninclude_HEADERS += \
ivi-shell/ivi-layout-export.h
endif
if ENABLE_EGL
-module_LTLIBRARIES += gl-renderer.la
+libweston_module_LTLIBRARIES += gl-renderer.la
gl_renderer_la_LDFLAGS = -module -avoid-version
gl_renderer_la_LIBADD = $(COMPOSITOR_LIBS) $(EGL_LIBS)
gl_renderer_la_CFLAGS = \
endif
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_LIBADD = $(COMPOSITOR_LIBS) $(X11_COMPOSITOR_LIBS) \
libshared-cairo.la
shared/helpers.h
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_LIBADD = \
$(COMPOSITOR_LIBS) \
endif
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_LIBADD = \
$(COMPOSITOR_LIBS) \
endif
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_LIBADD = $(COMPOSITOR_LIBS) libshared.la
headless_backend_la_CFLAGS = $(COMPOSITOR_CFLAGS) $(AM_CFLAGS)
endif
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_LIBADD = \
$(COMPOSITOR_LIBS) \
endif
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_LIBADD = $(COMPOSITOR_LIBS) \
$(RDP_COMPOSITOR_LIBS) \
m4_define([weston_micro_version], [90])
m4_define([weston_version],
[weston_major_version.weston_minor_version.weston_micro_version])
+m4_define([libweston_abi_version], [0])
AC_PREREQ([2.64])
AC_INIT([weston],
AC_SUBST([WESTON_VERSION_MINOR], [weston_minor_version])
AC_SUBST([WESTON_VERSION_MICRO], [weston_micro_version])
AC_SUBST([WESTON_VERSION], [weston_version])
+AC_SUBST([LIBWESTON_ABI_VERSION], [libweston_abi_version])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h])
#include <string.h>
#include <assert.h>
+#include "weston.h"
#include "compositor.h"
#include "ivi-shell.h"
#include "ivi-layout-export.h"
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 = wet_load_module(buffer, "controller_module_init");
if (!controller_module_init)
return -1;
if (builddir)
snprintf(path, sizeof path, "%s/.libs/%s", builddir, name);
else
- snprintf(path, sizeof path, "%s/%s", MODULEDIR, name);
+ snprintf(path, sizeof path, "%s/%s", LIBWESTON_MODULEDIR, name);
} else {
snprintf(path, sizeof path, "%s", name);
}
#include <sys/socket.h>
#include <libinput.h>
#include <sys/time.h>
+#include <linux/limits.h>
#ifdef HAVE_LIBUNWIND
#define UNW_LOCAL_ONLY
#include <libunwind.h>
#endif
+#include "weston.h"
#include "compositor.h"
#include "../shared/os-compatibility.h"
#include "../shared/helpers.h"
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
load_modules(struct weston_compositor *ec, const char *modules,
int *argc, char *argv[])
while (*p) {
end = strchrnul(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)
return -1;
if (module_init(ec, argc, argv) < 0)
extern "C" {
#endif
-#include "compositor.h"
+#include <compositor.h>
void
screenshooter_create(struct weston_compositor *ec);
struct weston_config *
wet_get_config(struct weston_compositor *compositor);
+void *
+wet_load_module(const char *name, const char *entrypoint);
+
#ifdef __cplusplus
}
#endif
Description: Header files for Weston plugin development
Version: @WESTON_VERSION@
Requires.private: wayland-server pixman-1 xkbcommon
-Cflags: -I${includedir}
+Cflags: -I${includedir}/weston -I{includedir}/libweston-@LIBWESTON_ABI_VERSION@