Auto merge of #33084 - alexcrichton:osx-python-sanity, r=michaelwoerister

Sanity check Python on OSX for LLDB tests

Two primary changes:

* Don't get past the configure stage if `python` isn't coming from `/usr/bin`
* Call `debugger.Terminate()` to prevent segfaults on newer versions of LLDB.

Closes #32994
This commit is contained in:
bors 2016-04-23 01:18:03 -07:00
commit ef57fb7144
7 changed files with 39 additions and 8 deletions

13
configure vendored
View File

@ -823,6 +823,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

View File

@ -619,7 +619,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) \

View File

@ -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);

View File

@ -216,4 +216,5 @@ except IOError as e:
print("Aborting.", file=sys.stderr)
sys.exit(1)
finally:
debugger.Terminate()
script_file.close()

View File

@ -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<PathBuf>,

View File

@ -72,7 +72,8 @@ pub fn parse_config(args: Vec<String> ) -> 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"),
@ -142,7 +143,8 @@ pub fn parse_config(args: Vec<String> ) -> 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)),

View File

@ -777,7 +777,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)
@ -1835,7 +1835,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));