This was broken (https://git.lix.systems/lix-project/lix/issues/955) and it's just us not using libucontext (and the libucontext package being broken). Fibers should basically be supported on all platforms that matter and it's mostly just some packaging mishaps that stop them from working, so we want to turn on the requirement by default so that it works.
75 lines
2.7 KiB
Diff
75 lines
2.7 KiB
Diff
From f26dd335c8650a2f8ab7d6e4fb5dfc40ee6af618 Mon Sep 17 00:00:00 2001
|
|
From: Jade Lovelace <software@lfcode.ca>
|
|
Date: Sun, 10 Aug 2025 10:54:14 +0000
|
|
Subject: [PATCH] fix: include libucontext in Requires.private in cmake builds
|
|
|
|
This is required so that static musl actually links to libucontext
|
|
correctly to get setcontext/etc for fibers.
|
|
---
|
|
c++/CMakeLists.txt | 4 ++++
|
|
c++/configure.ac | 4 ++++
|
|
c++/pkgconfig/kj-async.pc.in | 1 +
|
|
3 files changed, 9 insertions(+)
|
|
|
|
diff --git a/c++/CMakeLists.txt b/c++/CMakeLists.txt
|
|
index f335f12f7c..b2a24e40e0 100644
|
|
--- a/c++/CMakeLists.txt
|
|
+++ b/c++/CMakeLists.txt
|
|
@@ -96,6 +96,9 @@ set_property(CACHE WITH_FIBERS PROPERTY STRINGS AUTO ON OFF)
|
|
# CapnProtoConfig.cmake.in needs this variable.
|
|
set(_WITH_LIBUCONTEXT OFF)
|
|
|
|
+# Used by pkg-config files
|
|
+set(ASYNC_REQUIRES_PRIVATE "")
|
|
+
|
|
if (WITH_FIBERS OR WITH_FIBERS STREQUAL "AUTO")
|
|
set(_capnp_fibers_found OFF)
|
|
if (WIN32 OR CYGWIN)
|
|
@@ -116,6 +119,7 @@ if (WITH_FIBERS OR WITH_FIBERS STREQUAL "AUTO")
|
|
if (libucontext_FOUND)
|
|
set(_WITH_LIBUCONTEXT ON)
|
|
set(_capnp_fibers_found ON)
|
|
+ set(ASYNC_REQUIRES_PRIVATE "${ASYNC_REQUIRES_PRIVATE} libucontext")
|
|
endif()
|
|
else()
|
|
set(_capnp_fibers_found OFF)
|
|
diff --git a/c++/configure.ac b/c++/configure.ac
|
|
index a2de7aac80..ce3c632e8c 100644
|
|
--- a/c++/configure.ac
|
|
+++ b/c++/configure.ac
|
|
@@ -216,6 +216,8 @@ AS_IF([test "$with_fibers" != no], [
|
|
])
|
|
])
|
|
|
|
+ASYNC_REQUIRES_PRIVATE=""
|
|
+
|
|
# Check for library support necessary for fibers.
|
|
AS_IF([test "$with_fibers" != no], [
|
|
case "${host_os}" in
|
|
@@ -241,6 +243,7 @@ AS_IF([test "$with_fibers" != no], [
|
|
])
|
|
AS_IF([test "$ucontext_supports_fibers" = yes], [
|
|
ASYNC_LIBS="$ASYNC_LIBS -lucontext"
|
|
+ ASYNC_REQUIRES_PRIVATE="$ASYNC_REQUIRES_PRIVATE libucontext"
|
|
with_fibers=yes
|
|
], [
|
|
AS_IF([test "$with_fibers" = yes], [
|
|
@@ -259,6 +262,7 @@ AS_IF([test "$with_fibers" = yes], [
|
|
], [
|
|
CXXFLAGS="$CXXFLAGS -DKJ_USE_FIBERS=0"
|
|
])
|
|
+AC_SUBST(ASYNC_REQUIRES_PRIVATE, $ASYNC_REQUIRES_PRIVATE)
|
|
|
|
# CapnProtoConfig.cmake.in needs these variables,
|
|
# we force them to NO because we don't need the CMake dependency for them,
|
|
diff --git a/c++/pkgconfig/kj-async.pc.in b/c++/pkgconfig/kj-async.pc.in
|
|
index 49d5ff6996..41aae28555 100644
|
|
--- a/c++/pkgconfig/kj-async.pc.in
|
|
+++ b/c++/pkgconfig/kj-async.pc.in
|
|
@@ -8,4 +8,5 @@ Description: Basic utility library called KJ (async part)
|
|
Version: @VERSION@
|
|
Libs: -L${libdir} -lkj-async @ASYNC_LIBS@ @PTHREAD_CFLAGS@ @PTHREAD_LIBS@ @STDLIB_FLAG@
|
|
Requires: kj = @VERSION@
|
|
+Requires.private: @ASYNC_REQUIRES_PRIVATE@
|
|
Cflags: -I${includedir} @ASYNC_LIBS@ @PTHREAD_CFLAGS@ @STDLIB_FLAG@ @CAPNP_LITE_FLAG@
|