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 b1506285b3ac..7bbb3577f8d9 100644 --- a/src/etc/lldb_batchmode.py +++ b/src/etc/lldb_batchmode.py @@ -216,4 +216,5 @@ except IOError as e: 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 fdef550a6451..3def40621dd0 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 41b078efafcf..b5ee9c9c328c 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 f145a7149fbe..ec97ebcc832e 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 6ffc1e9ea111..81265f6ccafc 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 e92b0c872809..6cfe1de26501 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 6358d19ff090..2336727759aa 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));