summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rwxr-xr-xsource/d/subversion/subversion.SlackBuild2
-rw-r--r--source/l/glib2/3120.patch395
-rwxr-xr-xsource/l/glib2/glib2.SlackBuild3
-rw-r--r--source/l/rubygem-asciidoctor/asciidoctor-2.0.17.gembin279040 -> 0 bytes
-rw-r--r--source/l/rubygem-asciidoctor/asciidoctor-2.0.18.gembin0 -> 280064 bytes
-rwxr-xr-xsource/n/epic5/epic5.SlackBuild2
-rwxr-xr-xsource/x/marisa/marisa.SlackBuild2
7 files changed, 401 insertions, 3 deletions
diff --git a/source/d/subversion/subversion.SlackBuild b/source/d/subversion/subversion.SlackBuild
index 744b0c8ec..5e7ead152 100755
--- a/source/d/subversion/subversion.SlackBuild
+++ b/source/d/subversion/subversion.SlackBuild
@@ -24,7 +24,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=subversion
VERSION=${VERSION:-$(echo subversion-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-2}
+BUILD=${BUILD:-3}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
diff --git a/source/l/glib2/3120.patch b/source/l/glib2/3120.patch
new file mode 100644
index 000000000..9764d7575
--- /dev/null
+++ b/source/l/glib2/3120.patch
@@ -0,0 +1,395 @@
+From f67e8636dad3038b584887bd1edf4515fbd7ac4a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
+Date: Tue, 13 Dec 2022 15:05:06 +0200
+Subject: [PATCH 1/2] glib/gthread-posix: Use `cc.compiles()` instead of
+ `cc.links()` for checking for `__NR_futex`
+
+`cc.compiles()` is minimally faster.
+
+We only want to check here whether `__NR_futex` is defined and don't
+want to check anything at link-time.
+---
+ meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 2305b3a08e..c763857ea9 100644
+--- a/meson.build
++++ b/meson.build
+@@ -887,7 +887,7 @@ if host_system == 'qnx'
+ endif
+
+ # Check for futex(2)
+-if cc.links('''#include <linux/futex.h>
++if cc.compiles('''#include <linux/futex.h>
+ #include <sys/syscall.h>
+ #include <unistd.h>
+ int main (int argc, char ** argv) {
+--
+GitLab
+
+
+From a79c6af23eff5ee978db62e048828c9a992a1261 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
+Date: Mon, 12 Dec 2022 19:58:21 +0200
+Subject: [PATCH 2/2] glib/gthread-posix: Conditionally use `futex` and/or
+ `futex_time64` syscalls as necessary and use the correct `struct timespec`
+ definition
+
+On some systems only `futex_time64` exists (e.g. riscv32) while on
+others only `futex` exists (old Linux, 64 bit platforms), so it is
+necessary to check for both and try calling both at runtime.
+
+Additionally use the correct `struct timespec` definition. There is not
+necessarily any relation between the libc's definition and the kernel's.
+
+Specifically, the libc headers might use 64-bit `time_t` while the kernel
+headers use 32-bit `__kernel_old_time_t` on certain systems.
+
+To get around this problem we
+ a) check if `futex_time64` is available, which only exists on 32-bit
+ platforms and always uses 64-bit `time_t`.
+ b) otherwise (or if that returns `ENOSYS`), we call the normal `futex`
+ syscall with the `struct timespec` used by the kernel, which uses
+ `__kernel_long_t` for both its fields. We use that instead of
+ `__kernel_old_time_t` because it is equivalent and available in the
+ kernel headers for a longer time.
+---
+ glib/gbitlock.c | 15 ++----
+ glib/gthread-posix.c | 120 ++++++++++++++++++++++++++----------------
+ glib/gthreadprivate.h | 49 +++++++++++++++++
+ meson.build | 9 ++++
+ 4 files changed, 137 insertions(+), 56 deletions(-)
+
+diff --git a/glib/gbitlock.c b/glib/gbitlock.c
+index 81bfb339f3..9c34de80c8 100644
+--- a/glib/gbitlock.c
++++ b/glib/gbitlock.c
+@@ -35,6 +35,7 @@
+
+ #ifdef G_BIT_LOCK_FORCE_FUTEX_EMULATION
+ #undef HAVE_FUTEX
++#undef HAVE_FUTEX_TIME64
+ #endif
+
+ #ifndef HAVE_FUTEX
+@@ -42,7 +43,7 @@ static GMutex g_futex_mutex;
+ static GSList *g_futex_address_list = NULL;
+ #endif
+
+-#ifdef HAVE_FUTEX
++#if defined(HAVE_FUTEX) || defined(HAVE_FUTEX_TIME64)
+ /*
+ * We have headers for futex(2) on the build machine. This does not
+ * imply that every system that ever runs the resulting glib will have
+@@ -51,14 +52,6 @@ static GSList *g_futex_address_list = NULL;
+ *
+ * If anyone actually gets bit by this, please file a bug. :)
+ */
+-#include <linux/futex.h>
+-#include <sys/syscall.h>
+-#include <unistd.h>
+-
+-#ifndef FUTEX_WAIT_PRIVATE
+-#define FUTEX_WAIT_PRIVATE FUTEX_WAIT
+-#define FUTEX_WAKE_PRIVATE FUTEX_WAKE
+-#endif
+
+ /* < private >
+ * g_futex_wait:
+@@ -81,7 +74,7 @@ static void
+ g_futex_wait (const gint *address,
+ gint value)
+ {
+- syscall (__NR_futex, address, (gsize) FUTEX_WAIT_PRIVATE, (gsize) value, NULL);
++ g_futex_simple (address, (gsize) FUTEX_WAIT_PRIVATE, (gsize) value, NULL);
+ }
+
+ /* < private >
+@@ -98,7 +91,7 @@ g_futex_wait (const gint *address,
+ static void
+ g_futex_wake (const gint *address)
+ {
+- syscall (__NR_futex, address, (gsize) FUTEX_WAKE_PRIVATE, (gsize) 1, NULL);
++ g_futex_simple (address, (gsize) FUTEX_WAKE_PRIVATE, (gsize) 1, NULL);
+ }
+
+ #else
+diff --git a/glib/gthread-posix.c b/glib/gthread-posix.c
+index d96fca5ca2..84f62881d8 100644
+--- a/glib/gthread-posix.c
++++ b/glib/gthread-posix.c
+@@ -74,7 +74,7 @@
+ #include <sys/syscall.h>
+ #endif
+
+-#if defined(HAVE_FUTEX) && \
++#if (defined(HAVE_FUTEX) || defined(HAVE_FUTEX_TIME64)) && \
+ (defined(HAVE_STDATOMIC_H) || defined(__ATOMIC_SEQ_CST))
+ #define USE_NATIVE_MUTEX
+ #endif
+@@ -1397,15 +1397,6 @@ g_system_thread_set_name (const gchar *name)
+ /* {{{1 GMutex and GCond futex implementation */
+
+ #if defined(USE_NATIVE_MUTEX)
+-
+-#include <linux/futex.h>
+-#include <sys/syscall.h>
+-
+-#ifndef FUTEX_WAIT_PRIVATE
+-#define FUTEX_WAIT_PRIVATE FUTEX_WAIT
+-#define FUTEX_WAKE_PRIVATE FUTEX_WAKE
+-#endif
+-
+ /* We should expand the set of operations available in gatomic once we
+ * have better C11 support in GCC in common distributions (ie: 4.9).
+ *
+@@ -1500,8 +1491,8 @@ g_mutex_lock_slowpath (GMutex *mutex)
+ */
+ while (exchange_acquire (&mutex->i[0], G_MUTEX_STATE_CONTENDED) != G_MUTEX_STATE_EMPTY)
+ {
+- syscall (__NR_futex, &mutex->i[0], (gsize) FUTEX_WAIT_PRIVATE,
+- G_MUTEX_STATE_CONTENDED, NULL);
++ g_futex_simple (&mutex->i[0], (gsize) FUTEX_WAIT_PRIVATE,
++ G_MUTEX_STATE_CONTENDED, NULL);
+ }
+ }
+
+@@ -1519,7 +1510,7 @@ g_mutex_unlock_slowpath (GMutex *mutex,
+ g_abort ();
+ }
+
+- syscall (__NR_futex, &mutex->i[0], (gsize) FUTEX_WAKE_PRIVATE, (gsize) 1, NULL);
++ g_futex_simple (&mutex->i[0], (gsize) FUTEX_WAKE_PRIVATE, (gsize) 1, NULL);
+ }
+
+ void
+@@ -1587,7 +1578,7 @@ g_cond_wait (GCond *cond,
+ guint sampled = (guint) g_atomic_int_get (&cond->i[0]);
+
+ g_mutex_unlock (mutex);
+- syscall (__NR_futex, &cond->i[0], (gsize) FUTEX_WAIT_PRIVATE, (gsize) sampled, NULL);
++ g_futex_simple (&cond->i[0], (gsize) FUTEX_WAIT_PRIVATE, (gsize) sampled, NULL);
+ g_mutex_lock (mutex);
+ }
+
+@@ -1596,7 +1587,7 @@ g_cond_signal (GCond *cond)
+ {
+ g_atomic_int_inc (&cond->i[0]);
+
+- syscall (__NR_futex, &cond->i[0], (gsize) FUTEX_WAKE_PRIVATE, (gsize) 1, NULL);
++ g_futex_simple (&cond->i[0], (gsize) FUTEX_WAKE_PRIVATE, (gsize) 1, NULL);
+ }
+
+ void
+@@ -1604,7 +1595,7 @@ g_cond_broadcast (GCond *cond)
+ {
+ g_atomic_int_inc (&cond->i[0]);
+
+- syscall (__NR_futex, &cond->i[0], (gsize) FUTEX_WAKE_PRIVATE, (gsize) INT_MAX, NULL);
++ g_futex_simple (&cond->i[0], (gsize) FUTEX_WAKE_PRIVATE, (gsize) INT_MAX, NULL);
+ }
+
+ gboolean
+@@ -1614,12 +1605,6 @@ g_cond_wait_until (GCond *cond,
+ {
+ struct timespec now;
+ struct timespec span;
+-#ifdef __NR_futex_time64
+- long span_arg[2];
+- G_STATIC_ASSERT (sizeof (span_arg[0]) == 4);
+-#else
+- struct timespec span_arg;
+-#endif
+
+ guint sampled;
+ int res;
+@@ -1640,37 +1625,82 @@ g_cond_wait_until (GCond *cond,
+ if (span.tv_sec < 0)
+ return FALSE;
+
+- /* On x32 (ILP32 ABI on x86_64) and potentially sparc64, the raw futex()
+- * syscall takes a 32-bit timespan argument *regardless* of whether userspace
+- * is using 32-bit or 64-bit `struct timespec`. This means that we can’t
+- * unconditionally pass a `struct timespec` pointer into the syscall.
++ /* `struct timespec` as defined by the libc headers does not necessarily
++ * have any relation to the one used by the kernel for the `futex` syscall.
+ *
+- * Assume that any such platform is new enough to define the
+- * `__NR_futex_time64` workaround syscall (which accepts 64-bit timespecs,
+- * introduced in kernel 5.1), and use that as a proxy for whether to pass in
+- * `long[2]` or `struct timespec`.
++ * Specifically, the libc headers might use 64-bit `time_t` while the kernel
++ * headers use 32-bit `__kernel_old_time_t` on certain systems.
+ *
+- * As per https://lwn.net/Articles/776427/, the `time64` syscalls only exist
+- * on 32-bit platforms, so in this case `sizeof(long)` should always be
+- * 32 bits.
++ * To get around this problem we
++ * a) check if `futex_time64` is available, which only exists on 32-bit
++ * platforms and always uses 64-bit `time_t`.
++ * b) otherwise (or if that returns `ENOSYS`), we call the normal `futex`
++ * syscall with the `struct timespec` used by the kernel, which uses
++ * `__kernel_long_t` for both its fields. We use that instead of
++ * `__kernel_old_time_t` because it is equivalent and available in the
++ * kernel headers for a longer time.
+ *
+- * Don’t bother actually calling `__NR_futex_time64` as the `span` is relative
+- * and hence very unlikely to overflow, even if using 32-bit longs.
++ * Also some 32-bit systems do not define `__NR_futex` at all and only
++ * define `__NR_futex_time64`.
+ */
+-#ifdef __NR_futex_time64
+- span_arg[0] = span.tv_sec;
+- span_arg[1] = span.tv_nsec;
+-#else
+- span_arg = span;
+-#endif
+
+ sampled = cond->i[0];
+ g_mutex_unlock (mutex);
+- res = syscall (__NR_futex, &cond->i[0], (gsize) FUTEX_WAIT_PRIVATE, (gsize) sampled, &span_arg);
+- success = (res < 0 && errno == ETIMEDOUT) ? FALSE : TRUE;
+- g_mutex_lock (mutex);
+
+- return success;
++#ifdef __NR_futex_time64
++ {
++ struct
++ {
++ gint64 tv_sec;
++ gint64 tv_nsec;
++ } span_arg;
++
++ span_arg.tv_sec = span.tv_sec;
++ span_arg.tv_nsec = span.tv_nsec;
++
++ res = syscall (__NR_futex_time64, &cond->i[0], (gsize) FUTEX_WAIT_PRIVATE, (gsize) sampled, &span_arg);
++
++ /* If the syscall does not exist (`ENOSYS`), we retry again below with the
++ * normal `futex` syscall. This can happen if newer kernel headers are
++ * used than the kernel that is actually running.
++ */
++# ifdef __NR_futex
++ if (res >= 0 || errno != ENOSYS)
++# endif /* defined(__NR_futex) */
++ {
++ success = (res < 0 && errno == ETIMEDOUT) ? FALSE : TRUE;
++ g_mutex_lock (mutex);
++
++ return success;
++ }
++ }
++#endif
++
++#ifdef __NR_futex
++ {
++ struct
++ {
++ __kernel_long_t tv_sec;
++ __kernel_long_t tv_nsec;
++ } span_arg;
++
++ /* Make sure to only ever call this if the end time actually fits into the target type */
++ if (G_UNLIKELY (sizeof (__kernel_long_t) < 8 && span.tv_sec > G_MAXINT32))
++ g_error ("%s: Can’t wait for more than %us", G_STRFUNC, G_MAXINT32);
++
++ span_arg.tv_sec = span.tv_sec;
++ span_arg.tv_nsec = span.tv_nsec;
++
++ res = syscall (__NR_futex, &cond->i[0], (gsize) FUTEX_WAIT_PRIVATE, (gsize) sampled, &span_arg);
++ success = (res < 0 && errno == ETIMEDOUT) ? FALSE : TRUE;
++ g_mutex_lock (mutex);
++
++ return success;
++ }
++#endif /* defined(__NR_futex) */
++
++ /* We can't end up here because of the checks above */
++ g_assert_not_reached ();
+ }
+
+ #endif
+diff --git a/glib/gthreadprivate.h b/glib/gthreadprivate.h
+index 2ae705d4f5..6eaf422753 100644
+--- a/glib/gthreadprivate.h
++++ b/glib/gthreadprivate.h
+@@ -40,6 +40,55 @@ struct _GRealThread
+
+ /* system thread implementation (gthread-posix.c, gthread-win32.c) */
+
++#if defined(HAVE_FUTEX) || defined(HAVE_FUTEX_TIME64)
++#include <linux/futex.h>
++#include <sys/syscall.h>
++#include <unistd.h>
++
++#ifndef FUTEX_WAIT_PRIVATE
++#define FUTEX_WAIT_PRIVATE FUTEX_WAIT
++#define FUTEX_WAKE_PRIVATE FUTEX_WAKE
++#endif
++
++/* Wrapper macro to call `futex_time64` and/or `futex` with simple
++ * parameters and without returning the return value.
++ *
++ * If the `futex_time64` syscall does not exist (`ENOSYS`), we retry again
++ * with the normal `futex` syscall. This can happen if newer kernel headers
++ * are used than the kernel that is actually running.
++ *
++ * This must not be called with a timeout parameter as that differs
++ * in size between the two syscall variants!
++ */
++#if defined(__NR_futex) && defined(__NR_futex_time64)
++#define g_futex_simple(uaddr, futex_op, ...) \
++ G_STMT_START \
++ { \
++ int res = syscall (__NR_futex_time64, uaddr, (gsize) futex_op, __VA_ARGS__); \
++ if (res < 0 && errno == ENOSYS) \
++ syscall (__NR_futex, uaddr, (gsize) futex_op, __VA_ARGS__); \
++ } \
++ G_STMT_END
++#elif defined(__NR_futex_time64)
++#define g_futex_simple(uaddr, futex_op, ...) \
++ G_STMT_START \
++ { \
++ syscall (__NR_futex_time64, uaddr, (gsize) futex_op, __VA_ARGS__); \
++ } \
++ G_STMT_END
++#elif defined(__NR_futex)
++#define g_futex_simple(uaddr, futex_op, ...) \
++ G_STMT_START \
++ { \
++ syscall (__NR_futex, uaddr, (gsize) futex_op, __VA_ARGS__); \
++ } \
++ G_STMT_END
++#else /* !defined(__NR_futex) && !defined(__NR_futex_time64) */
++#error "Neither __NR_futex nor __NR_futex_time64 are defined but were found by meson"
++#endif /* defined(__NR_futex) && defined(__NR_futex_time64) */
++
++#endif
++
+ /* Platform-specific scheduler settings for a thread */
+ typedef struct
+ {
+diff --git a/meson.build b/meson.build
+index c763857ea9..75a3db504e 100644
+--- a/meson.build
++++ b/meson.build
+@@ -896,6 +896,15 @@ if cc.compiles('''#include <linux/futex.h>
+ }''', name : 'futex(2) system call')
+ glib_conf.set('HAVE_FUTEX', 1)
+ endif
++if cc.compiles('''#include <linux/futex.h>
++ #include <sys/syscall.h>
++ #include <unistd.h>
++ int main (int argc, char ** argv) {
++ syscall (__NR_futex_time64, NULL, FUTEX_WAKE, FUTEX_WAIT);
++ return 0;
++ }''', name : 'futex(2) system call')
++ glib_conf.set('HAVE_FUTEX_TIME64', 1)
++endif
+
+ # Check for eventfd(2)
+ if cc.links('''#include <sys/eventfd.h>
+--
+GitLab
+
diff --git a/source/l/glib2/glib2.SlackBuild b/source/l/glib2/glib2.SlackBuild
index 1c7f98e7b..b0d6b2c5c 100755
--- a/source/l/glib2/glib2.SlackBuild
+++ b/source/l/glib2/glib2.SlackBuild
@@ -77,6 +77,9 @@ find . \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \+
+# Revert a patch that causes 32-bit builds to fail:
+cat $CWD/3120.patch | patch -R -p1 --verbose || exit 1
+
# Configure, build, and install:
export CFLAGS="$SLKCFLAGS"
export CXXFLAGS="$SLKCFLAGS"
diff --git a/source/l/rubygem-asciidoctor/asciidoctor-2.0.17.gem b/source/l/rubygem-asciidoctor/asciidoctor-2.0.17.gem
deleted file mode 100644
index ae7168cc5..000000000
--- a/source/l/rubygem-asciidoctor/asciidoctor-2.0.17.gem
+++ /dev/null
Binary files differ
diff --git a/source/l/rubygem-asciidoctor/asciidoctor-2.0.18.gem b/source/l/rubygem-asciidoctor/asciidoctor-2.0.18.gem
new file mode 100644
index 000000000..55b55183a
--- /dev/null
+++ b/source/l/rubygem-asciidoctor/asciidoctor-2.0.18.gem
Binary files differ
diff --git a/source/n/epic5/epic5.SlackBuild b/source/n/epic5/epic5.SlackBuild
index dee3f9041..35976dfea 100755
--- a/source/n/epic5/epic5.SlackBuild
+++ b/source/n/epic5/epic5.SlackBuild
@@ -26,7 +26,7 @@ PKGNAM=epic5
VERSION=${VERSION:-$(echo $PKGNAM-*.tar.xz | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
EPICVER=5
HELPFILE=current
-BUILD=${BUILD:-1}
+BUILD=${BUILD:-2}
## Default to no Ruby support, since it seems that ruby-2.7.0 is not compatible.
## Patches to fix this are welcome, otherwise we'll keep an eye on upstream.
diff --git a/source/x/marisa/marisa.SlackBuild b/source/x/marisa/marisa.SlackBuild
index 36b080ea7..0ab763e38 100755
--- a/source/x/marisa/marisa.SlackBuild
+++ b/source/x/marisa/marisa.SlackBuild
@@ -26,7 +26,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=marisa
SRCNAM=marisa-trie
VERSION=${VERSION:-$(echo $SRCNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d- | rev)}
-BUILD=${BUILD:-5}
+BUILD=${BUILD:-6}
NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}