mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-31904: Add cross-build support for VxWorks RTOS (GH-11968)
This commit is contained in:
parent
53b9e1a1c1
commit
32f5fdd7f4
5 changed files with 75 additions and 18 deletions
46
setup.py
46
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'])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue