milestone1

This commit is contained in:
2026-05-07 04:35:57 +01:00
parent b9698beceb
commit be17bbc9bc
37 changed files with 973 additions and 317 deletions
@@ -0,0 +1,22 @@
#TODO: Requires Redox compatibility patching for missing Linux header paths and
# some POSIX/Linux-only flags during cross-builds.
# redox.patch restores the Redox compatibility stubs plus Meson scanner detection.
[source]
tar = "https://gitlab.freedesktop.org/wayland/wayland/-/releases/1.24.0/downloads/wayland-1.24.0.tar.xz"
patches = ["redox.patch"]
[build]
template = "custom"
dependencies = [
"relibc",
"libffi",
"expat",
"libxml2",
]
script = """
DYNAMIC_INIT
cookbook_meson -Ddocumentation=false -Dtests=false -Ddtd_validation=false -Dc_args=-Wno-error
"""
[package]
dependencies = ["libffi"]
@@ -80,8 +80,8 @@ if get_option('libraries')
ffi_dep = dependency('libffi')
decls = [
{ 'header': 'signal.h', 'symbol': 'SIG_BLOCK' },
{ 'header': 'time.h', 'symbol': 'CLOCK_MONOTONIC' },
{ 'header': 'sys/signalfd.h', 'symbol': 'SFD_CLOEXEC' },
{ 'header': 'sys/timerfd.h', 'symbol': 'TFD_CLOEXEC' },
{ 'header': 'time.h', 'symbol': 'CLOCK_MONOTONIC' },
]
@@ -37,17 +37,11 @@
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#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 <time.h>
#include <ffi.h>
#include "wayland-util.h"
#include "wayland-private.h"
@@ -35,56 +35,9 @@
#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"
@@ -81,7 +81,7 @@ if get_option('scanner')
endif
if meson.is_cross_build() or not get_option('scanner')
wayland_scanner_for_build = find_program('wayland-scanner', native: true)
wayland_scanner_for_build = find_program('wayland-scanner', native: true)
else
wayland_scanner_for_build = wayland_scanner
endif
@@ -650,8 +650,7 @@ wl_proxy_add_listener(struct wl_proxy *proxy,
void (**implementation)(void), void *data)
{
if (!proxy) {
fprintf(stderr, "FATAL: wl_proxy_add_listener(NULL) caller=%p -- returning error
",
fprintf(stderr, "FATAL: wl_proxy_add_listener(NULL) caller=%p -- returning error\n",
__builtin_return_address(0));
return -1;
}
@@ -39,24 +39,7 @@
#include <dlfcn.h>
#include <sys/time.h>
#include <fcntl.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/eventfd.h>
#include <sys/file.h>
#include <sys/stat.h>