Merge pull request #178962 from r-ryantm/auto-update/capnproto
capnproto: 0.9.1 -> 0.10.1
This commit is contained in:
commit
de3d26167d
@ -6,14 +6,14 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "capnproto";
|
||||
version = "0.9.1";
|
||||
version = "0.10.1";
|
||||
|
||||
# release tarballs are missing some ekam rules
|
||||
src = fetchFromGitHub {
|
||||
owner = "capnproto";
|
||||
repo = "capnproto";
|
||||
rev = "v${version}";
|
||||
sha256 = "0cbiwkmd29abih8rjjm35dfkrkr8c6axbzq3fkryay6jyvpi42c5";
|
||||
sha256 = "sha256-VdeoTU802kAqTdu8CJTIhy3xHM3ZCPqb5YNUS2k1x7E=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ]
|
||||
@ -21,9 +21,6 @@ stdenv.mkDerivation rec {
|
||||
|
||||
cmakeFlags = lib.optional (!(stdenv.buildPlatform.canExecute stdenv.hostPlatform)) "-DEXTERNAL_CAPNP";
|
||||
|
||||
# Upstream 77ac9154440bcc216fda1092fd5bb51da62ae09c, modified to apply to v0.9.1. Drop on update.
|
||||
patches = lib.optional stdenv.hostPlatform.isMusl ./musl-no-fibers.patch;
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://capnproto.org/";
|
||||
description = "Cap'n Proto cerealization protocol";
|
||||
|
@ -1,244 +0,0 @@
|
||||
From 3d983eff304c28574c330a52d70a60145c9e157e Mon Sep 17 00:00:00 2001
|
||||
From: Jonas Vautherin <jonas.vautherin@gmail.com>
|
||||
Date: Fri, 14 Jan 2022 00:14:26 +0100
|
||||
Subject: [PATCH] Add support for musl
|
||||
|
||||
---
|
||||
Based on upstream 77ac9154440bcc216fda1092fd5bb51da62ae09c,
|
||||
modified slightly by dtzWill to apply to v0.9.1.
|
||||
|
||||
(drop whitespace change to a cmake "if (WITH_OPENSSL)",
|
||||
leave the other instance of that change since it applies)
|
||||
---
|
||||
|
||||
Co-authored-by: Guillaume Papin <guillaume.papin@epitech.eu>
|
||||
(cherry picked from commit 77ac9154440bcc216fda1092fd5bb51da62ae09c)
|
||||
---
|
||||
.github/workflows/quick-test.yml | 9 ++++++
|
||||
c++/CMakeLists.txt | 46 ++++++++++++++++++++++++++++-
|
||||
c++/cmake/CapnProtoConfig.cmake.in | 32 ++++++++++++++++++++
|
||||
c++/configure.ac | 47 ++++++++++++++++++++++++++++--
|
||||
c++/src/kj/CMakeLists.txt | 11 ++++++-
|
||||
5 files changed, 141 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/.github/workflows/quick-test.yml b/.github/workflows/quick-test.yml
|
||||
index c18ef6a6..773ff043 100644
|
||||
--- a/.github/workflows/quick-test.yml
|
||||
+++ b/.github/workflows/quick-test.yml
|
||||
@@ -10,6 +10,15 @@ on:
|
||||
- 'release-*'
|
||||
|
||||
jobs:
|
||||
+ Linux-musl:
|
||||
+ runs-on: ubuntu-latest
|
||||
+ container: alpine:latest
|
||||
+ steps:
|
||||
+ - uses: actions/checkout@v2
|
||||
+ - name: install dependencies
|
||||
+ run: apk add autoconf automake build-base cmake libtool libucontext-dev linux-headers openssl-dev
|
||||
+ - name: super-test
|
||||
+ run: ./super-test.sh quick
|
||||
Linux:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
diff --git a/c++/CMakeLists.txt b/c++/CMakeLists.txt
|
||||
index 548dfd1f..5de7ab26 100644
|
||||
--- a/c++/CMakeLists.txt
|
||||
+++ b/c++/CMakeLists.txt
|
||||
@@ -1,4 +1,4 @@
|
||||
-cmake_minimum_required(VERSION 3.4)
|
||||
+cmake_minimum_required(VERSION 3.6)
|
||||
project("Cap'n Proto" CXX)
|
||||
set(VERSION 0.9.1)
|
||||
|
||||
@@ -64,6 +64,50 @@ elseif (WITH_OPENSSL)
|
||||
find_package(OpenSSL REQUIRED COMPONENTS Crypto SSL)
|
||||
endif()
|
||||
|
||||
+set(WITH_FIBERS "AUTO" CACHE STRING
|
||||
+ "Whether or not to build libkj-async with fibers")
|
||||
+# define list of values GUI will offer for the variable
|
||||
+set_property(CACHE WITH_FIBERS PROPERTY STRINGS AUTO ON OFF)
|
||||
+
|
||||
+# CapnProtoConfig.cmake.in needs this variable.
|
||||
+set(_WITH_LIBUCONTEXT OFF)
|
||||
+
|
||||
+if (WITH_FIBERS OR WITH_FIBERS STREQUAL "AUTO")
|
||||
+ set(_capnp_fibers_found OFF)
|
||||
+ if (WIN32 OR CYGWIN)
|
||||
+ set(_capnp_fibers_found ON)
|
||||
+ else()
|
||||
+ # Fibers need makecontext, setcontext, getcontext, swapcontext that may be in libc,
|
||||
+ # or in libucontext (e.g. for musl).
|
||||
+ # We assume that makecontext implies that the others are present.
|
||||
+ include(CheckLibraryExists)
|
||||
+ check_library_exists(c makecontext "" HAVE_UCONTEXT_LIBC)
|
||||
+ if (HAVE_UCONTEXT_LIBC)
|
||||
+ set(_capnp_fibers_found ON)
|
||||
+ else()
|
||||
+ # Try with libucontext
|
||||
+ find_package(PkgConfig)
|
||||
+ if (PKG_CONFIG_FOUND)
|
||||
+ pkg_check_modules(libucontext IMPORTED_TARGET libucontext)
|
||||
+ if (libucontext_FOUND)
|
||||
+ set(_WITH_LIBUCONTEXT ON)
|
||||
+ set(_capnp_fibers_found ON)
|
||||
+ endif()
|
||||
+ else()
|
||||
+ set(_capnp_fibers_found OFF)
|
||||
+ endif()
|
||||
+ endif()
|
||||
+ endif()
|
||||
+
|
||||
+ if (_capnp_fibers_found)
|
||||
+ set(WITH_FIBERS ON)
|
||||
+ elseif(WITH_FIBERS STREQUAL "AUTO")
|
||||
+ set(WITH_FIBERS OFF)
|
||||
+ else()
|
||||
+ message(FATAL_ERROR "Missing 'makecontext', 'getcontext', 'setcontext' or 'swapcontext' symbol in libc and no libucontext found: KJ won't be able to build with fibers. Disable fibers (-DWITH_FIBERS=OFF).")
|
||||
+ endif()
|
||||
+endif()
|
||||
+
|
||||
if(MSVC)
|
||||
# TODO(cleanup): Enable higher warning level in MSVC, but make sure to test
|
||||
# build with that warning level and clean out false positives.
|
||||
diff --git a/c++/cmake/CapnProtoConfig.cmake.in b/c++/cmake/CapnProtoConfig.cmake.in
|
||||
index 667f502f..0580b11a 100644
|
||||
--- a/c++/cmake/CapnProtoConfig.cmake.in
|
||||
+++ b/c++/cmake/CapnProtoConfig.cmake.in
|
||||
@@ -62,6 +62,38 @@ if (@WITH_OPENSSL@) # WITH_OPENSSL
|
||||
endif()
|
||||
endif()
|
||||
|
||||
+if (@_WITH_LIBUCONTEXT@) # _WITH_LIBUCONTEXT
|
||||
+ set(forwarded_config_flags)
|
||||
+ if(CapnProto_FIND_QUIETLY)
|
||||
+ list(APPEND forwarded_config_flags QUIET)
|
||||
+ endif()
|
||||
+ if(CapnProto_FIND_REQUIRED)
|
||||
+ list(APPEND forwarded_config_flags REQUIRED)
|
||||
+ endif()
|
||||
+ # If the consuming project called find_package(CapnProto) with the QUIET or REQUIRED flags, forward
|
||||
+ # them to calls to find_package(PkgConfig) and pkg_check_modules(). Note that find_dependency()
|
||||
+ # would do this for us in the former case, but there is no such forwarding wrapper for
|
||||
+ # pkg_check_modules().
|
||||
+
|
||||
+ find_package(PkgConfig ${forwarded_config_flags})
|
||||
+ if(NOT ${PkgConfig_FOUND})
|
||||
+ # If we're here, the REQUIRED flag must not have been passed, else we would have had a fatal
|
||||
+ # error. Nevertheless, a diagnostic for this case is probably nice.
|
||||
+ if(NOT CapnProto_FIND_QUIETLY)
|
||||
+ message(WARNING "pkg-config cannot be found")
|
||||
+ endif()
|
||||
+ set(CapnProto_FOUND OFF)
|
||||
+ return()
|
||||
+ endif()
|
||||
+
|
||||
+ if (CMAKE_VERSION VERSION_LESS 3.6)
|
||||
+ # CMake >= 3.6 required due to the use of IMPORTED_TARGET
|
||||
+ message(SEND_ERROR "libucontext support requires CMake >= 3.6.")
|
||||
+ endif()
|
||||
+
|
||||
+ pkg_check_modules(libucontext IMPORTED_TARGET ${forwarded_config_flags} libucontext)
|
||||
+endif()
|
||||
+
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/CapnProtoTargets.cmake")
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/CapnProtoMacros.cmake")
|
||||
|
||||
diff --git a/c++/configure.ac b/c++/configure.ac
|
||||
index 72fe8456..b627bec8 100644
|
||||
--- a/c++/configure.ac
|
||||
+++ b/c++/configure.ac
|
||||
@@ -32,6 +32,11 @@ AC_ARG_WITH([openssl],
|
||||
[build libkj-tls by linking against openssl @<:@default=check@:>@])],
|
||||
[],[with_openssl=check])
|
||||
|
||||
+AC_ARG_WITH([fibers],
|
||||
+ [AS_HELP_STRING([--with-fibers],
|
||||
+ [build libkj-async with fibers @<:@default=check@:>@])],
|
||||
+ [],[with_fibers=check])
|
||||
+
|
||||
AC_ARG_ENABLE([reflection], [
|
||||
AS_HELP_STRING([--disable-reflection], [
|
||||
compile Cap'n Proto in "lite mode", in which all reflection APIs (schema.h, dynamic.h, etc.)
|
||||
@@ -195,8 +200,46 @@ AS_IF([test "$with_openssl" != no], [
|
||||
])
|
||||
AM_CONDITIONAL([BUILD_KJ_TLS], [test "$with_openssl" != no])
|
||||
|
||||
-# CapnProtoConfig.cmake.in needs this variable.
|
||||
-AC_SUBST(WITH_OPENSSL, $with_openssl)
|
||||
+# Fibers need the symbols getcontext, setcontext, swapcontext and makecontext.
|
||||
+# We assume that makecontext implies the rest.
|
||||
+AS_IF([test "$with_fibers" != no], [
|
||||
+ libc_supports_fibers=yes
|
||||
+ AC_SEARCH_LIBS([makecontext], [], [], [
|
||||
+ libc_supports_fibers=no
|
||||
+ ])
|
||||
+
|
||||
+ AS_IF([test "$libc_supports_fibers" = yes], [
|
||||
+ with_fibers=yes
|
||||
+ ], [
|
||||
+ # If getcontext does not exist in libc, try with libucontext
|
||||
+ ucontext_supports_fibers=yes
|
||||
+ AC_CHECK_LIB(ucontext, [makecontext], [], [
|
||||
+ ucontext_supports_fibers=no
|
||||
+ ])
|
||||
+ AS_IF([test "$ucontext_supports_fibers" = yes], [
|
||||
+ ASYNC_LIBS="$ASYNC_LIBS -lucontext"
|
||||
+ with_fibers=yes
|
||||
+ ], [
|
||||
+ AS_IF([test "$with_fibers" = yes], [
|
||||
+ AC_MSG_ERROR([Missing symbols required for fibers (makecontext, setcontext, ...). Disable fibers (--without-fibers) or install libucontext])
|
||||
+ ], [
|
||||
+ AC_MSG_WARN([could not find required symbols (makecontext, setcontext, ...) -- won't build with fibers])
|
||||
+ with_fibers=no
|
||||
+ ])
|
||||
+ ])
|
||||
+ ])
|
||||
+])
|
||||
+AS_IF([test "$with_fibers" = yes], [
|
||||
+ CXXFLAGS="$CXXFLAGS -DKJ_USE_FIBERS"
|
||||
+], [
|
||||
+ CXXFLAGS="$CXXFLAGS -DKJ_USE_FIBERS=0"
|
||||
+])
|
||||
+
|
||||
+# CapnProtoConfig.cmake.in needs these variables,
|
||||
+# we force them to NO because we don't need the CMake dependency for them,
|
||||
+# the dependencies are provided by the .pc files.
|
||||
+AC_SUBST(WITH_OPENSSL, NO)
|
||||
+AC_SUBST(_WITH_LIBUCONTEXT, NO)
|
||||
|
||||
AM_CONDITIONAL([HAS_FUZZING_ENGINE], [test "x$LIB_FUZZING_ENGINE" != "x"])
|
||||
|
||||
diff --git a/c++/src/kj/CMakeLists.txt b/c++/src/kj/CMakeLists.txt
|
||||
index 813fac4d..f7b4dddf 100644
|
||||
--- a/c++/src/kj/CMakeLists.txt
|
||||
+++ b/c++/src/kj/CMakeLists.txt
|
||||
@@ -136,6 +136,15 @@ if(NOT CAPNP_LITE)
|
||||
add_library(kj-async ${kj-async_sources})
|
||||
add_library(CapnProto::kj-async ALIAS kj-async)
|
||||
target_link_libraries(kj-async PUBLIC kj)
|
||||
+ if(WITH_FIBERS)
|
||||
+ target_compile_definitions(kj-async PUBLIC KJ_USE_FIBERS)
|
||||
+ if(_WITH_LIBUCONTEXT)
|
||||
+ target_link_libraries(kj-async PUBLIC PkgConfig::libucontext)
|
||||
+ endif()
|
||||
+ else()
|
||||
+ target_compile_definitions(kj-async PUBLIC KJ_USE_FIBERS=0)
|
||||
+ endif()
|
||||
+
|
||||
if(UNIX)
|
||||
# external clients of this library need to link to pthreads
|
||||
target_compile_options(kj-async INTERFACE "-pthread")
|
||||
@@ -181,7 +190,7 @@ if(NOT CAPNP_LITE)
|
||||
add_library(kj-tls ${kj-tls_sources})
|
||||
add_library(CapnProto::kj-tls ALIAS kj-tls)
|
||||
target_link_libraries(kj-tls PUBLIC kj-async)
|
||||
- if (WITH_OPENSSL)
|
||||
+ if(WITH_OPENSSL)
|
||||
target_compile_definitions(kj-tls PRIVATE KJ_HAS_OPENSSL)
|
||||
target_link_libraries(kj-tls PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
||||
endif()
|
||||
--
|
||||
2.35.1
|
||||
|
Loading…
Reference in New Issue
Block a user