x11-base/xorg-server: Version bump to 1.20.4

Closes: https://bugs.gentoo.org/677752
Signed-off-by: Matt Turner <mattst88@gentoo.org>
This commit is contained in:
Matt Turner
2019-02-27 17:18:22 -08:00
parent f4d9d7a527
commit 4b03aab970
5 changed files with 553 additions and 0 deletions

View File

@@ -1 +1,2 @@
DIST xorg-server-1.20.3.tar.bz2 6205000 BLAKE2B 9fc8acf1812d0aa4800941dd1846060f91edf1e7ebc92b35e8c2028266d88d3ab3ba14e95f535e5ee41941f8e20769ee75723ba609f5653d4892f97bc5cf91c4 SHA512 ee44554f86df4297f54c5871fe7a18954eeef4338775a25f36d6577b279c4775f61128da71b86cfaeadcc080838d6749dede138d4db178866579da2056543fba
DIST xorg-server-1.20.4.tar.bz2 6123780 BLAKE2B 224dda54f433315f6614cbee5bc54db91d9d9e190c06ac7f26e334b80b9d4a612ff4b2a4f10f50a6f928ecdbea40172d5578289fbf88411f006bcd473253b05d SHA512 f1c92ef6d7613e0636973d3395b48dfdad42230847ab1c8b1cea84647a968f649f9aba97bdb01c10ee8351cbe954d4e6ca4a0fc84bb8fa662d49c8ba2aee00a8

View File

@@ -0,0 +1,174 @@
From 19f6cb570becbc4e355807199c6e251fc7935132 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 19 Sep 2018 13:28:06 -0700
Subject: [PATCH xserver] shm: Pick the shm dir at run time, not build time.
Prodding the builder's filesystem for tmp dirs doesn't necessarily
tell you anything about what the actual host's filesystem is going to
look like, so we should just try the dirs at runtime.
Signed-off-by: Eric Anholt <eric@anholt.net>
---
Xext/shm.c | 48 +++++++++++++++++++++++++----------------
configure.ac | 43 ------------------------------------
include/dix-config.h.in | 3 ---
include/meson.build | 5 -----
4 files changed, 29 insertions(+), 70 deletions(-)
diff --git a/Xext/shm.c b/Xext/shm.c
index ed43b9202..2739a59e7 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -1194,36 +1194,46 @@ ProcShmAttachFd(ClientPtr client)
static int
shm_tmpfile(void)
{
-#ifdef SHMDIR
+ const char *shmdirs[] = {
+ "/run/shm",
+ "/var/tmp",
+ "/tmp",
+ };
int fd;
- char template[] = SHMDIR "/shmfd-XXXXXX";
+
#ifdef O_TMPFILE
- fd = open(SHMDIR, O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666);
- if (fd >= 0) {
- DebugF ("Using O_TMPFILE\n");
- return fd;
+ for (int i = 0; i < ARRAY_SIZE(shmdirs); i++) {
+ fd = open(shmdirs[i], O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666);
+ if (fd >= 0) {
+ DebugF ("Using O_TMPFILE\n");
+ return fd;
+ }
}
ErrorF ("Not using O_TMPFILE\n");
#endif
+
+ for (int i = 0; i < ARRAY_SIZE(shmdirs); i++) {
+ char template[PATH_MAX];
+ snprintf(template, ARRAY_SIZE(template), "%s/shmfd-XXXXXX", shmdirs[i]);
#ifdef HAVE_MKOSTEMP
- fd = mkostemp(template, O_CLOEXEC);
+ fd = mkostemp(template, O_CLOEXEC);
#else
- fd = mkstemp(template);
+ fd = mkstemp(template);
#endif
- if (fd < 0)
- return -1;
- unlink(template);
+ if (fd < 0)
+ continue;
+ unlink(template);
#ifndef HAVE_MKOSTEMP
- int flags = fcntl(fd, F_GETFD);
- if (flags != -1) {
- flags |= FD_CLOEXEC;
- (void) fcntl(fd, F_SETFD, &flags);
- }
+ int flags = fcntl(fd, F_GETFD);
+ if (flags != -1) {
+ flags |= FD_CLOEXEC;
+ (void) fcntl(fd, F_SETFD, &flags);
+ }
#endif
- return fd;
-#else
+ return fd;
+ }
+
return -1;
-#endif
}
static int
diff --git a/configure.ac b/configure.ac
index 359b62cb5..57a233102 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1115,49 +1115,6 @@ case "$DRI2,$HAVE_DRI2PROTO" in
esac
AM_CONDITIONAL(DRI2, test "x$DRI2" = xyes)
-dnl
-dnl Locate a suitable tmp file system for creating shared memeory files
-dnl
-
-AC_ARG_WITH(shared-memory-dir, AS_HELP_STRING([--with-shared-memory-dir=PATH], [Path to directory in a world-writable temporary directory for anonymous shared memory (default: auto)]),
-[],
-[with_shared_memory_dir=yes])
-
-shmdirs="/run/shm /var/tmp /tmp"
-
-case x"$with_shared_memory_dir" in
-xyes)
- for dir in $shmdirs; do
- case x"$with_shared_memory_dir" in
- xyes)
- echo Checking temp dir "$dir"
- if test -d "$dir"; then
- with_shared_memory_dir="$dir"
- fi
- ;;
- esac
- done
- ;;
-x/*)
- ;;
-xno)
- ;;
-*)
- AC_MSG_ERROR([Invalid directory specified for --with-shared-memory-dir: $with_shared_memory_dir])
- ;;
-esac
-
-case x"$with_shared_memory_dir" in
-xyes)
- AC_MSG_ERROR([No directory found for shared memory temp files.])
- ;;
-xno)
- ;;
-*)
- AC_DEFINE_UNQUOTED(SHMDIR, ["$with_shared_memory_dir"], [Directory for shared memory temp files])
- ;;
-esac
-
AC_ARG_ENABLE(xtrans-send-fds, AS_HELP_STRING([--disable-xtrans-send-fds], [Use Xtrans support for fd passing (default: auto)]), [XTRANS_SEND_FDS=$enableval], [XTRANS_SEND_FDS=auto])
case "x$XTRANS_SEND_FDS" in
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index f8df86608..3bd22b8bb 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -452,9 +452,6 @@
/* Wrap SIGBUS to catch MIT-SHM faults */
#undef BUSFAULT
-/* Directory for shared memory temp files */
-#undef SHMDIR
-
/* Don't let Xdefs.h define 'pointer' */
#define _XTYPEDEF_POINTER 1
diff --git a/include/meson.build b/include/meson.build
index 4a0c12f5a..04c41e999 100644
--- a/include/meson.build
+++ b/include/meson.build
@@ -91,11 +91,6 @@ conf_data.set('SYSTEMD_LOGIND', build_systemd_logind)
conf_data.set('NEED_DBUS', build_systemd_logind or build_hal)
conf_data.set('CONFIG_WSCONS', host_machine.system() == 'openbsd')
-# XXX: SHMDIR is weird in autoconf, probing the build system for
-# various tmp directories. Could we replace it with C code at runtime
-# that just uses whatever directory works?
-conf_data.set_quoted('SHMDIR', '/tmp')
-
conf_data.set('HAVE_XSHMFENCE', xshmfence_dep.found())
conf_data.set('WITH_LIBDRM', libdrm_dep.found())
conf_data.set('GLAMOR_HAS_EGL_QUERY_DMABUF',
--
2.19.2

View File

@@ -0,0 +1,89 @@
From f6753c117ef0f83499d5e2d6dda226fec9ddf803 Mon Sep 17 00:00:00 2001
From: Alexander Volkov <a.volkov@rusbitech.ru>
Date: Mon, 11 Feb 2019 18:54:10 +0300
Subject: [PATCH xserver] shm: Use memfd_create when possible
It doesn't require shared memory dir and thus allows
to avoid cases when this dir is detected incorrectly,
as in https://bugreports.qt.io/browse/QTBUG-71440
Signed-off-by: Alexander Volkov <a.volkov@rusbitech.ru>
---
Xext/shm.c | 12 ++++++++++++
configure.ac | 2 +-
include/dix-config.h.in | 3 +++
include/meson.build | 1 +
4 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/Xext/shm.c b/Xext/shm.c
index 2739a59e7..506fd4df1 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -35,6 +35,9 @@ in this Software without prior written authorization from The Open Group.
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
+#ifdef HAVE_MEMFD_CREATE
+#include <sys/mman.h>
+#endif
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
@@ -1201,6 +1204,15 @@ shm_tmpfile(void)
};
int fd;
+#ifdef HAVE_MEMFD_CREATE
+ fd = memfd_create("xorg", MFD_CLOEXEC|MFD_ALLOW_SEALING);
+ if (fd != -1) {
+ fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK);
+ DebugF ("Using memfd_create\n");
+ return fd;
+ }
+#endif
+
#ifdef O_TMPFILE
for (int i = 0; i < ARRAY_SIZE(shmdirs); i++) {
fd = open(shmdirs[i], O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666);
diff --git a/configure.ac b/configure.ac
index 0ca96aeb8..79ff7fa64 100644
--- a/configure.ac
+++ b/configure.ac
@@ -159,7 +159,7 @@ dnl Checks for library functions.
AC_CHECK_FUNCS([backtrace geteuid getuid issetugid getresuid \
getdtablesize getifaddrs getpeereid getpeerucred getprogname getzoneid \
mmap posix_fallocate seteuid shmctl64 strncasecmp vasprintf vsnprintf \
- walkcontext setitimer poll epoll_create1 mkostemp])
+ walkcontext setitimer poll epoll_create1 mkostemp memfd_create])
AC_CONFIG_LIBOBJ_DIR([os])
AC_REPLACE_FUNCS([reallocarray strcasecmp strcasestr strlcat strlcpy strndup\
timingsafe_memcmp])
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 855b3d50c..9eb1a924e 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -128,6 +128,9 @@
/* Define to 1 if you have the <linux/fb.h> header file. */
#undef HAVE_LINUX_FB_H
+/* Define to 1 if you have the `memfd_create' function. */
+#undef HAVE_MEMFD_CREATE
+
/* Define to 1 if you have the `mkostemp' function. */
#undef HAVE_MKOSTEMP
diff --git a/include/meson.build b/include/meson.build
index 04c41e999..bbd5a6690 100644
--- a/include/meson.build
+++ b/include/meson.build
@@ -141,6 +141,7 @@ conf_data.set('HAVE_GETPEEREID', cc.has_function('getpeereid'))
conf_data.set('HAVE_GETPEERUCRED', cc.has_function('getpeerucred'))
conf_data.set('HAVE_GETPROGNAME', cc.has_function('getprogname'))
conf_data.set('HAVE_GETZONEID', cc.has_function('getzoneid'))
+conf_data.set('HAVE_MEMFD_CREATE', cc.has_function('memfd_create'))
conf_data.set('HAVE_MKOSTEMP', cc.has_function('mkostemp'))
conf_data.set('HAVE_MMAP', cc.has_function('mmap'))
conf_data.set('HAVE_POLL', cc.has_function('poll'))
--
2.19.2

View File

@@ -0,0 +1,72 @@
From 804a9b4f57107fa2d0ed1ae0becda5bebaffe6e1 Mon Sep 17 00:00:00 2001
From: Eric Anholt <eric@anholt.net>
Date: Wed, 19 Sep 2018 13:20:12 -0700
Subject: [PATCH xserver] shm: reindent shm_tmpfile to follow our standards.
Signed-off-by: Eric Anholt <eric@anholt.net>
---
Xext/shm.c | 40 ++++++++++++++++++++--------------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/Xext/shm.c b/Xext/shm.c
index 589ed0b4d..ed43b9202 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -1195,34 +1195,34 @@ static int
shm_tmpfile(void)
{
#ifdef SHMDIR
- int fd;
- char template[] = SHMDIR "/shmfd-XXXXXX";
+ int fd;
+ char template[] = SHMDIR "/shmfd-XXXXXX";
#ifdef O_TMPFILE
- fd = open(SHMDIR, O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666);
- if (fd >= 0) {
- DebugF ("Using O_TMPFILE\n");
- return fd;
- }
- ErrorF ("Not using O_TMPFILE\n");
+ fd = open(SHMDIR, O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666);
+ if (fd >= 0) {
+ DebugF ("Using O_TMPFILE\n");
+ return fd;
+ }
+ ErrorF ("Not using O_TMPFILE\n");
#endif
#ifdef HAVE_MKOSTEMP
- fd = mkostemp(template, O_CLOEXEC);
+ fd = mkostemp(template, O_CLOEXEC);
#else
- fd = mkstemp(template);
+ fd = mkstemp(template);
#endif
- if (fd < 0)
- return -1;
- unlink(template);
+ if (fd < 0)
+ return -1;
+ unlink(template);
#ifndef HAVE_MKOSTEMP
- int flags = fcntl(fd, F_GETFD);
- if (flags != -1) {
- flags |= FD_CLOEXEC;
- (void) fcntl(fd, F_SETFD, &flags);
- }
+ int flags = fcntl(fd, F_GETFD);
+ if (flags != -1) {
+ flags |= FD_CLOEXEC;
+ (void) fcntl(fd, F_SETFD, &flags);
+ }
#endif
- return fd;
+ return fd;
#else
- return -1;
+ return -1;
#endif
}
--
2.19.2

View File

@@ -0,0 +1,217 @@
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
XORG_DOC=doc
XORG_EAUTORECONF="yes"
inherit xorg-3 multilib flag-o-matic
EGIT_REPO_URI="https://anongit.freedesktop.org/git/xorg/xserver.git"
DESCRIPTION="X.Org X servers"
SLOT="0/${PV}"
if [[ ${PV} != 9999* ]]; then
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux"
fi
IUSE_SERVERS="dmx kdrive wayland xephyr xnest xorg xvfb"
IUSE="${IUSE_SERVERS} debug +glamor ipv6 libressl minimal selinux +suid systemd +udev unwind xcsecurity"
CDEPEND=">=app-eselect/eselect-opengl-1.3.0
!libressl? ( dev-libs/openssl:0= )
libressl? ( dev-libs/libressl:0= )
>=x11-apps/iceauth-1.0.2
>=x11-apps/rgb-1.0.3
>=x11-apps/xauth-1.0.3
x11-apps/xkbcomp
>=x11-libs/libdrm-2.4.89
>=x11-libs/libpciaccess-0.12.901
>=x11-libs/libXau-1.0.4
>=x11-libs/libXdmcp-1.0.2
>=x11-libs/libXfont2-2.0.1
>=x11-libs/libxkbfile-1.0.4
>=x11-libs/libxshmfence-1.1
>=x11-libs/pixman-0.27.2
>=x11-libs/xtrans-1.3.5
>=x11-misc/xbitmaps-1.0.1
>=x11-misc/xkeyboard-config-2.4.1-r3
dmx? (
x11-libs/libXt
>=x11-libs/libdmx-1.0.99.1
>=x11-libs/libX11-1.1.5
>=x11-libs/libXaw-1.0.4
>=x11-libs/libXext-1.0.99.4
>=x11-libs/libXfixes-5.0
>=x11-libs/libXi-1.2.99.1
>=x11-libs/libXmu-1.0.3
x11-libs/libXrender
>=x11-libs/libXres-1.0.3
>=x11-libs/libXtst-1.0.99.2
)
glamor? (
media-libs/libepoxy[X]
>=media-libs/mesa-18[egl,gbm]
!x11-libs/glamor
)
kdrive? (
>=x11-libs/libXext-1.0.5
x11-libs/libXv
)
xephyr? (
x11-libs/libxcb[xkb]
x11-libs/xcb-util
x11-libs/xcb-util-image
x11-libs/xcb-util-keysyms
x11-libs/xcb-util-renderutil
x11-libs/xcb-util-wm
)
!minimal? (
>=x11-libs/libX11-1.1.5
>=x11-libs/libXext-1.0.5
>=media-libs/mesa-18
)
udev? ( virtual/libudev:= )
unwind? ( sys-libs/libunwind )
wayland? (
>=dev-libs/wayland-1.3.0
media-libs/libepoxy
>=dev-libs/wayland-protocols-1.1
)
>=x11-apps/xinit-1.3.3-r1
systemd? (
sys-apps/dbus
sys-apps/systemd
)"
DEPEND="${CDEPEND}
sys-devel/flex
>=x11-base/xorg-proto-2018.3
dmx? (
doc? (
|| (
www-client/links
www-client/lynx
www-client/w3m
)
)
)"
RDEPEND="${CDEPEND}
selinux? ( sec-policy/selinux-xserver )
!x11-drivers/xf86-video-modesetting
"
PDEPEND="
xorg? ( >=x11-base/xorg-drivers-$(ver_cut 1-2) )"
REQUIRED_USE="!minimal? (
|| ( ${IUSE_SERVERS} )
)
minimal? ( !glamor !wayland )
xephyr? ( kdrive )"
UPSTREAMED_PATCHES=(
"${FILESDIR}"/${P}-shm-reindent-shm_tmpfile-to-follow-our-standards.patch
"${FILESDIR}"/${P}-shm-Pick-the-shm-dir-at-run-time-not-build-time.patch
"${FILESDIR}"/${P}-shm-Use-memfd_create-when-possible.patch
)
PATCHES=(
"${UPSTREAMED_PATCHES[@]}"
"${FILESDIR}"/${PN}-1.12-unloadsubmodule.patch
# needed for new eselect-opengl, bug #541232
"${FILESDIR}"/${PN}-1.18-support-multiple-Files-sections.patch
)
pkg_setup() {
if use wayland && ! use glamor; then
ewarn "glamor is necessary for acceleration under Xwayland."
ewarn "Performance may be unacceptable without it."
fi
# localstatedir is used for the log location; we need to override the default
# from ebuild.sh
# sysconfdir is used for the xorg.conf location; same applies
# NOTE: fop is used for doc generating; and I have no idea if Gentoo
# package it somewhere
XORG_CONFIGURE_OPTIONS=(
$(use_enable ipv6)
$(use_enable debug)
$(use_enable dmx)
$(use_enable glamor)
$(use_enable kdrive)
$(use_enable unwind libunwind)
$(use_enable wayland xwayland)
$(use_enable !minimal record)
$(use_enable !minimal xfree86-utils)
$(use_enable !minimal dri)
$(use_enable !minimal dri2)
$(use_enable !minimal dri3)
$(use_enable !minimal glx)
$(use_enable xcsecurity)
$(use_enable xephyr)
$(use_enable xnest)
$(use_enable xorg)
$(use_enable xvfb)
$(use_enable udev config-udev)
$(use_with doc doxygen)
$(use_with doc xmlto)
$(use_with systemd systemd-daemon)
$(use_enable systemd systemd-logind)
$(usex suid $(use_enable systemd suid-wrapper) '--disable-suid-wrapper')
$(usex suid $(use_enable !systemd install-setuid) '--disable-install-setuid')
--enable-libdrm
--sysconfdir="${EPREFIX}"/etc/X11
--localstatedir="${EPREFIX}"/var
--with-fontrootdir="${EPREFIX}"/usr/share/fonts
--with-xkb-output="${EPREFIX}"/var/lib/xkb
--disable-config-hal
--disable-linux-acpi
--without-dtrace
--without-fop
--with-os-vendor=Gentoo
--with-sha1=libcrypto
)
}
src_install() {
default
server_based_install
if ! use minimal && use xorg; then
# Install xorg.conf.example into docs
dodoc "${S}"/hw/xfree86/xorg.conf.example
fi
newinitd "${FILESDIR}"/xdm-setup.initd-1 xdm-setup
newinitd "${FILESDIR}"/xdm.initd-11 xdm
newconfd "${FILESDIR}"/xdm.confd-4 xdm
# install the @x11-module-rebuild set for Portage
insinto /usr/share/portage/config/sets
newins "${FILESDIR}"/xorg-sets.conf xorg.conf
find "${ED}"/var -type d -empty -delete || die
}
pkg_postinst() {
# sets up libGL and DRI2 symlinks if needed (ie, on a fresh install)
eselect opengl set xorg-x11 --use-old
}
pkg_postrm() {
# Get rid of module dir to ensure opengl-update works properly
if [[ -z ${REPLACED_BY_VERSION} && -e ${EROOT}/usr/$(get_libdir)/xorg/modules ]]; then
rm -rf "${EROOT}"/usr/$(get_libdir)/xorg/modules
fi
}
server_based_install() {
if ! use xorg; then
rm "${ED}"/usr/share/man/man1/Xserver.1x \
"${ED}"/usr/$(get_libdir)/xserver/SecurityPolicy \
"${ED}"/usr/$(get_libdir)/pkgconfig/xorg-server.pc \
"${ED}"/usr/share/man/man1/Xserver.1x
fi
}