From 9db6a41687bacde82585f127b43d418d5845e5c7 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 18 Apr 2016 15:45:45 -0700 Subject: [PATCH 1/2] etc: Add debugger.Terminate() to lldb_batchmode.py Right now on the most recent version of LLDB installed on OSX we'll segfault on all the LLDB tests if this isn't called (unfortunately). Hopefully we've updated LLDB on the bots to actually get this working everywhere! Closes #32994 --- src/etc/lldb_batchmode.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/etc/lldb_batchmode.py b/src/etc/lldb_batchmode.py index b1506285b3ac1..7bbb3577f8d93 100644 --- a/src/etc/lldb_batchmode.py +++ b/src/etc/lldb_batchmode.py @@ -216,4 +216,5 @@ def watchdog(): print("Aborting.", file=sys.stderr) sys.exit(1) finally: + debugger.Terminate() script_file.close() From cbe6292c58feb643917c0959f95173a3c312fbd4 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 19 Apr 2016 09:44:19 -0700 Subject: [PATCH 2/2] mk: Force system python for LLDB tests on OSX Force usage of /usr/bin/python whenever we run LLDB tests on OSX because it looks like no other Python will work. --- configure | 13 +++++++++++++ mk/tests.mk | 3 ++- src/bootstrap/build/check.rs | 13 ++++++++++++- src/tools/compiletest/src/common.rs | 7 +++++-- src/tools/compiletest/src/main.rs | 6 ++++-- src/tools/compiletest/src/runtest.rs | 4 ++-- 6 files changed, 38 insertions(+), 8 deletions(-) diff --git a/configure b/configure index fdef550a6451a..3def40621dd09 100755 --- a/configure +++ b/configure @@ -819,6 +819,19 @@ then fi fi +# LLDB tests on OSX require /usr/bin/python, not something like Homebrew's +# /usr/local/bin/python. We're loading a compiled module for LLDB tests which is +# only compatible with the system. +case $CFG_BUILD in + *-apple-darwin) + CFG_LLDB_PYTHON=/usr/bin/python + ;; + *) + CFG_LLDB_PYTHON=$CFG_PYTHON + ;; +esac +putvar CFG_LLDB_PYTHON + step_msg "looking for target specific programs" probe CFG_ADB adb diff --git a/mk/tests.mk b/mk/tests.mk index 41b078efafcf1..b5ee9c9c328cf 100644 --- a/mk/tests.mk +++ b/mk/tests.mk @@ -616,7 +616,8 @@ CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \ --stage-id stage$(1)-$(2) \ --target $(2) \ --host $(3) \ - --python $$(CFG_PYTHON) \ + --docck-python $$(CFG_PYTHON) \ + --lldb-python $$(CFG_LLDB_PYTHON) \ --gdb-version="$(CFG_GDB_VERSION)" \ --lldb-version="$(CFG_LLDB_VERSION)" \ --android-cross-path=$(CFG_ANDROID_CROSS_PATH) \ diff --git a/src/bootstrap/build/check.rs b/src/bootstrap/build/check.rs index f145a7149fbe1..ec97ebcc832e5 100644 --- a/src/bootstrap/build/check.rs +++ b/src/bootstrap/build/check.rs @@ -81,8 +81,19 @@ pub fn compiletest(build: &Build, // FIXME: needs android support cmd.arg("--android-cross-path").arg(""); + // FIXME: CFG_PYTHON should probably be detected more robustly elsewhere - cmd.arg("--python").arg("python"); + let python_default = "python"; + cmd.arg("--docck-python").arg(python_default); + + if build.config.build.ends_with("apple-darwin") { + // Force /usr/bin/python on OSX for LLDB tests because we're loading the + // LLDB plugin's compiled module which only works with the system python + // (namely not Homebrew-installed python) + cmd.arg("--lldb-python").arg("/usr/bin/python"); + } else { + cmd.arg("--lldb-python").arg(python_default); + } if let Some(ref vers) = build.gdb_version { cmd.arg("--gdb-version").arg(vers); diff --git a/src/tools/compiletest/src/common.rs b/src/tools/compiletest/src/common.rs index 6ffc1e9ea1118..81265f6ccafca 100644 --- a/src/tools/compiletest/src/common.rs +++ b/src/tools/compiletest/src/common.rs @@ -83,8 +83,11 @@ pub struct Config { // The rustdoc executable pub rustdoc_path: PathBuf, - // The python executable - pub python: String, + // The python executable to use for LLDB + pub lldb_python: String, + + // The python executable to use for htmldocck + pub docck_python: String, // The llvm FileCheck binary path pub llvm_filecheck: Option, diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs index e92b0c8728099..6cfe1de265011 100644 --- a/src/tools/compiletest/src/main.rs +++ b/src/tools/compiletest/src/main.rs @@ -70,7 +70,8 @@ pub fn parse_config(args: Vec ) -> Config { reqopt("", "run-lib-path", "path to target shared libraries", "PATH"), reqopt("", "rustc-path", "path to rustc to use for compiling", "PATH"), reqopt("", "rustdoc-path", "path to rustdoc to use for compiling", "PATH"), - reqopt("", "python", "path to python to use for doc tests", "PATH"), + reqopt("", "lldb-python", "path to python to use for doc tests", "PATH"), + reqopt("", "docck-python", "path to python to use for doc tests", "PATH"), optopt("", "valgrind-path", "path to Valgrind executable for Valgrind tests", "PROGRAM"), optflag("", "force-valgrind", "fail if Valgrind tests cannot be run under Valgrind"), optopt("", "llvm-filecheck", "path to LLVM's FileCheck binary", "DIR"), @@ -140,7 +141,8 @@ pub fn parse_config(args: Vec ) -> Config { run_lib_path: make_absolute(opt_path(matches, "run-lib-path")), rustc_path: opt_path(matches, "rustc-path"), rustdoc_path: opt_path(matches, "rustdoc-path"), - python: matches.opt_str("python").unwrap(), + lldb_python: matches.opt_str("lldb-python").unwrap(), + docck_python: matches.opt_str("docck-python").unwrap(), valgrind_path: matches.opt_str("valgrind-path"), force_valgrind: matches.opt_present("force-valgrind"), llvm_filecheck: matches.opt_str("llvm-filecheck").map(|s| PathBuf::from(&s)), diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index 6358d19ff0906..2336727759aac 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -776,7 +776,7 @@ fn run_debuginfo_lldb_test(config: &Config, props: &TestProps, testpaths: &TestP let lldb_script_path = rust_src_root.join("src/etc/lldb_batchmode.py"); cmd2procres(config, testpaths, - Command::new(&config.python) + Command::new(&config.lldb_python) .arg(&lldb_script_path) .arg(test_executable) .arg(debugger_script) @@ -1901,7 +1901,7 @@ fn run_rustdoc_test(config: &Config, props: &TestProps, testpaths: &TestPaths) { let res = cmd2procres(config, testpaths, - Command::new(&config.python) + Command::new(&config.docck_python) .arg(root.join("src/etc/htmldocck.py")) .arg(out_dir) .arg(&testpaths.file));