Backed out 2 changesets (bug 1396582) for build bustage "ImportError: No module named which". r=backout a=backout on a CLOSED TREE

Backed out changeset a677efcd8768 (bug 1396582)
Backed out changeset 4e81669959ed (bug 1396582)
This commit is contained in:
Narcis Beleuzu 2018-01-09 22:45:50 +02:00
parent 1be9ea36da
commit 3b53e85664
2 changed files with 65 additions and 22 deletions

View File

@ -203,6 +203,7 @@ option(env='PYTHON', nargs=1, help='Python interpreter')
@imports('subprocess')
@imports(_from='mozbuild.configure.util', _import='LineIO')
@imports(_from='mozbuild.virtualenv', _import='VirtualenvManager')
@imports(_from='mozbuild.virtualenv', _import='verify_python_version')
@imports('distutils.sysconfig')
def virtualenv_python(env_python, build_env, mozconfig, help):
if help:
@ -223,28 +224,8 @@ def virtualenv_python(env_python, build_env, mozconfig, help):
elif 'PYTHON' in mozconfig['vars']['modified']:
python = mozconfig['vars']['modified']['PYTHON'][1]
minimum_version = Version('2.7.3')
major, minor, micro = sys.version_info[:3]
our_version = Version('%d.%d.%d' % (major, minor, micro))
if major != 2 or our_version < minimum_version:
msg = ('Python %s or greater (but not Python 3) is required to build. '
'You are running Python %s. ' % (minimum_version, our_version))
if os.name == 'nt':
msg += ('Please upgrade to the latest MozillaBuild development '
'environment. See https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Windows_Prerequisites')
else:
msg += ('Run `mach bootstrap` to ensure your system is up to date. '
'If you still receive this error afterwards, your shell '
'environment is likely detecting another Python version. '
'Ensure a modern Python can be found in the paths defined '
'by the $PATH environment variable. Or set the PYTHON '
'environment or mozconfig variable to specify which Python '
'interpreter to use.')
die(msg)
with LineIO(lambda l: log.error(l)) as out:
verify_python_version(out)
topsrcdir, topobjdir = build_env.topsrcdir, build_env.topobjdir
if topobjdir.endswith('/js/src'):
topobjdir = topobjdir[:-7]

View File

@ -20,6 +20,24 @@ IS_NATIVE_WIN = (sys.platform == 'win32' and os.sep == '\\')
IS_MSYS2 = (sys.platform == 'win32' and os.sep == '/')
IS_CYGWIN = (sys.platform == 'cygwin')
# Minimum version of Python required to build.
MINIMUM_PYTHON_VERSION = LooseVersion('2.7.3')
MINIMUM_PYTHON_MAJOR = 2
UPGRADE_WINDOWS = '''
Please upgrade to the latest MozillaBuild development environment. See
https://developer.mozilla.org/en-US/docs/Developer_Guide/Build_Instructions/Windows_Prerequisites
'''.lstrip()
UPGRADE_OTHER = '''
Run |mach bootstrap| to ensure your system is up to date.
If you still receive this error, your shell environment is likely detecting
another Python version. Ensure a modern Python can be found in the paths
defined by the $PATH environment variable and try again.
'''.lstrip()
class VirtualenvManager(object):
"""Contains logic for managing virtualenvs for building the tree."""
@ -505,3 +523,47 @@ class VirtualenvManager(object):
# self.python_path. However, this seems more risk than it's worth.
subprocess.check_call([os.path.join(self.bin_path, 'pip')] + args,
stderr=subprocess.STDOUT)
def verify_python_version(log_handle):
"""Ensure the current version of Python is sufficient."""
major, minor, micro = sys.version_info[:3]
our = LooseVersion('%d.%d.%d' % (major, minor, micro))
if major != MINIMUM_PYTHON_MAJOR or our < MINIMUM_PYTHON_VERSION:
log_handle.write('Python %s or greater (but not Python 3) is '
'required to build. ' % MINIMUM_PYTHON_VERSION)
log_handle.write('You are running Python %s.\n' % our)
if os.name in ('nt', 'ce'):
log_handle.write(UPGRADE_WINDOWS)
else:
log_handle.write(UPGRADE_OTHER)
sys.exit(1)
if __name__ == '__main__':
if len(sys.argv) < 5:
print('Usage: populate_virtualenv.py /path/to/topsrcdir /path/to/topobjdir /path/to/virtualenv /path/to/virtualenv_manifest')
sys.exit(1)
verify_python_version(sys.stdout)
topsrcdir, topobjdir, virtualenv_path, manifest_path = sys.argv[1:5]
populate = False
# This should only be called internally.
if sys.argv[1] == 'populate':
populate = True
topsrcdir, topobjdir, virtualenv_path, manifest_path = sys.argv[2:]
manager = VirtualenvManager(topsrcdir, topobjdir, virtualenv_path,
sys.stdout, manifest_path)
if populate:
manager.populate()
else:
manager.ensure()