Skip to content
Snippets Groups Projects
Commit 14b1de37 authored by Jakub Jirutka's avatar Jakub Jirutka :flag_ua:
Browse files

community/grpc: build ruby bindings and add ruby-grpc subpkg

ca-certificates is needed also for C libs.
parent 426a1ba3
No related branches found
No related tags found
2 merge requests!39304[3.16] main/expat: security upgrade to 2.4.9,!38149community/grpc: multiple improvements
...@@ -3,17 +3,21 @@ ...@@ -3,17 +3,21 @@
# Maintainer: wener <wenermail@gmail.com> # Maintainer: wener <wenermail@gmail.com>
pkgname=grpc pkgname=grpc
pkgver=1.48.0 pkgver=1.48.0
pkgrel=2 pkgrel=3
pkgdesc="The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)" pkgdesc="The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)"
url="https://grpc.io/" url="https://grpc.io/"
arch="all" arch="all"
license="Apache-2.0" license="Apache-2.0"
depends="protobuf" depends="ca-certificates protobuf"
_pythondepends=" _pythondepends="
cython cython
python3-dev python3-dev
py3-setuptools py3-setuptools
" "
_rubydepends="
$pkgname=$pkgver-r$pkgrel
ruby-google-protobuf>=3.19
"
makedepends=" makedepends="
abseil-cpp-dev abseil-cpp-dev
autoconf autoconf
...@@ -28,17 +32,29 @@ makedepends=" ...@@ -28,17 +32,29 @@ makedepends="
openssl-dev>3 openssl-dev>3
protobuf-dev protobuf-dev
re2-dev re2-dev
ruby-dev
samurai samurai
yaml-dev yaml-dev
zlib-dev zlib-dev
$_pythondepends $_pythondepends
$_rubydepends
" "
checkdepends="coreutils python3 py3-six" checkdepends="coreutils python3 py3-six"
subpackages="$pkgname-dev $pkgname-doc py3-grpcio:grpcio" subpackages="
$pkgname-dev
$pkgname-doc
py3-grpcio:grpcio
ruby-grpc:_ruby
"
_googletest_rev=0e402173c97aea7a00749e825b194bfede4f2e45 _googletest_rev=0e402173c97aea7a00749e825b194bfede4f2e45
source="https://github.com/grpc/grpc/archive/v$pkgver/grpc-v$pkgver.tar.gz source="https://github.com/grpc/grpc/archive/v$pkgver/grpc-v$pkgver.tar.gz
googletest-$_googletest_rev.tar.gz::https://github.com/google/googletest/archive/$_googletest_rev.tar.gz googletest-$_googletest_rev.tar.gz::https://github.com/google/googletest/archive/$_googletest_rev.tar.gz
01-chttp2-maybe-uninitialized.patch 01-chttp2-maybe-uninitialized.patch
ruby-use-shared-libs.patch
ruby-dont-strip-library.patch
ruby-fix-protoc-path.patch
ruby-use-system-certs.patch
makefile-use-system-abseil.patch
" "
options="!check" # sometimes hang indefinitely on builders options="!check" # sometimes hang indefinitely on builders
...@@ -47,6 +63,21 @@ prepare() { ...@@ -47,6 +63,21 @@ prepare() {
mv "$srcdir"/googletest-$_googletest_rev third_party/googletest mv "$srcdir"/googletest-$_googletest_rev third_party/googletest
default_prepare default_prepare
# Remove some bundled dependencies from the gem's files list.
sed -i \
-e '/etc\/roots.pem/d' \
-e '/third_party\/abseil/d' \
-e '/third_party\/boringssl/d' \
-e '/third_party\/cares/d' \
-e '/third_party\/re2/d' \
-e '/third_party\/zlib/d' \
grpc.gemspec
# Remove unused dependency from gemspec - it's not required anyhwere,
# it's just Google pushing their crap everywhere...
sed -i '/add_dependency.*googleapis-common-protos-types/d' \
grpc.gemspec
} }
build() { build() {
...@@ -81,6 +112,16 @@ build() { ...@@ -81,6 +112,16 @@ build() {
# grpcio-tools # grpcio-tools
cd tools/distrib/python cd tools/distrib/python
python3 make_grpcio_tools.py python3 make_grpcio_tools.py
cd "$builddir"
gem build grpc.gemspec
TOPDIR="$PWD/_build" gem install \
--local \
--install-dir _build/ruby \
--ignore-dependencies \
--no-document \
--verbose \
grpc-$pkgver.gem
} }
check() { check() {
...@@ -130,8 +171,46 @@ grpcio() { ...@@ -130,8 +171,46 @@ grpcio() {
python3 setup.py install --skip-build --prefix=/usr --root="$subpkgdir" python3 setup.py install --skip-build --prefix=/usr --root="$subpkgdir"
} }
_ruby() {
pkgdesc="Send RPCs from Ruby using GRPC"
depends="$_rubydepends"
local gemdir="$subpkgdir/$(ruby -e 'puts Gem.default_dir')"
cd "$builddir"/_build/ruby
mkdir -p "$gemdir"
cp -r extensions gems specifications "$gemdir"/
# Remove unnecessary files and rubbish...
cd "$gemdir"/extensions/*/*/grpc-$pkgver
rm gem_make.out mkmf.log || true
cd "$gemdir"/gems/grpc-$pkgver
rm -rf .yardopts \
Makefile \
include/ \
src/core/ \
third_party/
cd src/ruby
rm -rf bin/ \
ext/ \
lib/grpc/*.so \
pb/generate_proto_ruby.sh \
pb/README.md \
pb/src/ \
pb/test/ \
spec/
}
sha512sums=" sha512sums="
558c659b325eb2f64f6caf78c0701eaaf3d9ae35f6d25ccd69b8995d5b82b98ca1a7ef9f497a0a1dab5914d2328c044c108373152426a15045d0c978b27f3503 grpc-v1.48.0.tar.gz 558c659b325eb2f64f6caf78c0701eaaf3d9ae35f6d25ccd69b8995d5b82b98ca1a7ef9f497a0a1dab5914d2328c044c108373152426a15045d0c978b27f3503 grpc-v1.48.0.tar.gz
5c5eaf6ff9f3c1bca025b7ef0234ba97232ba85b43e6354a92f49b7208f5c47581ebaf18bf58618498e5d264f2620c2b6676e81bb0f7df77112b96ba271ececf googletest-0e402173c97aea7a00749e825b194bfede4f2e45.tar.gz 5c5eaf6ff9f3c1bca025b7ef0234ba97232ba85b43e6354a92f49b7208f5c47581ebaf18bf58618498e5d264f2620c2b6676e81bb0f7df77112b96ba271ececf googletest-0e402173c97aea7a00749e825b194bfede4f2e45.tar.gz
7fa146ce86ddd4f160bb1ca9ff01cb7aca6b2b8c9aa50e4fa6b84504b9117b104be0d1e31ccb452d846549dfe1e9012ceccfcdc1f2357ed567621d71fb8b08c5 01-chttp2-maybe-uninitialized.patch 7fa146ce86ddd4f160bb1ca9ff01cb7aca6b2b8c9aa50e4fa6b84504b9117b104be0d1e31ccb452d846549dfe1e9012ceccfcdc1f2357ed567621d71fb8b08c5 01-chttp2-maybe-uninitialized.patch
9c7709dadb969d862df4c4300876ee0f7b60403b3fc2653b06e85b4a534c1727f37edfdcabbf3995ebf02873bc669ff4601f8c3343f2c9de44fc899f23f5d092 ruby-use-shared-libs.patch
b32b23578fa868a389a2db693e2de1a24ee33a7aaeeeb8f410c0d87b25727cd94c5af41f5e668dfcad6c516667989900999230a3e9b16abe2f8de75c44aa67a1 ruby-dont-strip-library.patch
4ea72d2acd8bee9c9022a4412aa0af0477faca7b0810d14decb3ad5d4da044247f51189512323bfee855b9b260a7f82b812310391451e5d8ee718297800d7a73 ruby-fix-protoc-path.patch
631af4b9ac29c1ebabb2c88394ea2993e36cec1beda38195e1587dbd9d3c8c9eef75a17d2326d3cd2e682de551401216075ba08fdc501c098b8092d718ded381 ruby-use-system-certs.patch
89e260934da83eb45fa6b73884cba1b1c30f99c0eb883a726e2d36ee4788246f4c6fa1b201077038af956bcb58e625f83bedba4f186c711785ec240373ce4fc5 makefile-use-system-abseil.patch
" "
--- a/Makefile
+++ b/Makefile
@@ -575,8 +575,8 @@
# Setup abseil dependency
-GRPC_ABSEIL_DEP = $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a
-GRPC_ABSEIL_MERGE_LIBS = $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a
+GRPC_ABSEIL_DEP = -labsl_base -labsl_int128 -labsl_strings -labsl_time -labsl_bad_optional_access -labsl_throw_delegate -labsl_str_format_internal
+GRPC_ABSEIL_MERGE_LIBS = -labsl_base -labsl_int128 -labsl_strings -labsl_time -labsl_bad_optional_access -labsl_throw_delegate -labsl_str_format_internal
# Setup re2 dependency
@@ -2809,7 +2809,7 @@
third_party/abseil-cpp/absl/types/bad_variant_access.cc \
-LIBGRPC_ABSEIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_ABSEIL_SRC))))
+LIBGRPC_ABSEIL_OBJS =
$(LIBGRPC_ABSEIL_OBJS): CPPFLAGS += -g -Ithird_party/abseil-cpp
From: Jakub Jirutka <jakub@jirutka.cz>
Date: Wed, 24 Aug 2022 21:20:22 +0200
Subject: [PATCH] Don't strip the built library
abuild does it.
--- a/src/ruby/ext/grpc/extconf.rb
+++ b/src/ruby/ext/grpc/extconf.rb
@@ -141,21 +121,3 @@
output = File.join('grpc', 'grpc_c')
puts 'Generating Makefile for ' + output
create_makefile(output)
-
-strip_tool = RbConfig::CONFIG['STRIP']
-strip_tool += ' -x' if apple_toolchain
-
-if grpc_config == 'opt'
- File.open('Makefile.new', 'w') do |o|
- o.puts 'hijack: all strip'
- o.puts
- File.foreach('Makefile') do |i|
- o.puts i
- end
- o.puts
- o.puts 'strip: $(DLLIB)'
- o.puts "\t$(ECHO) Stripping $(DLLIB)"
- o.puts "\t$(Q) #{strip_tool} $(DLLIB)"
- end
- File.rename('Makefile.new', 'Makefile')
-end
Patch-Source: https://sources.debian.org/src/grpc/1.44.0-3/debian/patches/fix-protoc-path.patch (modified)
--- a/src/ruby/end2end/package_with_underscore_test.rb
+++ b/src/ruby/end2end/package_with_underscore_test.rb
@@ -20,8 +20,8 @@ def main
pb_dir = File.join(root_dir, 'src', 'ruby', 'end2end', 'protos')
- bins_dir = File.join(root_dir, 'cmake', 'build')
+ bins_dir = '/usr/bin'
plugin = File.join(bins_dir, 'grpc_ruby_plugin')
- protoc = File.join(bins_dir, 'third_party', 'protobuf', 'protoc')
+ protoc = File.join(bins_dir, 'protoc')
got = nil
--- a/src/ruby/tools/bin/grpc_tools_ruby_protoc
+++ b/src/ruby/tools/bin/grpc_tools_ruby_protoc
@@ -25,6 +25,5 @@ plugin_name = 'grpc_ruby_plugin' + ext
-protoc_dir = File.join(File.dirname(__FILE__),
- PLATFORM.architecture + '-' + PLATFORM.os_name)
+protoc_dir = '/usr/bin'
protoc_path = File.join(protoc_dir, protoc_name)
From: Jakub Jirutka <jakub@jirutka.cz>
Date: Wed, 24 Aug 2022 21:20:22 +0200
Subject: [PATCH] Link with shared libraries, don't embed anything
- Don't statically link openssl, zlib and cares.
- Don't build and statically link libgrpc, link shared libgrpc.
- Don't statically link libgcc and libstdc++.
--- a/src/ruby/ext/grpc/extconf.rb
+++ b/src/ruby/ext/grpc/extconf.rb
@@ -68,11 +68,11 @@
end
# Don't embed on TruffleRuby (constant-time crypto is unsafe with Sulong, slow build times)
-ENV['EMBED_OPENSSL'] = (RUBY_ENGINE != 'truffleruby').to_s
+ENV['EMBED_OPENSSL'] = 'false'
# Don't embed on TruffleRuby (the system zlib is already linked for the zlib C extension, slow build times)
-ENV['EMBED_ZLIB'] = (RUBY_ENGINE != 'truffleruby').to_s
+ENV['EMBED_ZLIB'] = 'false'
-ENV['EMBED_CARES'] = 'true'
+ENV['EMBED_CARES'] = 'false'
ENV['ARCH_FLAGS'] = RbConfig::CONFIG['ARCH_FLAG']
if apple_toolchain && !cross_compiling
@@ -92,23 +92,8 @@
output_dir = File.expand_path(RbConfig::CONFIG['topdir'])
grpc_lib_dir = File.join(output_dir, 'libs', grpc_config)
ENV['BUILDDIR'] = output_dir
+$LDFLAGS << ' -L' + ENV.fetch('TOPDIR', '.')
-unless windows
- puts 'Building internal gRPC into ' + grpc_lib_dir
- nproc = 4
- nproc = Etc.nprocessors if Etc.respond_to? :nprocessors
- nproc_override = ENV['GRPC_RUBY_BUILD_PROCS']
- unless nproc_override.nil? or nproc_override.size == 0
- nproc = nproc_override
- puts "Overriding make parallelism to #{nproc}"
- end
- make = bsd ? 'gmake' : 'make'
- cmd = "#{make} -j#{nproc} -C #{grpc_root} #{grpc_lib_dir}/libgrpc.a CONFIG=#{grpc_config} Q="
- puts "Building grpc native library: #{cmd}"
- system(cmd)
- exit 1 unless $? == 0
-end
-
$CFLAGS << ' -I' + File.join(grpc_root, 'include')
ext_export_file = File.join(grpc_root, 'src', 'ruby', 'ext', 'grpc', 'ext-export')
@@ -116,7 +101,7 @@
$LDFLAGS << ' -Wl,--version-script="' + ext_export_file + '.gcc"' if linux
$LDFLAGS << ' -Wl,-exported_symbols_list,"' + ext_export_file + '.clang"' if apple_toolchain
-$LDFLAGS << ' ' + File.join(grpc_lib_dir, 'libgrpc.a') unless windows
+$LDFLAGS << ' -Wl,-wrap,memcpy -lgrpc' unless windows
if grpc_config == 'gcov'
$CFLAGS << ' -O0 -fprofile-arcs -ftest-coverage'
$LDFLAGS << ' -fprofile-arcs -ftest-coverage -rdynamic'
@@ -127,10 +112,6 @@
end
$LDFLAGS << ' -Wl,-wrap,memcpy' if linux
-# Do not statically link standard libraries on TruffleRuby as this does not work when compiling to bitcode
-if linux && RUBY_ENGINE != 'truffleruby'
- $LDFLAGS << ' -static-libgcc -static-libstdc++'
-end
$LDFLAGS << ' -static' if windows
$CFLAGS << ' -std=c11 '
From: Jakub Jirutka <jakub@jirutka.cz>
Date: Fri, 20 May 2017 01:35:00 +0200
Subject: [PATCH] Use system CA certificates
--- a/src/ruby/lib/grpc.rb
+++ b/src/ruby/lib/grpc.rb
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-ssl_roots_path = File.expand_path('../../../../etc/roots.pem', __FILE__)
+ssl_roots_path = '/etc/ssl/certs/ca-certificates.crt'
require_relative 'grpc/errors'
require_relative 'grpc/structs'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment