Skip to main content

run_make_support/
lib.rs

1//! `run-make-support` is a support library for run-make tests. It provides command wrappers and
2//! convenience utility functions to help test writers reduce duplication. The support library
3//! notably is built via bootstrap cargo: this means that if your test wants some non-trivial
4//! utility, such as `object` or `wasmparser`, they can be re-exported and be made available through
5//! this library.
6
7#![warn(unreachable_pub)]
8
9mod command;
10mod macros;
11mod util;
12
13pub mod artifact_names;
14pub mod assertion_helpers;
15pub mod diff;
16pub mod env;
17pub mod external_deps;
18pub mod linker;
19pub mod path_helpers;
20pub mod run;
21pub mod scoped_run;
22pub mod string;
23pub mod symbols;
24pub mod targets;
25pub mod wasm;
26
27// Internally we call our fs-related support module as `fs`, but re-export its content as `rfs`
28// to tests to avoid colliding with commonly used `use std::fs;`.
29mod fs;
30
31/// [`std::fs`] wrappers and assorted filesystem-related helpers. Public to tests as `rfs` to not be
32/// confused with [`std::fs`].
33pub mod rfs {
34    pub use crate::fs::*;
35}
36
37// Re-exports of third-party library crates.
38pub use bstr;
39pub use gimli;
40pub use libc;
41pub use object;
42pub use regex;
43pub use rustdoc_json_types;
44pub use serde_json;
45pub use similar;
46pub use tempfile;
47pub use wasmparser;
48
49// Helpers for building names of output artifacts that are potentially target-specific.
50pub use crate::artifact_names::{
51    bin_name, dynamic_lib_extension, dynamic_lib_name, msvc_import_dynamic_lib_name, rust_lib_name,
52    static_lib_name,
53};
54pub use crate::assertion_helpers::{
55    assert_contains, assert_contains_regex, assert_count_is, assert_dirs_are_equal, assert_equals,
56    assert_not_contains, assert_not_contains_regex,
57};
58pub use crate::command::CompletedProcess;
59// `diff` is implemented in terms of the [similar] library.
60//
61// [similar]: https://github.com/mitsuhiko/similar
62pub use crate::diff::{Diff, diff};
63// Panic-on-fail [`std::env::var`] and [`std::env::var_os`] wrappers.
64pub use crate::env::{env_var, env_var_os, set_current_dir};
65pub use crate::external_deps::c_build::{
66    build_native_dynamic_lib, build_native_static_lib, build_native_static_lib_cxx,
67    build_native_static_lib_optimized,
68};
69// Re-exports of external dependencies.
70pub use crate::external_deps::c_cxx_compiler::{
71    Cc, Gcc, cc, cxx, extra_c_flags, extra_cxx_flags, extra_linker_flags, gcc,
72};
73pub use crate::external_deps::cargo::cargo;
74pub use crate::external_deps::clang::{Clang, clang};
75pub use crate::external_deps::htmldocck::htmldocck;
76pub use crate::external_deps::llvm::{
77    self, LlvmAr, LlvmBcanalyzer, LlvmDis, LlvmDwarfdump, LlvmFilecheck, LlvmNm, LlvmObjcopy,
78    LlvmObjdump, LlvmProfdata, LlvmReadobj, llvm_ar, llvm_as, llvm_bcanalyzer, llvm_dis,
79    llvm_dwarfdump, llvm_filecheck, llvm_nm, llvm_objcopy, llvm_objdump, llvm_profdata,
80    llvm_readobj,
81};
82pub use crate::external_deps::python::python_command;
83pub use crate::external_deps::rustc::{
84    self, Rustc, bare_rustc, rustc, rustc_minicore, rustc_path, stable_bare_rustc,
85};
86pub use crate::external_deps::rustdoc::{Rustdoc, bare_rustdoc, rustdoc};
87// Path-related helpers.
88pub use crate::path_helpers::{
89    build_root, cwd, filename_contains, filename_not_in_denylist, has_extension, has_prefix,
90    has_suffix, not_contains, path, recursive_find_files, shallow_find_directories,
91    shallow_find_files, source_root,
92};
93// Convenience helpers for running binaries and other commands.
94pub use crate::run::{cmd, run, run_fail, run_with_args};
95// Helpers for scoped test execution where certain properties are attempted to be maintained.
96pub use crate::scoped_run::{run_in_tmpdir, test_while_readonly};
97pub use crate::string::{
98    count_regex_matches_in_files_with_extension, invalid_utf8_contains, invalid_utf8_not_contains,
99};
100// Helpers for checking target information.
101pub use crate::targets::{
102    apple_os, is_aix, is_arm64ec, is_darwin, is_win7, is_windows, is_windows_gnu, is_windows_msvc,
103    llvm_components_contain, target, uname,
104};