Here's an update to wayland/scenefx that is now based on wlroots-0.20
I'm unsure about the new patches. While it builds and works, I'm wondering
if there is a nicer/better/more elegant way to handle this, but I'm a bit
out of my depth here.
I'm also attaching an update to wayland/mango which would otherwise break
with the scenefx update.
Tests and feedback welcome!
Index: Makefile
===================================================================
RCS file: /cvs/ports/wayland/mango/Makefile,v
retrieving revision 1.9
diff -u -p -r1.9 Makefile
--- Makefile 1 Jul 2026 17:47:16 -0000 1.9
+++ Makefile 9 Jul 2026 21:33:28 -0000
@@ -1,6 +1,6 @@
COMMENT = lightweight, high-performance Wayland compositor
-DIST_TUPLE= github mangowm mango 0.14.4 .
+DIST_TUPLE= github mangowm mango 0.15.0 .
CATEGORIES = wayland
@@ -11,12 +11,15 @@ MAINTAINER = Volker Schlecht <volker@op
# GPLv3
PERMIT_PACKAGE = Yes
-WANTLIB += c cjson input m pcre2-8 pixman-1 scenefx-0.4 wayland-client
-WANTLIB += wayland-server xcb-icccm xkbcommon
+WANTLIB += c cairo cjson glib-2.0 gobject-2.0 input m pango-1.0
+WANTLIB += pangocairo-1.0 pcre2-8 pixman-1 scenefx-0.5 wayland-server
+WANTLIB += xcb-icccm xkbcommon
COMPILER = base-clang ports-gcc
MODULES = devel/meson wayland/wlroots
+
+MODWLROOTS_VERSION = 0.20
BUILD_DEPENDS = wayland/wayland-protocols
Index: distinfo
===================================================================
RCS file: /cvs/ports/wayland/mango/distinfo,v
retrieving revision 1.8
diff -u -p -r1.8 distinfo
--- distinfo 1 Jul 2026 17:47:16 -0000 1.8
+++ distinfo 9 Jul 2026 21:33:28 -0000
@@ -1,2 +1,2 @@
-SHA256 (mangowm-mango-0.14.4.tar.gz) = 435zL/Ow2zCfxhbOxe2Wmely8pafgsG7w8WimBaEAfg=
-SIZE (mangowm-mango-0.14.4.tar.gz) = 506823
+SHA256 (mangowm-mango-0.15.0.tar.gz) = 80BC9ehL/EUQhhvX4YeAC7TUtPTq5M0wi3eW1ZqDPGc=
+SIZE (mangowm-mango-0.15.0.tar.gz) = 496520
Index: patches/patch-src_dispatch_bind_define_h
===================================================================
RCS file: /cvs/ports/wayland/mango/patches/patch-src_dispatch_bind_define_h,v
retrieving revision 1.6
diff -u -p -r1.6 patch-src_dispatch_bind_define_h
--- patches/patch-src_dispatch_bind_define_h 1 Jul 2026 17:47:18 -0000 1.6
+++ patches/patch-src_dispatch_bind_define_h 9 Jul 2026 21:33:28 -0000
@@ -9,7 +9,7 @@ Index: src/dispatch/bind_define.h
int32_t bind_to_view(const Arg *arg) {
if (!selmon)
return 0;
-@@ -961,6 +965,7 @@ int32_t spawn(const Arg *arg) {
+@@ -1078,6 +1082,7 @@ int32_t spawn(const Arg *arg) {
dup2(STDERR_FILENO, STDOUT_FILENO);
setsid();
@@ -17,7 +17,7 @@ Index: src/dispatch/bind_define.h
wordexp_t p;
if (wordexp(arg->v, &p, 0) != 0) {
wlr_log(WLR_DEBUG, "mango: wordexp failed for '%s'\n",
-@@ -973,6 +978,35 @@ int32_t spawn(const Arg *arg) {
+@@ -1090,6 +1095,35 @@ int32_t spawn(const Arg *arg) {
wlr_log(WLR_DEBUG, "mango: execvp '%s' failed: %s\n", p.we_wordv[0],
strerror(errno));
wordfree(&p);
Index: patches/patch-src_mango_c
===================================================================
RCS file: /cvs/ports/wayland/mango/patches/patch-src_mango_c,v
retrieving revision 1.2
diff -u -p -r1.2 patch-src_mango_c
--- patches/patch-src_mango_c 29 May 2026 18:39:39 -0000 1.2
+++ patches/patch-src_mango_c 9 Jul 2026 21:33:28 -0000
@@ -1,7 +1,7 @@
Index: src/mango.c
--- src/mango.c.orig
+++ src/mango.c
-@@ -88,7 +88,11 @@
+@@ -91,7 +91,11 @@
#include <wlr/types/wlr_xdg_shell.h>
#include <wlr/util/log.h>
#include <wlr/util/region.h>
Index: Makefile
===================================================================
RCS file: /cvs/ports/wayland/scenefx/Makefile,v
retrieving revision 1.2
diff -u -p -r1.2 Makefile
--- Makefile 13 Jun 2026 13:41:30 -0000 1.2
+++ Makefile 9 Jul 2026 21:32:47 -0000
@@ -1,29 +1,30 @@
COMMENT = drop-in replacement for the wlroots scene API
-V = 0.4.1
-SCENEFX_LIBV = 0.4
-REVISION = 0
+V = 0.5
+SCENEFX_LIBV = 0.5
DIST_TUPLE= github wlrfx scenefx ${V} .
CATEGORIES = wayland
-SHARED_LIBS += scenefx-${SCENEFX_LIBV} 0.0 # 0.4
+SHARED_LIBS += scenefx-${SCENEFX_LIBV} 0.0 # 0.5
# MIT
PERMIT_PACKAGE = Yes
+WANTLIB += EGL GLESv2 drm gbm m pixman-1 wayland-server
+
COMPILER = base-clang ports-gcc
MODULES = devel/meson wayland/wlroots
+MODWLROOTS_VERSION = 0.20
+
BUILD_DEPENDS = wayland/wayland-protocols
LIB_DEPENDS = wayland/wayland
SUBST_VARS += SCENEFX_LIBV
-
-WANTLIB += EGL GLESv2 drm gbm m pixman-1 wayland-server
.include <bsd.port.mk>
Index: distinfo
===================================================================
RCS file: /cvs/ports/wayland/scenefx/distinfo,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 distinfo
--- distinfo 6 Apr 2026 19:17:09 -0000 1.1.1.1
+++ distinfo 9 Jul 2026 21:32:47 -0000
@@ -1,2 +1,2 @@
-SHA256 (wlrfx-scenefx-0.4.1.tar.gz) = +iP2/1CRaNSl6wxafvO4zz054/uhgyDCglbmyRyF2f8=
-SIZE (wlrfx-scenefx-0.4.1.tar.gz) = 92158
+SHA256 (wlrfx-scenefx-0.5.tar.gz) = D6jsyg4xD4E+/QUmJMXtfZFT1qD96tXMlX00wH+ahsY=
+SIZE (wlrfx-scenefx-0.5.tar.gz) = 109708
Index: patches/patch-include_scenefx_types_fx_clipped_region_h
===================================================================
RCS file: patches/patch-include_scenefx_types_fx_clipped_region_h
diff -N patches/patch-include_scenefx_types_fx_clipped_region_h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-include_scenefx_types_fx_clipped_region_h 9 Jul 2026 21:32:47 -0000
@@ -0,0 +1,58 @@
+Index: include/scenefx/types/fx/clipped_region.h
+--- include/scenefx/types/fx/clipped_region.h.orig
++++ include/scenefx/types/fx/clipped_region.h
+@@ -15,7 +15,7 @@ struct fx_corner_radii {
+
+ #define CORNER_RADIUS_MAX (UINT16_MAX)
+
+-static __always_inline uint16_t corner_radius_clamp(int radius) {
++static inline uint16_t corner_radius_clamp(int radius) {
+ if (radius <= 0) {
+ return 0;
+ }
+@@ -27,7 +27,7 @@ static __always_inline uint16_t corner_radius_clamp(in
+ return radius;
+ }
+
+-static __always_inline struct fx_corner_radii corner_radii_new(int top_left, int top_right, int bottom_right, int bottom_left) {
++static inline struct fx_corner_radii corner_radii_new(int top_left, int top_right, int bottom_right, int bottom_left) {
+ return (struct fx_corner_radii) {
+ corner_radius_clamp(top_left),
+ corner_radius_clamp(top_right),
+@@ -36,15 +36,15 @@ static __always_inline struct fx_corner_radii corner_r
+ };
+ }
+
+-static __always_inline struct fx_corner_radii corner_radii_all(int radius) {
++static inline struct fx_corner_radii corner_radii_all(int radius) {
+ return corner_radii_new(radius, radius, radius, radius);
+ }
+
+-static __always_inline struct fx_corner_radii corner_radii_none(void) {
++static inline struct fx_corner_radii corner_radii_none(void) {
+ return corner_radii_all(0);
+ }
+
+-#define corner_radii_func(name, tl, tr, br, bl) static __always_inline struct fx_corner_radii corner_radii_##name(int radius) { return corner_radii_new(tl, tr, br, bl); }
++#define corner_radii_func(name, tl, tr, br, bl) static inline struct fx_corner_radii corner_radii_##name(int radius) { return corner_radii_new(tl, tr, br, bl); }
+
+ corner_radii_func(top, radius, radius, 0, 0);
+ corner_radii_func(bottom, 0, 0, radius, radius);
+@@ -63,7 +63,7 @@ bool fx_corner_radii_eq(struct fx_corner_radii lhs, st
+ *
+ * This can be compared to an `AND` operation
+ */
+-static __always_inline struct fx_corner_radii fx_corner_radii_filter(struct fx_corner_radii input, struct fx_corner_radii filter) {
++static inline struct fx_corner_radii fx_corner_radii_filter(struct fx_corner_radii input, struct fx_corner_radii filter) {
+ return corner_radii_new(
+ input.top_left && filter.top_left ? input.top_left : 0,
+ input.top_right && filter.top_right ? input.top_right : 0,
+@@ -77,7 +77,7 @@ static __always_inline struct fx_corner_radii fx_corne
+ *
+ * This can be compared to an `OR` operation
+ */
+-static __always_inline struct fx_corner_radii fx_corner_radii_pick(struct fx_corner_radii lhs, struct fx_corner_radii rhs) {
++static inline struct fx_corner_radii fx_corner_radii_pick(struct fx_corner_radii lhs, struct fx_corner_radii rhs) {
+ return corner_radii_new(
+ lhs.top_left ? lhs.top_left : rhs.top_left,
+ lhs.top_right ? lhs.top_right : rhs.top_right,
Index: patches/patch-include_types_fx_clipped_region_h
===================================================================
RCS file: patches/patch-include_types_fx_clipped_region_h
diff -N patches/patch-include_types_fx_clipped_region_h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-include_types_fx_clipped_region_h 9 Jul 2026 21:32:47 -0000
@@ -0,0 +1,12 @@
+Index: include/types/fx/clipped_region.h
+--- include/types/fx/clipped_region.h.orig
++++ include/types/fx/clipped_region.h
+@@ -20,7 +20,7 @@ struct clipped_fregion {
+ struct fx_corner_fradii corners;
+ };
+
+-static __always_inline bool clipped_fregion_is_valid(const struct clipped_fregion *fregion) {
++static inline bool clipped_fregion_is_valid(const struct clipped_fregion *fregion) {
+ return !fx_corner_fradii_is_empty(&fregion->corners) && !wlr_box_empty(&fregion->area);
+ };
+
Index: patches/patch-meson_build
===================================================================
RCS file: /cvs/ports/wayland/scenefx/patches/patch-meson_build,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 patch-meson_build
--- patches/patch-meson_build 6 Apr 2026 19:17:09 -0000 1.1.1.1
+++ patches/patch-meson_build 9 Jul 2026 21:32:47 -0000
@@ -3,7 +3,7 @@ No librt on OpenBSD
Index: meson.build
--- meson.build.orig
+++ meson.build
-@@ -110,7 +110,6 @@ pixman = dependency('pixman-1',
+@@ -128,7 +128,6 @@ pixman = dependency('pixman-1',
default_options: ['werror=false'],
)
math = cc.find_library('m')
@@ -11,11 +11,11 @@ Index: meson.build
scenefx_files = []
scenefx_deps = [
-@@ -120,7 +119,6 @@ scenefx_deps = [
+@@ -138,7 +137,6 @@ scenefx_deps = [
xkbcommon,
pixman,
math,
- rt,
]
- subdir('protocol')
+ # Tracy
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/wayland/scenefx/pkg/PLIST,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 PLIST
--- pkg/PLIST 6 Apr 2026 19:17:09 -0000 1.1.1.1
+++ pkg/PLIST 9 Jul 2026 21:32:47 -0000
@@ -2,14 +2,14 @@ include/scenefx-${SCENEFX_LIBV}/
include/scenefx-${SCENEFX_LIBV}/scenefx/
include/scenefx-${SCENEFX_LIBV}/scenefx/render/
include/scenefx-${SCENEFX_LIBV}/scenefx/render/fx_renderer/
-include/scenefx-${SCENEFX_LIBV}/scenefx/render/fx_renderer/fx_effect_framebuffers.h
+include/scenefx-${SCENEFX_LIBV}/scenefx/render/fx_renderer/fx_offscreen_buffers.h
include/scenefx-${SCENEFX_LIBV}/scenefx/render/fx_renderer/fx_renderer.h
include/scenefx-${SCENEFX_LIBV}/scenefx/render/pass.h
include/scenefx-${SCENEFX_LIBV}/scenefx/types/
include/scenefx-${SCENEFX_LIBV}/scenefx/types/fx/
include/scenefx-${SCENEFX_LIBV}/scenefx/types/fx/blur_data.h
include/scenefx-${SCENEFX_LIBV}/scenefx/types/fx/clipped_region.h
-include/scenefx-${SCENEFX_LIBV}/scenefx/types/fx/corner_location.h
+include/scenefx-${SCENEFX_LIBV}/scenefx/types/linked_node.h
include/scenefx-${SCENEFX_LIBV}/scenefx/types/wlr_scene.h
@lib lib/libscenefx-${SCENEFX_LIBV}.so.${LIBscenefx-${SCENEFX_LIBV}_VERSION}
lib/pkgconfig/scenefx-${SCENEFX_LIBV}.pc