aboutsummaryrefslogtreecommitdiff
path: root/run_project_tests.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2019-06-21 23:39:01 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2019-06-22 00:16:20 +0300
commit6d6acab6febf737b7ff89fc8d069bb59285c0315 (patch)
treec6e9e5537764e871432c6cdb66d08956a45ba3f3 /run_project_tests.py
parent9c68d8f3f245d84cc442a6a9f3fbd92ea7b6a3ed (diff)
downloadmeson-6d6acab6febf737b7ff89fc8d069bb59285c0315.zip
meson-6d6acab6febf737b7ff89fc8d069bb59285c0315.tar.gz
meson-6d6acab6febf737b7ff89fc8d069bb59285c0315.tar.bz2
Detect broken Rust compiler setups.
Diffstat (limited to 'run_project_tests.py')
-rwxr-xr-xrun_project_tests.py30
1 files changed, 29 insertions, 1 deletions
diff --git a/run_project_tests.py b/run_project_tests.py
index bbeb6ca..3b62b5c 100755
--- a/run_project_tests.py
+++ b/run_project_tests.py
@@ -559,6 +559,34 @@ def skip_csharp(backend):
return not stdo.startswith(b'2.')
return True
+# In Azure some setups have a broken rustc that will error out
+# on all compilation attempts.
+
+def has_broken_rustc() -> bool:
+ dirname = 'brokenrusttest'
+ if os.path.exists(dirname):
+ mesonlib.windows_proof_rmtree(dirname)
+ os.mkdir(dirname)
+ open(dirname + '/sanity.rs', 'w').write('''fn main() {
+}
+''')
+ pc = subprocess.run(['rustc', '-o', 'sanity.exe', 'sanity.rs'],
+ cwd=dirname,
+ stdout = subprocess.DEVNULL,
+ stderr = subprocess.DEVNULL)
+ mesonlib.windows_proof_rmtree(dirname)
+ return pc.returncode != 0
+
+def should_skip_rust() -> bool:
+ if not shutil.which('rustc'):
+ return True
+ if backend is not Backend.ninja:
+ return True
+ if mesonlib.is_windows():
+ if has_broken_rustc():
+ return True
+ return False
+
def detect_tests_to_run():
# Name, subdirectory, skip condition.
all_tests = [
@@ -577,7 +605,7 @@ def detect_tests_to_run():
('java', 'java', backend is not Backend.ninja or mesonlib.is_osx() or not have_java()),
('C#', 'csharp', skip_csharp(backend)),
('vala', 'vala', backend is not Backend.ninja or not shutil.which('valac')),
- ('rust', 'rust', backend is not Backend.ninja or not shutil.which('rustc')),
+ ('rust', 'rust', should_skip_rust()),
('d', 'd', backend is not Backend.ninja or not have_d_compiler()),
('objective c', 'objc', backend not in (Backend.ninja, Backend.xcode) or not have_objc_compiler()),
('objective c++', 'objcpp', backend not in (Backend.ninja, Backend.xcode) or not have_objcpp_compiler()),