diff options
| author | Jerry Wang <jerrylwang123@gmail.com> | 2024-06-19 20:58:56 -0400 |
|---|---|---|
| committer | Jerry Wang <jerrylwang123@gmail.com> | 2024-06-22 14:15:23 -0400 |
| commit | c69770d730f8f5ff53b92f73be9deb5081f0c1b0 (patch) | |
| tree | 1f154d25293193a4049c728e1e7b5a7540da4947 | |
| parent | f90d4e4371b91688d01906624396f96ec53ff094 (diff) | |
| download | rust-c69770d730f8f5ff53b92f73be9deb5081f0c1b0.tar.gz rust-c69770d730f8f5ff53b92f73be9deb5081f0c1b0.zip | |
Migrate `static-pie` scripts to `rmake`
| -rwxr-xr-x | tests/run-make/static-pie/check_clang_version.sh | 20 | ||||
| -rwxr-xr-x | tests/run-make/static-pie/check_gcc_version.sh | 20 | ||||
| -rw-r--r-- | tests/run-make/static-pie/rmake.rs | 31 |
3 files changed, 29 insertions, 42 deletions
diff --git a/tests/run-make/static-pie/check_clang_version.sh b/tests/run-make/static-pie/check_clang_version.sh deleted file mode 100755 index b8e97c3da7d..00000000000 --- a/tests/run-make/static-pie/check_clang_version.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -if command -v clang > /dev/null -then - CLANG_VERSION=$(echo __clang_major__ | clang -E -x c - | grep -v -e '^#' ) - echo "clang version $CLANG_VERSION detected" - if (( $CLANG_VERSION >= 9 )) - then - echo "clang supports -static-pie" - exit 0 - else - echo "clang too old to support -static-pie, skipping test" - exit 1 - fi -else - echo "No clang version detected" - exit 2 -fi diff --git a/tests/run-make/static-pie/check_gcc_version.sh b/tests/run-make/static-pie/check_gcc_version.sh deleted file mode 100755 index d07e1d151df..00000000000 --- a/tests/run-make/static-pie/check_gcc_version.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -if command -v gcc > /dev/null -then - GCC_VERSION=$(echo __GNUC__ | gcc -E -x c - | grep -v -e '^#' ) - echo "gcc version $GCC_VERSION detected" - if (( $GCC_VERSION >= 8 )) - then - echo "gcc supports -static-pie" - exit 0 - else - echo "gcc too old to support -static-pie, skipping test" - exit 1 - fi -else - echo "No gcc version detected" - exit 2 -fi diff --git a/tests/run-make/static-pie/rmake.rs b/tests/run-make/static-pie/rmake.rs index 038e8b48071..77c5e253bc0 100644 --- a/tests/run-make/static-pie/rmake.rs +++ b/tests/run-make/static-pie/rmake.rs @@ -8,13 +8,40 @@ use std::process::Command; use run_make_support::llvm_readobj; +use run_make_support::regex::Regex; use run_make_support::rustc; use run_make_support::{cmd, run_with_args, target}; +// Minimum major versions supporting -static-pie +const GCC_VERSION: u32 = 8; +const CLANG_VERSION: u32 = 9; + +// Return `true` if the `compiler` version supports `-static-pie`. fn ok_compiler_version(compiler: &str) -> bool { - let check_file = format!("check_{compiler}_version.sh"); + let (trigger, version_threshold) = match compiler { + "clang" => ("__clang_major__", CLANG_VERSION), + "gcc" => ("__GNUC__", GCC_VERSION), + other => panic!("unexpected compiler '{other}', expected 'clang' or 'gcc'"), + }; + + if Command::new(compiler).spawn().is_err() { + eprintln!("No {compiler} version detected"); + return false; + } - Command::new(check_file).status().is_ok_and(|status| status.success()) + let compiler_output = + cmd(compiler).stdin(trigger).arg("-").arg("-E").arg("-x").arg("c").run().stdout_utf8(); + let re = Regex::new(r"(?m)^(\d+)").unwrap(); + let version: u32 = + re.captures(&compiler_output).unwrap().get(1).unwrap().as_str().parse().unwrap(); + + if version >= version_threshold { + eprintln!("{compiler} supports -static-pie"); + true + } else { + eprintln!("{compiler} too old to support -static-pie, skipping test"); + false + } } fn test(compiler: &str) { |
