diff --git a/0001-Allow-building-the-python-module-with-system-openssl.patch b/0001-Allow-building-the-python-module-with-system-openssl.patch new file mode 100644 index 0000000..36d841e --- /dev/null +++ b/0001-Allow-building-the-python-module-with-system-openssl.patch @@ -0,0 +1,68 @@ +From 30ce693621d61efb8596503a0da212077a8c4daa Mon Sep 17 00:00:00 2001 +From: Thomas Bechtold +Date: Thu, 24 May 2018 17:12:13 +0200 +Subject: [PATCH 1/3] Allow building the python module with system openssl + +When building the python module and using the new +GRPC_PYTHON_BUILD_SYSTEM_OPENSSL env variable, the third party +boringssl code is not compiled. Instead, the openssl shared library +installed on the system is used during runtime. +This is useful for distributions who don't want to include code copies +but use shared libraries instead. +--- + setup.py | 17 +++++++++++++++-- + 1 file changed, 15 insertions(+), 2 deletions(-) + +diff --git a/setup.py b/setup.py +index 99d1a1c504..3a5ed56c64 100644 +--- a/setup.py ++++ b/setup.py +@@ -35,7 +35,7 @@ egg_info.manifest_maker.template = 'PYTHON-MANIFEST.in' + PY3 = sys.version_info.major == 3 + PYTHON_STEM = os.path.join('src', 'python', 'grpcio') + CORE_INCLUDE = ('include', '.',) +-BORINGSSL_INCLUDE = (os.path.join('third_party', 'boringssl', 'include'),) ++SSL_INCLUDE = (os.path.join('third_party', 'boringssl', 'include'),) + ZLIB_INCLUDE = (os.path.join('third_party', 'zlib'),) + CARES_INCLUDE = ( + os.path.join('third_party', 'cares'), +@@ -84,6 +84,12 @@ CLASSIFIERS = [ + # present, then it will still attempt to use Cython. + BUILD_WITH_CYTHON = os.environ.get('GRPC_PYTHON_BUILD_WITH_CYTHON', False) + ++# Export this variable to use the system installation of openssl. You need to ++# have the header files installed (in /usr/include/openssl) and during ++# runtime, the shared libary must be installed ++BUILD_WITH_SYSTEM_OPENSSL = os.environ.get('GRPC_PYTHON_BUILD_SYSTEM_OPENSSL', ++ False) ++ + # Environment variable to determine whether or not to enable coverage analysis + # in Cython modules. + ENABLE_CYTHON_TRACING = os.environ.get( +@@ -148,8 +154,13 @@ CORE_C_FILES = tuple(grpc_core_dependencies.CORE_SOURCE_FILES) + if "win32" in sys.platform: + CORE_C_FILES = filter(lambda x: 'third_party/cares' not in x, CORE_C_FILES) + ++if BUILD_WITH_SYSTEM_OPENSSL: ++ CORE_C_FILES = filter(lambda x: 'third_party/boringssl' not in x, CORE_C_FILES) ++ CORE_C_FILES = filter(lambda x: 'src/boringssl' not in x, CORE_C_FILES) ++ SSL_INCLUDE = (os.path.join('/usr', 'include', 'openssl'),) ++ + EXTENSION_INCLUDE_DIRECTORIES = ( +- (PYTHON_STEM,) + CORE_INCLUDE + BORINGSSL_INCLUDE + ZLIB_INCLUDE + ++ (PYTHON_STEM,) + CORE_INCLUDE + SSL_INCLUDE + ZLIB_INCLUDE + + CARES_INCLUDE + ADDRESS_SORTING_INCLUDE) + + EXTENSION_LIBRARIES = () +@@ -159,6 +170,8 @@ if not "win32" in sys.platform: + EXTENSION_LIBRARIES += ('m',) + if "win32" in sys.platform: + EXTENSION_LIBRARIES += ('advapi32', 'ws2_32',) ++if BUILD_WITH_SYSTEM_OPENSSL: ++ EXTENSION_LIBRARIES += ('ssl', 'crypto',) + + DEFINE_MACROS = ( + ('OPENSSL_NO_ASM', 1), ('_WIN32_WINNT', 0x600), +-- +2.17.0 + diff --git a/0002-Allow-building-the-python-module-with-system-zlib.patch b/0002-Allow-building-the-python-module-with-system-zlib.patch new file mode 100644 index 0000000..31ff968 --- /dev/null +++ b/0002-Allow-building-the-python-module-with-system-zlib.patch @@ -0,0 +1,55 @@ +From 3823d9048102bce79e165584c62a1a5b91810aeb Mon Sep 17 00:00:00 2001 +From: Thomas Bechtold +Date: Fri, 25 May 2018 06:52:23 +0200 +Subject: [PATCH 2/3] Allow building the python module with system zlib + +When building the python module and using the new +GRPC_PYTHON_BUILD_SYSTEM_ZLIB env variable, the third party zlib code +is not compiled. Instead, the zlib shared library installed on the +system is used during runtime. +This is useful for distributions who don't want to include code copies +but use shared libraries instead. +--- + setup.py | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/setup.py b/setup.py +index 3a5ed56c64..483d3ac168 100644 +--- a/setup.py ++++ b/setup.py +@@ -90,6 +90,12 @@ BUILD_WITH_CYTHON = os.environ.get('GRPC_PYTHON_BUILD_WITH_CYTHON', False) + BUILD_WITH_SYSTEM_OPENSSL = os.environ.get('GRPC_PYTHON_BUILD_SYSTEM_OPENSSL', + False) + ++# Export this variable to use the system installation of zlib. You need to ++# have the header files installed (in /usr/include/) and during ++# runtime, the shared libary must be installed ++BUILD_WITH_SYSTEM_ZLIB = os.environ.get('GRPC_PYTHON_BUILD_SYSTEM_ZLIB', ++ False) ++ + # Environment variable to determine whether or not to enable coverage analysis + # in Cython modules. + ENABLE_CYTHON_TRACING = os.environ.get( +@@ -159,6 +165,10 @@ if BUILD_WITH_SYSTEM_OPENSSL: + CORE_C_FILES = filter(lambda x: 'src/boringssl' not in x, CORE_C_FILES) + SSL_INCLUDE = (os.path.join('/usr', 'include', 'openssl'),) + ++if BUILD_WITH_SYSTEM_ZLIB: ++ CORE_C_FILES = filter(lambda x: 'third_party/zlib' not in x, CORE_C_FILES) ++ ZLIB_INCLUDE = (os.path.join('/usr', 'include'),) ++ + EXTENSION_INCLUDE_DIRECTORIES = ( + (PYTHON_STEM,) + CORE_INCLUDE + SSL_INCLUDE + ZLIB_INCLUDE + + CARES_INCLUDE + ADDRESS_SORTING_INCLUDE) +@@ -172,6 +182,8 @@ if "win32" in sys.platform: + EXTENSION_LIBRARIES += ('advapi32', 'ws2_32',) + if BUILD_WITH_SYSTEM_OPENSSL: + EXTENSION_LIBRARIES += ('ssl', 'crypto',) ++if BUILD_WITH_SYSTEM_ZLIB: ++ EXTENSION_LIBRARIES += ('z',) + + DEFINE_MACROS = ( + ('OPENSSL_NO_ASM', 1), ('_WIN32_WINNT', 0x600), +-- +2.17.0 + diff --git a/0003-Allow-building-the-python-module-with-system-cares.patch b/0003-Allow-building-the-python-module-with-system-cares.patch new file mode 100644 index 0000000..0b36574 --- /dev/null +++ b/0003-Allow-building-the-python-module-with-system-cares.patch @@ -0,0 +1,55 @@ +From 78a6e04ec1efc2dc839f0329dcff732940e27fd9 Mon Sep 17 00:00:00 2001 +From: Thomas Bechtold +Date: Fri, 25 May 2018 07:08:05 +0200 +Subject: [PATCH 3/3] Allow building the python module with system cares + +When building the python module and using the new +GRPC_PYTHON_BUILD_SYSTEM_CARES env variable, the third party cares code +is not compiled. Instead, the cares shared library installed on the +system is used during runtime. +This is useful for distributions who don't want to include code copies +but use shared libraries instead. +--- + setup.py | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/setup.py b/setup.py +index 483d3ac168..43c25aafeb 100644 +--- a/setup.py ++++ b/setup.py +@@ -96,6 +96,12 @@ BUILD_WITH_SYSTEM_OPENSSL = os.environ.get('GRPC_PYTHON_BUILD_SYSTEM_OPENSSL', + BUILD_WITH_SYSTEM_ZLIB = os.environ.get('GRPC_PYTHON_BUILD_SYSTEM_ZLIB', + False) + ++# Export this variable to use the system installation of cares. You need to ++# have the header files installed (in /usr/include/) and during ++# runtime, the shared libary must be installed ++BUILD_WITH_SYSTEM_CARES = os.environ.get('GRPC_PYTHON_BUILD_SYSTEM_CARES', ++ False) ++ + # Environment variable to determine whether or not to enable coverage analysis + # in Cython modules. + ENABLE_CYTHON_TRACING = os.environ.get( +@@ -169,6 +175,10 @@ if BUILD_WITH_SYSTEM_ZLIB: + CORE_C_FILES = filter(lambda x: 'third_party/zlib' not in x, CORE_C_FILES) + ZLIB_INCLUDE = (os.path.join('/usr', 'include'),) + ++if BUILD_WITH_SYSTEM_CARES: ++ CORE_C_FILES = filter(lambda x: 'third_party/cares' not in x, CORE_C_FILES) ++ CARES_INCLUDE = (os.path.join('/usr', 'include'),) ++ + EXTENSION_INCLUDE_DIRECTORIES = ( + (PYTHON_STEM,) + CORE_INCLUDE + SSL_INCLUDE + ZLIB_INCLUDE + + CARES_INCLUDE + ADDRESS_SORTING_INCLUDE) +@@ -184,6 +194,8 @@ if BUILD_WITH_SYSTEM_OPENSSL: + EXTENSION_LIBRARIES += ('ssl', 'crypto',) + if BUILD_WITH_SYSTEM_ZLIB: + EXTENSION_LIBRARIES += ('z',) ++if BUILD_WITH_SYSTEM_CARES: ++ EXTENSION_LIBRARIES += ('cares',) + + DEFINE_MACROS = ( + ('OPENSSL_NO_ASM', 1), ('_WIN32_WINNT', 0x600), +-- +2.17.0 + diff --git a/grpc.changes b/grpc.changes index d613f50..e3e12d9 100644 --- a/grpc.changes +++ b/grpc.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Fri May 25 05:34:36 UTC 2018 - tbechtold@suse.com + +- build grpc python module for python2 and python3 + * add 0001-Allow-building-the-python-module-with-system-openssl.patch + * add 0002-Allow-building-the-python-module-with-system-zlib.patch + * add 0003-Allow-building-the-python-module-with-system-cares.patch + ------------------------------------------------------------------- Fri May 18 14:55:27 UTC 2018 - jengelh@inai.de diff --git a/grpc.spec b/grpc.spec index a4d2800..f2b5e1b 100644 --- a/grpc.spec +++ b/grpc.spec @@ -16,7 +16,8 @@ # -%define lname libgrpc6 +%define lname libgrpc6 +%{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: grpc Version: 1.12.0 Release: 0 @@ -25,9 +26,19 @@ License: Apache-2.0 Group: Development/Tools/Building Url: http://grpc.io/ Source: https://github.com/grpc/grpc/archive/v%version.tar.gz +# # PATCH-FEATURE-UPSTREAM 0001-Allow-building-the-python-module-with-system-openssl.patch -- https://github.com/grpc/grpc/pull/15548 +Patch0: 0001-Allow-building-the-python-module-with-system-openssl.patch +# # PATCH-FEATURE-UPSTREAM 0002-Allow-building-the-python-module-with-system-zlib.patch -- https://github.com/grpc/grpc/pull/15548 +Patch1: 0002-Allow-building-the-python-module-with-system-zlib.patch +# # PATCH-FEATURE-UPSTREAM 0003-Allow-building-the-python-module-with-system-cares.patch -- https://github.com/grpc/grpc/pull/15548 +Patch2: 0003-Allow-building-the-python-module-with-system-cares.patch +BuildRequires: %{python_module Cython} +BuildRequires: %{python_module devel} +BuildRequires: %{python_module setuptools} BuildRequires: cmake BuildRequires: gcc-c++ BuildRequires: pkg-config +BuildRequires: python-rpm-macros BuildRequires: pkgconfig(libcares) BuildRequires: pkgconfig(openssl) >= 1.0.1 BuildRequires: pkgconfig(protobuf) >= 3.5 @@ -57,12 +68,41 @@ Requires: %lname = %version This subpackage contains libraries and header files for developing applications that want to make use of the gRPC reference implementation. +%package -n python2-grpcio +Summary: Python language bindings for grpc, a HTTP/2 Remote Procedure Call implementation +Group: Development/Libraries/Python +Requires: %{lname} = %{version}-%{release} +Requires: python = %{python2_version} + +%description -n python2-grpcio +This subpackage contains the python2 bindings. + +%package -n python3-grpcio +Summary: Python language bindings for grpc, a HTTP/2 Remote Procedure Call implementation +Group: Development/Libraries/Python +Requires: %{lname} = %{version}-%{release} +Requires: python = %{python3_version} + +%description -n python3-grpcio +This subpackage contains the python3 bindings. + %prep %setup -q +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 %build make %{?_smp_mflags} STRIP=/bin/true V=1 VERBOSE=1 CFLAGS="%optflags" CXXFLAGS="%optflags" +# build python module +export GRPC_PYTHON_BUILD_WITH_CYTHON=True +export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=True +export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=True +export GRPC_PYTHON_BUILD_SYSTEM_CARES=True +export CFLAGS="%{optflags}" +%python_build + %install b="%buildroot" %make_install prefix="$b/%_prefix" STRIP=/bin/true V=1 VERBOSE=1 @@ -75,6 +115,7 @@ if test ! -d lib64 && test "%_lib" = lib64; then mv lib lib64 fi popd +%python_install %post -n %lname -p /sbin/ldconfig %postun -n %lname -p /sbin/ldconfig @@ -93,4 +134,12 @@ popd %_libdir/pkgconfig/*.pc %_libdir/*.so +%files -n python2-grpcio +%{python2_sitearch}/grpcio-%{version}-py*.egg-info +%{python2_sitearch}/grpc + +%files -n python3-grpcio +%{python3_sitearch}/grpcio-%{version}-py*.egg-info +%{python3_sitearch}/grpc + %changelog