diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cpp/util/byte_buffer.cc | 13 | ||||
-rw-r--r-- | src/python/grpcio/commands.py | 50 |
2 files changed, 49 insertions, 14 deletions
diff --git a/src/cpp/util/byte_buffer.cc b/src/cpp/util/byte_buffer.cc index 5245739c89..df873eb1ce 100644 --- a/src/cpp/util/byte_buffer.cc +++ b/src/cpp/util/byte_buffer.cc @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2015-2016, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -79,14 +79,13 @@ size_t ByteBuffer::Length() const { } } -ByteBuffer::ByteBuffer(const ByteBuffer& buf): - buffer_(grpc_byte_buffer_copy(buf.buffer_)) { -} +ByteBuffer::ByteBuffer(const ByteBuffer& buf) + : buffer_(grpc_byte_buffer_copy(buf.buffer_)) {} ByteBuffer& ByteBuffer::operator=(const ByteBuffer& buf) { - Clear(); // first remove existing data - buffer_ = grpc_byte_buffer_copy(buf.buffer_); // then copy + Clear(); // first remove existing data + buffer_ = grpc_byte_buffer_copy(buf.buffer_); // then copy return *this; } -} // namespace grpc +} // namespace grpc
\ No newline at end of file diff --git a/src/python/grpcio/commands.py b/src/python/grpcio/commands.py index 81dab1b518..e1a3f4bed3 100644 --- a/src/python/grpcio/commands.py +++ b/src/python/grpcio/commands.py @@ -40,6 +40,17 @@ import setuptools from setuptools.command import build_py from setuptools.command import test +# Because we need to support building without Cython but simultaneously need to +# subclass its command class when we need to and because distutils requires a +# special hook to acquire a command class, we attempt to import Cython's +# build_ext, and if that fails we import setuptools'. +try: + # Due to the strange way Cython's Distutils module re-imports build_ext, we + # import the build_ext class directly. + from Cython.Distutils.build_ext import build_ext +except ImportError: + from setuptools.command.build_ext import build_ext + PYTHON_STEM = os.path.dirname(os.path.abspath(__file__)) CONF_PY_ADDENDUM = """ @@ -51,6 +62,10 @@ html_theme = 'sphinx_rtd_theme' """ +class CommandError(Exception): + """Simple exception class for GRPC custom commands.""" + + class SphinxDocumentation(setuptools.Command): """Command to generate documentation via sphinx.""" @@ -104,10 +119,10 @@ class BuildProtoModules(setuptools.Command): def run(self): if not self.protoc_command: - raise Exception('could not find protoc') + raise CommandError('could not find protoc') if not self.grpc_python_plugin_command: - raise Exception('could not find grpc_python_plugin ' - '(protoc plugin for GRPC Python)') + raise CommandError('could not find grpc_python_plugin ' + '(protoc plugin for GRPC Python)') include_regex = re.compile(self.include) exclude_regex = re.compile(self.exclude) if self.exclude else None paths = [] @@ -130,7 +145,7 @@ class BuildProtoModules(setuptools.Command): subprocess.check_output(' '.join(command), cwd=root_directory, shell=True, stderr=subprocess.STDOUT) except subprocess.CalledProcessError as e: - raise Exception('Command:\n{}\nMessage:\n{}\nOutput:\n{}'.format( + raise CommandError('Command:\n{}\nMessage:\n{}\nOutput:\n{}'.format( command, e.message, e.output)) @@ -156,13 +171,34 @@ class BuildPy(build_py.build_py): """Custom project build command.""" def run(self): - # TODO(atash): make this warn if the proto modules couldn't be built rather - # than cause build failure - self.run_command('build_proto_modules') + try: + self.run_command('build_proto_modules') + except CommandError as error: + sys.stderr.write('warning: %s\n' % error.message) self.run_command('build_project_metadata') build_py.build_py.run(self) +class BuildExt(build_ext): + """Custom build_ext command to enable compiler-specific flags.""" + + C_OPTIONS = { + 'unix': ('-pthread', '-std=gnu99'), + 'msvc': (), + } + LINK_OPTIONS = {} + + def build_extensions(self): + compiler = self.compiler.compiler_type + if compiler in BuildExt.C_OPTIONS: + for extension in self.extensions: + extension.extra_compile_args += list(BuildExt.C_OPTIONS[compiler]) + if compiler in BuildExt.LINK_OPTIONS: + for extension in self.extensions: + extension.extra_link_args += list(BuildExt.LINK_OPTIONS[compiler]) + build_ext.build_extensions(self) + + class Gather(setuptools.Command): """Command to gather project dependencies.""" |