Index | Thread | Search

From:
Volker Schlecht <openbsd-ports@schlecht.dev>
Subject:
Re: Adding wlroots 0.20
To:
ports <ports@openbsd.org>
Cc:
landry@openbsd.org, Robert Lillack <rob@lillack.net>
Date:
Sun, 7 Jun 2026 13:23:14 +0200

Download raw body.

Thread
  • landry@openbsd.org:

    Adding wlroots 0.20

    • Volker Schlecht:

      Adding wlroots 0.20

  • Thanks everybody for the feedback and testing!
    
    Fixed diff attached - still with the update to wlroots 0.19.3 included, though.
    
    On 6/7/26 8:20 AM, landry@openbsd.org wrote:
    > Le Wed, Jun 03, 2026 at 07:28:40PM +0200, Volker Schlecht a écrit :
    >> Hi,
    >>
    >> picking up the thread started by Robert Lillack, here is the diff I have been
    >> testing and which so far works fine here.
    > 
    > now that i've built-tested it:
    > 
    > - 0.20 needs an update-plist, otherwise it lacks a bunch of headers
    >    required to build sway 1.12 (from the diff in another thread)
    > 
    > - it updates 0.19 from .2 to .3, that's minor but still needs a bit of
    >    testing
    > 
    > - as yaydn said it lacks wlroots/Makefile with the SUBDIRs so that ports
    >    are properly linked to the build
    > 
    >> +++ 0.19/pkg/PLIST	3 Jun 2026 17:21:39 -0000
    >> @@ -0,0 +1,134 @@
    >> +@option no-default-conflict
    >> +@option is-branch
    >> +@conflict wlroots->=0.19,<0.20
    >> +@conflict wlroots->=0.19v0,<0.20v0
    >> +@pkgpath wayland/wlroots
    > 
    > this @pkgpath makes sense to update wayland/wlroots to
    > wayland/wlroots/0.19, just drop the first @conflict line from both
    > PLISTs, i think we only need the @conflict to match the "other" PKGSPEC.
    > 
    > but having the same @pkgpath wayland/wlroots in 0.20/pkg/PLIST doesnt
    > make sense imo, you don't want to migrate wayland/wlroots to
    > wayland/wlroots/0.20 (since there's already a @pkgpath wayland/wlroots
    > in 0.19/pkg/PLIST) - and 0.20 will get installed as a dependency of a
    > consumer anyway.
    > 
    > with that said i've been able to build cage 0.3, labwc 0.20 & sway 1.12
    > against wlroots 0.20 - no runtime testing yet though. i think now is a
    > good time in the release cycle to move ahead with this..
    > 
    Index: Makefile
    ===================================================================
    RCS file: /cvs/ports/wayland/wlroots/Makefile,v
    retrieving revision 1.18
    diff -u -p -r1.18 Makefile
    --- Makefile	20 Feb 2026 21:35:37 -0000	1.18
    +++ Makefile	7 Jun 2026 11:16:07 -0000
    @@ -1,60 +1,5 @@
    -COMMENT =	modular Wayland compositor library
    +SUBDIR =
    +SUBDIR +=		0.19
    +SUBDIR +=		0.20
     
    -V =		${MODWLROOTS_VERSION}.2
    -REVISION =	1
    -EPOCH =		0
    -DISTNAME =	wlroots-${V}
    -CATEGORIES =	wayland
    -
    -SITES =		${HOMEPAGE}/wlroots/-/releases/${V}/downloads/
    -
    -HOMEPAGE =	https://gitlab.freedesktop.org/wlroots
    -
    -# MIT
    -PERMIT_PACKAGE = Yes
    -
    -SHARED_LIBS +=  wlroots-0.19 0.0 # 0.0
    -
    -COMPILER =	base-clang ports-gcc
    -COMPILER_LANGS=	c
    -MODULES =	devel/meson wayland/wlroots
    -
    -MODWLROOTS_LIBDEP =	No
    -
    -WANTLIB +=	EGL GLESv2 drm gbm m pixman-1
    -WANTLIB +=	display-info lcms2 liftoff udev
    -WANTLIB +=	input seat
    -WANTLIB +=	vulkan wayland-client wayland-server
    -WANTLIB +=	xcb xcb-composite xcb-dri3 xcb-errors xcb-ewmh
    -WANTLIB +=	xcb-icccm xcb-present xcb-render xcb-render-util
    -WANTLIB +=	xcb-res xcb-shm xcb-xfixes xcb-xinput
    -WANTLIB +=	xkbcommon
    -
    -BUILD_DEPENDS = \
    -		graphics/glslang \
    -		graphics/vulkan-headers \
    -		misc/hwdata \
    -		wayland/wayland-protocols \
    -		wayland/xwayland
    -
    -LIB_DEPENDS = \
    -		graphics/lcms2 \
    -		graphics/libliftoff \
    -		graphics/vulkan-loader \
    -		sysutils/libdisplay-info \
    -		sysutils/libudev-openbsd \
    -		sysutils/seatd \
    -		wayland/libinput-openbsd \
    -		wayland/wayland \
    -		x11/xcb-util-errors \
    -		x11/xkbcommon
    -
    -RUN_DEPENDS =	wayland/xwayland
    -
    -CONFIGURE_ARGS = \
    -		-Dexamples=false \
    -		-Dallocators=gbm
    -
    -DEBUG_PACKAGES = ${BUILD_PACKAGES}
    -
    -.include <bsd.port.mk>
    +.include <bsd.port.subdir.mk>
    Index: Makefile.inc
    ===================================================================
    RCS file: Makefile.inc
    diff -N Makefile.inc
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ Makefile.inc	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,55 @@
    +COMMENT ?=	modular Wayland compositor library (${MODWLROOTS_VERSION})
    +
    +DISTNAME =	wlroots-${V}
    +PKGSTEM ?=	wlroots-${MODWLROOTS_VERSION}
    +CATEGORIES =	wayland
    +EPOCH =		0
    +
    +SITES =		${HOMEPAGE}/wlroots/-/releases/${V}/downloads/
    +
    +HOMEPAGE =	https://gitlab.freedesktop.org/wlroots
    +
    +# MIT
    +PERMIT_PACKAGE = Yes
    +
    +COMPILER =	base-clang ports-gcc
    +COMPILER_LANGS=	c
    +MODULES =	devel/meson wayland/wlroots
    +
    +MODWLROOTS_LIBDEP =	No
    +
    +WANTLIB +=	EGL GLESv2 drm gbm m pixman-1
    +WANTLIB +=	display-info lcms2 liftoff udev
    +WANTLIB +=	input seat
    +WANTLIB +=	vulkan wayland-client wayland-server
    +WANTLIB +=	xcb xcb-composite xcb-dri3 xcb-errors xcb-ewmh
    +WANTLIB +=	xcb-icccm xcb-present xcb-render xcb-render-util
    +WANTLIB +=	xcb-res xcb-shm xcb-xfixes xcb-xinput
    +WANTLIB +=	xkbcommon
    +
    +BUILD_DEPENDS = \
    +		graphics/glslang \
    +		graphics/vulkan-headers \
    +		misc/hwdata \
    +		wayland/wayland-protocols \
    +		wayland/xwayland
    +
    +LIB_DEPENDS = \
    +		graphics/lcms2 \
    +		graphics/libliftoff \
    +		graphics/vulkan-loader \
    +		sysutils/libdisplay-info \
    +		sysutils/libudev-openbsd \
    +		sysutils/seatd \
    +		wayland/libinput-openbsd \
    +		wayland/wayland \
    +		x11/xcb-util-errors \
    +		x11/xkbcommon
    +
    +RUN_DEPENDS =	wayland/xwayland
    +
    +CONFIGURE_ARGS = \
    +		-Dexamples=false \
    +		-Dallocators=gbm
    +
    +DEBUG_PACKAGES = ${BUILD_PACKAGES}
    Index: distinfo
    ===================================================================
    RCS file: distinfo
    diff -N distinfo
    --- distinfo	19 Nov 2025 08:58:58 -0000	1.10
    +++ /dev/null	1 Jan 1970 00:00:00 -0000
    @@ -1,2 +0,0 @@
    -SHA256 (wlroots-0.19.2.tar.gz) = CaCo1gEEyLB3L+5PYLp2qJrtflnf92WdAJYPuga98mc=
    -SIZE (wlroots-0.19.2.tar.gz) = 670983
    Index: wlroots.port.mk
    ===================================================================
    RCS file: /cvs/ports/wayland/wlroots/wlroots.port.mk,v
    retrieving revision 1.2
    diff -u -p -r1.2 wlroots.port.mk
    --- wlroots.port.mk	28 Aug 2025 21:01:27 -0000	1.2
    +++ wlroots.port.mk	7 Jun 2026 11:16:07 -0000
    @@ -1,13 +1,13 @@
    -MODWLROOTS_VERSION =		0.19
    +MODWLROOTS_VERSION ?=		0.19
     
     MODWLROOTS_WANTLIB =		wlroots-${MODWLROOTS_VERSION}
    -MODWLROOTS_LIB_DEPENDS =    	wayland/wlroots
    +MODWLROOTS_LIB_DEPENDS =	wayland/wlroots/${MODWLROOTS_VERSION}
     
     MODWLROOTS_LIBDEP?=		Yes
     
     .if ${MODWLROOTS_LIBDEP:L} == "yes"
     LIB_DEPENDS +=			${MODWLROOTS_LIB_DEPENDS}
    -WANTLIB +=              	${MODWLROOTS_WANTLIB}
    +WANTLIB +=			${MODWLROOTS_WANTLIB}
     .endif
     
     SUBST_VARS += 			MODWLROOTS_VERSION
    Index: 0.19/Makefile
    ===================================================================
    RCS file: 0.19/Makefile
    diff -N 0.19/Makefile
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.19/Makefile	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,9 @@
    +MODWLROOTS_VERSION =	0.19
    +
    +V =		${MODWLROOTS_VERSION}.3
    +
    +SHARED_LIBS +=	wlroots-0.19 0.0 # 0.0
    +
    +PKGSPEC =	wlroots->=0.19v0,<0.20v0
    +
    +.include <bsd.port.mk>
    Index: 0.19/distinfo
    ===================================================================
    RCS file: 0.19/distinfo
    diff -N 0.19/distinfo
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.19/distinfo	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,2 @@
    +SHA256 (wlroots-0.19.3.tar.gz) = XQJpMXXlr9mvXxDj5JdtbpJJ3DmpDrF9I/pfVLElzMU=
    +SIZE (wlroots-0.19.3.tar.gz) = 671529
    Index: 0.19/patches/patch-backend_drm_backend_c
    ===================================================================
    RCS file: 0.19/patches/patch-backend_drm_backend_c
    diff -N 0.19/patches/patch-backend_drm_backend_c
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.19/patches/patch-backend_drm_backend_c	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,55 @@
    +Index: backend/drm/backend.c
    +--- backend/drm/backend.c.orig
    ++++ backend/drm/backend.c
    +@@ -3,11 +3,13 @@
    + #include <stdio.h>
    + #include <stdlib.h>
    + #include <string.h>
    ++#include <unistd.h>
    + #include <wayland-server-core.h>
    + #include <wlr/backend/interface.h>
    + #include <wlr/backend/session.h>
    + #include <wlr/interfaces/wlr_output.h>
    + #include <wlr/util/log.h>
    ++#include <sys/event.h>
    + #include <xf86drm.h>
    + #include "backend/drm/drm.h"
    + #include "backend/drm/fb.h"
    +@@ -207,6 +209,8 @@ static bool init_mgpu_renderer(struct wlr_drm_backend 
    + 
    + struct wlr_backend *wlr_drm_backend_create(struct wlr_session *session,
    + 		struct wlr_device *dev, struct wlr_backend *parent) {
    ++	int kq;
    ++	struct kevent kev;
    + 	assert(session && dev);
    + 	assert(!parent || wlr_backend_is_drm(parent));
    + 
    +@@ -283,6 +287,28 @@ struct wlr_backend *wlr_drm_backend_create(struct wlr_
    + 	drm->session_destroy.notify = handle_session_destroy;
    + 	wl_signal_add(&session->events.destroy, &drm->session_destroy);
    + 
    ++	if ((kq = kqueue()) <= 0)
    ++		goto continue_without_kqueue;
    ++
    ++	EV_SET(&kev, dev->fd, EVFILT_DEVICE, EV_ADD | EV_ENABLE | EV_CLEAR,
    ++	       NOTE_CHANGE, 0, NULL);
    ++
    ++	if (kevent(kq, &kev, 1, NULL, 0, NULL) < 0) {
    ++		close(kq);
    ++		goto continue_without_kqueue;
    ++	}
    ++
    ++	drm->drm_kevent = wl_event_loop_add_fd(session->event_loop, kq,
    ++		WL_EVENT_READABLE, handle_drm_kevent, drm);
    ++	if (!drm->drm_kevent) {
    ++		wlr_log(WLR_ERROR, "Failed to create DRM kevent source");
    ++		close(kq);
    ++		goto continue_without_kqueue;
    ++	}
    ++	drm->kq = kq;
    ++	wlr_log(WLR_INFO, "DRM kevent source added");
    ++
    ++continue_without_kqueue:
    + 	return &drm->backend;
    + 
    + error_mgpu_renderer:
    Index: 0.19/patches/patch-backend_drm_drm_c
    ===================================================================
    RCS file: 0.19/patches/patch-backend_drm_drm_c
    diff -N 0.19/patches/patch-backend_drm_drm_c
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.19/patches/patch-backend_drm_drm_c	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,40 @@
    +Index: backend/drm/drm.c
    +--- backend/drm/drm.c.orig
    ++++ backend/drm/drm.c
    +@@ -8,6 +8,7 @@
    + #include <stdlib.h>
    + #include <string.h>
    + #include <strings.h>
    ++#include <sys/event.h>
    + #include <time.h>
    + #include <wayland-server-core.h>
    + #include <wayland-util.h>
    +@@ -375,6 +376,9 @@ void finish_drm_resources(struct wlr_drm_backend *drm)
    + 		return;
    + 	}
    + 
    ++	if (drm->kq)
    ++		close(drm->kq);
    ++
    + 	if (drm->iface->finish != NULL) {
    + 		drm->iface->finish(drm);
    + 	}
    +@@ -2050,6 +2054,18 @@ int handle_drm_event(int fd, uint32_t mask, void *data
    + 		wlr_log(WLR_ERROR, "drmHandleEvent failed");
    + 		wlr_backend_destroy(&drm->backend);
    + 	}
    ++	return 1;
    ++}
    ++
    ++int handle_drm_kevent(int fd, uint32_t mask, void *data) {
    ++	struct kevent kev;
    ++	struct wlr_drm_backend *drm = data;
    ++
    ++	if ((kevent(fd, NULL, 0, &kev, 1, NULL)) && kev.fflags & NOTE_CHANGE) {
    ++		wlr_log(WLR_INFO, "DRM hotplug detected");
    ++		scan_drm_connectors(drm, NULL);
    ++	}
    ++
    + 	return 1;
    + }
    + 
    Index: 0.19/patches/patch-include_backend_drm_drm_h
    ===================================================================
    RCS file: 0.19/patches/patch-include_backend_drm_drm_h
    diff -N 0.19/patches/patch-include_backend_drm_drm_h
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.19/patches/patch-include_backend_drm_drm_h	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,27 @@
    +Index: include/backend/drm/drm.h
    +--- include/backend/drm/drm.h.orig
    ++++ include/backend/drm/drm.h
    +@@ -92,6 +92,7 @@ struct wlr_drm_backend {
    + 	bool addfb2_modifiers;
    + 
    + 	int fd;
    ++	int kq;
    + 	char *name;
    + 	struct wlr_device *dev;
    + 	struct liftoff_device *liftoff;
    +@@ -103,6 +104,7 @@ struct wlr_drm_backend {
    + 	struct wlr_drm_plane *planes;
    + 
    + 	struct wl_event_source *drm_event;
    ++	struct wl_event_source *drm_kevent;
    + 
    + 	struct wl_listener session_destroy;
    + 	struct wl_listener session_active;
    +@@ -226,6 +228,7 @@ void scan_drm_leases(struct wlr_drm_backend *drm);
    + bool commit_drm_device(struct wlr_drm_backend *drm,
    + 	const struct wlr_backend_output_state *states, size_t states_len, bool test_only);
    + int handle_drm_event(int fd, uint32_t mask, void *data);
    ++int handle_drm_kevent(int fd, uint32_t mask, void *data);
    + void destroy_drm_connector(struct wlr_drm_connector *conn);
    + bool drm_connector_is_cursor_visible(struct wlr_drm_connector *conn);
    + size_t drm_crtc_get_gamma_lut_size(struct wlr_drm_backend *drm,
    Index: 0.19/patches/patch-meson_build
    ===================================================================
    RCS file: 0.19/patches/patch-meson_build
    diff -N 0.19/patches/patch-meson_build
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.19/patches/patch-meson_build	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,21 @@
    +No librt on OpenBSD
    +
    +Index: meson.build
    +--- meson.build.orig
    ++++ meson.build
    +@@ -121,7 +121,6 @@ pixman = dependency('pixman-1',
    + 	default_options: ['werror=false'],
    + )
    + math = cc.find_library('m')
    +-rt = cc.find_library('rt')
    + 
    + wlr_files = []
    + wlr_deps = [
    +@@ -130,7 +129,6 @@ wlr_deps = [
    + 	xkbcommon,
    + 	pixman,
    + 	math,
    +-	rt,
    + ]
    + 
    + subdir('protocol')
    Index: 0.19/patches/patch-render_drm_syncobj_c
    ===================================================================
    RCS file: 0.19/patches/patch-render_drm_syncobj_c
    diff -N 0.19/patches/patch-render_drm_syncobj_c
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.19/patches/patch-render_drm_syncobj_c	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,14 @@
    +ETIMEDOUT on OpenBSD, not ETIME
    +
    +Index: render/drm_syncobj.c
    +--- render/drm_syncobj.c.orig
    ++++ render/drm_syncobj.c
    +@@ -161,7 +161,7 @@ out:
    + bool wlr_drm_syncobj_timeline_check(struct wlr_drm_syncobj_timeline *timeline,
    + 		uint64_t point, uint32_t flags, bool *result) {
    + 	int etime;
    +-#if defined(__FreeBSD__)
    ++#if defined(__FreeBSD__) || defined(__OpenBSD__)
    + 	etime = ETIMEDOUT;
    + #else
    + 	etime = ETIME;
    Index: 0.19/patches/patch-render_vulkan_vulkan_c
    ===================================================================
    RCS file: 0.19/patches/patch-render_vulkan_vulkan_c
    diff -N 0.19/patches/patch-render_vulkan_vulkan_c
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.19/patches/patch-render_vulkan_vulkan_c	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,11 @@
    +otherwise makedev() function isnt found
    +
    +Index: render/vulkan/vulkan.c
    +--- render/vulkan/vulkan.c.orig
    ++++ render/vulkan/vulkan.c
    +@@ -1,4 +1,4 @@
    +-#if defined(__FreeBSD__)
    ++#if defined(__FreeBSD__) || defined(__OpenBSD__)
    + #undef _POSIX_C_SOURCE
    + #endif
    + #include <assert.h>
    Index: 0.19/patches/patch-xcursor_xcursor_c
    ===================================================================
    RCS file: 0.19/patches/patch-xcursor_xcursor_c
    diff -N 0.19/patches/patch-xcursor_xcursor_c
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.19/patches/patch-xcursor_xcursor_c	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,12 @@
    +Index: xcursor/xcursor.c
    +--- xcursor/xcursor.c.orig
    ++++ xcursor/xcursor.c
    +@@ -490,7 +490,7 @@ xcursor_xc_file_load_images(FILE *file, int size)
    + #endif
    + 
    + #ifndef XCURSORPATH
    +-#define XCURSORPATH "~/.icons:/usr/share/icons:/usr/share/pixmaps:~/.cursors:/usr/share/cursors/xorg-x11:"ICONDIR
    ++#define XCURSORPATH "~/.icons:/usr/X11R6/include/pixmaps:/usr/local/share/icons:/usr/local/lib/X11/icons:/usr/share/icons:/usr/share/pixmaps:~/.cursors:/usr/share/cursors/xorg-x11:"ICONDIR
    + #endif
    + 
    + #define XDG_DATA_HOME_FALLBACK "~/.local/share"
    Index: 0.19/pkg/DESCR
    ===================================================================
    RCS file: 0.19/pkg/DESCR
    diff -N 0.19/pkg/DESCR
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.19/pkg/DESCR	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,38 @@
    +Pluggable, composable, unopinionated modules for building a Wayland
    +compositor; or about 60,000 lines of code you were going to write
    +anyway.
    +
    + * wlroots provides backends that abstract the underlying display and
    +   input hardware, including KMS/DRM, libinput, Wayland, X11, and
    +   headless backends, plus any custom backends you choose to write,
    +   which can all be created or destroyed at runtime and used in
    +   concert with each other.
    +
    + * wlroots provides unopinionated, mostly standalone implementations
    +   of many Wayland interfaces, both from wayland.xml and various
    +   protocol extensions. We also promote the standardization of
    +   portable extensions across many compositors.
    +
    + * wlroots provides several powerful, standalone, and optional tools
    +   that implement components common to many compositors, such as the
    +   arrangement of outputs in physical space.
    +
    + * wlroots provides an Xwayland abstraction that allows you to have
    +   excellent Xwayland support without worrying about writing your own
    +   X11 window manager on top of writing your compositor.
    +
    + * wlroots provides a renderer abstraction that simple compositors can
    +   use to avoid writing GL code directly, but which steps out of the
    +   way when your needs demand custom rendering code.
    +
    +wlroots implements a huge variety of Wayland compositor features and
    +implements them right, so you can focus on the features that make your
    +compositor unique. By using wlroots, you get high performance,
    +excellent hardware compatibility, broad support for many wayland
    +interfaces, and comfortable development tools - or any subset of these
    +features you like, because all of them work independently of one
    +another and freely compose with anything you want to implement
    +yourself.
    +
    +A variety of wrapper libraries are available for using it with your
    +favorite programming language.
    Index: 0.19/pkg/PLIST
    ===================================================================
    RCS file: 0.19/pkg/PLIST
    diff -N 0.19/pkg/PLIST
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.19/pkg/PLIST	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,133 @@
    +@option no-default-conflict
    +@option is-branch
    +@conflict wlroots->=0.19v0,<0.20v0
    +@pkgpath wayland/wlroots
    +include/wlroots-${MODWLROOTS_VERSION}/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/drm.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/headless.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/interface.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/libinput.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/multi.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/session.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/wayland.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/x11.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/config.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_buffer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_ext_image_capture_source_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_keyboard.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_output.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_pointer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_switch.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_tablet_pad.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_tablet_tool.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_touch.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/allocator.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/color.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/dmabuf.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/drm_format_set.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/drm_syncobj.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/egl.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/gles2.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/interface.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/pass.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/pixman.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/swapchain.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/vulkan.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/wlr_renderer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/wlr_texture.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_alpha_modifier_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_buffer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_color_management_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_compositor.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_content_type_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_cursor.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_cursor_shape_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_damage_ring.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_data_control_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_data_device.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_drm.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_drm_lease_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_export_dmabuf_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_data_control_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_foreign_toplevel_list_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_image_capture_source_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_image_copy_capture_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_foreign_toplevel_management_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_fractional_scale_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_gamma_control_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_idle_inhibit_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_idle_notify_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_input_device.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_input_method_v2.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_keyboard.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_keyboard_group.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_keyboard_shortcuts_inhibit_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_layer_shell_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_linux_dmabuf_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_linux_drm_syncobj_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_layer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_layout.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_management_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_power_management_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_swapchain_manager.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_pointer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_pointer_constraints_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_pointer_gestures_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_presentation_time.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_primary_selection.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_primary_selection_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_relative_pointer_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_scene.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_screencopy_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_seat.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_security_context_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_server_decoration.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_session_lock_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_shm.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_single_pixel_buffer_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_subcompositor.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_switch.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tablet_pad.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tablet_tool.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tablet_v2.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tearing_control_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_text_input_v3.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_touch.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_transient_seat_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_viewporter.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_virtual_keyboard_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_virtual_pointer_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xcursor_manager.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_activation_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_decoration_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_dialog_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_foreign_registry.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_foreign_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_foreign_v2.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_output_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_shell.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_system_bell_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_toplevel_icon_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/addon.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/box.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/edges.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/log.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/region.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/transform.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/version.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xcursor.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/server.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/shell.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/xwayland.h
    +@lib lib/libwlroots-${MODWLROOTS_VERSION}.so.${LIBwlroots-${MODWLROOTS_VERSION}_VERSION}
    +lib/pkgconfig/wlroots-${MODWLROOTS_VERSION}.pc
    Index: 0.20/Makefile
    ===================================================================
    RCS file: 0.20/Makefile
    diff -N 0.20/Makefile
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.20/Makefile	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,9 @@
    +MODWLROOTS_VERSION =	0.20
    +
    +V =		${MODWLROOTS_VERSION}.1
    +
    +SHARED_LIBS +=	wlroots-0.20 0.0 # 0.0
    +
    +PKGSPEC =	wlroots->=0.20v0,<0.21v0
    +
    +.include <bsd.port.mk>
    Index: 0.20/distinfo
    ===================================================================
    RCS file: 0.20/distinfo
    diff -N 0.20/distinfo
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.20/distinfo	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,2 @@
    +SHA256 (wlroots-0.20.1.tar.gz) = qFQRh7rsqiYgk4r6zeiCZst++lkoywnVedjvsHvEkBs=
    +SIZE (wlroots-0.20.1.tar.gz) = 700814
    Index: 0.20/patches/patch-backend_drm_backend_c
    ===================================================================
    RCS file: 0.20/patches/patch-backend_drm_backend_c
    diff -N 0.20/patches/patch-backend_drm_backend_c
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.20/patches/patch-backend_drm_backend_c	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,55 @@
    +Index: backend/drm/backend.c
    +--- backend/drm/backend.c.orig
    ++++ backend/drm/backend.c
    +@@ -3,11 +3,13 @@
    + #include <stdio.h>
    + #include <stdlib.h>
    + #include <string.h>
    ++#include <unistd.h>
    + #include <wayland-server-core.h>
    + #include <wlr/backend/interface.h>
    + #include <wlr/backend/session.h>
    + #include <wlr/interfaces/wlr_output.h>
    + #include <wlr/util/log.h>
    ++#include <sys/event.h>
    + #include <xf86drm.h>
    + #include "backend/drm/drm.h"
    + #include "backend/drm/fb.h"
    +@@ -207,6 +209,8 @@ static bool init_mgpu_renderer(struct wlr_drm_backend 
    + 
    + struct wlr_backend *wlr_drm_backend_create(struct wlr_session *session,
    + 		struct wlr_device *dev, struct wlr_backend *parent) {
    ++	int kq;
    ++	struct kevent kev;
    + 	assert(session && dev);
    + 	assert(!parent || wlr_backend_is_drm(parent));
    + 
    +@@ -283,6 +287,28 @@ struct wlr_backend *wlr_drm_backend_create(struct wlr_
    + 	drm->session_destroy.notify = handle_session_destroy;
    + 	wl_signal_add(&session->events.destroy, &drm->session_destroy);
    + 
    ++	if ((kq = kqueue()) <= 0)
    ++		goto continue_without_kqueue;
    ++
    ++	EV_SET(&kev, dev->fd, EVFILT_DEVICE, EV_ADD | EV_ENABLE | EV_CLEAR,
    ++	       NOTE_CHANGE, 0, NULL);
    ++
    ++	if (kevent(kq, &kev, 1, NULL, 0, NULL) < 0) {
    ++		close(kq);
    ++		goto continue_without_kqueue;
    ++	}
    ++
    ++	drm->drm_kevent = wl_event_loop_add_fd(session->event_loop, kq,
    ++		WL_EVENT_READABLE, handle_drm_kevent, drm);
    ++	if (!drm->drm_kevent) {
    ++		wlr_log(WLR_ERROR, "Failed to create DRM kevent source");
    ++		close(kq);
    ++		goto continue_without_kqueue;
    ++	}
    ++	drm->kq = kq;
    ++	wlr_log(WLR_INFO, "DRM kevent source added");
    ++
    ++continue_without_kqueue:
    + 	return &drm->backend;
    + 
    + error_mgpu_renderer:
    Index: 0.20/patches/patch-backend_drm_drm_c
    ===================================================================
    RCS file: 0.20/patches/patch-backend_drm_drm_c
    diff -N 0.20/patches/patch-backend_drm_drm_c
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.20/patches/patch-backend_drm_drm_c	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,40 @@
    +Index: backend/drm/drm.c
    +--- backend/drm/drm.c.orig
    ++++ backend/drm/drm.c
    +@@ -8,6 +8,7 @@
    + #include <stdlib.h>
    + #include <string.h>
    + #include <strings.h>
    ++#include <sys/event.h>
    + #include <time.h>
    + #include <wayland-server-core.h>
    + #include <wayland-util.h>
    +@@ -387,6 +388,9 @@ void finish_drm_resources(struct wlr_drm_backend *drm)
    + 		return;
    + 	}
    + 
    ++	if (drm->kq)
    ++		close(drm->kq);
    ++
    + 	if (drm->iface->finish != NULL) {
    + 		drm->iface->finish(drm);
    + 	}
    +@@ -2098,6 +2102,18 @@ int handle_drm_event(int fd, uint32_t mask, void *data
    + 		wlr_log(WLR_ERROR, "drmHandleEvent failed");
    + 		wlr_backend_destroy(&drm->backend);
    + 	}
    ++	return 1;
    ++}
    ++
    ++int handle_drm_kevent(int fd, uint32_t mask, void *data) {
    ++	struct kevent kev;
    ++	struct wlr_drm_backend *drm = data;
    ++
    ++	if ((kevent(fd, NULL, 0, &kev, 1, NULL)) && kev.fflags & NOTE_CHANGE) {
    ++		wlr_log(WLR_INFO, "DRM hotplug detected");
    ++		scan_drm_connectors(drm, NULL);
    ++	}
    ++
    + 	return 1;
    + }
    + 
    Index: 0.20/patches/patch-include_backend_drm_drm_h
    ===================================================================
    RCS file: 0.20/patches/patch-include_backend_drm_drm_h
    diff -N 0.20/patches/patch-include_backend_drm_drm_h
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.20/patches/patch-include_backend_drm_drm_h	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,27 @@
    +Index: include/backend/drm/drm.h
    +--- include/backend/drm/drm.h.orig
    ++++ include/backend/drm/drm.h
    +@@ -96,6 +96,7 @@ struct wlr_drm_backend {
    + 	bool addfb2_modifiers;
    + 
    + 	int fd;
    ++	int kq;
    + 	char *name;
    + 	struct wlr_device *dev;
    + 	struct liftoff_device *liftoff;
    +@@ -107,6 +108,7 @@ struct wlr_drm_backend {
    + 	struct wlr_drm_plane *planes;
    + 
    + 	struct wl_event_source *drm_event;
    ++	struct wl_event_source *drm_kevent;
    + 
    + 	struct wl_listener session_destroy;
    + 	struct wl_listener session_active;
    +@@ -236,6 +238,7 @@ void scan_drm_leases(struct wlr_drm_backend *drm);
    + bool commit_drm_device(struct wlr_drm_backend *drm,
    + 	const struct wlr_backend_output_state *states, size_t states_len, bool test_only);
    + int handle_drm_event(int fd, uint32_t mask, void *data);
    ++int handle_drm_kevent(int fd, uint32_t mask, void *data);
    + void destroy_drm_connector(struct wlr_drm_connector *conn);
    + bool drm_connector_is_cursor_visible(struct wlr_drm_connector *conn);
    + size_t drm_crtc_get_gamma_lut_size(struct wlr_drm_backend *drm,
    Index: 0.20/patches/patch-meson_build
    ===================================================================
    RCS file: 0.20/patches/patch-meson_build
    diff -N 0.20/patches/patch-meson_build
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.20/patches/patch-meson_build	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,21 @@
    +No librt on OpenBSD
    +
    +Index: meson.build
    +--- meson.build.orig
    ++++ meson.build
    +@@ -121,7 +121,6 @@ pixman = dependency('pixman-1',
    + 	default_options: ['werror=false'],
    + )
    + math = cc.find_library('m')
    +-rt = cc.find_library('rt')
    + 
    + wlr_files = []
    + wlr_deps = [
    +@@ -130,7 +129,6 @@ wlr_deps = [
    + 	xkbcommon,
    + 	pixman,
    + 	math,
    +-	rt,
    + ]
    + 
    + subdir('protocol')
    Index: 0.20/patches/patch-render_drm_syncobj_c
    ===================================================================
    RCS file: 0.20/patches/patch-render_drm_syncobj_c
    diff -N 0.20/patches/patch-render_drm_syncobj_c
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.20/patches/patch-render_drm_syncobj_c	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,14 @@
    +ETIMEDOUT on OpenBSD, not ETIME
    +
    +Index: render/drm_syncobj.c
    +--- render/drm_syncobj.c.orig
    ++++ render/drm_syncobj.c
    +@@ -161,7 +161,7 @@ out:
    + bool wlr_drm_syncobj_timeline_check(struct wlr_drm_syncobj_timeline *timeline,
    + 		uint64_t point, uint32_t flags, bool *result) {
    + 	int etime;
    +-#if defined(__FreeBSD__)
    ++#if defined(__FreeBSD__) || defined(__OpenBSD__)
    + 	etime = ETIMEDOUT;
    + #else
    + 	etime = ETIME;
    Index: 0.20/patches/patch-render_vulkan_vulkan_c
    ===================================================================
    RCS file: 0.20/patches/patch-render_vulkan_vulkan_c
    diff -N 0.20/patches/patch-render_vulkan_vulkan_c
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.20/patches/patch-render_vulkan_vulkan_c	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,11 @@
    +otherwise makedev() function isnt found
    +
    +Index: render/vulkan/vulkan.c
    +--- render/vulkan/vulkan.c.orig
    ++++ render/vulkan/vulkan.c
    +@@ -1,4 +1,4 @@
    +-#if defined(__FreeBSD__)
    ++#if defined(__FreeBSD__) || defined(__OpenBSD__)
    + #undef _POSIX_C_SOURCE
    + #endif
    + #include <assert.h>
    Index: 0.20/patches/patch-xcursor_xcursor_c
    ===================================================================
    RCS file: 0.20/patches/patch-xcursor_xcursor_c
    diff -N 0.20/patches/patch-xcursor_xcursor_c
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.20/patches/patch-xcursor_xcursor_c	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,12 @@
    +Index: xcursor/xcursor.c
    +--- xcursor/xcursor.c.orig
    ++++ xcursor/xcursor.c
    +@@ -490,7 +490,7 @@ xcursor_xc_file_load_images(FILE *file, int size)
    + #endif
    + 
    + #ifndef XCURSORPATH
    +-#define XCURSORPATH "~/.icons:/usr/share/icons:/usr/share/pixmaps:~/.cursors:/usr/share/cursors/xorg-x11:"ICONDIR
    ++#define XCURSORPATH "~/.icons:/usr/X11R6/include/pixmaps:/usr/local/share/icons:/usr/local/lib/X11/icons:/usr/share/icons:/usr/share/pixmaps:~/.cursors:/usr/share/cursors/xorg-x11:"ICONDIR
    + #endif
    + 
    + #define XDG_DATA_HOME_FALLBACK "~/.local/share"
    Index: 0.20/pkg/DESCR
    ===================================================================
    RCS file: 0.20/pkg/DESCR
    diff -N 0.20/pkg/DESCR
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.20/pkg/DESCR	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,38 @@
    +Pluggable, composable, unopinionated modules for building a Wayland
    +compositor; or about 60,000 lines of code you were going to write
    +anyway.
    +
    + * wlroots provides backends that abstract the underlying display and
    +   input hardware, including KMS/DRM, libinput, Wayland, X11, and
    +   headless backends, plus any custom backends you choose to write,
    +   which can all be created or destroyed at runtime and used in
    +   concert with each other.
    +
    + * wlroots provides unopinionated, mostly standalone implementations
    +   of many Wayland interfaces, both from wayland.xml and various
    +   protocol extensions. We also promote the standardization of
    +   portable extensions across many compositors.
    +
    + * wlroots provides several powerful, standalone, and optional tools
    +   that implement components common to many compositors, such as the
    +   arrangement of outputs in physical space.
    +
    + * wlroots provides an Xwayland abstraction that allows you to have
    +   excellent Xwayland support without worrying about writing your own
    +   X11 window manager on top of writing your compositor.
    +
    + * wlroots provides a renderer abstraction that simple compositors can
    +   use to avoid writing GL code directly, but which steps out of the
    +   way when your needs demand custom rendering code.
    +
    +wlroots implements a huge variety of Wayland compositor features and
    +implements them right, so you can focus on the features that make your
    +compositor unique. By using wlroots, you get high performance,
    +excellent hardware compatibility, broad support for many wayland
    +interfaces, and comfortable development tools - or any subset of these
    +features you like, because all of them work independently of one
    +another and freely compose with anything you want to implement
    +yourself.
    +
    +A variety of wrapper libraries are available for using it with your
    +favorite programming language.
    Index: 0.20/pkg/PLIST
    ===================================================================
    RCS file: 0.20/pkg/PLIST
    diff -N 0.20/pkg/PLIST
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ 0.20/pkg/PLIST	7 Jun 2026 11:16:07 -0000
    @@ -0,0 +1,136 @@
    +@option no-default-conflict
    +@option is-branch
    +@conflict wlroots->=0.20v0,<0.21v0
    +include/wlroots-${MODWLROOTS_VERSION}/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/drm.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/headless.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/interface.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/libinput.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/multi.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/session.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/wayland.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/x11.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/config.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_buffer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_ext_image_capture_source_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_keyboard.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_output.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_pointer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_switch.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_tablet_pad.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_tablet_tool.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_touch.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/allocator.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/color.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/dmabuf.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/drm_format_set.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/drm_syncobj.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/egl.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/gles2.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/interface.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/pass.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/pixman.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/swapchain.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/vulkan.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/wlr_renderer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/render/wlr_texture.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_alpha_modifier_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_buffer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_color_management_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_color_representation_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_compositor.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_content_type_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_cursor.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_cursor_shape_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_damage_ring.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_data_control_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_data_device.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_drm.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_drm_lease_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_export_dmabuf_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_data_control_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_foreign_toplevel_list_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_image_capture_source_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_image_copy_capture_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_workspace_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_fixes.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_foreign_toplevel_management_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_fractional_scale_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_gamma_control_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_idle_inhibit_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_idle_notify_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_input_device.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_input_method_v2.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_keyboard.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_keyboard_group.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_keyboard_shortcuts_inhibit_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_layer_shell_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_linux_dmabuf_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_linux_drm_syncobj_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_layer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_layout.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_management_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_power_management_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_swapchain_manager.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_pointer.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_pointer_constraints_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_pointer_gestures_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_presentation_time.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_primary_selection.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_primary_selection_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_relative_pointer_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_scene.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_screencopy_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_seat.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_security_context_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_server_decoration.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_session_lock_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_shm.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_single_pixel_buffer_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_subcompositor.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_switch.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tablet_pad.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tablet_tool.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tablet_v2.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tearing_control_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_text_input_v3.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_touch.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_transient_seat_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_viewporter.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_virtual_keyboard_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_virtual_pointer_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xcursor_manager.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_activation_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_decoration_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_dialog_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_foreign_registry.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_foreign_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_foreign_v2.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_output_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_shell.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_system_bell_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_toplevel_icon_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_toplevel_tag_v1.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/addon.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/box.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/edges.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/log.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/region.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/util/transform.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/version.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xcursor.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/server.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/shell.h
    +include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/xwayland.h
    +@lib lib/libwlroots-${MODWLROOTS_VERSION}.so.${LIBwlroots-${MODWLROOTS_VERSION}_VERSION}
    +lib/pkgconfig/wlroots-${MODWLROOTS_VERSION}.pc
    Index: patches/patch-backend_drm_backend_c
    ===================================================================
    RCS file: patches/patch-backend_drm_backend_c
    diff -N patches/patch-backend_drm_backend_c
    --- patches/patch-backend_drm_backend_c	28 Aug 2025 21:01:27 -0000	1.2
    +++ /dev/null	1 Jan 1970 00:00:00 -0000
    @@ -1,55 +0,0 @@
    -Index: backend/drm/backend.c
    ---- backend/drm/backend.c.orig
    -+++ backend/drm/backend.c
    -@@ -3,11 +3,13 @@
    - #include <stdio.h>
    - #include <stdlib.h>
    - #include <string.h>
    -+#include <unistd.h>
    - #include <wayland-server-core.h>
    - #include <wlr/backend/interface.h>
    - #include <wlr/backend/session.h>
    - #include <wlr/interfaces/wlr_output.h>
    - #include <wlr/util/log.h>
    -+#include <sys/event.h>
    - #include <xf86drm.h>
    - #include "backend/drm/drm.h"
    - #include "backend/drm/fb.h"
    -@@ -207,6 +209,8 @@ static bool init_mgpu_renderer(struct wlr_drm_backend 
    - 
    - struct wlr_backend *wlr_drm_backend_create(struct wlr_session *session,
    - 		struct wlr_device *dev, struct wlr_backend *parent) {
    -+	int kq;
    -+	struct kevent kev;
    - 	assert(session && dev);
    - 	assert(!parent || wlr_backend_is_drm(parent));
    - 
    -@@ -283,6 +287,28 @@ struct wlr_backend *wlr_drm_backend_create(struct wlr_
    - 	drm->session_destroy.notify = handle_session_destroy;
    - 	wl_signal_add(&session->events.destroy, &drm->session_destroy);
    - 
    -+	if ((kq = kqueue()) <= 0)
    -+		goto continue_without_kqueue;
    -+
    -+	EV_SET(&kev, dev->fd, EVFILT_DEVICE, EV_ADD | EV_ENABLE | EV_CLEAR,
    -+	       NOTE_CHANGE, 0, NULL);
    -+
    -+	if (kevent(kq, &kev, 1, NULL, 0, NULL) < 0) {
    -+		close(kq);
    -+		goto continue_without_kqueue;
    -+	}
    -+
    -+	drm->drm_kevent = wl_event_loop_add_fd(session->event_loop, kq,
    -+		WL_EVENT_READABLE, handle_drm_kevent, drm);
    -+	if (!drm->drm_kevent) {
    -+		wlr_log(WLR_ERROR, "Failed to create DRM kevent source");
    -+		close(kq);
    -+		goto continue_without_kqueue;
    -+	}
    -+	drm->kq = kq;
    -+	wlr_log(WLR_INFO, "DRM kevent source added");
    -+
    -+continue_without_kqueue:
    - 	return &drm->backend;
    - 
    - error_mgpu_renderer:
    Index: patches/patch-backend_drm_drm_c
    ===================================================================
    RCS file: patches/patch-backend_drm_drm_c
    diff -N patches/patch-backend_drm_drm_c
    --- patches/patch-backend_drm_drm_c	28 Aug 2025 21:01:27 -0000	1.2
    +++ /dev/null	1 Jan 1970 00:00:00 -0000
    @@ -1,40 +0,0 @@
    -Index: backend/drm/drm.c
    ---- backend/drm/drm.c.orig
    -+++ backend/drm/drm.c
    -@@ -8,6 +8,7 @@
    - #include <stdlib.h>
    - #include <string.h>
    - #include <strings.h>
    -+#include <sys/event.h>
    - #include <time.h>
    - #include <wayland-server-core.h>
    - #include <wayland-util.h>
    -@@ -375,6 +376,9 @@ void finish_drm_resources(struct wlr_drm_backend *drm)
    - 		return;
    - 	}
    - 
    -+	if (drm->kq)
    -+		close(drm->kq);
    -+
    - 	if (drm->iface->finish != NULL) {
    - 		drm->iface->finish(drm);
    - 	}
    -@@ -2050,6 +2054,18 @@ int handle_drm_event(int fd, uint32_t mask, void *data
    - 		wlr_log(WLR_ERROR, "drmHandleEvent failed");
    - 		wlr_backend_destroy(&drm->backend);
    - 	}
    -+	return 1;
    -+}
    -+
    -+int handle_drm_kevent(int fd, uint32_t mask, void *data) {
    -+	struct kevent kev;
    -+	struct wlr_drm_backend *drm = data;
    -+
    -+	if ((kevent(fd, NULL, 0, &kev, 1, NULL)) && kev.fflags & NOTE_CHANGE) {
    -+		wlr_log(WLR_INFO, "DRM hotplug detected");
    -+		scan_drm_connectors(drm, NULL);
    -+	}
    -+
    - 	return 1;
    - }
    - 
    Index: patches/patch-include_backend_drm_drm_h
    ===================================================================
    RCS file: patches/patch-include_backend_drm_drm_h
    diff -N patches/patch-include_backend_drm_drm_h
    --- patches/patch-include_backend_drm_drm_h	28 Aug 2025 21:01:27 -0000	1.2
    +++ /dev/null	1 Jan 1970 00:00:00 -0000
    @@ -1,27 +0,0 @@
    -Index: include/backend/drm/drm.h
    ---- include/backend/drm/drm.h.orig
    -+++ include/backend/drm/drm.h
    -@@ -92,6 +92,7 @@ struct wlr_drm_backend {
    - 	bool addfb2_modifiers;
    - 
    - 	int fd;
    -+	int kq;
    - 	char *name;
    - 	struct wlr_device *dev;
    - 	struct liftoff_device *liftoff;
    -@@ -103,6 +104,7 @@ struct wlr_drm_backend {
    - 	struct wlr_drm_plane *planes;
    - 
    - 	struct wl_event_source *drm_event;
    -+	struct wl_event_source *drm_kevent;
    - 
    - 	struct wl_listener session_destroy;
    - 	struct wl_listener session_active;
    -@@ -226,6 +228,7 @@ void scan_drm_leases(struct wlr_drm_backend *drm);
    - bool commit_drm_device(struct wlr_drm_backend *drm,
    - 	const struct wlr_backend_output_state *states, size_t states_len, bool test_only);
    - int handle_drm_event(int fd, uint32_t mask, void *data);
    -+int handle_drm_kevent(int fd, uint32_t mask, void *data);
    - void destroy_drm_connector(struct wlr_drm_connector *conn);
    - bool drm_connector_is_cursor_visible(struct wlr_drm_connector *conn);
    - size_t drm_crtc_get_gamma_lut_size(struct wlr_drm_backend *drm,
    Index: patches/patch-meson_build
    ===================================================================
    RCS file: patches/patch-meson_build
    diff -N patches/patch-meson_build
    --- patches/patch-meson_build	28 Aug 2025 21:01:27 -0000	1.3
    +++ /dev/null	1 Jan 1970 00:00:00 -0000
    @@ -1,21 +0,0 @@
    -No librt on OpenBSD
    -
    -Index: meson.build
    ---- meson.build.orig
    -+++ meson.build
    -@@ -121,7 +121,6 @@ pixman = dependency('pixman-1',
    - 	default_options: ['werror=false'],
    - )
    - math = cc.find_library('m')
    --rt = cc.find_library('rt')
    - 
    - wlr_files = []
    - wlr_deps = [
    -@@ -130,7 +129,6 @@ wlr_deps = [
    - 	xkbcommon,
    - 	pixman,
    - 	math,
    --	rt,
    - ]
    - 
    - subdir('protocol')
    Index: patches/patch-render_drm_syncobj_c
    ===================================================================
    RCS file: patches/patch-render_drm_syncobj_c
    diff -N patches/patch-render_drm_syncobj_c
    --- patches/patch-render_drm_syncobj_c	28 Aug 2025 21:01:27 -0000	1.2
    +++ /dev/null	1 Jan 1970 00:00:00 -0000
    @@ -1,14 +0,0 @@
    -ETIMEDOUT on OpenBSD, not ETIME
    -
    -Index: render/drm_syncobj.c
    ---- render/drm_syncobj.c.orig
    -+++ render/drm_syncobj.c
    -@@ -161,7 +161,7 @@ out:
    - bool wlr_drm_syncobj_timeline_check(struct wlr_drm_syncobj_timeline *timeline,
    - 		uint64_t point, uint32_t flags, bool *result) {
    - 	int etime;
    --#if defined(__FreeBSD__)
    -+#if defined(__FreeBSD__) || defined(__OpenBSD__)
    - 	etime = ETIMEDOUT;
    - #else
    - 	etime = ETIME;
    Index: patches/patch-render_vulkan_vulkan_c
    ===================================================================
    RCS file: patches/patch-render_vulkan_vulkan_c
    diff -N patches/patch-render_vulkan_vulkan_c
    --- patches/patch-render_vulkan_vulkan_c	7 Nov 2024 09:44:27 -0000	1.2
    +++ /dev/null	1 Jan 1970 00:00:00 -0000
    @@ -1,11 +0,0 @@
    -otherwise makedev() function isnt found
    -
    -Index: render/vulkan/vulkan.c
    ---- render/vulkan/vulkan.c.orig
    -+++ render/vulkan/vulkan.c
    -@@ -1,4 +1,4 @@
    --#if defined(__FreeBSD__)
    -+#if defined(__FreeBSD__) || defined(__OpenBSD__)
    - #undef _POSIX_C_SOURCE
    - #endif
    - #include <assert.h>
    Index: patches/patch-xcursor_xcursor_c
    ===================================================================
    RCS file: patches/patch-xcursor_xcursor_c
    diff -N patches/patch-xcursor_xcursor_c
    --- patches/patch-xcursor_xcursor_c	7 Nov 2024 09:44:27 -0000	1.2
    +++ /dev/null	1 Jan 1970 00:00:00 -0000
    @@ -1,12 +0,0 @@
    -Index: xcursor/xcursor.c
    ---- xcursor/xcursor.c.orig
    -+++ xcursor/xcursor.c
    -@@ -490,7 +490,7 @@ xcursor_xc_file_load_images(FILE *file, int size)
    - #endif
    - 
    - #ifndef XCURSORPATH
    --#define XCURSORPATH "~/.icons:/usr/share/icons:/usr/share/pixmaps:~/.cursors:/usr/share/cursors/xorg-x11:"ICONDIR
    -+#define XCURSORPATH "~/.icons:/usr/X11R6/include/pixmaps:/usr/local/share/icons:/usr/local/lib/X11/icons:/usr/share/icons:/usr/share/pixmaps:~/.cursors:/usr/share/cursors/xorg-x11:"ICONDIR
    - #endif
    - 
    - #define XDG_DATA_HOME_FALLBACK "~/.local/share"
    Index: pkg/DESCR
    ===================================================================
    RCS file: pkg/DESCR
    diff -N pkg/DESCR
    --- pkg/DESCR	5 Jan 2026 07:31:07 -0000	1.2
    +++ /dev/null	1 Jan 1970 00:00:00 -0000
    @@ -1,41 +0,0 @@
    -Pluggable, composable, unopinionated modules for building a Wayland
    -compositor; or about 60,000 lines of code you were going to write
    -anyway.
    -
    - * wlroots provides backends that abstract the underlying display and
    -   input hardware, including KMS/DRM, libinput, Wayland, X11, and
    -   headless backends, plus any custom backends you choose to write,
    -   which can all be created or destroyed at runtime and used in
    -   concert with each other.
    -
    - * wlroots provides unopinionated, mostly standalone implementations
    -   of many Wayland interfaces, both from wayland.xml and various
    -   protocol extensions. We also promote the standardization of
    -   portable extensions across many compositors.
    -
    - * wlroots provides several powerful, standalone, and optional tools
    -   that implement components common to many compositors, such as the
    -   arrangement of outputs in physical space.
    -
    - * wlroots provides an Xwayland abstraction that allows you to have
    -   excellent Xwayland support without worrying about writing your own
    -   X11 window manager on top of writing your compositor.
    -
    - * wlroots provides a renderer abstraction that simple compositors can
    -   use to avoid writing GL code directly, but which steps out of the
    -   way when your needs demand custom rendering code.
    -
    -wlroots implements a huge variety of Wayland compositor features and
    -implements them right, so you can focus on the features that make your
    -compositor unique. By using wlroots, you get high performance,
    -excellent hardware compatibility, broad support for many wayland
    -interfaces, and comfortable development tools - or any subset of these
    -features you like, because all of them work independently of one
    -another and freely compose with anything you want to implement
    -yourself.
    -
    -Check out our wiki to get started with wlroots. Join our IRC channel:
    -#wlroots on Libera Chat.
    -
    -A variety of wrapper libraries are available for using it with your
    -favorite programming language.
    Index: pkg/PLIST
    ===================================================================
    RCS file: pkg/PLIST
    diff -N pkg/PLIST
    --- pkg/PLIST	28 Aug 2025 21:01:27 -0000	1.6
    +++ /dev/null	1 Jan 1970 00:00:00 -0000
    @@ -1,129 +0,0 @@
    -include/wlroots-${MODWLROOTS_VERSION}/
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/backend.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/drm.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/headless.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/interface.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/libinput.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/multi.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/session.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/wayland.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/backend/x11.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/config.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_buffer.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_ext_image_capture_source_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_keyboard.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_output.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_pointer.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_switch.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_tablet_pad.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_tablet_tool.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/interfaces/wlr_touch.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/allocator.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/color.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/dmabuf.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/drm_format_set.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/drm_syncobj.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/egl.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/gles2.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/interface.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/pass.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/pixman.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/swapchain.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/vulkan.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/wlr_renderer.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/render/wlr_texture.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_alpha_modifier_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_buffer.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_color_management_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_compositor.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_content_type_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_cursor.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_cursor_shape_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_damage_ring.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_data_control_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_data_device.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_drm.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_drm_lease_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_export_dmabuf_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_data_control_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_foreign_toplevel_list_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_image_capture_source_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_ext_image_copy_capture_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_foreign_toplevel_management_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_fractional_scale_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_gamma_control_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_idle_inhibit_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_idle_notify_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_input_device.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_input_method_v2.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_keyboard.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_keyboard_group.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_keyboard_shortcuts_inhibit_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_layer_shell_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_linux_dmabuf_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_linux_drm_syncobj_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_layer.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_layout.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_management_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_power_management_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_output_swapchain_manager.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_pointer.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_pointer_constraints_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_pointer_gestures_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_presentation_time.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_primary_selection.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_primary_selection_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_relative_pointer_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_scene.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_screencopy_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_seat.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_security_context_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_server_decoration.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_session_lock_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_shm.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_single_pixel_buffer_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_subcompositor.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_switch.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tablet_pad.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tablet_tool.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tablet_v2.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_tearing_control_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_text_input_v3.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_touch.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_transient_seat_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_viewporter.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_virtual_keyboard_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_virtual_pointer_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xcursor_manager.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_activation_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_decoration_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_dialog_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_foreign_registry.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_foreign_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_foreign_v2.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_output_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_shell.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_system_bell_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/types/wlr_xdg_toplevel_icon_v1.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/util/
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/util/addon.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/util/box.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/util/edges.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/util/log.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/util/region.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/util/transform.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/version.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/xcursor.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/server.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/shell.h
    -include/wlroots-${MODWLROOTS_VERSION}/wlr/xwayland/xwayland.h
    -@lib lib/libwlroots-${MODWLROOTS_VERSION}.so.${LIBwlroots-${MODWLROOTS_VERSION}_VERSION}
    -lib/pkgconfig/wlroots-${MODWLROOTS_VERSION}.pc
    
  • landry@openbsd.org:

    Adding wlroots 0.20