build: Fix build and tests on macOS

This commit addresses several compatibility issues that prevented Wayland
from building and passing its test suite on macOS

Core and Compatibility changes:
- Emulate Linux behavior by explicitly setting O_NONBLOCK on connections
  (fixes blocking sendmsg issues on macOS).
- Fix compilation on platforms missing SOCK_CLOEXEC and MSG_CMSG_CLOEXEC.
- Implement wl_os_socket_peercred() using LOCAL_PEERPID for macOS.
- Ensure availability of struct itimerspec (required for POSIX Timers API).

Test suite fixes:
- Add socketpair_cloexec() wrapper to handle platforms without atomic
  SOCK_CLOEXEC support.
- Add implementation of memrchr() for platforms that do not provide it.
- Implement is_debugger_attached() for macOS to handle test timeouts.
- Fix tests to handle Mach-O binary format (instead of ELF).
- Update egl-symbols-check to support macOS *.dylib Mach-O libraries.

Build system:
- Add meson option 'xml_catalog' to allow specifying custom catalog paths.

Signed-off-by: Martin Lopatář <lopin@dataplex.cz>
This commit is contained in:
Martin Lopatář 2026-01-10 08:01:57 +01:00 committed by Martin Lopatář
parent 25da99a7e5
commit 5bf30a3e7e
16 changed files with 179 additions and 23 deletions

View file

@ -316,6 +316,19 @@ wl_connection_set_max_buffer_size(struct wl_connection *connection,
ring_buffer_ensure_space(&connection->out, 0);
}
#ifdef __APPLE__
static int fd_setfl_nonblock(int fd)
{
int flags;
flags = fcntl(fd, F_GETFL, 0);
if (flags < 0)
return flags;
return fcntl(fd, F_SETFL, flags | O_NONBLOCK);
}
#endif
struct wl_connection *
wl_connection_create(int fd, size_t max_buffer_size)
{
@ -329,6 +342,10 @@ wl_connection_create(int fd, size_t max_buffer_size)
connection->fd = fd;
#ifdef __APPLE__
fd_setfl_nonblock(fd);
#endif
return connection;
}