summaryrefslogtreecommitdiffstats
path: root/setup.py
diff options
context:
space:
mode:
authorpxinwr <peixing.xin@windriver.com>2019-02-27 11:09:28 (GMT)
committerVictor Stinner <vstinner@redhat.com>2019-02-27 11:09:28 (GMT)
commit32f5fdd7f4213743fe2f6eedd0fe2108f3157021 (patch)
treef44f12ab017e996649fcbe8ed32216797f8d2ec0 /setup.py
parent53b9e1a1c1d86187ad6fbee492b697ef8be74205 (diff)
downloadcpython-32f5fdd7f4213743fe2f6eedd0fe2108f3157021.zip
cpython-32f5fdd7f4213743fe2f6eedd0fe2108f3157021.tar.gz
cpython-32f5fdd7f4213743fe2f6eedd0fe2108f3157021.tar.bz2
bpo-31904: Add cross-build support for VxWorks RTOS (GH-11968)
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py46
1 files changed, 32 insertions, 14 deletions
diff --git a/setup.py b/setup.py
index 3310654..b042086 100644
--- a/setup.py
+++ b/setup.py
@@ -44,6 +44,8 @@ def get_platform():
return sys.platform
host_platform = get_platform()
+VXWORKS = ('vxworks' in host_platform)
+
# Were we compiled --with-pydebug or with #define Py_DEBUG?
COMPILED_WITH_PYDEBUG = ('--with-pydebug' in sysconfig.get_config_var("CONFIG_ARGS"))
@@ -509,13 +511,14 @@ class PyBuildExt(build_ext):
finally:
os.unlink(tmpfile)
- def add_gcc_paths(self):
- gcc = sysconfig.get_config_var('CC')
- tmpfile = os.path.join(self.build_temp, 'gccpaths')
+ def add_cross_compiling_paths(self):
+ cc = sysconfig.get_config_var('CC')
+ tmpfile = os.path.join(self.build_temp, 'ccpaths')
if not os.path.exists(self.build_temp):
os.makedirs(self.build_temp)
- ret = os.system('%s -E -v - </dev/null 2>%s 1>/dev/null' % (gcc, tmpfile))
+ ret = os.system('%s -E -v - </dev/null 2>%s 1>/dev/null' % (cc, tmpfile))
is_gcc = False
+ is_clang = False
in_incdirs = False
inc_dirs = []
lib_dirs = []
@@ -525,17 +528,19 @@ class PyBuildExt(build_ext):
for line in fp.readlines():
if line.startswith("gcc version"):
is_gcc = True
+ elif line.startswith("clang version"):
+ is_clang = True
elif line.startswith("#include <...>"):
in_incdirs = True
elif line.startswith("End of search list"):
in_incdirs = False
- elif is_gcc and line.startswith("LIBRARY_PATH"):
+ elif (is_gcc or is_clang) and line.startswith("LIBRARY_PATH"):
for d in line.strip().split("=")[1].split(":"):
d = os.path.normpath(d)
if '/gcc/' not in d:
add_dir_to_list(self.compiler.library_dirs,
d)
- elif is_gcc and in_incdirs and '/gcc/' not in line:
+ elif (is_gcc or is_clang) and in_incdirs and '/gcc/' not in line and '/clang/' not in line:
add_dir_to_list(self.compiler.include_dirs,
line.strip())
finally:
@@ -550,7 +555,7 @@ class PyBuildExt(build_ext):
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
# only change this for cross builds for 3.3, issues on Mageia
if cross_compiling:
- self.add_gcc_paths()
+ self.add_cross_compiling_paths()
self.add_multiarch_paths()
# Add paths specified in the environment variables LDFLAGS and
@@ -722,7 +727,8 @@ class PyBuildExt(build_ext):
# pwd(3)
exts.append( Extension('pwd', ['pwdmodule.c']) )
# grp(3)
- exts.append( Extension('grp', ['grpmodule.c']) )
+ if not VXWORKS:
+ exts.append( Extension('grp', ['grpmodule.c']) )
# spwd, shadow passwords
if (config_h_vars.get('HAVE_GETSPNAM', False) or
config_h_vars.get('HAVE_GETSPENT', False)):
@@ -859,7 +865,12 @@ class PyBuildExt(build_ext):
libs = ['crypt']
else:
libs = []
- exts.append( Extension('_crypt', ['_cryptmodule.c'], libraries=libs) )
+
+ if not VXWORKS:
+ exts.append( Extension('_crypt', ['_cryptmodule.c'], libraries=libs) )
+ elif self.compiler.find_library_file(lib_dirs, 'OPENSSL'):
+ libs = ['OPENSSL']
+ exts.append( Extension('_crypt', ['_cryptmodule.c'], libraries=libs) )
# CSV files
exts.append( Extension('_csv', ['_csv.c']) )
@@ -868,8 +879,14 @@ class PyBuildExt(build_ext):
exts.append( Extension('_posixsubprocess', ['_posixsubprocess.c']) )
# socket(2)
- exts.append( Extension('_socket', ['socketmodule.c'],
- depends = ['socketmodule.h']) )
+ if not VXWORKS:
+ exts.append( Extension('_socket', ['socketmodule.c'],
+ depends = ['socketmodule.h']) )
+ elif self.compiler.find_library_file(lib_dirs, 'net'):
+ libs = ['net']
+ exts.append( Extension('_socket', ['socketmodule.c'],
+ depends = ['socketmodule.h'], libraries=libs) )
+
# Detect SSL support for the socket module (via _ssl)
ssl_ext, hashlib_ext = self._detect_openssl(inc_dirs, lib_dirs)
if ssl_ext is not None:
@@ -1319,9 +1336,10 @@ class PyBuildExt(build_ext):
# Unix-only modules
if host_platform != 'win32':
- # Steen Lumholt's termios module
- exts.append( Extension('termios', ['termios.c']) )
- # Jeremy Hylton's rlimit interface
+ if not VXWORKS:
+ # Steen Lumholt's termios module
+ exts.append( Extension('termios', ['termios.c']) )
+ # Jeremy Hylton's rlimit interface
exts.append( Extension('resource', ['resource.c']) )
else:
missing.extend(['resource', 'termios'])