]> code.ossystems Code Review - meta-freescale.git/commitdiff
weston: Use weston 1.11.1 for mx6 and mx7 machines
authorFabio Berton <fabio.berton@ossystems.com.br>
Mon, 15 May 2017 21:06:47 +0000 (18:06 -0300)
committerOtavio Salvador <otavio@ossystems.com.br>
Fri, 19 May 2017 10:57:43 +0000 (07:57 -0300)
As EGL support was removed from weston on commit:

https://github.com/wayland-project/weston/commit/e77f8ad79bdf3613dc7e587ea0cf5b9d39e4f8e0

we can't use version 2.0.0.

Add latest version with EGL support, 1.11.1 and set mx6 and mx7
machines to use this version.

Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
conf/machine/include/imx-base.inc
recipes-graphics/wayland/weston/0001-Add-configuration-option-for-no-input-device.patch [new file with mode: 0644]
recipes-graphics/wayland/weston/0001-configure.ac-Fix-wayland-protocols-path.patch [new file with mode: 0644]
recipes-graphics/wayland/weston/0001-make-error-portable.patch [new file with mode: 0644]
recipes-graphics/wayland/weston/0001-shared-include-stdint.h-for-int32_t.patch [new file with mode: 0644]
recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch [new file with mode: 0644]
recipes-graphics/wayland/weston/weston.desktop [new file with mode: 0644]
recipes-graphics/wayland/weston/weston.png [new file with mode: 0644]
recipes-graphics/wayland/weston/xwayland.weston-start [new file with mode: 0644]
recipes-graphics/wayland/weston_%.bbappend
recipes-graphics/wayland/weston_1.11.1.bb [new file with mode: 0644]

index 40689772177c469b378a662839834190ea806de1..6f3b39c2ead6c82f40610bafc8386e57f60d6a1b 100644 (file)
@@ -88,7 +88,7 @@ MACHINE_SOCARCH_SUFFIX_use-mainline-bsp = "-imx"
 
 MACHINE_ARCH_FILTER = "virtual/kernel"
 MACHINE_SOCARCH_FILTER_append_imxvpu = " imx-vpu libimxvpuapi imx-codec imx-vpuwrap imx-parser"
-MACHINE_SOCARCH_FILTER_append_imxgpu2d = " virtual/libopenvg virtual/libgles1 virtual/libgles2 virtual/egl virtual/mesa virtual/libgl virtual/libg2d cairo pango"
+MACHINE_SOCARCH_FILTER_append_imxgpu2d = " virtual/libopenvg virtual/libgles1 virtual/libgles2 virtual/egl virtual/mesa virtual/libgl virtual/libg2d cairo pango weston"
 MACHINE_SOCARCH_FILTER_append_imxpxp = " imx-codec imx-parser"
 MACHINE_SOCARCH_FILTER_append_use-mainline-bsp = " \
     qtbase \
@@ -215,5 +215,9 @@ KERNEL_IMAGETYPE = "zImage"
 
 MACHINE_FEATURES = "usbgadget usbhost vfat alsa touchscreen"
 
+# Use weston 1.11.1 for mx6 and mx7 machines
+PREFERRED_VERSION_weston_mx6 = "1.11.1"
+PREFERRED_VERSION_weston_mx7 = "1.11.1"
+
 # Add the ability to specify _imx machines
 MACHINEOVERRIDES =. "imx:"
diff --git a/recipes-graphics/wayland/weston/0001-Add-configuration-option-for-no-input-device.patch b/recipes-graphics/wayland/weston/0001-Add-configuration-option-for-no-input-device.patch
new file mode 100644 (file)
index 0000000..c45f3ad
--- /dev/null
@@ -0,0 +1,112 @@
+From 75b7197f4e072a4e2de124ddbe93b85cffb1c0f8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Daniel=20D=C3=ADaz?= <daniel.diaz@linaro.org>
+Date: Fri, 21 Oct 2016 14:03:13 -0500
+Subject: [PATCH] Add configuration option for no input device.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+As it has been discussed in the past [1], running Weston
+without any input device at launch might be beneficial for
+some use cases.
+
+Certainly, it's best for the vast majority of users (and
+the project) to require an input device to be present, as
+to avoid frustration and hassle, but for those brave souls
+that so prefer, this patch lets them run without any input
+device at all.
+
+This introduces a simple configuration in weston.ini:
+  [core]
+  require-input=true
+
+True is the default, so no behavioral change is introduced.
+
+[1] https://lists.freedesktop.org/archives/wayland-devel/2015-November/025193.html
+
+Signed-off-by: Daniel Díaz <daniel.diaz@linaro.org>
+Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+Reviewed-by: Daniel Stone <daniels@collabora.com>
+
+Upstream-Status: backport from
+https://cgit.freedesktop.org/wayland/weston/commit/?id=75b7197f
+---
+ man/weston.ini.man  |    5 +++++
+ src/compositor.h    |    3 +++
+ src/libinput-seat.c |    6 ++++++
+ src/main.c          |    5 +++++
+ weston.ini.in       |    1 +
+ 5 files changed, 20 insertions(+)
+
+--- a/src/main.c
++++ b/src/main.c
+@@ -1298,6 +1298,7 @@ int main(int argc, char *argv[])
+       struct wl_client *primary_client;
+       struct wl_listener primary_client_destroyed;
+       struct weston_seat *seat;
++      int require_input;
+       const struct weston_option core_options[] = {
+               { WESTON_OPTION_STRING, "backend", 'B', &backend },
+@@ -1373,6 +1374,10 @@ int main(int argc, char *argv[])
+       if (weston_compositor_init_config(ec, config) < 0)
+               goto out;
++      weston_config_section_get_bool(section, "require-input",
++                                     &require_input, true);
++      ec->require_input = require_input;
++
+       if (load_backend(ec, backend, &argc, argv, config) < 0) {
+               weston_log("fatal: failed to create compositor backend\n");
+               goto out;
+--- a/src/compositor.h
++++ b/src/compositor.h
+@@ -803,6 +803,9 @@ struct weston_compositor {
+       void *user_data;
+       void (*exit)(struct weston_compositor *c);
++
++      /* Whether to let the compositor run without any input device. */
++      bool require_input;
+ };
+ struct weston_buffer {
+--- a/src/libinput-seat.c
++++ b/src/libinput-seat.c
+@@ -255,6 +255,12 @@ udev_input_enable(struct udev_input *inp
+                       devices_found = 1;
+       }
++      if (devices_found == 0 && !c->require_input) {
++              weston_log("warning: no input devices found, but none required "
++                         "as per configuration.\n");
++              return 0;
++      }
++
+       if (devices_found == 0) {
+               weston_log(
+                       "warning: no input devices on entering Weston. "
+--- a/man/weston.ini.man
++++ b/man/weston.ini.man
+@@ -169,6 +169,11 @@ time, the one specified in the command-l
+ hand, if none of these sets the value, default idle timeout will be
+ set to 300 seconds.
+ .RS
++.PP
++.RE
++.TP 7
++.BI "require-input=" true
++require an input device for launch
+ .SH "LIBINPUT SECTION"
+ The
+--- a/weston.ini.in
++++ b/weston.ini.in
+@@ -2,6 +2,7 @@
+ #modules=xwayland.so,cms-colord.so
+ #shell=desktop-shell.so
+ #gbm-format=xrgb2101010
++#require-input=true
+ [shell]
+ background-image=/usr/share/backgrounds/gnome/Aqua.jpg
diff --git a/recipes-graphics/wayland/weston/0001-configure.ac-Fix-wayland-protocols-path.patch b/recipes-graphics/wayland/weston/0001-configure.ac-Fix-wayland-protocols-path.patch
new file mode 100644 (file)
index 0000000..edd3b91
--- /dev/null
@@ -0,0 +1,29 @@
+From 1cfc1434a5d385a74de593ec7601674dba39e2fe Mon Sep 17 00:00:00 2001
+From: Jussi Kukkonen <jussi.kukkonen@intel.com>
+Date: Wed, 11 May 2016 16:16:30 +0300
+Subject: [PATCH] configure.ac: Fix wayland-protocols path
+
+The wayland-protocols directory is used during build: Fix the path
+to point to sysroot specified in recipe.
+
+Normally PKG_CONFIG_SYSROOT_DIR could be used in configure.ac but that
+breaks multilib weston as it would point to multilib sysroot when the
+(allarch) wayland-protocols is actually in the machine sysroot.
+
+Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
+Upstream-Status: Inappropriate [embedded specific]
+---
+ configure.ac |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -187,7 +187,7 @@ PKG_CHECK_MODULES(LIBINPUT_BACKEND, [lib
+ PKG_CHECK_MODULES(COMPOSITOR, [$COMPOSITOR_MODULES])
+ PKG_CHECK_MODULES(WAYLAND_PROTOCOLS, [wayland-protocols >= 1.2],
+-                [ac_wayland_protocols_pkgdatadir=`$PKG_CONFIG --variable=pkgdatadir wayland-protocols`])
++                [ac_wayland_protocols_pkgdatadir=${WAYLAND_PROTOCOLS_SYSROOT_DIR}`$PKG_CONFIG --variable=pkgdatadir wayland-protocols`])
+ AC_SUBST(WAYLAND_PROTOCOLS_DATADIR, $ac_wayland_protocols_pkgdatadir)
+ AC_ARG_ENABLE(wayland-compositor, [  --enable-wayland-compositor],,
diff --git a/recipes-graphics/wayland/weston/0001-make-error-portable.patch b/recipes-graphics/wayland/weston/0001-make-error-portable.patch
new file mode 100644 (file)
index 0000000..f7b5284
--- /dev/null
@@ -0,0 +1,70 @@
+From c22e90365d89346258394833cbcad03ff32b2e27 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 29 May 2015 20:56:00 -0700
+Subject: [PATCH weston] make error() portable
+
+error() is not posix but gnu extension so may not be available on all
+kind of systemsi e.g. musl.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+
+ configure.ac        |    2 ++
+ src/weston-error.h  |   20 ++++++++++++++++++++
+ src/weston-launch.c |    2 +-
+ 3 files changed, 23 insertions(+), 1 deletion(-)
+ create mode 100644 src/weston-error.h
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -60,6 +60,8 @@ AC_CHECK_DECL(CLOCK_MONOTONIC,[],
+             [[#include <time.h>]])
+ AC_CHECK_HEADERS([execinfo.h])
++AC_CHECK_HEADERS([error.h])
++
+ AC_CHECK_FUNCS([mkostemp strchrnul initgroups posix_fallocate])
+ COMPOSITOR_MODULES="wayland-server >= $WAYLAND_PREREQ_VERSION pixman-1 >= 0.25.2"
+--- /dev/null
++++ b/src/weston-error.h
+@@ -0,0 +1,20 @@
++#ifndef _WESTON_ERROR_H
++#define _WESTON_ERROR_H
++
++#if defined(HAVE_ERROR_H)
++#include <error.h>
++#else
++#include <err.h>
++#include <string.h>
++#define _weston_error(S, E, F, ...) do { \
++      if (E) \
++              err(S, F ": %s", ##__VA_ARGS__, strerror(E)); \
++      else \
++              err(S, F, ##__VA_ARGS__); \
++} while(0)
++
++#define error _weston_error
++#endif
++
++#endif
++
+--- a/src/weston-launch.c
++++ b/src/weston-launch.c
+@@ -33,7 +33,6 @@
+ #include <poll.h>
+ #include <errno.h>
+-#include <error.h>
+ #include <getopt.h>
+ #include <sys/types.h>
+@@ -59,6 +58,7 @@
+ #endif
+ #include "weston-launch.h"
++#include "weston-error.h"
+ #define DRM_MAJOR 226
diff --git a/recipes-graphics/wayland/weston/0001-shared-include-stdint.h-for-int32_t.patch b/recipes-graphics/wayland/weston/0001-shared-include-stdint.h-for-int32_t.patch
new file mode 100644 (file)
index 0000000..ee66c20
--- /dev/null
@@ -0,0 +1,23 @@
+From ba02b8abe4e2afac2bfbf2559972d5059d75a041 Mon Sep 17 00:00:00 2001
+From: Jussi Kukkonen <jussi.kukkonen@intel.com>
+Date: Sat, 16 Jul 2016 22:50:19 +0300
+Subject: [PATCH weston] shared: include stdint.h for int32_t
+
+This fixes build on musl.
+
+Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
+Upstream-Status: Submitted
+---
+ shared/xalloc.h |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/shared/xalloc.h
++++ b/shared/xalloc.h
+@@ -30,6 +30,7 @@
+ extern "C" {
+ #endif
++#include <stdint.h>
+ #include <stdlib.h>
+ #include <string.h>
diff --git a/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch b/recipes-graphics/wayland/weston/0001-weston-launch-Provide-a-default-version-that-doesn-t.patch
new file mode 100644 (file)
index 0000000..d684b1c
--- /dev/null
@@ -0,0 +1,166 @@
+From d02226b3d5872b184c1d50c7f4706ac9467ffb81 Mon Sep 17 00:00:00 2001
+From: Tom Hochstein <tom.hochstein@nxp.com>
+Date: Fri, 15 Jul 2016 11:00:15 +0300
+Subject: [PATCH] weston-launch: Provide a default version that doesn't require
+ PAM
+
+weston-launch requires PAM for starting weston as a non-root user.
+
+Since starting weston as root is a valid use case by itself, if
+PAM is not available, provide a default version of weston-launch
+without non-root-user support.
+
+Upstream-Status: Pending
+
+Signed-off-by: Tom Hochstein <tom.hochstein@nxp.com>
+---
+ configure.ac        |    9 +++++++--
+ src/weston-launch.c |   20 ++++++++++++++++++++
+ 2 files changed, 27 insertions(+), 2 deletions(-)
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -416,13 +416,17 @@ AC_ARG_ENABLE(resize-optimization,
+ AS_IF([test "x$enable_resize_optimization" = "xyes"],
+       [AC_DEFINE([USE_RESIZE_POOL], [1], [Use resize memory pool as a performance optimization])])
++AC_ARG_WITH(pam,
++            AS_HELP_STRING([--with-pam], [Use PAM]),
++            [use_pam=$withval], [use_pam=yes])
+ AC_ARG_ENABLE(weston-launch, [  --enable-weston-launch],, enable_weston_launch=yes)
+ AM_CONDITIONAL(BUILD_WESTON_LAUNCH, test x$enable_weston_launch == xyes)
+-if test x$enable_weston_launch == xyes; then
++if test x$enable_weston_launch = xyes -a x$use_pam = xyes; then
+   WESTON_SEARCH_LIBS([PAM], [pam], [pam_open_session], [have_pam=yes], [have_pam=no])
+   if test x$have_pam == xno; then
+-    AC_ERROR([weston-launch requires pam])
++    AC_ERROR([PAM support is explicitly requested, but libpam couldn't be found])
+   fi
++  AC_DEFINE([HAVE_PAM], [1], [Define if PAM is available])
+ fi
+ AM_CONDITIONAL(HAVE_PANGO, test "x$have_pango" = "xyes")
+@@ -673,6 +677,7 @@ AC_MSG_RESULT([
+       Enable developer documentation  ${enable_devdocs}
+       weston-launch utility           ${enable_weston_launch}
++      PAM support                     ${use_pam}
+       systemd-login support           ${have_systemd_login}
+       systemd notify support          ${enable_systemd_notify}
+--- a/src/weston-launch.c
++++ b/src/weston-launch.c
+@@ -51,7 +51,9 @@
+ #include <pwd.h>
+ #include <grp.h>
++#ifdef HAVE_PAM
+ #include <security/pam_appl.h>
++#endif
+ #ifdef HAVE_SYSTEMD_LOGIN
+ #include <systemd/sd-login.h>
+@@ -93,8 +95,10 @@ drmSetMaster(int drm_fd)
+ #endif
+ struct weston_launch {
++#ifdef HAVE_PAM
+       struct pam_conv pc;
+       pam_handle_t *ph;
++#endif
+       int tty;
+       int ttynr;
+       int sock[2];
+@@ -181,6 +185,7 @@ weston_launch_allowed(struct weston_laun
+       return false;
+ }
++#ifdef HAVE_PAM
+ static int
+ pam_conversation_fn(int msg_count,
+                   const struct pam_message **messages,
+@@ -221,6 +226,7 @@ setup_pam(struct weston_launch *wl)
+       return 0;
+ }
++#endif
+ static int
+ setup_launcher_socket(struct weston_launch *wl)
+@@ -414,6 +420,7 @@ quit(struct weston_launch *wl, int statu
+       close(wl->signalfd);
+       close(wl->sock[0]);
++#ifdef HAVE_PAM
+       if (wl->new_user) {
+               err = pam_close_session(wl->ph, 0);
+               if (err)
+@@ -421,6 +428,7 @@ quit(struct weston_launch *wl, int statu
+                               err, pam_strerror(wl->ph, err));
+               pam_end(wl->ph, err);
+       }
++#endif
+       if (ioctl(wl->tty, KDSKBMUTE, 0) &&
+           ioctl(wl->tty, KDSKBMODE, wl->kb_mode))
+@@ -600,6 +608,7 @@ setup_session(struct weston_launch *wl)
+       setenv("HOME", wl->pw->pw_dir, 1);
+       setenv("SHELL", wl->pw->pw_shell, 1);
++#ifdef HAVE_PAM
+       env = pam_getenvlist(wl->ph);
+       if (env) {
+               for (i = 0; env[i]; ++i) {
+@@ -608,6 +617,7 @@ setup_session(struct weston_launch *wl)
+               }
+               free(env);
+       }
++#endif
+ }
+ static void
+@@ -665,7 +675,9 @@ static void
+ help(const char *name)
+ {
+       fprintf(stderr, "Usage: %s [args...] [-- [weston args..]]\n", name);
++#ifdef HAVE_PAM
+       fprintf(stderr, "  -u, --user      Start session as specified username\n");
++#endif
+       fprintf(stderr, "  -t, --tty       Start session on alternative tty\n");
+       fprintf(stderr, "  -v, --verbose   Be verbose\n");
+       fprintf(stderr, "  -h, --help      Display this help message\n");
+@@ -678,7 +690,9 @@ main(int argc, char *argv[])
+       int i, c;
+       char *tty = NULL;
+       struct option opts[] = {
++#ifdef HAVE_PAM
+               { "user",    required_argument, NULL, 'u' },
++#endif
+               { "tty",     required_argument, NULL, 't' },
+               { "verbose", no_argument,       NULL, 'v' },
+               { "help",    no_argument,       NULL, 'h' },
+@@ -690,9 +704,13 @@ main(int argc, char *argv[])
+       while ((c = getopt_long(argc, argv, "u:t::vh", opts, &i)) != -1) {
+               switch (c) {
+               case 'u':
++#ifdef HAVE_PAM
+                       wl.new_user = optarg;
+                       if (getuid() != 0)
+                               error(1, 0, "Permission denied. -u allowed for root only");
++#else
++                      error(1, 0, "-u is unsupported in this weston-launch build");
++#endif
+                       break;
+               case 't':
+                       tty = optarg;
+@@ -732,8 +750,10 @@ main(int argc, char *argv[])
+       if (setup_tty(&wl, tty) < 0)
+               exit(EXIT_FAILURE);
++#ifdef HAVE_PAM
+       if (wl.new_user && setup_pam(&wl) < 0)
+               exit(EXIT_FAILURE);
++#endif
+       if (setup_launcher_socket(&wl) < 0)
+               exit(EXIT_FAILURE);
diff --git a/recipes-graphics/wayland/weston/weston.desktop b/recipes-graphics/wayland/weston/weston.desktop
new file mode 100644 (file)
index 0000000..1086ae8
--- /dev/null
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Application
+Name=Weston
+Comment=Wayland Compostitor
+Exec=weston
+Icon=weston
+Terminal=false
+Categories=Utility;
diff --git a/recipes-graphics/wayland/weston/weston.png b/recipes-graphics/wayland/weston/weston.png
new file mode 100644 (file)
index 0000000..ea8b7e0
Binary files /dev/null and b/recipes-graphics/wayland/weston/weston.png differ
diff --git a/recipes-graphics/wayland/weston/xwayland.weston-start b/recipes-graphics/wayland/weston/xwayland.weston-start
new file mode 100644 (file)
index 0000000..b483c97
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if type Xwayland  >/dev/null 2>/dev/null; then
+       mkdir -p /tmp/.X11-unix
+
+       add_weston_argument "--modules=xwayland.so"
+fi
index 74d2359e0011549a3566f40965b3b17ee8ed7c20..ccbf393a2ab2b5c91c8f3218e5d03cdb94e8d065 100644 (file)
@@ -42,3 +42,5 @@ EXTRA_OECONF_IMX_imxpxp   = "${EXTRA_OECONF_IMX_COMMON}"
 EXTRA_OECONF_IMX_imxgpu2d = "${EXTRA_OECONF_IMX_COMMON}"
 
 EXTRA_OECONF_append = " ${EXTRA_OECONF_IMX}"
+
+PACKAGE_ARCH = "${MACHINE_SOCARCH}"
diff --git a/recipes-graphics/wayland/weston_1.11.1.bb b/recipes-graphics/wayland/weston_1.11.1.bb
new file mode 100644 (file)
index 0000000..22b30ad
--- /dev/null
@@ -0,0 +1,113 @@
+SUMMARY = "Weston, a Wayland compositor"
+DESCRIPTION = "Weston is the reference implementation of a Wayland compositor"
+HOMEPAGE = "http://wayland.freedesktop.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d79ee9e66bb0f95d3386a7acae780b70 \
+                    file://src/compositor.c;endline=26;md5=e342df749174a8ee11065583157c7a38"
+
+SRC_URI = "https://wayland.freedesktop.org/releases/${BPN}-${PV}.tar.xz \
+           file://weston.png \
+           file://weston.desktop \
+           file://0001-make-error-portable.patch \
+           file://0001-configure.ac-Fix-wayland-protocols-path.patch \
+           file://0001-shared-include-stdint.h-for-int32_t.patch \
+           file://xwayland.weston-start \
+           file://0001-weston-launch-Provide-a-default-version-that-doesn-t.patch \
+           file://0001-Add-configuration-option-for-no-input-device.patch \
+"
+SRC_URI[md5sum] = "c5fdc02ab67d33c0fca8f72d341facdf"
+SRC_URI[sha256sum] = "548973496a5c8613d6690f9120f21066946a544df65ce4fe0ef153a8dc0bf6de"
+
+inherit autotools pkgconfig useradd distro_features_check
+# depends on virtual/egl
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+DEPENDS = "libxkbcommon gdk-pixbuf pixman cairo glib-2.0 jpeg"
+DEPENDS += "wayland wayland-protocols libinput virtual/egl pango wayland-native"
+
+EXTRA_OECONF = "--enable-setuid-install \
+                --disable-rpi-compositor \
+                --disable-rdp-compositor \
+                WAYLAND_PROTOCOLS_SYSROOT_DIR=${RECIPE_SYSROOT} \
+                "
+EXTRA_OECONF_append_qemux86 = "\
+               WESTON_NATIVE_BACKEND=fbdev-backend.so \
+               "
+EXTRA_OECONF_append_qemux86-64 = "\
+               WESTON_NATIVE_BACKEND=fbdev-backend.so \
+               "
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'kms fbdev wayland egl', '', d)} \
+                   ${@bb.utils.contains('DISTRO_FEATURES', 'x11 wayland', 'xwayland', '', d)} \
+                   ${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd x11', d)} \
+                   clients launch"
+#
+# Compositor choices
+#
+# Weston on KMS
+PACKAGECONFIG[kms] = "--enable-drm-compositor,--disable-drm-compositor,drm udev virtual/mesa mtdev"
+# Weston on Wayland (nested Weston)
+PACKAGECONFIG[wayland] = "--enable-wayland-compositor,--disable-wayland-compositor,virtual/mesa"
+# Weston on X11
+PACKAGECONFIG[x11] = "--enable-x11-compositor,--disable-x11-compositor,virtual/libx11 libxcb libxcb libxcursor cairo"
+# Headless Weston
+PACKAGECONFIG[headless] = "--enable-headless-compositor,--disable-headless-compositor"
+# Weston on framebuffer
+PACKAGECONFIG[fbdev] = "--enable-fbdev-compositor,--disable-fbdev-compositor,udev mtdev"
+# weston-launch
+PACKAGECONFIG[launch] = "--enable-weston-launch,--disable-weston-launch,drm"
+# VA-API desktop recorder
+PACKAGECONFIG[vaapi] = "--enable-vaapi-recorder,--disable-vaapi-recorder,libva"
+# Weston with EGL support
+PACKAGECONFIG[egl] = "--enable-egl --enable-simple-egl-clients,--disable-egl --disable-simple-egl-clients,virtual/egl"
+# Weston with cairo glesv2 support
+PACKAGECONFIG[cairo-glesv2] = "--with-cairo-glesv2,--with-cairo=image,cairo"
+# Weston with lcms support
+PACKAGECONFIG[lcms] = "--enable-lcms,--disable-lcms,lcms"
+# Weston with webp support
+PACKAGECONFIG[webp] = "--with-webp,--without-webp,libwebp"
+# Weston with unwinding support
+PACKAGECONFIG[libunwind] = "--enable-libunwind,--disable-libunwind,libunwind"
+# Weston with systemd-login support
+PACKAGECONFIG[systemd] = "--enable-systemd-login,--disable-systemd-login,systemd dbus"
+# Weston with Xwayland support (requires X11 and Wayland)
+PACKAGECONFIG[xwayland] = "--enable-xwayland,--disable-xwayland"
+# colord CMS support
+PACKAGECONFIG[colord] = "--enable-colord,--disable-colord,colord"
+# Clients support
+PACKAGECONFIG[clients] = "--enable-clients --enable-simple-clients --enable-demo-clients-install,--disable-clients --disable-simple-clients"
+# Weston with PAM support
+PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam"
+
+do_install_append() {
+       # Weston doesn't need the .la files to load modules, so wipe them
+       rm -f ${D}/${libdir}/weston/*.la
+
+       # If X11, ship a desktop file to launch it
+       if [ "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}" ]; then
+               install -d ${D}${datadir}/applications
+               install ${WORKDIR}/weston.desktop ${D}${datadir}/applications
+
+               install -d ${D}${datadir}/icons/hicolor/48x48/apps
+               install ${WORKDIR}/weston.png ${D}${datadir}/icons/hicolor/48x48/apps
+       fi
+
+       if [ "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', 'yes', 'no', d)}" = "yes" ]; then
+               install -Dm 644 ${WORKDIR}/xwayland.weston-start ${D}${datadir}/weston-start/xwayland
+       fi
+}
+
+PACKAGE_BEFORE_PN += "${@bb.utils.contains('PACKAGECONFIG', 'xwayland', '${PN}-xwayland', '', d)}"
+PACKAGES += "${PN}-examples"
+
+FILES_${PN} = "${bindir}/weston ${bindir}/weston-terminal ${bindir}/weston-info ${bindir}/weston-launch ${bindir}/wcap-decode ${libexecdir} ${libdir}/${BPN}/*.so ${datadir}"
+FILES_${PN}-examples = "${bindir}/*"
+
+FILES_${PN}-xwayland = "${libdir}/${BPN}/xwayland.so"
+RDEPENDS_${PN}-xwayland += "xserver-xorg-xwayland"
+
+RDEPENDS_${PN} += "xkeyboard-config"
+RRECOMMENDS_${PN} = "liberation-fonts"
+RRECOMMENDS_${PN}-dev += "wayland-protocols"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "--system weston-launch"