From 44162ceafbb46430d1f5fe59f59b95953f3353d9 Mon Sep 17 00:00:00 2001 From: TheGoddessInari Date: Mon, 25 Mar 2019 21:33:28 -0700 Subject: [PATCH 1/4] Don't assume the user's environment in mach_bootstrap. On Windows with multiple Pythons installed, this was causing python2.7 to bootstrap a 3.7 virtualenv that it couldn't make use of. PIP_NAMES wasn't used at all, and VIRTUALENV_NAMES ends up being unused now. --- python/mach_bootstrap.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/python/mach_bootstrap.py b/python/mach_bootstrap.py index 9a2a79c6d6a..aded4c0a0e9 100644 --- a/python/mach_bootstrap.py +++ b/python/mach_bootstrap.py @@ -78,14 +78,7 @@ CATEGORIES = { # Possible names of executables # NOTE: Windows Python doesn't provide versioned executables, so we must use # the plain names. On MSYS, we still use Windows Python. -if sys.platform in ['msys', 'win32']: - PYTHON_NAMES = ["python"] - VIRTUALENV_NAMES = ["virtualenv"] - PIP_NAMES = ["pip"] -else: - PYTHON_NAMES = ["python-2.7", "python2.7", "python2", "python"] - VIRTUALENV_NAMES = ["virtualenv-2.7", "virtualenv2.7", "virtualenv2", "virtualenv"] - PIP_NAMES = ["pip-2.7", "pip2.7", "pip2", "pip"] +PYTHON_NAMES = ["python-2.7", "python2.7", "python2", "python"] def _get_exec_path(names, is_valid_path=lambda _path: True): @@ -154,7 +147,7 @@ def wptserve_path(is_firefox, topdir, *paths): def _activate_virtualenv(topdir, is_firefox): virtualenv_path = os.path.join(topdir, "python", "_virtualenv") check_exec_path = lambda path: path.startswith(virtualenv_path) - python = _get_exec_path(PYTHON_NAMES) # If there was no python, mach wouldn't have run at all! + python = sys.executable # If there was no python, mach wouldn't have run at all! if not python: sys.exit('Failed to find python executable for starting virtualenv.') @@ -162,11 +155,13 @@ def _activate_virtualenv(topdir, is_firefox): activate_path = os.path.join(virtualenv_path, script_dir, "activate_this.py") need_pip_upgrade = False if not (os.path.exists(virtualenv_path) and os.path.exists(activate_path)): - virtualenv = _get_exec_path(VIRTUALENV_NAMES) - if not virtualenv: + import imp + try: + imp.find_module('virtualenv') + except ImportError: sys.exit("Python virtualenv is not installed. Please install it prior to running mach.") - _process_exec([virtualenv, "-p", python, "--system-site-packages", virtualenv_path]) + _process_exec([python, "-m", "virtualenv", "-p", python, "--system-site-packages", virtualenv_path]) # We want to upgrade pip when virtualenv created for the first time need_pip_upgrade = True From e1eb36050ef4f6adbf8bc1a42464ef420a64dae0 Mon Sep 17 00:00:00 2001 From: TheGoddessInari Date: Mon, 25 Mar 2019 22:00:39 -0700 Subject: [PATCH 2/4] Default mach.bat to using py -2. Servo already assumes the user has Python, this is the primary way to make sure that Python 2 is preferred, and you should get a sensible error message if you have python 3 but not 2. But first, check that py.exe exists because if a system has only Python 2.x only, it won't have it. If it doesn't, then try python.exe. --- mach.bat | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mach.bat b/mach.bat index 077bd574083..a270b583801 100644 --- a/mach.bat +++ b/mach.bat @@ -36,4 +36,9 @@ IF EXIST "%VS_VCVARS%" ( popd -python mach %* +where /Q py.exe +IF %ERRORLEVEL% NEQ 0 ( + python mach %* +) ELSE ( + py -2 mach %* +) From 903729159e3b53beb309429c15875c8f2822f5da Mon Sep 17 00:00:00 2001 From: TheGoddessInari Date: Tue, 26 Mar 2019 11:05:06 -0700 Subject: [PATCH 3/4] Rework mach.bat to support VS2019 and user-supplied environments. As a bonus, use setlocal to avoid environment pollution. --- mach.bat | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/mach.bat b/mach.bat index a270b583801..836bbf5e63e 100644 --- a/mach.bat +++ b/mach.bat @@ -1,5 +1,11 @@ @echo off +setlocal + +if EXIST "%VCINSTALLDIR%" ( + GOTO mach +) + pushd . IF EXIST "%ProgramFiles(x86)%" ( @@ -8,37 +14,52 @@ IF EXIST "%ProgramFiles(x86)%" ( set "ProgramFiles32=%ProgramFiles%" ) -set VC14VARS=%VS140COMNTOOLS%..\..\VC\vcvarsall.bat -IF EXIST "%VC14VARS%" ( - set "VS_VCVARS=%VC14VARS%" -) ELSE ( +for %%v in (2019 2017) do ( for %%e in (Enterprise Professional Community BuildTools) do ( - IF EXIST "%ProgramFiles32%\Microsoft Visual Studio\2017\%%e\VC\Auxiliary\Build\vcvarsall.bat" ( - set "VS_VCVARS=%ProgramFiles32%\Microsoft Visual Studio\2017\%%e\VC\Auxiliary\Build\vcvarsall.bat" + IF EXIST "%ProgramFiles32%\Microsoft Visual Studio\%%v\%%e\VC\Auxiliary\Build\vcvarsall.bat" ( + set "VS_VCVARS=%ProgramFiles32%\Microsoft Visual Studio\%%v\%%e\VC\Auxiliary\Build\vcvarsall.bat" + GOTO vcvars ) ) ) +set VC14VARS=%VS140COMNTOOLS%..\..\VC\vcvarsall.bat +IF EXIST "%VC14VARS%" ( + set "VS_VCVARS=%VC14VARS%" +) + +:vcvars IF EXIST "%VS_VCVARS%" ( IF NOT DEFINED Platform ( IF EXIST "%ProgramFiles(x86)%" ( call "%VS_VCVARS%" x64 ) ELSE ( ECHO 32-bit Windows is currently unsupported. - EXIT /B 1 + GOTO bad_exit ) ) ) ELSE ( - ECHO Visual Studio 2015 or 2017 is not installed. - ECHO Download and install Visual Studio 2015 or 2017 from https://www.visualstudio.com/ - EXIT /B 1 + ECHO Visual Studio 2015, 2017, or 2019 is not installed. + ECHO Download and install Visual Studio from https://www.visualstudio.com/ + GOTO bad_exit ) popd +:mach where /Q py.exe IF %ERRORLEVEL% NEQ 0 ( python mach %* ) ELSE ( py -2 mach %* ) + +GOTO exit + +:bad_exit +endlocal +EXIT /B 1 + +:exit +endlocal +exit /B From c0052c089407128b9f2b777dedcd29b1e9ddac03 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Mon, 1 Apr 2019 10:59:13 -0400 Subject: [PATCH 4/4] Install virtualenv python module. --- .travis.yml | 2 ++ etc/taskcluster/docker/base.dockerfile | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 50fe71dc85c..e586dc8d928 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ matrix: - sudo: false before_install: - curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain none -y + - pip install virtualenv - source ~/.profile script: - ./mach test-tidy --no-progress --all @@ -20,6 +21,7 @@ matrix: - sudo add-apt-repository 'deb http://apt.llvm.org/precise/ llvm-toolchain-precise-3.9 main' -y - sudo apt-get update -q - sudo apt-get install clang-3.9 llvm-3.9 llvm-3.9-runtime libunwind8-dev -y + - pip install virtualenv - curl -L http://servo-deps.s3.amazonaws.com/gstreamer/gstreamer-1.14-x86_64-linux-gnu.20190213.tar.gz | tar xz - sed -i "s;prefix=/opt/gst;prefix=$PWD/gst;g" $PWD/gst/lib/pkgconfig/*.pc - export PKG_CONFIG_PATH=$PWD/gst/lib/pkgconfig diff --git a/etc/taskcluster/docker/base.dockerfile b/etc/taskcluster/docker/base.dockerfile index 0d9385f4054..d3d940ce7f9 100644 --- a/etc/taskcluster/docker/base.dockerfile +++ b/etc/taskcluster/docker/base.dockerfile @@ -16,8 +16,10 @@ RUN \ # # Running mach python \ - virtualenv \ + python-pip \ # # Installing rustup and sccache (build dockerfile) or fetching build artifacts (run tasks) - curl + curl && \ + # Running mach + pip install virtualenv