diff --git a/x11-wm/mutter/Makefile b/x11-wm/mutter/Makefile index ff2df6c9589d..9e761f3cb3c4 100644 --- a/x11-wm/mutter/Makefile +++ b/x11-wm/mutter/Makefile @@ -1,83 +1,84 @@ PORTNAME= mutter PORTVERSION= 47.8.1 +PORTREvISION= 1 CATEGORIES= x11-wm MASTER_SITES= GNOME DIST_SUBDIR= gnome MAINTAINER= gnome@FreeBSD.org COMMENT= Window and compositing manager based on Clutter WWW= https://gnome.pages.gitlab.gnome.org/mutter/ LICENSE= GPLv2+ LICENSE_FILE= ${WRKSRC}/COPYING PORTSCOUT= limit:^47\. BUILD_DEPENDS= evdev-proto>0:devel/evdev-proto \ gnome-settings-daemon>0:sysutils/gnome-settings-daemon \ gsettings-desktop-schemas>0:devel/gsettings-desktop-schemas \ xkeyboard-config>0:x11/xkeyboard-config \ dbus>0:devel/dbus LIB_DEPENDS= libcanberra.so:audio/libcanberra \ libgudev-1.0.so:devel/libgudev \ libdrm.so:graphics/libdrm \ libinput.so:x11/libinput \ libgbm.so:graphics/mesa-libs \ libfontconfig.so:x11-fonts/fontconfig \ libfribidi.so:converters/fribidi \ libgraphene-1.0.so:graphics/graphene \ libjson-glib-1.0.so:devel/json-glib \ libpipewire-0.3.so:multimedia/pipewire \ libstartup-notification-1.so:x11/startup-notification \ libupower-glib.so:sysutils/upower \ libxkbcommon.so:x11/libxkbcommon \ libxkbfile.so:x11/libxkbfile \ liblcms2.so:graphics/lcms2 \ libcolord.so:graphics/colord \ libharfbuzz.so:print/harfbuzz \ libei.so:x11/libei \ libdisplay-info.so:sysutils/libdisplay-info RUN_DEPENDS= gnome-settings-daemon>0:sysutils/gnome-settings-daemon \ gsettings-desktop-schemas>0:devel/gsettings-desktop-schemas \ xkeyboard-config>0:x11/xkeyboard-config USES= compiler:c++0x gettext gl gnome localbase meson pkgconfig \ tar:xz xorg USE_GL= egl gbm USE_GNOME= atk cairo gdkpixbuf gnomedesktop4 gtk40 introspection:build USE_XORG= ice pixman sm x11 xcb xcomposite xcursor xdamage xext \ xfixes xi xinerama xrandr xrender xtst USE_LDCONFIG= yes CFLAGS+= -Wno-unknown-warning-option -Wno-format-nonliteral CPPFLAGS+= -fno-omit-frame-pointer MESON_ARGS= -Dlibdisplay_info=enabled \ -Dlibwacom=false \ -Dnative_backend=false \ -Dprofiler=false \ -Dsystemd=false \ -Dtests=disabled \ -Dcogl_tests=false \ -Dclutter_tests=false \ -Dmutter_tests=false \ -Dinstalled_tests=false # Required by embedded cogl/clutter forks. MESON_ARGS+= -Dgles2_libname=libGLESv2 \ -Dopengl_libname=libGL.so GLIB_SCHEMAS= org.gnome.mutter.gschema.xml \ org.gnome.mutter.wayland.gschema.xml OPTIONS_DEFINE= WAYLAND OPTIONS_DEFAULT= WAYLAND OPTIONS_SUB= yes WAYLAND_BUILD_DEPENDS= wayland-protocols>0:graphics/wayland-protocols \ xwayland>0:x11-servers/xwayland WAYLAND_LIB_DEPENDS= libwayland-server.so:graphics/wayland WAYLAND_RUN_DEPENDS= xwayland>0:x11-servers/xwayland WAYLAND_USE= XORG=xau WAYLAND_MESON_TRUE= wayland \ xwayland .include diff --git a/x11-wm/mutter/files/patch-clutter_clutter_clutter-frame-clock.c b/x11-wm/mutter/files/patch-clutter_clutter_clutter-frame-clock.c new file mode 100644 index 000000000000..d17c08df52ba --- /dev/null +++ b/x11-wm/mutter/files/patch-clutter_clutter_clutter-frame-clock.c @@ -0,0 +1,23 @@ +--- clutter/clutter/clutter-frame-clock.c.orig 2023-10-31 18:35:00 UTC ++++ clutter/clutter/clutter-frame-clock.c +@@ -845,7 +845,7 @@ clutter_frame_clock_get_max_render_time_debug_info (Cl + GString *string; + + string = g_string_new (NULL); +- g_string_append_printf (string, "Max render time: %ld µs", ++ g_string_append_printf (string, "Max render time: %lld µs", + clutter_frame_clock_compute_max_render_time_us (frame_clock)); + + if (frame_clock->got_measurements_last_frame) +@@ -857,9 +857,9 @@ clutter_frame_clock_get_max_render_time_debug_info (Cl + MAX (frame_clock->longterm_max_update_duration_us, + frame_clock->shortterm_max_update_duration_us); + +- g_string_append_printf (string, "\nVblank duration: %ld µs +", ++ g_string_append_printf (string, "\nVblank duration: %lld µs +", + frame_clock->vblank_duration_us); +- g_string_append_printf (string, "\nUpdate duration: %ld µs +", ++ g_string_append_printf (string, "\nUpdate duration: %lld µs +", + max_update_duration_us); + g_string_append_printf (string, "\nConstant: %d µs", + clutter_max_render_time_constant_us); diff --git a/x11-wm/mutter/files/patch-da3ae7f0.patch b/x11-wm/mutter/files/patch-da3ae7f0.patch new file mode 100644 index 000000000000..3f26bf205ebe --- /dev/null +++ b/x11-wm/mutter/files/patch-da3ae7f0.patch @@ -0,0 +1,29 @@ +Revert: +From da3ae7f0e68d8fab424a260e8f8300a217ccf0ee Mon Sep 17 00:00:00 2001 +From: Kamil Szczęk +Date: Mon, 30 Sep 2024 11:24:32 +0200 +Subject: [PATCH] udev: Use current tags when looking for preferred primary + devices + +--- meson.build.orig 2024-11-25 14:05:12 UTC ++++ meson.build +@@ -42,7 +42,7 @@ udev_req = '>= 228' + + # optional version requirements + udev_req = '>= 228' +-gudev_req = '>= 238' ++gudev_req = '>= 232' + + # wayland version requirements + wayland_server_req = '>= 1.22' +--- src/backends/native/meta-udev.c.orig 2024-11-25 14:05:12 UTC ++++ src/backends/native/meta-udev.c +@@ -125,7 +125,7 @@ meta_is_udev_device_preferred_primary (GUdevDevice *de + { + const char * const *tags; + +- tags = g_udev_device_get_current_tags (device); ++ tags = g_udev_device_get_tags (device); + if (!tags) + return FALSE; + diff --git a/x11-wm/mutter/files/patch-meson.build b/x11-wm/mutter/files/patch-meson.build new file mode 100644 index 000000000000..29f3431e24d1 --- /dev/null +++ b/x11-wm/mutter/files/patch-meson.build @@ -0,0 +1,20 @@ +--- meson.build.orig 2023-07-06 10:42:04 UTC ++++ meson.build +@@ -226,11 +226,15 @@ have_libgudev = get_option('udev') + if have_libgudev + libudev_dep = dependency('libudev', version: udev_req) + gudev_dep = dependency('gudev-1.0', version: gudev_req) +- udev_dep = dependency('udev') ++ udev_dep = dependency('udev', required: false) + + udev_dir = get_option('udev_dir') + if udev_dir == '' +- udev_dir = udev_dep.get_variable('udevdir') ++ if udev_dep.found() ++ udev_dir = udev_dep.get_variable('udevdir') ++ else ++ udev_dir = libdir / 'udev' ++ endif + endif + endif + diff --git a/x11-wm/mutter/files/patch-src_backends_meta-stage-impl.c b/x11-wm/mutter/files/patch-src_backends_meta-stage-impl.c new file mode 100644 index 000000000000..14b366632ca8 --- /dev/null +++ b/x11-wm/mutter/files/patch-src_backends_meta-stage-impl.c @@ -0,0 +1,18 @@ +https://gitlab.gnome.org/GNOME/mutter/-/issues/2103 + +--- src/backends/meta-stage-impl.c.orig 2024-11-25 14:05:12 UTC ++++ src/backends/meta-stage-impl.c +@@ -612,9 +612,13 @@ meta_stage_impl_redraw_view_primary (MetaStageImpl + * artefacts. + */ + /* swap_region does not need damage history, set it up before that */ ++#if 0 + if (!use_clipped_redraw) + swap_region = mtk_region_create (); + else if (clutter_stage_view_has_shadowfb (stage_view)) ++#else ++ if (clutter_stage_view_has_shadowfb (stage_view)) ++#endif + swap_region = mtk_region_ref (fb_clip_region); + else + swap_region = mtk_region_copy (fb_clip_region); diff --git a/x11-wm/mutter/files/patch-src_core_meta-context-main.c b/x11-wm/mutter/files/patch-src_core_meta-context-main.c new file mode 100644 index 000000000000..ed1fc10ad094 --- /dev/null +++ b/x11-wm/mutter/files/patch-src_core_meta-context-main.c @@ -0,0 +1,24 @@ +Based on https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258042 + +--- src/core/meta-context-main.c.orig 2025-03-04 18:56:53 UTC ++++ src/core/meta-context-main.c +@@ -25,7 +25,7 @@ + #include + #include + +-#ifdef HAVE_WAYLAND ++#if defined(HAVE_LIBSYSTEMD) && defined(HAVE_WAYLAND) + #include + #endif + +@@ -348,8 +348,10 @@ meta_context_main_get_x11_display_policy (MetaContext + #ifdef HAVE_WAYLAND + if (context_main->options.no_x11) + return META_X11_DISPLAY_POLICY_DISABLED; ++#ifdef HAVE_LIBSYSTEMD + else if (sd_pid_get_user_unit (0, &unit) < 0) + return META_X11_DISPLAY_POLICY_MANDATORY; ++#endif + else + return META_X11_DISPLAY_POLICY_ON_DEMAND; + #else /* HAVE_WAYLAND */ diff --git a/x11-wm/mutter/files/patch-src_wayland_meta-wayland-buffer.c b/x11-wm/mutter/files/patch-src_wayland_meta-wayland-buffer.c new file mode 100644 index 000000000000..4f2e3087ee4c --- /dev/null +++ b/x11-wm/mutter/files/patch-src_wayland_meta-wayland-buffer.c @@ -0,0 +1,46 @@ +Based on https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258042 + +--- src/wayland/meta-wayland-buffer.c.orig 2024-11-25 14:05:12 UTC ++++ src/wayland/meta-wayland-buffer.c +@@ -228,6 +228,7 @@ shm_to_drm_format (enum wl_shm_format format) + return format; + } + ++#ifdef HAVE_NATIVE_BACKEND + static const char * + shm_format_to_string (MetaDrmFormatBuf *format_buf, + enum wl_shm_format shm_format) +@@ -237,6 +238,7 @@ shm_format_to_string (MetaDrmFormatBuf *format_buf, + drm_format = shm_to_drm_format (shm_format); + return meta_drm_format_to_string (format_buf, drm_format); + } ++#endif + + static const MetaFormatInfo * + get_supported_shm_format_info (uint32_t shm_format) +@@ -409,7 +411,9 @@ shm_buffer_attach (MetaWaylandBuffer *buffer, + int stride, width, height; + MetaMultiTextureFormat multi_format; + CoglPixelFormat cogl_format; ++#ifdef HAVE_NATIVE_BACKEND + MetaDrmFormatBuf format_buf; ++#endif + uint32_t shm_format; + const MetaFormatInfo *format_info; + +@@ -430,6 +434,7 @@ shm_buffer_attach (MetaWaylandBuffer *buffer, + cogl_format = format_info->cogl_format; + multi_format = format_info->multi_texture_format; + ++#ifdef HAVE_NATIVE_BACKEND + meta_topic (META_DEBUG_WAYLAND, + "[wl-shm] wl_buffer@%u wl_shm_format %s " + "-> MetaMultiTextureFormat %s / CoglPixelFormat %s", +@@ -437,6 +442,7 @@ shm_buffer_attach (MetaWaylandBuffer *buffer, + shm_format_to_string (&format_buf, shm_format), + meta_multi_texture_format_to_string (multi_format), + cogl_pixel_format_to_string (cogl_format)); ++#endif + + if (*texture && + meta_multi_texture_get_width (*texture) == width && diff --git a/x11-wm/mutter/files/patch-src_wayland_meta-wayland-dma-buf.c b/x11-wm/mutter/files/patch-src_wayland_meta-wayland-dma-buf.c new file mode 100644 index 000000000000..723d17b181ba --- /dev/null +++ b/x11-wm/mutter/files/patch-src_wayland_meta-wayland-dma-buf.c @@ -0,0 +1,152 @@ +Adapt changes https://gitlab.gnome.org/GNOME/mutter/-/commit/c4773089 + +--- src/wayland/meta-wayland-dma-buf.c.orig 2024-11-25 14:05:12 UTC ++++ src/wayland/meta-wayland-dma-buf.c +@@ -39,7 +39,9 @@ + + #include + #include ++#ifdef __linux__ + #include ++#endif + #include + #include + #include +@@ -72,6 +74,26 @@ + + #define META_WAYLAND_DMA_BUF_MAX_FDS 4 + ++#ifndef __linux__ ++/* From https://reviews.freebsd.org/D23085 */ ++typedef uint64_t __u64; ++ ++struct dma_buf_sync ++{ ++ __u64 flags; ++}; ++ ++#define DMA_BUF_SYNC_READ (1 << 0) ++#define DMA_BUF_SYNC_WRITE (2 << 0) ++#define DMA_BUF_SYNC_RW (DMA_BUF_SYNC_READ | DMA_BUF_SYNC_WRITE) ++#define DMA_BUF_SYNC_START (0 << 2) ++#define DMA_BUF_SYNC_END (1 << 2) ++#define DMA_BUF_SYNC_VALID_FLAGS_MASK \ ++ (DMA_BUF_SYNC_RW | DMA_BUF_SYNC_END) ++#define DMA_BUF_BASE 'b' ++#define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync) ++#endif ++ + /* Compatible with zwp_linux_dmabuf_feedback_v1.tranche_flags */ + typedef enum _MetaWaylandDmaBufTrancheFlags + { +@@ -863,7 +885,9 @@ typedef struct _MetaWaylandDmaBufSource + gpointer user_data; + + gpointer fd_tags[META_WAYLAND_DMA_BUF_MAX_FDS]; ++#ifdef __linux__ + int owned_sync_fd[META_WAYLAND_DMA_BUF_MAX_FDS]; ++#endif + } MetaWaylandDmaBufSource; + + static gboolean +@@ -898,11 +922,13 @@ meta_wayland_dma_buf_source_dispatch (GSource *bas + for (i = 0; i < META_WAYLAND_DMA_BUF_MAX_FDS; i++) + { + gpointer fd_tag = source->fd_tags[i]; +- int fd; + + if (!fd_tag) + continue; + ++#ifdef __linux__ ++ int fd; ++ + fd = source->owned_sync_fd[i]; + if (fd < 0) + fd = dma_buf->fds[i]; +@@ -912,10 +938,19 @@ meta_wayland_dma_buf_source_dispatch (GSource *bas + ready = FALSE; + continue; + } ++#else ++ if (!is_fd_readable (dma_buf->fds[i])) ++ { ++ ready = FALSE; ++ continue; ++ } ++#endif + + g_source_remove_unix_fd (&source->base, fd_tag); + source->fd_tags[i] = NULL; ++#ifdef __linux__ + g_clear_fd (&source->owned_sync_fd[i], NULL); ++#endif + } + + if (!ready) +@@ -942,7 +977,9 @@ meta_wayland_dma_buf_source_finalize (GSource *base) + { + g_source_remove_unix_fd (&source->base, fd_tag); + source->fd_tags[i] = NULL; ++#ifdef __linux__ + g_clear_fd (&source->owned_sync_fd[i], NULL); ++#endif + } + } + +@@ -960,7 +997,6 @@ create_source (MetaWaylandBuffer *buffer + gpointer user_data) + { + MetaWaylandDmaBufSource *source; +- int i; + + source = + (MetaWaylandDmaBufSource *) g_source_new (&meta_wayland_dma_buf_source_funcs, +@@ -971,12 +1007,17 @@ create_source (MetaWaylandBuffer *buffer + source->dispatch = dispatch; + source->user_data = user_data; + ++#ifdef __linux__ ++ int i; ++ + for (i = 0; i < META_WAYLAND_DMA_BUF_MAX_FDS; i++) + source->owned_sync_fd[i] = -1; ++#endif + + return source; + } + ++#ifdef __linux__ + static int + get_sync_file (int dma_buf_fd) + { +@@ -994,6 +1035,7 @@ get_sync_file (int dma_buf_fd) + + return -1; + } ++#endif + + /** + * meta_wayland_dma_buf_create_source: +@@ -1034,9 +1076,11 @@ meta_wayland_dma_buf_create_source (MetaWaylandBuffer + if (!source) + source = create_source (buffer, dispatch, user_data); + ++#ifdef __linux__ + source->owned_sync_fd[i] = get_sync_file (fd); + if (source->owned_sync_fd[i] >= 0) + fd = source->owned_sync_fd[i]; ++#endif + + source->fd_tags[i] = g_source_add_unix_fd (&source->base, fd, G_IO_IN); + } +@@ -1075,7 +1119,9 @@ meta_wayland_drm_syncobj_create_source (MetaWaylandBuf + return NULL; + + source->fd_tags[0] = g_source_add_unix_fd (&source->base, sync_fd, G_IO_IN); ++#ifdef __linux__ + source->owned_sync_fd[0] = g_steal_fd (&sync_fd); ++#endif + + return &source->base; + } diff --git a/x11-wm/mutter/files/patch-src_wayland_meta-xwayland.c b/x11-wm/mutter/files/patch-src_wayland_meta-xwayland.c new file mode 100644 index 000000000000..113a0dd6e2bd --- /dev/null +++ b/x11-wm/mutter/files/patch-src_wayland_meta-xwayland.c @@ -0,0 +1,27 @@ +Based on https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=258042 + +--- src/wayland/meta-xwayland.c.orig 2024-11-25 14:05:12 UTC ++++ src/wayland/meta-xwayland.c +@@ -598,9 +598,11 @@ open_display_sockets (MetaXWaylandManager *manager, + { + int abstract_fd, unix_fd; + ++#ifdef __linux__ + abstract_fd = bind_to_abstract_socket (display_index, error); + if (abstract_fd < 0) + return FALSE; ++#endif + + unix_fd = bind_to_unix_socket (display_index, error); + if (unix_fd < 0) +@@ -608,6 +610,10 @@ open_display_sockets (MetaXWaylandManager *manager, + close (abstract_fd); + return FALSE; + } ++ ++#ifndef __linux__ ++ abstract_fd = unix_fd; ++#endif + + *abstract_fd_out = abstract_fd; + *unix_fd_out = unix_fd;