File: wrappers.rs

package info (click to toggle)
chromium 139.0.7258.154-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 6,129,716 kB
  • sloc: cpp: 35,100,894; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,921; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,152; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (56 lines) | stat: -rw-r--r-- 2,023 bytes parent folder | download | duplicates (16)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
extern crate autocfg;

use std::env;

mod support;

/// Tests that autocfg uses the RUSTC_WRAPPER and/or RUSTC_WORKSPACE_WRAPPER
/// environment variables when running rustc.
#[test]
#[cfg(unix)] // we're using system binaries as wrappers
fn test_wrappers() {
    fn set(name: &str, value: Option<bool>) {
        match value {
            Some(true) => env::set_var(name, "/usr/bin/env"),
            Some(false) => env::set_var(name, "/bin/false"),
            None => env::remove_var(name),
        }
    }

    let out = support::out_dir();

    // This is used as a heuristic to detect rust-lang/cargo#9601.
    env::set_var("CARGO_ENCODED_RUSTFLAGS", "");

    // No wrapper, a good pass-through wrapper, and a bad wrapper.
    let variants = [None, Some(true), Some(false)];

    for &workspace in &variants {
        for &rustc in &variants {
            set("RUSTC_WRAPPER", rustc);
            set("RUSTC_WORKSPACE_WRAPPER", workspace);

            let ac = autocfg::AutoCfg::with_dir(out.as_ref()).unwrap();
            if rustc == Some(false) || workspace == Some(false) {
                // Everything should fail with bad wrappers.
                assert!(!ac.probe_type("usize"));
            } else {
                // Try known good and bad types for the wrapped rustc.
                assert!(ac.probe_type("usize"));
                assert!(!ac.probe_type("mesize"));
            }
            // Either way, we should have found the inner rustc version.
            assert!(ac.probe_rustc_version(1, 0));
        }
    }

    // Finally, make sure that `RUSTC_WRAPPER` is applied outermost
    // by using something that doesn't pass through at all.
    env::set_var("RUSTC_WRAPPER", "./tests/wrap_ignored");
    env::set_var("RUSTC_WORKSPACE_WRAPPER", "/bin/false");
    let ac = autocfg::AutoCfg::with_dir(out.as_ref()).unwrap();
    assert!(ac.probe_type("mesize")); // anything goes!

    // Make sure we also got the version from that wrapper.
    assert!(ac.probe_rustc_version(12345, 6789));
}