nixpkgs/pkgs/development/libraries/wayland/darwin.patch
2024-05-31 12:09:13 +01:00

75 lines
2.2 KiB
Diff

diff --git a/meson.build b/meson.build
index 8e28f2a..c8d1dc9 100644
--- a/meson.build
+++ b/meson.build
@@ -16,7 +16,7 @@ config_h.set_quoted('PACKAGE', meson.project_name())
config_h.set_quoted('PACKAGE_VERSION', meson.project_version())
cc_args = []
-if host_machine.system() not in ['freebsd', 'openbsd']
+if host_machine.system() not in ['darwin', 'freebsd', 'openbsd']
cc_args += ['-D_POSIX_C_SOURCE=200809L']
endif
add_project_arguments(cc_args, language: 'c')
@@ -52,7 +52,7 @@ foreach f: have_funcs
endforeach
config_h.set10('HAVE_XUCRED_CR_PID', cc.has_member('struct xucred', 'cr_pid', prefix : '#include <sys/ucred.h>'))
have_broken_msg_cmsg_cloexec = false
-if host_machine.system() == 'freebsd'
+if host_machine.system() in ['darwin', 'freebsd']
have_broken_msg_cmsg_cloexec = not cc.compiles('''
#include <sys/param.h> /* To get __FreeBSD_version. */
#if __FreeBSD_version < 1300502 || \
@@ -69,7 +69,7 @@ endif
config_h.set10('HAVE_BROKEN_MSG_CMSG_CLOEXEC', have_broken_msg_cmsg_cloexec)
if get_option('libraries')
- if host_machine.system() in ['freebsd', 'openbsd']
+ if host_machine.system() in ['darwin', 'freebsd', 'openbsd']
# When building for FreeBSD, epoll(7) is provided by a userspace
# wrapper around kqueue(2).
epoll_dep = dependency('epoll-shim')
diff --git a/src/event-loop.c b/src/event-loop.c
index 45222f7..fb3b464 100644
--- a/src/event-loop.c
+++ b/src/event-loop.c
@@ -49,6 +49,13 @@
#define TIMER_REMOVED -2
+#ifdef __APPLE__
+struct itimerspec {
+ struct timespec it_interval;
+ struct timespec it_value;
+};
+#endif
+
struct wl_event_loop;
struct wl_event_source_interface;
struct wl_event_source_timer;
diff --git a/src/wayland-os.c b/src/wayland-os.c
index f00ead4..4dc01d0 100644
--- a/src/wayland-os.c
+++ b/src/wayland-os.c
@@ -75,17 +75,19 @@ wl_os_socket_cloexec(int domain, int type, int protocol)
{
int fd;
+#ifdef SOCK_CLOEXEC
fd = wl_socket(domain, type | SOCK_CLOEXEC, protocol);
if (fd >= 0)
return fd;
if (errno != EINVAL)
return -1;
+#endif
fd = wl_socket(domain, type, protocol);
return set_cloexec_or_close(fd);
}
-#if defined(__FreeBSD__)
+#if defined(__APPLE__) || defined(__FreeBSD__)
int
wl_os_socket_peercred(int sockfd, uid_t *uid, gid_t *gid, pid_t *pid)
{