|
|
|
@ -29,6 +29,9 @@ import sysconfig |
|
|
|
|
import setuptools |
|
|
|
|
from setuptools.command import egg_info |
|
|
|
|
|
|
|
|
|
import subprocess |
|
|
|
|
from subprocess import PIPE |
|
|
|
|
|
|
|
|
|
# Redirect the manifest template from MANIFEST.in to PYTHON-MANIFEST.in. |
|
|
|
|
egg_info.manifest_maker.template = 'PYTHON-MANIFEST.in' |
|
|
|
|
|
|
|
|
@ -136,6 +139,17 @@ ENABLE_CYTHON_TRACING = os.environ.get( |
|
|
|
|
ENABLE_DOCUMENTATION_BUILD = os.environ.get( |
|
|
|
|
'GRPC_PYTHON_ENABLE_DOCUMENTATION_BUILD', False) |
|
|
|
|
|
|
|
|
|
def check_linker_need_libatomic(): |
|
|
|
|
"""Test if linker on system needs libatomic.""" |
|
|
|
|
code_test = (b'#include <atomic>\n' + |
|
|
|
|
b'int main() { return std::atomic<int64_t>{}; }') |
|
|
|
|
cc_test = subprocess.Popen(['cc', '-x', 'c++', '-std=c++11', '-'], |
|
|
|
|
stdin=PIPE, |
|
|
|
|
stdout=PIPE, |
|
|
|
|
stderr=PIPE) |
|
|
|
|
cc_test.communicate(input=code_test) |
|
|
|
|
return cc_test.returncode != 0 |
|
|
|
|
|
|
|
|
|
# There are some situations (like on Windows) where CC, CFLAGS, and LDFLAGS are |
|
|
|
|
# entirely ignored/dropped/forgotten by distutils and its Cygwin/MinGW support. |
|
|
|
|
# We use these environment variables to thus get around that without locking |
|
|
|
@ -171,15 +185,17 @@ if EXTRA_ENV_LINK_ARGS is None: |
|
|
|
|
EXTRA_ENV_LINK_ARGS = '' |
|
|
|
|
if "linux" in sys.platform or "darwin" in sys.platform: |
|
|
|
|
EXTRA_ENV_LINK_ARGS += ' -lpthread' |
|
|
|
|
if check_linker_need_libatomic(): |
|
|
|
|
EXTRA_ENV_LINK_ARGS += ' -latomic' |
|
|
|
|
elif "win32" in sys.platform and sys.version_info < (3, 5): |
|
|
|
|
msvcr = cygwinccompiler.get_msvcr()[0] |
|
|
|
|
# TODO(atash) sift through the GCC specs to see if libstdc++ can have any |
|
|
|
|
# influence on the linkage outcome on MinGW for non-C++ programs. |
|
|
|
|
EXTRA_ENV_LINK_ARGS += ( |
|
|
|
|
' -static-libgcc -static-libstdc++ -mcrtdll={msvcr} ' |
|
|
|
|
'-static'.format(msvcr=msvcr)) |
|
|
|
|
' -static-libgcc -static-libstdc++ -mcrtdll={msvcr}' |
|
|
|
|
' -static'.format(msvcr=msvcr)) |
|
|
|
|
if "linux" in sys.platform: |
|
|
|
|
EXTRA_ENV_LINK_ARGS += ' -Wl,-wrap,memcpy -static-libgcc' |
|
|
|
|
EXTRA_ENV_LINK_ARGS += ' -Wl,-wrap,memcpy -static-libgcc' |
|
|
|
|
|
|
|
|
|
EXTRA_COMPILE_ARGS = shlex.split(EXTRA_ENV_COMPILE_ARGS) |
|
|
|
|
EXTRA_LINK_ARGS = shlex.split(EXTRA_ENV_LINK_ARGS) |
|
|
|
|