# Maintainer: Massimiliano Torromeo # Contributor: Aleksey Filippov # Contributor: Victor Aurélio Santos # ALARM: Kevin Mihelich # - explicitly link v5/v6 with libatomic pkgbase='grpc' pkgname=('grpc' 'python-grpcio' 'php-grpc' 'php7-grpc' 'grpc-cli') pkgver=1.38.0 _gtestver=c9ccac7cb7345901884aabf5d1a786cfa6e2f397 pkgrel=3 pkgdesc="High performance, open source, general RPC framework that puts mobile and HTTP/2 first." arch=('x86_64') url='https://grpc.io' license=('BSD') makedepends=('re2' 're2c' 'protobuf' 'php' 'php7' 'c-ares' 'openssl' 'chrpath' 'cython' 'cmake' 'benchmark' 'python-setuptools' 'abseil-cpp' 'ninja') source=("https://github.com/grpc/grpc/archive/v$pkgver/$pkgbase-$pkgver.tar.gz" "https://github.com/google/googletest/archive/$_gtestver/googletest-$_gtestver.tar.gz" "python-grpcio-use-system-abseil.patch") sha256sums=('abd9e52c69000f2c051761cfa1f12d52d8b7647b6c66828a91d462e796f2aede' '443d383db648ebb8e391382c0ab63263b7091d03197f304390baac10f178a468' 'f8b9cf84e16ac66d9cb74c954362b037e69ae98a61d16fc1889ad15831bee588') prepare() { cd "$srcdir/$pkgbase-$pkgver" patch -Np1 -i ../python-grpcio-use-system-abseil.patch ln -sf "$srcdir/googletest-$_gtestver/"{googlemock,googletest} \ third_party/googletest cp -a src/php{,7} if [[ $CARCH == "armv6h" || $CARCH == "arm" ]]; then sed -i -e "s/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} rt m pthread)/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} atomic rt m pthread)/g" CMakeLists.txt fi cmake -Bbuild \ -DCMAKE_BUILD_TYPE=None \ -DCMAKE_CXX_FLAGS="${CXXFLAGS} -DNDEBUG" \ -DgRPC_INSTALL=ON \ -DBUILD_SHARED_LIBS=ON \ -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_SKIP_INSTALL_RPATH=ON \ -DCMAKE_INSTALL_PREFIX=/usr \ -DgRPC_BUILD_TESTS=ON \ -DgRPC_BUILD_CODEGEN=ON \ -DgRPC_BUILD_CSHARP_EXT=ON \ -DgRPC_BACKWARDS_COMPATIBILITY_MODE=OFF \ -DgRPC_ZLIB_PROVIDER='package' \ -DgRPC_CARES_PROVIDER='package' \ -DgRPC_RE2_PROVIDER='package' \ -DgRPC_SSL_PROVIDER='package' \ -DgRPC_PROTOBUF_PROVIDER='package' \ -DgRPC_PROTOBUF_PACKAGE_TYPE='MODULE' \ -DgRPC_BENCHMARK_PROVIDER:STRING='package' \ -DgRPC_ABSL_PROVIDER:STRING='package' \ -DgRPC_USE_PROTO_LITE=OFF \ -DgRPC_BUILD_GRPC_CPP_PLUGIN=ON \ -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=ON \ -DgRPC_BUILD_GRPC_NODE_PLUGIN=ON \ -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=ON \ -DgRPC_BUILD_GRPC_PHP_PLUGIN=ON \ -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=ON \ -DgRPC_BUILD_GRPC_RUBY_PLUGIN=ON \ -GNinja } build() { cd "$srcdir/$pkgbase-$pkgver/build" cmake --build . export LDFLAGS="$LDFLAGS -L$PWD" # PHP cd "$srcdir/$pkgbase-$pkgver/src/php/ext/$pkgbase" phpize ./configure --enable-grpc="$srcdir/$pkgbase-$pkgver" make # PHP7 cd "$srcdir/$pkgbase-$pkgver/src/php7/ext/$pkgbase" phpize7 ./configure --enable-grpc="$srcdir/$pkgbase-$pkgver" make # Python cd "$srcdir/$pkgbase-$pkgver" GRPC_PYTHON_CFLAGS="-fvisibility=hidden -fno-wrapv -fno-exceptions $(pkg-config --cflags protobuf) -std=c++17" \ GRPC_PYTHON_LDFLAGS="$(pkg-config --libs protobuf)" \ GRPC_PYTHON_BUILD_WITH_CYTHON=1 \ GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 \ GRPC_PYTHON_BUILD_SYSTEM_CARES=1 \ GRPC_PYTHON_BUILD_SYSTEM_RE2=1 \ GRPC_PYTHON_BUILD_SYSTEM_ABSL=1 \ GRPC_BUILD_WITH_BORING_SSL_ASM=0 \ python setup.py build } check() { cd "$srcdir/$pkgbase-$pkgver" local _pyver=$(python -c "import sys; print('{0}.{1}'.format(*sys.version_info[:2]))") PYTHONPATH="python_build/lib.linux-$CARCH-$_pyver" python -c 'import grpc' } package_grpc() { depends=('c-ares' 'protobuf' 'openssl' 're2' 'abseil-cpp') provides=( 'libupb.so' 'libgrpcpp_channelz.so' 'libgrpc_unsecure.so' 'libgrpc_plugin_support.so' 'libgrpc.so' 'libgrpc++_unsecure.so' 'libgrpc++_reflection.so' 'libgrpc++_error_details.so' 'libgrpc++_alts.so' 'libgrpc++.so' 'libgpr.so' 'libaddress_sorting.so' ) cd "$srcdir/$pkgbase-$pkgver/build" DESTDIR="$pkgdir" cmake --install . install -Dm644 ../LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE } package_python-grpcio() { pkgdesc='Python language bindings for grpc, remote procedure call (RPC) framework' depends=('c-ares' 'python' 're2' 'abseil-cpp') cd "$srcdir/$pkgbase-$pkgver" python setup.py install -O1 --skip-build --root="$pkgdir" install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE } package_php-grpc() { pkgdesc='gRPC module for PHP' depends=('grpc' 'php') backup=('etc/php/conf.d/grpc.ini') # Install PHP extension. cd "$srcdir/$pkgbase-$pkgver/src/php/ext/$pkgbase" make install "INSTALL_ROOT=$pkgdir" install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE # Remove RPATH chrpath -d "$pkgdir/usr/lib/php/modules/grpc.so" echo ';extension=grpc.so' >grpc.ini install -Dm644 grpc.ini "$pkgdir/etc/php/conf.d/grpc.ini" } package_php7-grpc() { pkgdesc='gRPC module for PHP' depends=('grpc' 'php7') backup=('etc/php7/conf.d/grpc.ini') # Install PHP extension. cd "$srcdir/$pkgbase-$pkgver/src/php7/ext/$pkgbase" make install "INSTALL_ROOT=$pkgdir" install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE # Remove RPATH chrpath -d "$pkgdir/usr/lib/php7/modules/grpc.so" echo ';extension=grpc.so' >grpc.ini install -Dm644 grpc.ini "$pkgdir/etc/php7/conf.d/grpc.ini" } package_grpc-cli() { pkgdesc='gRPC protocol buffers cli' depends=('grpc') cd "$srcdir/$pkgbase-$pkgver" install -dm0755 "$pkgdir/usr/lib" cp -a build/libgrpc++_test_config.so* "$pkgdir/usr/lib/" install -Dm0755 build/grpc_cli "$pkgdir/usr/bin/grpc_cli" install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE }