diff options
-rw-r--r-- | x11-base/xorg-server/Manifest | 2 | ||||
-rw-r--r-- | x11-base/xorg-server/files/xorg-server-1.20.4-shm-Pick-the-shm-dir-at-run-time-not-build-time.patch | 174 | ||||
-rw-r--r-- | x11-base/xorg-server/files/xorg-server-1.20.4-shm-Use-memfd_create-when-possible.patch | 89 | ||||
-rw-r--r-- | x11-base/xorg-server/files/xorg-server-1.20.4-shm-reindent-shm_tmpfile-to-follow-our-standards.patch | 72 | ||||
-rw-r--r-- | x11-base/xorg-server/xorg-server-1.20.4-r1337.ebuild (renamed from x11-base/xorg-server/xorg-server-1.20.3-r1337.ebuild) | 60 |
5 files changed, 370 insertions, 27 deletions
diff --git a/x11-base/xorg-server/Manifest b/x11-base/xorg-server/Manifest index 4dc15913..3dd24c9e 100644 --- a/x11-base/xorg-server/Manifest +++ b/x11-base/xorg-server/Manifest @@ -1 +1 @@ -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 diff --git a/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Pick-the-shm-dir-at-run-time-not-build-time.patch b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Pick-the-shm-dir-at-run-time-not-build-time.patch new file mode 100644 index 00000000..54ed6293 --- /dev/null +++ b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Pick-the-shm-dir-at-run-time-not-build-time.patch @@ -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 + diff --git a/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Use-memfd_create-when-possible.patch b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Use-memfd_create-when-possible.patch new file mode 100644 index 00000000..fce25944 --- /dev/null +++ b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Use-memfd_create-when-possible.patch @@ -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 + diff --git a/x11-base/xorg-server/files/xorg-server-1.20.4-shm-reindent-shm_tmpfile-to-follow-our-standards.patch b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-reindent-shm_tmpfile-to-follow-our-standards.patch new file mode 100644 index 00000000..1ce9e130 --- /dev/null +++ b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-reindent-shm_tmpfile-to-follow-our-standards.patch @@ -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 + diff --git a/x11-base/xorg-server/xorg-server-1.20.3-r1337.ebuild b/x11-base/xorg-server/xorg-server-1.20.4-r1337.ebuild index 07aa4d48..2372ca85 100644 --- a/x11-base/xorg-server/xorg-server-1.20.3-r1337.ebuild +++ b/x11-base/xorg-server/xorg-server-1.20.4-r1337.ebuild @@ -1,19 +1,21 @@ -# Copyright 1999-2018 Gentoo Authors +# Copyright 1999-2019 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 -EAPI=5 +EAPI=7 -XORG_EAUTORECONF=yes XORG_DOC=doc -inherit xorg-2 multilib versionator flag-o-matic -EGIT_REPO_URI="https://anongit.freedesktop.org/git/xorg/xserver.git" +XORG_EAUTORECONF="yes" +inherit xorg-3 multilib flag-o-matic +EGIT_REPO_URI="https://gitlab.freedesktop.org/xorg/xserver.git" DESCRIPTION="X.Org X servers" SLOT="0/${PV}" -KEYWORDS="amd64" +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 systemd +udev unwind xcsecurity" +IUSE="${IUSE_SERVERS} debug elogind +glamor ipv6 libressl minimal selinux +suid systemd +udev unwind xcsecurity" CDEPEND=">=app-eselect/eselect-opengl-1.3.0 !libressl? ( dev-libs/openssl:0= ) @@ -79,7 +81,13 @@ CDEPEND=">=app-eselect/eselect-opengl-1.3.0 systemd? ( sys-apps/dbus sys-apps/systemd - )" + ) + elogind? ( + sys-apps/dbus + sys-auth/elogind + sys-auth/pambase[elogind] + ) + " DEPEND="${CDEPEND} sys-devel/flex @@ -100,14 +108,20 @@ RDEPEND="${CDEPEND} " PDEPEND=" - xorg? ( >=x11-base/xorg-drivers-$(get_version_component_range 1-2) )" + xorg? ( >=x11-base/xorg-drivers-$(ver_cut 1-2) )" REQUIRED_USE="!minimal? ( || ( ${IUSE_SERVERS} ) ) + elogind? ( udev ) + ?? ( elogind systemd ) + 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=( @@ -117,20 +131,12 @@ PATCHES=( "${FILESDIR}"/${PN}-1.18-support-multiple-Files-sections.patch ) -pkg_pretend() { - # older gcc is not supported - [[ "${MERGE_TYPE}" != "binary" && $(gcc-major-version) -lt 4 ]] && \ - die "Sorry, but gcc earlier than 4.0 will not work for xorg-server." -} - pkg_setup() { if use wayland && ! use glamor; then ewarn "glamor is necessary for acceleration under Xwayland." ewarn "Performance may be unacceptable without it." fi -} -src_configure() { # 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 @@ -158,10 +164,10 @@ src_configure() { $(use_enable udev config-udev) $(use_with doc doxygen) $(use_with doc xmlto) + $(usex !elogind $(use_enable systemd systemd-logind) '--enable-systemd-logind') $(use_with systemd systemd-daemon) - $(use_enable systemd systemd-logind) - $(use_enable systemd suid-wrapper) - $(use_enable !systemd install-setuid) + $(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 @@ -174,18 +180,16 @@ src_configure() { --with-os-vendor=Gentoo --with-sha1=libcrypto ) - - xorg-2_src_configure } src_install() { - xorg-2_src_install + xorg-3_src_install server_based_install if ! use minimal && use xorg; then # Install xorg.conf.example into docs - dodoc "${AUTOTOOLS_BUILD_DIR}"/hw/xfree86/xorg.conf.example + dodoc "${S}"/hw/xfree86/xorg.conf.example fi newinitd "${FILESDIR}"/xdm-setup.initd-1 xdm-setup @@ -199,11 +203,15 @@ src_install() { # enable clicks using touchpad (https://bugs.redcorelinux.org/show_bug.cgi?id=48) insinto /usr/share/X11/xorg.conf.d doins "${FILESDIR}"/99-synaptics-overrides.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 + if ! use minimal; then + # sets up libGL and DRI2 symlinks if needed (ie, on a fresh install) + eselect opengl set xorg-x11 --use-old + fi } pkg_postrm() { |