Files
RedBear-OS/local/patches/libwayland/redox.patch
T
vasilito f405070d2c fix: libwayland BUILDS — proper durability patch with all stubs
121-line redox.patch replaces 229-line fragile Python heredoc.
Covers: meson.build, src/meson.build, event-loop.c, connection.c,
wayland-server.c with signalfd, timerfd, eventfd, MSG_NOSIGNAL,
open_memstream, timerfd_settime, timerfd_gettime stubs.

libwayland builds successfully. Greeter cascade through llvm21.
2026-04-28 12:28:19 +01:00

133 lines
4.5 KiB
Diff

--- clean-wayland/meson.build 2025-07-06 13:11:26.000000000 +0100
+++ patched-wayland/meson.build 2026-04-28 12:23:06.295526487 +0100
@@ -80,8 +80,8 @@
ffi_dep = dependency('libffi')
decls = [
- { 'header': 'sys/signalfd.h', 'symbol': 'SFD_CLOEXEC' },
- { 'header': 'sys/timerfd.h', 'symbol': 'TFD_CLOEXEC' },
+ { 'header': 'signal.h', 'symbol': 'SIG_BLOCK' },
+ { 'header': 'time.h', 'symbol': 'CLOCK_MONOTONIC' },
{ 'header': 'time.h', 'symbol': 'CLOCK_MONOTONIC' },
]
--- clean-wayland/src/meson.build 2025-07-06 13:11:26.000000000 +0100
+++ patched-wayland/src/meson.build 2026-04-28 12:23:06.295602980 +0100
@@ -81,8 +81,7 @@
endif
if meson.is_cross_build() or not get_option('scanner')
- scanner_dep = dependency('wayland-scanner', native: true, version: meson.project_version())
- wayland_scanner_for_build = find_program(scanner_dep.get_variable(pkgconfig: 'wayland_scanner'))
+wayland_scanner_for_build = find_program('wayland-scanner', native: true)
else
wayland_scanner_for_build = wayland_scanner
endif
--- clean-wayland/src/event-loop.c 2025-07-06 13:11:26.000000000 +0100
+++ patched-wayland/src/event-loop.c 2026-04-28 12:24:35.434111143 +0100
@@ -35,9 +35,56 @@
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/epoll.h>
-#include <sys/signalfd.h>
-#include <sys/timerfd.h>
+/* #include <sys/signalfd.h> */
+/* #include <sys/timerfd.h> */
#include <unistd.h>
+
+#ifndef SFD_CLOEXEC
+#define SFD_CLOEXEC O_CLOEXEC
+#endif
+#ifndef SFD_NONBLOCK
+#define SFD_NONBLOCK O_NONBLOCK
+#endif
+#ifndef TFD_CLOEXEC
+#define TFD_CLOEXEC O_CLOEXEC
+#endif
+#ifndef TFD_NONBLOCK
+#define TFD_NONBLOCK O_NONBLOCK
+#endif
+#ifndef TFD_TIMER_ABSTIME
+#define TFD_TIMER_ABSTIME 0x1
+#endif
+
+struct signalfd_siginfo { uint8_t pad[128]; };
+static int signalfd_impl(int fd, const sigset_t *mask, uintptr_t masksize, int flags) {
+ int oflag = O_RDWR;
+ if (flags & SFD_CLOEXEC) oflag |= O_CLOEXEC;
+ if (flags & SFD_NONBLOCK) oflag |= O_NONBLOCK;
+ if (fd == -1) { fd = open("/scheme/event", oflag); if (fd < 0) return -1; }
+ else { if (flags & SFD_CLOEXEC) fcntl(fd, F_SETFD, FD_CLOEXEC); }
+ sigprocmask(SIG_BLOCK, mask, NULL);
+ return fd;
+}
+int signalfd(int fd, const sigset_t *mask, uintptr_t masksize) { return signalfd_impl(fd, mask, masksize, 0); }
+static int timerfd_create(int clockid, int flags) {
+ int oflag = O_RDWR;
+ if (flags & TFD_CLOEXEC) oflag |= O_CLOEXEC;
+ if (flags & TFD_NONBLOCK) oflag |= O_NONBLOCK;
+ char path[64];
+ snprintf(path, sizeof(path), "/scheme/time/%d", clockid);
+ return open(path, oflag);
+}
+int timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itimerspec *old_value) {
+ if (new_value == NULL) { errno = EFAULT; return -1; }
+ ssize_t r = write(fd, &new_value->it_value, sizeof(struct timespec));
+ return (r == sizeof(struct timespec)) ? 0 : -1;
+}
+int timerfd_gettime(int fd, struct itimerspec *curr) {
+ if (curr == NULL) { errno = EFAULT; return -1; }
+ curr->it_interval = (struct timespec){0};
+ ssize_t r = read(fd, &curr->it_value, sizeof(struct timespec));
+ return (r == sizeof(struct timespec)) ? 0 : -1;
+}
#include "timespec-util.h"
#include "wayland-util.h"
#include "wayland-private.h"
--- clean-wayland/src/connection.c 2025-07-06 13:11:26.000000000 +0100
+++ patched-wayland/src/connection.c 2026-04-28 12:23:06.295797924 +0100
@@ -40,6 +40,15 @@
#include <time.h>
#include <ffi.h>
+#ifndef MSG_NOSIGNAL
+#define MSG_NOSIGNAL 0
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+static FILE *open_memstream(char **bufp, size_t *sizep) {
+ *bufp = NULL; *sizep = 0; return NULL;
+}
+
#include "wayland-util.h"
#include "wayland-private.h"
#include "wayland-os.h"
--- clean-wayland/src/wayland-server.c 2025-07-06 13:11:26.000000000 +0100
+++ patched-wayland/src/wayland-server.c 2026-04-28 12:23:06.295982588 +0100
@@ -39,7 +39,24 @@
#include <dlfcn.h>
#include <sys/time.h>
#include <fcntl.h>
-#include <sys/eventfd.h>
+/* #include <sys/eventfd.h> */
+#ifndef EFD_CLOEXEC
+#define EFD_CLOEXEC O_CLOEXEC
+#endif
+#ifndef EFD_NONBLOCK
+#define EFD_NONBLOCK O_NONBLOCK
+#endif
+#ifndef EFD_SEMAPHORE
+#define EFD_SEMAPHORE 0x1
+#endif
+static int eventfd(unsigned int initval, int flags) {
+ int oflag = O_RDWR;
+ if (flags & EFD_CLOEXEC) oflag |= O_CLOEXEC;
+ if (flags & EFD_NONBLOCK) oflag |= O_NONBLOCK;
+ char path[64];
+ snprintf(path, sizeof(path), "/scheme/event/eventfd/%u/%d", initval, (flags & EFD_SEMAPHORE) ? 1 : 0);
+ return open(path, oflag);
+}
#include <sys/file.h>
#include <sys/stat.h>