aboutsummaryrefslogtreecommitdiff
path: root/python/setup.py
diff options
context:
space:
mode:
authorManjunath Kudlur <keveman@gmail.com>2016-03-25 10:58:46 -0700
committerManjunath Kudlur <keveman@gmail.com>2016-04-01 15:58:48 -0700
commitcf828deb9b5537c294e4a5628ef04fdbdfdcbb28 (patch)
tree5998ce7848cad8de629639a9912114cb294a842d /python/setup.py
parent81eb84c029cb2790b3195695624e60d145462cc7 (diff)
downloadprotobuf-cf828deb9b5537c294e4a5628ef04fdbdfdcbb28.tar.gz
protobuf-cf828deb9b5537c294e4a5628ef04fdbdfdcbb28.tar.bz2
protobuf-cf828deb9b5537c294e4a5628ef04fdbdfdcbb28.zip
Linking the cpp implementation extension statically with libprotobuf
Diffstat (limited to 'python/setup.py')
-rwxr-xr-xpython/setup.py35
1 files changed, 28 insertions, 7 deletions
diff --git a/python/setup.py b/python/setup.py
index 6ea3bad7..f5c00a72 100755
--- a/python/setup.py
+++ b/python/setup.py
@@ -157,13 +157,28 @@ class test_conformance(_build_py):
status = subprocess.check_call(cmd, shell=True)
+def get_option_from_sys_argv(option_str):
+ if option_str in sys.argv:
+ sys.argv.remove(option_str)
+ return True
+ return False
+
+
if __name__ == '__main__':
ext_module_list = []
- cpp_impl = '--cpp_implementation'
warnings_as_errors = '--warnings_as_errors'
- if cpp_impl in sys.argv:
- sys.argv.remove(cpp_impl)
+ if get_option_from_sys_argv('--cpp_implementation'):
+ # Link libprotobuf.a and libprotobuf-lite.a statically with the
+ # extension. Note that those libraries have to be compiled with
+ # -fPIC for this to work.
+ compile_static_ext = get_option_from_sys_argv('--compile_static_extension')
extra_compile_args = ['-Wno-write-strings', '-Wno-invalid-offsetof']
+ libraries = ['protobuf']
+ extra_objects = None
+ if compile_static_ext:
+ libraries = None
+ extra_objects = ['../src/.libs/libprotobuf.a',
+ '../src/.libs/libprotobuf-lite.a']
test_conformance.target = 'test_python_cpp'
if "clang" in os.popen('$CC --version 2> /dev/null').read():
@@ -174,16 +189,22 @@ if __name__ == '__main__':
sys.argv.remove(warnings_as_errors)
# C++ implementation extension
- ext_module_list.append(
+ ext_module_list.extend([
Extension(
"google.protobuf.pyext._message",
glob.glob('google/protobuf/pyext/*.cc'),
include_dirs=[".", "../src"],
- libraries=['protobuf'],
+ libraries=libraries,
+ extra_objects=extra_objects,
library_dirs=['../src/.libs'],
extra_compile_args=extra_compile_args,
- )
- )
+ ),
+ Extension(
+ "google.protobuf.internal._api_implementation",
+ glob.glob('google/protobuf/internal/api_implementation.cc'),
+ extra_compile_args=['-DPYTHON_PROTO2_CPP_IMPL_V2'],
+ ),
+ ])
os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'cpp'
# Keep this list of dependencies in sync with tox.ini.