diff --git a/grpc-find-re2-via-pkgconfig.patch b/grpc-find-re2-via-pkgconfig.patch new file mode 100644 index 0000000..3800569 --- /dev/null +++ b/grpc-find-re2-via-pkgconfig.patch @@ -0,0 +1,120 @@ +From 45e413d2520795e7281e9a592af81620349bc186 Mon Sep 17 00:00:00 2001 +From: Paul Wankadia +Date: Wed, 9 Sep 2020 04:26:36 -0700 +Subject: [PATCH] Attempt to find RE2 via CMake and via pkg-config. + +--- + CMakeLists.txt | 1 + + cmake/modules/Findre2.cmake | 58 +++++++++++++++++++++++++++++++ + cmake/re2.cmake | 6 +--- + templates/CMakeLists.txt.template | 1 + + 4 files changed, 61 insertions(+), 5 deletions(-) + create mode 100644 cmake/modules/Findre2.cmake + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4b04d25ac50..cecb4396c57 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -15624,6 +15624,7 @@ install(FILES + ) + install(FILES + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/Findc-ares.cmake ++ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/Findre2.cmake + DESTINATION ${gRPC_INSTALL_CMAKEDIR}/modules + ) + +diff --git a/cmake/modules/Findre2.cmake b/cmake/modules/Findre2.cmake +new file mode 100644 +index 00000000000..41df4547138 +--- /dev/null ++++ b/cmake/modules/Findre2.cmake +@@ -0,0 +1,58 @@ ++# Copyright 2017 gRPC authors. ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++ ++find_package(re2 QUIET CONFIG) ++if(re2_FOUND) ++ message(STATUS "Found RE2 via CMake.") ++ return() ++endif() ++ ++find_package(PkgConfig REQUIRED) ++# TODO(junyer): Use the IMPORTED_TARGET option whenever CMake 3.6 (or newer) ++# becomes the minimum required: that will take care of the add_library() and ++# set_property() calls; then we can simply alias PkgConfig::RE2 as re2::re2. ++# For now, we can only set INTERFACE_* properties that existed in CMake 3.5. ++pkg_check_modules(RE2 QUIET re2) ++if(RE2_FOUND) ++ set(re2_FOUND "${RE2_FOUND}") ++ add_library(re2::re2 INTERFACE IMPORTED) ++ if(RE2_INCLUDE_DIRS) ++ set_property(TARGET re2::re2 PROPERTY ++ INTERFACE_INCLUDE_DIRECTORIES "${RE2_INCLUDE_DIRS}") ++ endif() ++ if(RE2_CFLAGS_OTHER) ++ # Filter out the -std flag, which is handled by CMAKE_CXX_STANDARD. ++ # TODO(junyer): Use the FILTER option whenever CMake 3.6 (or newer) ++ # becomes the minimum required: that will allow this to be concise. ++ foreach(flag IN LISTS RE2_CFLAGS_OTHER) ++ if("${flag}" MATCHES "^-std=") ++ list(REMOVE_ITEM RE2_CFLAGS_OTHER "${flag}") ++ endif() ++ endforeach() ++ set_property(TARGET re2::re2 PROPERTY ++ INTERFACE_COMPILE_OPTIONS "${RE2_CFLAGS_OTHER}") ++ endif() ++ if(RE2_LDFLAGS) ++ set_property(TARGET re2::re2 PROPERTY ++ INTERFACE_LINK_LIBRARIES "${RE2_LDFLAGS}") ++ endif() ++ message(STATUS "Found RE2 via pkg-config.") ++ return() ++endif() ++ ++if(re2_FIND_REQUIRED) ++ message(FATAL_ERROR "Failed to find RE2.") ++elseif(NOT re2_FIND_QUIETLY) ++ message(WARNING "Failed to find RE2.") ++endif() +diff --git a/cmake/re2.cmake b/cmake/re2.cmake +index 3e83aae6910..974b0a436e2 100644 +--- a/cmake/re2.cmake ++++ b/cmake/re2.cmake +@@ -45,13 +45,9 @@ if(gRPC_RE2_PROVIDER STREQUAL "module") + set(gRPC_INSTALL FALSE) + endif() + elseif(gRPC_RE2_PROVIDER STREQUAL "package") +- find_package(re2 REQUIRED CONFIG) +- ++ find_package(re2 REQUIRED) + if(TARGET re2::re2) + set(_gRPC_RE2_LIBRARIES re2::re2) +- else() +- set(_gRPC_RE2_LIBRARIES ${RE2_LIBRARIES}) + endif() +- set(_gRPC_RE2_INCLUDE_DIR ${RE2_INCLUDE_DIRS}) + set(_gRPC_FIND_RE2 "if(NOT re2_FOUND)\n find_package(re2)\nendif()") + endif() +diff --git a/templates/CMakeLists.txt.template b/templates/CMakeLists.txt.template +index c7f2556dc92..f7db0fd2d0c 100644 +--- a/templates/CMakeLists.txt.template ++++ b/templates/CMakeLists.txt.template +@@ -706,6 +706,7 @@ + ) + install(FILES + <%text>${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/Findc-ares.cmake ++ <%text>${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/Findre2.cmake + DESTINATION <%text>${gRPC_INSTALL_CMAKEDIR}/modules + ) + diff --git a/grpc.changes b/grpc.changes index 6cdcda9..243f79f 100644 --- a/grpc.changes +++ b/grpc.changes @@ -1,3 +1,43 @@ +------------------------------------------------------------------- +Thu Sep 10 14:33:01 UTC 2020 - Atri Bhattacharya + +- Update to version 1.32.0: + * Core + - Remove stream from stalled lists on remove_stream + (gh#grpc/grpc#23984). + - Do not cancel RPC if send metadata size if larger than + peer's limit (gh#grpc/grpc#23806). + - Don't consider receiving non-OK status as an error for HTTP2 + (gh#grpc/grpc#19545). + - Keepalive throttling (gh#grpc/grpc#23313). + - Include the target_uri in "target uri is not valid" error + messages (gh#grpc/grpc#23782). + - Fix "cannot send compressed message large than 1024B" in + cronet_transport (gh#grpc/grpc#23219). + - Receive SETTINGS frame on clients before declaring + subchannel READY (gh#grpc/grpc#23636). + - Enabled GPR_ABSEIL_SYNC (gh#grpc/grpc#23372). + - Experimental xDS v3 support (gh#grpc/grpc#23281). + * C++ + - Upgrade bazel used for all tests to 2.2.0 + (gh#grpc/grpc#23902). + - Remove test targets and test helper libraries from Makefile + (gh#grpc/grpc#23813). + - Fix repeated builds broken by re2's cmake + (gh#grpc/grpc#23587). + - Log the peer address of grpc_cli CallMethod RPCs to stderr + (gh#grpc/grpc#23557). +- Use cmake to configure and cmake macros to build and install. +- New BuildRequires: abseil-cpp-source and pkgconfig(re2); copy + abseil-cpp-source contents into source's third_party dir and + build it as a module (since we don't have the actual abseil-cpp + library built for openSUSE. +- Add grpc-find-re2-via-pkgconfig.patch to enable finding system + Re2 library via pkg-config; taken from upstream PR + gh#grpc/grpc#24088. +- Split out new shared lib package libgrpc_plugin_support1 for + supporting grpc plugins. + ------------------------------------------------------------------- Wed Sep 9 22:43:27 UTC 2020 - Atri Bhattacharya diff --git a/grpc.spec b/grpc.spec index a293af6..0ce4b17 100644 --- a/grpc.spec +++ b/grpc.spec @@ -16,11 +16,12 @@ # -%define lver 8 +%define lver 12 %define lverp 1 +%define lverplugin 1 %define src_install_dir /usr/src/%name Name: grpc -Version: 1.25.0 +Version: 1.32.0 Release: 0 Summary: HTTP/2-based Remote Procedure Call implementation License: Apache-2.0 @@ -28,6 +29,9 @@ Group: Development/Tools/Building URL: https://grpc.io/ Source: https://github.com/grpc/grpc/archive/v%version.tar.gz Source2: %name-rpmlintrc +# PATCH-FIX-UPSTREAM grpc-find-re2-via-pkgconfig.patch gh#grpc/grpc#24088 badshah400@gmail.com -- Attempt to find Re2 library via pkg-config; patch taken from upstream PR +Patch0: grpc-find-re2-via-pkgconfig.patch +BuildRequires: abseil-cpp-source BuildRequires: cmake BuildRequires: fdupes BuildRequires: gcc-c++ @@ -36,6 +40,7 @@ BuildRequires: zypper BuildRequires: pkgconfig(libcares) BuildRequires: pkgconfig(openssl) >= 1.0.1 BuildRequires: pkgconfig(protobuf) >= 3.8.0 +BuildRequires: pkgconfig(re2) BuildRequires: pkgconfig(zlib) %description @@ -69,11 +74,23 @@ The reference implementation of the gRPC protocol, done on top of HTTP/2 with support for synchronous and asynchronous calls. gRPC uses Protocol Buffers as the Interface Definition Language by default. +%package -n libgrpc_plugin_support%lverplugin +Summary: HTTP/2-based Remote Procedure Call implementation - plugin support +Group: System/Libraries + +%description -n libgrpc_plugin_support%lverplugin +The reference implementation of the gRPC protocol, done on top of +HTTP/2 with support for synchronous and asynchronous calls. gRPC uses +Protocol Buffers as the Interface Definition Language by default. + +This package provides the shared library to support plugins for grpc. + %package devel Summary: Development files for grpc, a HTTP/2 Remote Procedure Call implementation Group: Development/Tools/Building Requires: libgrpc%lver = %version Requires: libgrpc++%lverp = %version +Requires: libgrpc-plugin-support%lverplugin = %version %description devel This subpackage contains libraries and header files for developing @@ -89,6 +106,8 @@ This subpackage contains source code of the gRPC reference implementation. %prep %autosetup -p1 +# Copy abseil-cpp source into empty third_party/abseil-cpp dir +cp -r %_prefix/src/abseil-cpp/* third_party/abseil-cpp/ %build %define _lto_cflags %nil @@ -97,28 +116,37 @@ mkdir -p third_party/protobuf/src export CFLAGS="%optflags -Wno-error" export CXXFLAGS="$CFLAGS" -make %{?_smp_mflags} STRIP=/bin/true V=1 VERBOSE=1 +%cmake -DgRPC_INSTALL=ON \ + -DgRPC_ABSL_PROVIDER=module \ + -DgRPC_CARES_PROVIDER=package \ + -DgRPC_PROTOBUF_PROVIDER=package \ + -DgRPC_RE2_PROVIDER=package \ + -DgRPC_SSL_PROVIDER=package \ + -DgRPC_ZLIB_PROVIDER=package +%cmake_build %install b="%buildroot" # work around "Argument list too long" ln -s "%buildroot" "b" -%make_install DESTDIR="b" prefix="b/%_prefix" STRIP=/bin/true V=1 VERBOSE=1 +%cmake_install -find "$b/%_includedir" -type f -exec chmod a-x {} + pushd "$b/usr" rm -fv lib/*.a share/grpc/*.pem -perl -i -pe 's{^prefix=.*}{prefix=%_prefix}' lib/pkgconfig/*.pc -perl -i -pe 's{^libdir=.*}{libdir=%_libdir}' lib/pkgconfig/*.pc if test ! -d lib64 && test "%_lib" = lib64; then mv lib lib64 fi popd # Install sources +pushd %__builddir make clean -rm -f "b" "a.out" -find . -type f "(" -name "*.so" -o -name "*.o" -o -name ".git*" ")" -exec rm -rf {} + +rm -f "b" +find . -type f "(" -name "*.so" -o -name "*.o" -o -name ".git*" -o -name "*.bin" -o -name "*.out" ")" -exec rm -rf {} + +popd +# Don't include abseil-cpp in sources +rm -fr third_party/abseil-cpp/* + mkdir -p "%buildroot/%src_install_dir" cp -r * "%buildroot/%src_install_dir" @@ -128,22 +156,29 @@ cp -r * "%buildroot/%src_install_dir" %postun -n libgrpc%lver -p /sbin/ldconfig %post -n libgrpc++%lverp -p /sbin/ldconfig %postun -n libgrpc++%lverp -p /sbin/ldconfig +%post -n libgrpc_plugin_support%lverplugin -p /sbin/ldconfig +%postun -n libgrpc_plugin_support%lverplugin -p /sbin/ldconfig %files -n libgrpc%lver %_libdir/libaddress_sorting.so.%{lver}* %_libdir/libgpr*.so.%{lver}* %_libdir/libgrpc*.so.%{lver}* +%_libdir/libupb*.so.%{lver}* %files -n libgrpc++%lverp %_libdir/libgrpc++*.so.%{lverp}* %_libdir/libgrpcpp_channelz.so.%{lverp}* +%files -n libgrpc_plugin_support%lverplugin +%_libdir/libgrpc_plugin_support.so.%{lverplugin}* + %files devel %license LICENSE %_bindir/* %_includedir/* %_libdir/pkgconfig/*.pc %_libdir/*.so +%_libdir/cmake/grpc/ %files source %src_install_dir diff --git a/v1.25.0.tar.gz b/v1.25.0.tar.gz deleted file mode 100644 index 2d17dbd..0000000 --- a/v1.25.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ffbe61269160ea745e487f79b0fd06b6edd3d50c6d9123f053b5634737cf2f69 -size 16460163 diff --git a/v1.32.0.tar.gz b/v1.32.0.tar.gz new file mode 100644 index 0000000..a8e27e8 --- /dev/null +++ b/v1.32.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f880ebeb2ccf0e47721526c10dd97469200e40b5f101a0d9774eb69efa0bd07a +size 7174251