SHA256
1
0
forked from pool/grpc

Accepting request 612114 from home:tbechtold:branches:devel:tools

- 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

OBS-URL: https://build.opensuse.org/request/show/612114
OBS-URL: https://build.opensuse.org/package/show/devel:tools/grpc?expand=0&rev=26
This commit is contained in:
Marcus Meissner 2018-05-28 17:36:25 +00:00 committed by Git OBS Bridge
parent 30aa4f3ce5
commit da1554be0f
5 changed files with 236 additions and 1 deletions

View File

@ -0,0 +1,68 @@
From 30ce693621d61efb8596503a0da212077a8c4daa Mon Sep 17 00:00:00 2001
From: Thomas Bechtold <tbechtold@suse.com>
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

View File

@ -0,0 +1,55 @@
From 3823d9048102bce79e165584c62a1a5b91810aeb Mon Sep 17 00:00:00 2001
From: Thomas Bechtold <tbechtold@suse.com>
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

View File

@ -0,0 +1,55 @@
From 78a6e04ec1efc2dc839f0329dcff732940e27fd9 Mon Sep 17 00:00:00 2001
From: Thomas Bechtold <tbechtold@suse.com>
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

View File

@ -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

View File

@ -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