diff options
author | pxinwr <peixing.xin@windriver.com> | 2019-02-27 11:09:28 (GMT) |
---|---|---|
committer | Victor Stinner <vstinner@redhat.com> | 2019-02-27 11:09:28 (GMT) |
commit | 32f5fdd7f4213743fe2f6eedd0fe2108f3157021 (patch) | |
tree | f44f12ab017e996649fcbe8ed32216797f8d2ec0 /setup.py | |
parent | 53b9e1a1c1d86187ad6fbee492b697ef8be74205 (diff) | |
download | cpython-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.py | 46 |
1 files changed, 32 insertions, 14 deletions
@@ -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']) |