Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
system_site_packages=False,
clear=self.clear_cross,
symlinks=True,
upgrade=False,
with_pip=False)
env.create(context.cross_env_dir)
context.cross_bin_path = os.path.join(context.cross_env_dir, 'bin')
context.cross_env_exe = os.path.join(
context.cross_bin_path, context.python_exe)
context.cross_cfg_path = os.path.join(context.cross_env_dir, 'pyvenv.cfg')
context.cross_activate = os.path.join(context.cross_bin_path, 'activate')
# Remove binaries. We'll run from elsewhere
for exe in os.listdir(context.cross_bin_path):
if not exe.startswith('activate'):
utils.remove_path(os.path.join(context.cross_bin_path, exe))
# Alter pyvenv.cfg
with utils.overwrite_file(context.cross_cfg_path) as out:
with open(context.cross_cfg_path) as inp:
for line in inp:
if line.split()[0:2] == ['home', '=']:
line = 'home = %s\n' % self.host_project_base
out.write(line)
# make a script that sets the environment variables and calls Python.
# Don't do this in bin/activate, because it's a pain to set/unset
# properly (and for csh, fish as well).
# Note that env_exe hasn't actually been created yet.
sysconfig_name = os.path.basename(self.host_sysconfigdata_file)
upgrade=False,
with_pip=False)
env.create(context.cross_env_dir)
context.cross_bin_path = os.path.join(context.cross_env_dir, 'bin')
context.cross_env_exe = os.path.join(
context.cross_bin_path, context.python_exe)
context.cross_cfg_path = os.path.join(context.cross_env_dir, 'pyvenv.cfg')
context.cross_activate = os.path.join(context.cross_bin_path, 'activate')
# Remove binaries. We'll run from elsewhere
for exe in os.listdir(context.cross_bin_path):
if not exe.startswith('activate'):
utils.remove_path(os.path.join(context.cross_bin_path, exe))
# Alter pyvenv.cfg
with utils.overwrite_file(context.cross_cfg_path) as out:
with open(context.cross_cfg_path) as inp:
for line in inp:
if line.split()[0:2] == ['home', '=']:
line = 'home = %s\n' % self.host_project_base
out.write(line)
# make a script that sets the environment variables and calls Python.
# Don't do this in bin/activate, because it's a pain to set/unset
# properly (and for csh, fish as well).
# Note that env_exe hasn't actually been created yet.
sysconfig_name = os.path.basename(self.host_sysconfigdata_file)
sysconfig_name, _ = os.path.splitext(sysconfig_name)
# If this venv is generated from a cross-python still in its
libs = ''
inc = ''
libs = glob.glob(libs)
if not libs:
logger.warning("No libs in sysroot. Does it exist?")
else:
libs = os.pathsep.join(libs)
extra_envs.append(('LIBRARY_PATH', ':=', libs))
if not os.path.isdir(inc):
logger.warning("No include/ in sysroot. Does it exist?")
else:
extra_envs.append(('CPATH', ':=', inc))
utils.install_script('pywrapper.py.tmpl', context.cross_env_exe, locals())
for exe in ('python', 'python3'):
exe = os.path.join(context.cross_bin_path, exe)
if not os.path.exists(exe):
utils.symlink(context.python_exe, exe)
# Install patches to environment
utils.install_script('site.py.tmpl',
os.path.join(context.lib_path, 'site.py'),
locals())
self.copy_and_patch_sysconfigdata(context)
# cross-python is ready. We will use build-pip to install cross-pip
# because 'python -m ensurepip' is likely to get confused and think
# that there's nothing to do.
if self.with_cross_pip:
logger.warning("No libs in sysroot. Does it exist?")
else:
libs = os.pathsep.join(libs)
extra_envs.append(('LIBRARY_PATH', ':=', libs))
if not os.path.isdir(inc):
logger.warning("No include/ in sysroot. Does it exist?")
else:
extra_envs.append(('CPATH', ':=', inc))
utils.install_script('pywrapper.py.tmpl', context.cross_env_exe, locals())
for exe in ('python', 'python3'):
exe = os.path.join(context.cross_bin_path, exe)
if not os.path.exists(exe):
utils.symlink(context.python_exe, exe)
# Install patches to environment
utils.install_script('site.py.tmpl',
os.path.join(context.lib_path, 'site.py'),
locals())
self.copy_and_patch_sysconfigdata(context)
# cross-python is ready. We will use build-pip to install cross-pip
# because 'python -m ensurepip' is likely to get confused and think
# that there's nothing to do.
if self.with_cross_pip:
logger.info("Installing cross-pip")
# Make sure we install the same version of pip and setuptools to
logger.debug("Installing: %s", context.build_pip_reqs)
subprocess.check_output([context.cross_env_exe, '-m', 'pip',
def post_setup(self, context):
"""
Extra processing. Put scripts/binaries in the right place.
"""
utils.install_script('cross-expose.py.tmpl',
os.path.join(context.bin_path, 'cross-expose'),
locals())
# Don't trust these to be symlinks. A symlink to Python will mess up
# the virtualenv.
# Add cross-python alias to the path. This is just for
# convenience and clarity.
for exe in os.listdir(context.cross_bin_path):
target = os.path.join(context.cross_bin_path, exe)
if not os.path.isfile(target) or not os.access(target, os.X_OK):
continue
dest = os.path.join(context.bin_path, 'cross-' + exe)
utils.make_launcher(target, dest)
# Add build-python and build-pip to the path.
utils.install_script('cross-expose.py.tmpl',
os.path.join(context.bin_path, 'cross-expose'),
locals())
# Don't trust these to be symlinks. A symlink to Python will mess up
# the virtualenv.
# Add cross-python alias to the path. This is just for
# convenience and clarity.
for exe in os.listdir(context.cross_bin_path):
target = os.path.join(context.cross_bin_path, exe)
if not os.path.isfile(target) or not os.access(target, os.X_OK):
continue
dest = os.path.join(context.bin_path, 'cross-' + exe)
utils.make_launcher(target, dest)
# Add build-python and build-pip to the path.
for exe in os.listdir(context.build_bin_path):
target = os.path.join(context.build_bin_path, exe)
if not os.path.isfile(target) or not os.access(target, os.X_OK):
continue
dest = os.path.join(context.bin_path, 'build-' + exe)
utils.make_launcher(target, dest)
logger.info("Finishing up...")
activate = os.path.join(context.bin_path, 'activate')
with open(activate, 'w') as fp:
fp.write(dedent(F('''\
. %(context.cross_activate)s
export PATH=%(context.bin_path)s:$PATH
''', locals())))
"""
# Directory structure:
#
# ENV_DIR/
# cross/ cross-python venv
# build/ build-python venv
# lib/ libs for setting up cross-python
# bin/ holds activate scripts.
if os.path.exists(env_dir) and (self.clear_cross or self.clear_build):
subdirs = os.listdir(env_dir)
for sub in subdirs:
if sub in ('cross', 'build'):
continue
utils.remove_path(os.path.join(env_dir, sub))
context = super().ensure_directories(env_dir)
context.lib_path = os.path.join(env_dir, 'lib')
context.exposed_libs = os.path.join(context.lib_path, 'exposed.txt')
utils.mkdir_if_needed(context.lib_path)
return context
sysname = sys.platform[0]
machine = platform.machine()
else:
sysname = host_info[0]
machine = host_info[-1]
config['uname'] = {
'sysname' : sysname.title(),
'nodename' : 'build',
'release' : '',
'version' : '',
'machine' : machine,
}
context.crossenv_cfg = os.path.join(context.env_dir, 'crossenv.cfg')
with utils.overwrite_file(context.crossenv_cfg) as fp:
config.write(fp)
extra_envs.append(('LIBRARY_PATH', ':=', libs))
if not os.path.isdir(inc):
logger.warning("No include/ in sysroot. Does it exist?")
else:
extra_envs.append(('CPATH', ':=', inc))
utils.install_script('pywrapper.py.tmpl', context.cross_env_exe, locals())
for exe in ('python', 'python3'):
exe = os.path.join(context.cross_bin_path, exe)
if not os.path.exists(exe):
utils.symlink(context.python_exe, exe)
# Install patches to environment
utils.install_script('site.py.tmpl',
os.path.join(context.lib_path, 'site.py'),
locals())
self.copy_and_patch_sysconfigdata(context)
# cross-python is ready. We will use build-pip to install cross-pip
# because 'python -m ensurepip' is likely to get confused and think
# that there's nothing to do.
if self.with_cross_pip:
logger.info("Installing cross-pip")
# Make sure we install the same version of pip and setuptools to
logger.debug("Installing: %s", context.build_pip_reqs)
subprocess.check_output([context.cross_env_exe, '-m', 'pip',
'--disable-pip-version-check',
'install',
'--ignore-installed',
def F(s, values):
values = FormatMapping(values)
return s % values