commit:     8ac2ad88832e37b7df16a842a1cbc57d259431e4
Author:     sin-ack <sin-ack <AT> protonmail <DOT> com>
AuthorDate: Thu Apr 24 21:06:43 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Apr 24 23:31:44 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8ac2ad88

dev-cpp/folly: add IUSE io-uring

There are three different problems being addressed here:

1. Recent Folly versions depend on liburing features that have not yet
   been released.
2. Folly has no build system configuration option to disable io_uring
   support.
3. Folly's CMake build system will unconditionally add liburing as a
   library to link against, which downstream Facebook libraries rely on.

The third one creates an implicit dependency between Folly and liburing
which means if liburing gets depcleaned or otherwise unmerged, other
Facebook packages will fail to build.

We solve this by conditionally patching out io_uring support based on
USE=io-uring and having a (currently technically invalid) dependency
on the yet-unreleased liburing-2.10, which will make it automagically
start working once we do have that release in ::gentoo.

Ref: https://github.com/facebook/folly/issues/2420
Bug: https://bugs.gentoo.org/954335
Signed-off-by: sin-ack <sin-ack <AT> protonmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/41734
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...025.04.14.00-CMake-Avoid-finding-liburing.patch | 30 ++++++++++++++++++++++
 ....14.00.ebuild => folly-2025.04.14.00-r1.ebuild} | 25 +++++++++---------
 2 files changed, 43 insertions(+), 12 deletions(-)

diff --git 
a/dev-cpp/folly/files/folly-2025.04.14.00-CMake-Avoid-finding-liburing.patch 
b/dev-cpp/folly/files/folly-2025.04.14.00-CMake-Avoid-finding-liburing.patch
new file mode 100644
index 000000000000..80399fb9c432
--- /dev/null
+++ b/dev-cpp/folly/files/folly-2025.04.14.00-CMake-Avoid-finding-liburing.patch
@@ -0,0 +1,30 @@
+From a0d86ed3bc2150ddfad50ab1b2eb09bea7a277d2 Mon Sep 17 00:00:00 2001
+From: sin-ack <[email protected]>
+Date: Thu, 24 Apr 2025 20:59:06 +0000
+Subject: [PATCH] CMake: Avoid finding liburing
+
+Otherwise, Folly will unconditionally add it to the list of libraries to
+link even if io_uring support is otherwise disabled, creating an
+implicit dependency on it that can't be tracked by package managers.
+---
+ CMake/folly-deps.cmake | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/CMake/folly-deps.cmake b/CMake/folly-deps.cmake
+index 6ce4c679a..b1e20a901 100644
+--- a/CMake/folly-deps.cmake
++++ b/CMake/folly-deps.cmake
+@@ -139,10 +139,6 @@ find_package(LibAIO)
+ list(APPEND FOLLY_LINK_LIBRARIES ${LIBAIO_LIBRARIES})
+ list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBAIO_INCLUDE_DIRS})
+ 
+-find_package(LibUring)
+-list(APPEND FOLLY_LINK_LIBRARIES ${LIBURING_LIBRARIES})
+-list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBURING_INCLUDE_DIRS})
+-
+ find_package(Libsodium)
+ list(APPEND FOLLY_LINK_LIBRARIES ${LIBSODIUM_LIBRARIES})
+ list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBSODIUM_INCLUDE_DIRS})
+-- 
+2.49.0
+

diff --git a/dev-cpp/folly/folly-2025.04.14.00.ebuild 
b/dev-cpp/folly/folly-2025.04.14.00-r1.ebuild
similarity index 81%
rename from dev-cpp/folly/folly-2025.04.14.00.ebuild
rename to dev-cpp/folly/folly-2025.04.14.00-r1.ebuild
index 05ec9d0a3f03..48695a36dd84 100644
--- a/dev-cpp/folly/folly-2025.04.14.00.ebuild
+++ b/dev-cpp/folly/folly-2025.04.14.00-r1.ebuild
@@ -22,16 +22,9 @@ 
SRC_URI="https://github.com/facebook/folly/releases/download/v${PV}/${PN}-v${PV}
 LICENSE="Apache-2.0"
 SLOT="0/${PV}"
 KEYWORDS="~amd64 ~arm64 ~ppc64"
-IUSE="llvm-libunwind test"
+IUSE="io-uring llvm-libunwind test"
 RESTRICT="!test? ( test )"
 
-# NOTE: liburing support is disabled because Folly depends on features
-#       that are not available in the current stable version of liburing.
-#
-#       See: https://github.com/facebook/folly/issues/2420
-#
-# NOTE: Re-check during next bump whether liburing released a version with
-#       zcrx support.
 RDEPEND="
        app-arch/bzip2
        app-arch/lz4:=
@@ -51,8 +44,8 @@ RDEPEND="
        sys-libs/zlib
        llvm-libunwind? ( llvm-runtimes/libunwind:= )
        !llvm-libunwind? ( sys-libs/libunwind:= )
+       io-uring? ( >=sys-libs/liburing-2.10:= )
 "
-# libiberty is linked statically
 DEPEND="
        ${RDEPEND}
        sys-libs/binutils-libs
@@ -61,9 +54,6 @@ DEPEND="
 
 PATCHES=(
        "${FILESDIR}"/${PN}-2024.11.04.00-musl-fix.patch
-       # NOTE: Disable liburing support as mentioned above. Folly doesn't have
-       #       a configure flag for this so we must patch the check out.
-       "${FILESDIR}"/${PN}-2025.04.14.00-force-liburing-off.patch
 )
 
 src_unpack() {
@@ -73,6 +63,17 @@ src_unpack() {
        default
 }
 
+src_prepare() {
+       # Folly has no configuration option for disabling io_uring support
+       # so we need to patch it out.
+       if use !io-uring; then
+               eapply 
"${FILESDIR}"/${PN}-2025.04.14.00-force-liburing-off.patch
+               eapply 
"${FILESDIR}"/${PN}-2025.04.14.00-CMake-Avoid-finding-liburing.patch
+       fi
+
+       cmake_src_prepare
+}
+
 src_configure() {
        local mycmakeargs=(
                -DCMAKE_INSTALL_DIR="$(get_libdir)/cmake/${PN}"

Reply via email to