graphics/wayland: update to 1.20.0

Changes:	https://lists.freedesktop.org/archives/wayland-devel/2021-December/042064.html
PR:		258547
Exp-run by:	antoine
Approved by:	manu
This commit is contained in:
Jan Beich 2021-10-09 13:09:04 +00:00
parent 8328ee460a
commit 571ee96df4
21 changed files with 112 additions and 884 deletions

View File

@ -0,0 +1,29 @@
ld: error: undefined symbol: wl_proxy_marshal_flags
>>> referenced by SDL_waylanddatamanager.c
>>> build/.libs/SDL_waylanddatamanager.o:(Wayland_data_source_destroy)
>>> referenced by SDL_waylanddatamanager.c
>>> build/.libs/SDL_waylanddatamanager.o:(Wayland_data_offer_receive)
>>> referenced by SDL_waylanddatamanager.c
>>> build/.libs/SDL_waylanddatamanager.o:(Wayland_data_offer_destroy)
>>> referenced 109 more times
--- src/video/wayland/SDL_waylanddyn.h.orig 2020-03-11 01:36:18 UTC
+++ src/video/wayland/SDL_waylanddyn.h
@@ -75,6 +75,7 @@ void SDL_WAYLAND_UnloadSymbols(void);
#define wl_proxy_create (*WAYLAND_wl_proxy_create)
#define wl_proxy_destroy (*WAYLAND_wl_proxy_destroy)
#define wl_proxy_marshal (*WAYLAND_wl_proxy_marshal)
+#define wl_proxy_marshal_flags (*WAYLAND_wl_proxy_marshal_flags)
#define wl_proxy_set_user_data (*WAYLAND_wl_proxy_set_user_data)
#define wl_proxy_get_user_data (*WAYLAND_wl_proxy_get_user_data)
#define wl_proxy_get_version (*WAYLAND_wl_proxy_get_version)
--- src/video/wayland/SDL_waylandsym.h.orig 2020-03-11 01:36:18 UTC
+++ src/video/wayland/SDL_waylandsym.h
@@ -35,6 +35,7 @@
SDL_WAYLAND_MODULE(WAYLAND_CLIENT)
SDL_WAYLAND_SYM(void, wl_proxy_marshal, (struct wl_proxy *, uint32_t, ...))
+SDL_WAYLAND_SYM(struct wl_proxy *, wl_proxy_marshal_flags, (struct wl_proxy *, uint32_t, const struct wl_interface *, uint32_t, uint32_t, ...))
SDL_WAYLAND_SYM(struct wl_proxy *, wl_proxy_create, (struct wl_proxy *, const struct wl_interface *))
SDL_WAYLAND_SYM(void, wl_proxy_destroy, (struct wl_proxy *))
SDL_WAYLAND_SYM(int, wl_proxy_add_listener, (struct wl_proxy *, void (**)(void), void *))

View File

@ -1,14 +1,10 @@
# Created by: kwm@FreeBSD.org
PORTNAME= wayland
PORTVERSION= 1.19.0
PORTREVISION= 1
DISTVERSION= 1.20.0
CATEGORIES= graphics wayland
MASTER_SITES= https://wayland.freedesktop.org/releases/
PATCH_SITES= https://gitlab.freedesktop.org/${PORTNAME}/${PORTNAME}/commit/
PATCHFILES+= ed55438366e93d70867e3ba6b80978673e536fc0.patch:-p1 # MR 133
MAINTAINER= x11@FreeBSD.org
COMMENT= Wayland composite "server"
@ -19,8 +15,6 @@ LIB_DEPENDS= libexpat.so:textproc/expat2 \
libffi.so:devel/libffi \
libepoll-shim.so:devel/libepoll-shim
CFLAGS+= "-I${LOCALBASE}/include/libepoll-shim"
USES= cpe gnome meson pkgconfig tar:xz
USE_GNOME= libxslt:build
USE_LDCONFIG= yes

View File

@ -1,5 +1,3 @@
TIMESTAMP = 1622412504
SHA256 (wayland-1.19.0.tar.xz) = baccd902300d354581cd5ad3cc49daa4921d55fb416a5883e218750fef166d15
SIZE (wayland-1.19.0.tar.xz) = 456380
SHA256 (ed55438366e93d70867e3ba6b80978673e536fc0.patch) = cdf90fc3ec9455aad348a5251842f9035484fb49a7d10fd4930192002308c6ea
SIZE (ed55438366e93d70867e3ba6b80978673e536fc0.patch) = 927
TIMESTAMP = 1639066836
SHA256 (wayland-1.20.0.tar.xz) = b8a034154c7059772e0fdbd27dbfcda6c732df29cae56a82274f6ec5d7cd8725
SIZE (wayland-1.20.0.tar.xz) = 225188

View File

@ -1,23 +0,0 @@
--- cursor/os-compatibility.c.orig 2020-02-11 23:46:03 UTC
+++ cursor/os-compatibility.c
@@ -34,7 +34,7 @@
#include <string.h>
#include <stdlib.h>
-#ifdef HAVE_MEMFD_CREATE
+#if defined(HAVE_MEMFD_CREATE) || defined(__FreeBSD__)
#include <sys/mman.h>
#endif
@@ -131,6 +131,11 @@ os_create_anonymous_file(off_t size)
*/
fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_SEAL);
} else
+#elif defined(__FreeBSD__)
+/* posix_fallocate returns ENODEV before https://svnweb.freebsd.org/changeset/base/356512 */
+#undef HAVE_POSIX_FALLOCATE
+ fd = shm_open(SHM_ANON, O_CREAT | O_RDWR | O_CLOEXEC, 0600); // shm_open is always CLOEXEC
+ if (fd < 0)
#endif
{
path = getenv("XDG_RUNTIME_DIR");

View File

@ -1,33 +0,0 @@
--- meson.build.orig 2020-02-11 23:46:03 UTC
+++ meson.build
@@ -26,7 +26,14 @@ add_project_arguments(
language: 'c'
)
-foreach h: [ 'sys/prctl.h' ]
+have_headers = [
+ 'signal.h',
+ 'sys/epoll.h',
+ 'sys/prctl.h',
+ 'sys/ucred.h',
+]
+
+foreach h: have_headers
config_h.set('HAVE_' + h.underscorify().to_upper(), cc.has_header(h))
endforeach
@@ -37,12 +44,14 @@ have_funcs = [
'prctl',
'memfd_create',
'strndup',
+ 'waitid',
]
foreach f: have_funcs
config_h.set('HAVE_' + f.underscorify().to_upper(), cc.has_function(f))
endforeach
if get_option('libraries')
+ epoll_dep = dependency('epoll-shim', required: false)
ffi_dep = dependency('libffi')
decls = [

View File

@ -1,36 +0,0 @@
--- src/meson.build.orig 2021-01-06 19:25:15 UTC
+++ src/meson.build
@@ -77,7 +77,7 @@ if get_option('libraries')
'connection.c',
'wayland-os.c'
],
- dependencies: [ ffi_dep, rt_dep ]
+ dependencies: [ epoll_dep, ffi_dep, rt_dep ]
)
wayland_private_dep = declare_dependency(
@@ -151,6 +151,7 @@ if get_option('libraries')
],
version: '0.1.0',
dependencies: [
+ epoll_dep,
ffi_dep,
wayland_private_dep,
wayland_util_dep,
@@ -165,7 +166,7 @@ if get_option('libraries')
wayland_server_dep = declare_dependency(
link_with: wayland_server,
include_directories: [ root_inc, include_directories('.') ],
- dependencies: [ ffi_dep, mathlib_dep, threads_dep ],
+ dependencies: [ epoll_dep, ffi_dep, mathlib_dep, threads_dep ],
sources: [
wayland_server_protocol_core_h,
wayland_server_protocol_h
@@ -194,6 +195,7 @@ if get_option('libraries')
],
version: '0.3.0',
dependencies: [
+ epoll_dep,
ffi_dep,
wayland_private_dep,
wayland_util_dep,

View File

@ -1,97 +0,0 @@
--- src/wayland-os.c.orig 2017-08-08 18:20:52 UTC
+++ src/wayland-os.c
@@ -25,6 +25,8 @@
#define _GNU_SOURCE
+#include "../config.h"
+
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
@@ -32,7 +34,6 @@
#include <errno.h>
#include <sys/epoll.h>
-#include "../config.h"
#include "wayland-os.h"
static int
@@ -62,26 +63,50 @@ wl_os_socket_cloexec(int domain, int type, int protoco
{
int fd;
+#ifdef SOCK_CLOEXEC
fd = socket(domain, type | SOCK_CLOEXEC, protocol);
if (fd >= 0)
return fd;
if (errno != EINVAL)
return -1;
+#endif
fd = socket(domain, type, protocol);
return set_cloexec_or_close(fd);
}
int
+wl_os_socketpair_cloexec(int domain, int type, int protocol, int sv[2])
+{
+ int retval;
+
+#ifdef SOCK_CLOEXEC
+ retval = socketpair(domain, type | SOCK_CLOEXEC, protocol, sv);
+ if (retval >= 0)
+ return retval;
+ if (errno != EINVAL)
+ return -1;
+#endif
+
+ retval = socketpair(domain, type, protocol, sv);
+ if (set_cloexec_or_close(sv[0]) < 0 || set_cloexec_or_close(sv[1]) < 0)
+ retval = -1;
+
+ return retval;
+}
+
+int
wl_os_dupfd_cloexec(int fd, long minfd)
{
int newfd;
+#ifdef F_DUPFD_CLOEXEC
newfd = fcntl(fd, F_DUPFD_CLOEXEC, minfd);
if (newfd >= 0)
return newfd;
if (errno != EINVAL)
return -1;
+#endif
newfd = fcntl(fd, F_DUPFD, minfd);
return set_cloexec_or_close(newfd);
@@ -123,15 +148,18 @@ wl_os_recvmsg_cloexec(int sockfd, struct msghdr *msg,
{
ssize_t len;
+#ifdef MSG_CMSG_CLOEXEC
len = recvmsg(sockfd, msg, flags | MSG_CMSG_CLOEXEC);
if (len >= 0)
return len;
if (errno != EINVAL)
return -1;
+#endif
return recvmsg_cloexec_fallback(sockfd, msg, flags);
}
+#ifdef HAVE_SYS_EPOLL_H
int
wl_os_epoll_create_cloexec(void)
{
@@ -148,6 +176,7 @@ wl_os_epoll_create_cloexec(void)
fd = epoll_create(1);
return set_cloexec_or_close(fd);
}
+#endif
int
wl_os_accept_cloexec(int sockfd, struct sockaddr *addr, socklen_t *addrlen)

View File

@ -1,12 +0,0 @@
--- src/wayland-os.h.orig 2017-08-08 18:20:52 UTC
+++ src/wayland-os.h
@@ -30,6 +30,9 @@ int
wl_os_socket_cloexec(int domain, int type, int protocol);
int
+wl_os_socketpair_cloexec(int domain, int type, int protocol, int sv[2]);
+
+int
wl_os_dupfd_cloexec(int fd, long minfd);
ssize_t

View File

@ -1,109 +0,0 @@
--- src/wayland-server.c.orig 2020-12-21 10:17:10 UTC
+++ src/wayland-server.c
@@ -25,6 +25,8 @@
#define _GNU_SOURCE
+#include "../config.h"
+
#include <stdbool.h>
#include <stdlib.h>
#include <stdint.h>
@@ -44,6 +46,15 @@
#include <sys/file.h>
#include <sys/stat.h>
+#ifdef HAVE_SYS_UCRED_H
+#include <sys/param.h>
+#include <sys/ucred.h>
+#ifndef SOL_LOCAL
+/* DragonFly or FreeBSD < 12.2 */
+#define SOL_LOCAL 0
+#endif
+#endif
+
#include "wayland-util.h"
#include "wayland-private.h"
#include "wayland-server-private.h"
@@ -79,7 +86,13 @@ struct wl_client {
struct wl_list link;
struct wl_map objects;
struct wl_priv_signal destroy_signal;
+#ifdef HAVE_SYS_UCRED_H
+ /* FreeBSD */
+ struct xucred xucred;
+#else
+ /* Linux */
struct ucred ucred;
+#endif
int error;
struct wl_priv_signal resource_created_signal;
};
@@ -315,7 +328,17 @@ wl_resource_post_error(struct wl_resource *resource,
static void
destroy_client_with_error(struct wl_client *client, const char *reason)
{
+#ifdef HAVE_SYS_UCRED_H
+ /* FreeBSD */
+#if defined(__FreeBSD__) && __FreeBSD_version >= 1300030
+ wl_log("%s (pid %u)\n", reason, client->xucred.cr_pid);
+#else
+ wl_log("%s\n", reason);
+#endif
+#else
+ /* Linux */
wl_log("%s (pid %u)\n", reason, client->ucred.pid);
+#endif
wl_client_destroy(client);
}
@@ -529,10 +552,20 @@ wl_client_create(struct wl_display *display, int fd)
if (!client->source)
goto err_client;
+#if defined(SO_PEERCRED)
+ /* Linux */
len = sizeof client->ucred;
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED,
&client->ucred, &len) < 0)
goto err_source;
+#elif defined(LOCAL_PEERCRED)
+ /* FreeBSD */
+ len = sizeof client->xucred;
+ if (getsockopt(fd, SOL_LOCAL, LOCAL_PEERCRED,
+ &client->xucred, &len) < 0 ||
+ client->xucred.cr_version != XUCRED_VERSION)
+ goto err_source;
+#endif
client->connection = wl_connection_create(fd);
if (client->connection == NULL)
@@ -586,12 +619,28 @@ WL_EXPORT void
wl_client_get_credentials(struct wl_client *client,
pid_t *pid, uid_t *uid, gid_t *gid)
{
+#ifdef HAVE_SYS_UCRED_H
+ /* DragonFly or FreeBSD */
if (pid)
+#if defined(__FreeBSD__) && __FreeBSD_version >= 1300030
+ /* Since https://cgit.freebsd.org/src/commit/?id=c5afec6e895a */
+ *pid = client->xucred.cr_pid;
+#else
+ *pid = 0;
+#endif
+ if (uid)
+ *uid = client->xucred.cr_uid;
+ if (gid)
+ *gid = client->xucred.cr_gid;
+#else
+ /* Linux */
+ if (pid)
*pid = client->ucred.pid;
if (uid)
*uid = client->ucred.uid;
if (gid)
*gid = client->ucred.gid;
+#endif
}
/** Get the file descriptor for the client

View File

@ -1,147 +0,0 @@
--- src/wayland-shm.c.orig 2020-02-11 23:46:03 UTC
+++ src/wayland-shm.c
@@ -32,6 +32,8 @@
#include "config.h"
+#include "../config.h"
+
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
@@ -64,6 +66,9 @@ struct wl_shm_pool {
int32_t size;
int32_t new_size;
bool sigbus_is_impossible;
+#ifdef HAVE_SYS_UCRED_H
+ int fd;
+#endif
};
struct wl_shm_buffer {
@@ -81,15 +86,24 @@ struct wl_shm_sigbus_data {
int fallback_mapping_used;
};
+static void *mremap_compat_maymove(void *, size_t, size_t, int, int, int);
+
static void
shm_pool_finish_resize(struct wl_shm_pool *pool)
{
void *data;
+ int fd = -1;
if (pool->size == pool->new_size)
return;
- data = mremap(pool->data, pool->size, pool->new_size, MREMAP_MAYMOVE);
+#ifdef HAVE_SYS_UCRED_H
+ fd = pool->fd;
+#endif
+
+ data = mremap_compat_maymove(pool->data, pool->size, pool->new_size,
+ PROT_READ | PROT_WRITE, MAP_SHARED, fd);
+
if (data == MAP_FAILED) {
wl_resource_post_error(pool->resource,
WL_SHM_ERROR_INVALID_FD,
@@ -115,6 +129,10 @@ shm_pool_unref(struct wl_shm_pool *pool, bool external
if (pool->internal_refcount + pool->external_refcount)
return;
+#ifdef HAVE_SYS_UCRED_H
+ close(pool->fd);
+#endif
+
munmap(pool->data, pool->size);
free(pool);
}
@@ -228,6 +246,73 @@ shm_pool_destroy(struct wl_client *client, struct wl_r
wl_resource_destroy(resource);
}
+#ifdef HAVE_MREMAP
+static void *
+mremap_compat_maymove(void *old_address, size_t old_size, size_t new_size,
+ int old_prot, int old_flags, int old_fd)
+{
+ return mremap(old_address, old_size, new_size, MREMAP_MAYMOVE);
+}
+#else
+static void *
+mremap_compat_maymove(void *old_address, size_t old_size, size_t new_size,
+ int old_prot, int old_flags, int old_fd)
+{
+ /* FreeBSD doesn't support mremap() yet, so we have to emulate it.
+ * This assumes MREMAP_MAYMOVE is the only flag in use. */
+ if (new_size == old_size) {
+ return old_address;
+ } else if (new_size < old_size) {
+ /* Shrinking: munmap() the spare region. */
+ munmap(old_address + old_size, new_size - old_size);
+ return old_address;
+ } else {
+ void *ret;
+
+ /* Growing. Try and mmap() the extra region at the end of
+ * our existing allocation. If that gets mapped in the
+ * wrong place, fall back to mmap()ing an entirely new
+ * region of new_size and copying the data across. */
+ ret = mmap(old_address + old_size, new_size - old_size,
+ old_prot, old_flags, old_fd, 0);
+
+/* FIXME TODO: msync() before munmap()? */
+ if (ret == MAP_FAILED) {
+ /* Total failure! */
+ return ret;
+ } else if (ret == old_address + old_size) {
+ /* Success. */
+ return old_address;
+ } else if (ret != old_address + old_size) {
+ /* Partial failure. Fall back to mapping an
+ * entirely new region. Unmap the region we
+ * just mapped first. */
+ munmap(ret, new_size - old_size);
+
+ /* Map an entirely new region. */
+ ret = mmap(NULL, new_size,
+ old_prot, old_flags, old_fd, 0);
+ if (ret == MAP_FAILED) {
+ /* Total failure! */
+ return ret;
+ }
+
+ /* Copy the old data across. Implicit assumption
+ * that the old and new regions don't overlap. */
+ memcpy(ret, old_address, old_size);
+
+ /* Unmap the old region. */
+ munmap(old_address, old_size);
+
+ return ret;
+ }
+ }
+
+ /* Unreachable. */
+ return MAP_FAILED;
+}
+#endif
+
static void
shm_pool_resize(struct wl_client *client, struct wl_resource *resource,
int32_t size)
@@ -300,7 +385,14 @@ shm_create_pool(struct wl_client *client, struct wl_re
strerror(errno));
goto err_free;
}
+
+#ifdef HAVE_SYS_UCRED_H
+ /* We need to keep the FD around on FreeBSD so we can implement
+ * mremap(). See: mremap_compat_maymove(). */
+ pool->fd = fd;
+#else
close(fd);
+#endif
pool->resource =
wl_resource_create(client, &wl_shm_pool_interface, 1, id);

View File

@ -1,19 +0,0 @@
--- tests/client-test.c.orig 2015-07-06 19:38:51 UTC
+++ tests/client-test.c
@@ -34,6 +34,7 @@
#include <sys/types.h>
#include <sys/stat.h>
+#include "wayland-os.h"
#include "wayland-private.h"
#include "wayland-server.h"
#include "test-runner.h"
@@ -59,7 +60,7 @@ TEST(client_destroy_listener)
struct client_destroy_listener a, b;
int s[2];
- assert(socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, s) == 0);
+ assert(wl_os_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, s) == 0);
display = wl_display_create();
assert(display);
client = wl_client_create(display, s[0]);

View File

@ -1,29 +0,0 @@
--- tests/connection-test.c.orig 2017-02-07 22:59:06 UTC
+++ tests/connection-test.c
@@ -37,6 +37,7 @@
#include <sys/stat.h>
#include <poll.h>
+#include "wayland-os.h"
#include "wayland-private.h"
#include "test-runner.h"
#include "test-compositor.h"
@@ -48,7 +49,7 @@ setup(int *s)
{
struct wl_connection *connection;
- assert(socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, s) == 0);
+ assert(wl_os_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, s) == 0);
connection = wl_connection_create(s[0]);
assert(connection);
@@ -181,8 +182,7 @@ struct marshal_data {
static void
setup_marshal_data(struct marshal_data *data)
{
- assert(socketpair(AF_UNIX,
- SOCK_STREAM | SOCK_CLOEXEC, 0, data->s) == 0);
+ assert(wl_os_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, data->s) == 0);
data->read_connection = wl_connection_create(data->s[0]);
assert(data->read_connection);
data->write_connection = wl_connection_create(data->s[1]);

View File

@ -1,44 +0,0 @@
--- tests/event-loop-test.c.orig 2020-02-11 23:46:03 UTC
+++ tests/event-loop-test.c
@@ -168,10 +168,10 @@ TEST(event_loop_signal)
signal_callback, &got_it);
assert(source);
- wl_event_loop_dispatch(loop, 0);
+ assert(wl_event_loop_dispatch(loop, 0) == 0);
assert(!got_it);
- kill(getpid(), SIGUSR1);
- wl_event_loop_dispatch(loop, 0);
+ assert(kill(getpid(), SIGUSR1) == 0);
+ assert(wl_event_loop_dispatch(loop, 0) == 0);
assert(got_it == 1);
wl_event_source_remove(source);
@@ -235,11 +235,11 @@ TEST(event_loop_timer)
source1 = wl_event_loop_add_timer(loop, timer_callback, &got_it);
assert(source1);
- wl_event_source_timer_update(source1, 20);
+ assert(wl_event_source_timer_update(source1, 20) == 0);
source2 = wl_event_loop_add_timer(loop, timer_callback, &got_it);
assert(source2);
- wl_event_source_timer_update(source2, 100);
+ assert(wl_event_source_timer_update(source2, 100) == 0);
/* Check that the timer marked for 20 msec from now fires within 30
* msec, and that the timer marked for 100 msec is expected to fire
@@ -248,11 +248,11 @@ TEST(event_loop_timer)
wl_event_loop_dispatch(loop, 0);
assert(got_it == 0);
- wl_event_loop_dispatch(loop, 30);
+ assert(wl_event_loop_dispatch(loop, 30) == 0);
assert(got_it == 1);
wl_event_loop_dispatch(loop, 0);
assert(got_it == 1);
- wl_event_loop_dispatch(loop, 90);
+ assert(wl_event_loop_dispatch(loop, 90) == 0);
assert(got_it == 2);
wl_event_source_remove(source1);

View File

@ -1,122 +0,0 @@
--- tests/os-wrappers-test.c.orig 2017-08-08 18:20:52 UTC
+++ tests/os-wrappers-test.c
@@ -26,6 +26,8 @@
#define _GNU_SOURCE
+#include "../config.h"
+
#include <stdlib.h>
#include <stdint.h>
#include <assert.h>
@@ -73,15 +75,22 @@ socket(int domain, int type, int protocol)
{
wrapped_calls_socket++;
+#ifdef SOCK_CLOEXEC
if (fall_back && (type & SOCK_CLOEXEC)) {
errno = EINVAL;
return -1;
}
+#endif
return real_socket(domain, type, protocol);
}
__attribute__ ((visibility("default"))) int
+#ifdef fcntl
+/* Work around #define fcntl in epoll-shim */
+#define old_fcntl fcntl
+#undef fcntl
+#endif
fcntl(int fd, int cmd, ...)
{
va_list ap;
@@ -89,10 +98,12 @@ fcntl(int fd, int cmd, ...)
wrapped_calls_fcntl++;
+#ifdef F_DUPFD_CLOEXEC
if (fall_back && (cmd == F_DUPFD_CLOEXEC)) {
errno = EINVAL;
return -1;
}
+#endif
va_start(ap, cmd);
arg = va_arg(ap, void*);
@@ -100,16 +111,21 @@ fcntl(int fd, int cmd, ...)
return real_fcntl(fd, cmd, arg);
}
+#ifdef old_fcntl
+#define fcntl old_fcntl
+#endif
__attribute__ ((visibility("default"))) ssize_t
recvmsg(int sockfd, struct msghdr *msg, int flags)
{
wrapped_calls_recvmsg++;
+#ifdef MSG_CMSG_CLOEXEC
if (fall_back && (flags & MSG_CMSG_CLOEXEC)) {
errno = EINVAL;
return -1;
}
+#endif
return real_recvmsg(sockfd, msg, flags);
}
@@ -156,12 +172,14 @@ TEST(os_wrappers_socket_cloexec)
do_os_wrappers_socket_cloexec(0);
}
+#ifdef SOCK_CLOEXEC
TEST(os_wrappers_socket_cloexec_fallback)
{
/* forced fallback */
init_fallbacks(1);
do_os_wrappers_socket_cloexec(1);
}
+#endif
static void
do_os_wrappers_dupfd_cloexec(int n)
@@ -195,11 +213,13 @@ TEST(os_wrappers_dupfd_cloexec)
do_os_wrappers_dupfd_cloexec(0);
}
+#ifdef F_DUPFD_CLOEXEC
TEST(os_wrappers_dupfd_cloexec_fallback)
{
init_fallbacks(1);
do_os_wrappers_dupfd_cloexec(3);
}
+#endif
struct marshal_data {
struct wl_connection *read_connection;
@@ -218,8 +238,7 @@ struct marshal_data {
static void
setup_marshal_data(struct marshal_data *data)
{
- assert(socketpair(AF_UNIX,
- SOCK_STREAM | SOCK_CLOEXEC, 0, data->s) == 0);
+ assert(wl_os_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, data->s) == 0);
data->read_connection = wl_connection_create(data->s[0]);
assert(data->read_connection);
@@ -328,11 +347,13 @@ TEST(os_wrappers_recvmsg_cloexec)
do_os_wrappers_recvmsg_cloexec(0);
}
+#ifdef MSG_CMSG_CLOEXEC
TEST(os_wrappers_recvmsg_cloexec_fallback)
{
init_fallbacks(1);
do_os_wrappers_recvmsg_cloexec(1);
}
+#endif
static void
do_os_wrappers_epoll_create_cloexec(int n)

View File

@ -1,21 +0,0 @@
--- tests/queue-test.c.orig 2016-10-22 16:23:10 UTC
+++ tests/queue-test.c
@@ -23,6 +23,8 @@
* SOFTWARE.
*/
+#include "../config.h"
+
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
@@ -31,6 +33,9 @@
#include <sys/types.h>
#include <sys/wait.h>
#include <assert.h>
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
#include "wayland-client.h"
#include "wayland-server.h"

View File

@ -1,48 +0,0 @@
--- tests/test-helpers.c.orig 2020-02-11 23:46:03 UTC
+++ tests/test-helpers.c
@@ -25,6 +25,8 @@
#include "config.h"
+#include "../config.h"
+
#include <assert.h>
#include <errno.h>
#include <dirent.h>
@@ -41,6 +43,16 @@
#include "test-runner.h"
+#ifdef __FreeBSD__
+/* FreeBSD uses fdescfs (which must be mounted using:
+ * mount -t fdescfs fdescfs /dev/fd
+ * before the test suite can be run). */
+#define OPEN_FDS_DIR "/dev/fd"
+#else
+/* Linux. */
+#define OPEN_FDS_DIR "/proc/self/fd"
+#endif
+
int
count_open_fds(void)
{
@@ -48,8 +60,8 @@ count_open_fds(void)
struct dirent *ent;
int count = 0;
- dir = opendir("/proc/self/fd");
- assert(dir && "opening /proc/self/fd failed.");
+ dir = opendir(OPEN_FDS_DIR);
+ assert(dir && "opening " OPEN_FDS_DIR " failed.");
errno = 0;
while ((ent = readdir(dir))) {
@@ -58,7 +70,7 @@ count_open_fds(void)
continue;
count++;
}
- assert(errno == 0 && "reading /proc/self/fd failed.");
+ assert(errno == 0 && "reading " OPEN_FDS_DIR " failed.");
closedir(dir);

View File

@ -1,128 +0,0 @@
--- tests/test-runner.c.orig 2020-02-11 23:46:03 UTC
+++ tests/test-runner.c
@@ -25,6 +25,8 @@
#define _GNU_SOURCE
+#include "../config.h"
+
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
@@ -37,13 +39,23 @@
#include <errno.h>
#include <limits.h>
#include <sys/ptrace.h>
+#ifdef HAVE_SYS_PRCTL_H
#include <sys/prctl.h>
+#endif
#ifndef PR_SET_PTRACER
# define PR_SET_PTRACER 0x59616d61
#endif
+#include <signal.h>
#include "test-runner.h"
+#ifdef __FreeBSD__
+/* XXX review ptrace() usage */
+#define PTRACE_ATTACH PT_ATTACH
+#define PTRACE_CONT PT_CONTINUE
+#define PTRACE_DETACH PT_DETACH
+#endif
+
/* when set to 1, check if tests are not leaking opened files.
* It is turned on by default. It can be turned off by
* WAYLAND_TEST_NO_LEAK_CHECK environment variable. */
@@ -51,7 +63,7 @@ int fd_leak_check_enabled;
/* when this var is set to 0, every call to test_set_timeout() is
* suppressed - handy when debugging the test. Can be set by
- * WAYLAND_TEST_NO_TIMEOUTS environment variable. */
+ * WAYLAND_TESTS_NO_TIMEOUTS evnironment var */
static int timeouts_enabled = 1;
/* set to one if the output goes to the terminal */
@@ -239,6 +251,8 @@ is_debugger_attached(void)
return 0;
}
+
+// xxx start here
pid = fork();
if (pid == -1) {
perror("fork");
@@ -259,13 +273,14 @@ is_debugger_attached(void)
_exit(1);
if (!waitpid(-1, NULL, 0))
_exit(1);
- ptrace(PTRACE_CONT, NULL, NULL);
+ ptrace(PTRACE_CONT, ppid, NULL, NULL);
ptrace(PTRACE_DETACH, ppid, NULL, NULL);
_exit(0);
} else {
close(pipefd[0]);
/* Enable child to ptrace the parent process */
+#if defined(HAVE_PRCTL)
rc = prctl(PR_SET_PTRACER, pid);
if (rc != 0 && errno != EINVAL) {
/* An error prevents us from telling if a debugger is attached.
@@ -275,7 +290,9 @@ is_debugger_attached(void)
*/
perror("prctl");
write(pipefd[1], "-", 1);
- } else {
+ } else
+#endif
+ {
/* Signal to client that parent is ready by passing '+' */
write(pipefd[1], "+", 1);
}
@@ -293,7 +310,11 @@ int main(int argc, char *argv[])
const struct test *t;
pid_t pid;
int total, pass;
+#ifdef HAVE_WAITID
siginfo_t info;
+#else
+ int status;
+#endif
if (isatty(fileno(stderr)))
is_atty = 1;
@@ -336,7 +357,8 @@ int main(int argc, char *argv[])
if (pid == 0)
run_test(t); /* never returns */
- if (waitid(P_PID, pid, &info, WEXITED)) {
+#ifdef HAVE_WAITID
+ if (waitid(P_PID, 0, &info, WEXITED)) {
stderr_set_color(RED);
fprintf(stderr, "waitid failed: %s\n",
strerror(errno));
@@ -368,6 +390,25 @@ int main(int argc, char *argv[])
break;
}
+#else
+ if (waitpid(-1, &status, 0) == -1) {
+ fprintf(stderr, "waitpid failed: %s\n",
+ strerror(errno));
+ abort();
+ }
+
+ fprintf(stderr, "test \"%s\":\t", t->name);
+ if (WIFEXITED(status)) {
+ fprintf(stderr, "exit status %d", WEXITSTATUS(status));
+ if (WEXITSTATUS(status) == EXIT_SUCCESS)
+ success = 1;
+ } else if (WIFSIGNALED(status)) {
+ fprintf(stderr, "signal %d", WTERMSIG(status));
+ }
+#endif
+
+ if (t->must_fail)
+ success = !success;
if (success) {
pass++;

View File

@ -13,16 +13,16 @@ include/wayland-util.h
include/wayland-version.h
lib/libwayland-client.so
lib/libwayland-client.so.0
lib/libwayland-client.so.0.3.0
lib/libwayland-client.so.0.20.0
lib/libwayland-cursor.so
lib/libwayland-cursor.so.0
lib/libwayland-cursor.so.0.0.0
lib/libwayland-cursor.so.0.20.0
lib/libwayland-egl.so
lib/libwayland-egl.so.1
lib/libwayland-egl.so.1.0.0
lib/libwayland-egl.so.1.20.0
lib/libwayland-server.so
lib/libwayland-server.so.0
lib/libwayland-server.so.0.1.0
lib/libwayland-server.so.0.20.0
libdata/pkgconfig/wayland-client.pc
libdata/pkgconfig/wayland-cursor.pc
libdata/pkgconfig/wayland-egl-backend.pc

View File

@ -0,0 +1,25 @@
ld: warning: undefined symbol: wl_proxy_marshal_flags
>>> referenced by Unified_cpp_gfx_gl0.cpp
>>> objdir/gfx/gl/Unified_cpp_gfx_gl0.o:(mozilla::gl::DeleteWaylandGLSurface(void*))
>>> referenced by Unified_cpp_gfx_gl0.cpp
>>> objdir/gfx/gl/Unified_cpp_gfx_gl0.o:(mozilla::gl::GLContextEGL::CreateWaylandBufferSurface(mozilla::gl::EglDisplay&, void*, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits>&))
>>> referenced by Unified_cpp_gfx_layers1.cpp
>>> objdir/gfx/layers/Unified_cpp_gfx_layers1.o:(mozilla::layers::NativeLayerRootWayland::CommitToScreen(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&))
>>> referenced 84 more times
--- widget/gtk/mozwayland/mozwayland.c.orig 2021-09-27 22:47:59 UTC
+++ widget/gtk/mozwayland/mozwayland.c
@@ -40,6 +40,13 @@ MOZ_EXPORT void wl_event_queue_destroy(struct wl_event
MOZ_EXPORT void wl_proxy_marshal(struct wl_proxy* p, uint32_t opcode, ...) {}
+MOZ_EXPORT struct wl_proxy* wl_proxy_marshal_flags(
+ struct wl_proxy* proxy, uint32_t opcode,
+ const struct wl_interface* interface, uint32_t version, uint32_t flags,
+ ...) {
+ return NULL;
+}
+
MOZ_EXPORT void wl_proxy_marshal_array(struct wl_proxy* p, uint32_t opcode,
union wl_argument* args) {}

View File

@ -0,0 +1,25 @@
ld: warning: undefined symbol: wl_proxy_marshal_flags
>>> referenced by Unified_cpp_gfx_gl0.cpp
>>> objdir/gfx/gl/Unified_cpp_gfx_gl0.o:(mozilla::gl::DeleteWaylandGLSurface(void*))
>>> referenced by Unified_cpp_gfx_gl0.cpp
>>> objdir/gfx/gl/Unified_cpp_gfx_gl0.o:(mozilla::gl::GLContextEGL::CreateWaylandBufferSurface(mozilla::gl::EglDisplay&, void*, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits>&))
>>> referenced by Unified_cpp_gfx_layers1.cpp
>>> objdir/gfx/layers/Unified_cpp_gfx_layers1.o:(mozilla::layers::NativeLayerRootWayland::CommitToScreen(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&))
>>> referenced 84 more times
--- widget/gtk/mozwayland/mozwayland.c.orig 2021-09-27 22:47:59 UTC
+++ widget/gtk/mozwayland/mozwayland.c
@@ -40,6 +40,13 @@ MOZ_EXPORT void wl_event_queue_destroy(struct wl_event
MOZ_EXPORT void wl_proxy_marshal(struct wl_proxy* p, uint32_t opcode, ...) {}
+MOZ_EXPORT struct wl_proxy* wl_proxy_marshal_flags(
+ struct wl_proxy* proxy, uint32_t opcode,
+ const struct wl_interface* interface, uint32_t version, uint32_t flags,
+ ...) {
+ return NULL;
+}
+
MOZ_EXPORT void wl_proxy_marshal_array(struct wl_proxy* p, uint32_t opcode,
union wl_argument* args) {}

View File

@ -0,0 +1,25 @@
ld: warning: undefined symbol: wl_proxy_marshal_flags
>>> referenced by Unified_cpp_gfx_gl0.cpp
>>> objdir/gfx/gl/Unified_cpp_gfx_gl0.o:(mozilla::gl::DeleteWaylandGLSurface(void*))
>>> referenced by Unified_cpp_gfx_gl0.cpp
>>> objdir/gfx/gl/Unified_cpp_gfx_gl0.o:(mozilla::gl::GLContextEGL::CreateWaylandBufferSurface(mozilla::gl::EglDisplay&, void*, mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits>&))
>>> referenced by Unified_cpp_gfx_layers1.cpp
>>> objdir/gfx/layers/Unified_cpp_gfx_layers1.o:(mozilla::layers::NativeLayerRootWayland::CommitToScreen(mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&))
>>> referenced 84 more times
--- widget/gtk/mozwayland/mozwayland.c.orig 2021-09-27 22:47:59 UTC
+++ widget/gtk/mozwayland/mozwayland.c
@@ -40,6 +40,13 @@ MOZ_EXPORT void wl_event_queue_destroy(struct wl_event
MOZ_EXPORT void wl_proxy_marshal(struct wl_proxy* p, uint32_t opcode, ...) {}
+MOZ_EXPORT struct wl_proxy* wl_proxy_marshal_flags(
+ struct wl_proxy* proxy, uint32_t opcode,
+ const struct wl_interface* interface, uint32_t version, uint32_t flags,
+ ...) {
+ return NULL;
+}
+
MOZ_EXPORT void wl_proxy_marshal_array(struct wl_proxy* p, uint32_t opcode,
union wl_argument* args) {}