Skip to content

Commit

Permalink
Migrate emit-to-stdout to new run-make
Browse files Browse the repository at this point in the history
Co-authored-by: Oneirical <[email protected]>
Co-authored-by: Chris Denton <[email protected]>
  • Loading branch information
3 people committed Oct 7, 2024
1 parent b577b26 commit 3afb7d6
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 55 deletions.
6 changes: 3 additions & 3 deletions src/tools/run-make-support/src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,23 +73,23 @@ macro_rules! impl_common_helpers {
/// Configuration for the child process’s standard input (stdin) handle.
///
/// See [`std::process::Command::stdin`].
pub fn stdin<T: Into<Stdio>>(&mut self, cfg: T) -> &mut Self {
pub fn stdin<T: Into<::std::process::Stdio>>(&mut self, cfg: T) -> &mut Self {
self.cmd.stdin(cfg);
self
}

/// Configuration for the child process’s standard output (stdout) handle.
///
/// See [`std::process::Command::stdout`].
pub fn stdout<T: Into<Stdio>>(&mut self, cfg: T) -> &mut Self {
pub fn stdout<T: Into<::std::process::Stdio>>(&mut self, cfg: T) -> &mut Self {
self.cmd.stdout(cfg);
self
}

/// Configuration for the child process’s standard error (stderr) handle.
///
/// See [`std::process::Command::stderr`].
pub fn stderr<T: Into<Stdio>>(&mut self, cfg: T) -> &mut Self {
pub fn stderr<T: Into<::std::process::Stdio>>(&mut self, cfg: T) -> &mut Self {
self.cmd.stderr(cfg);
self
}
Expand Down
1 change: 0 additions & 1 deletion src/tools/tidy/src/allowed_run_make_makefiles.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
run-make/branch-protection-check-IBT/Makefile
run-make/cat-and-grep-sanity-check/Makefile
run-make/emit-to-stdout/Makefile
run-make/extern-fn-reachable/Makefile
run-make/incr-add-rust-src-component/Makefile
run-make/issue-84395-lto-embed-bitcode/Makefile
Expand Down
51 changes: 0 additions & 51 deletions tests/run-make/emit-to-stdout/Makefile

This file was deleted.

73 changes: 73 additions & 0 deletions tests/run-make/emit-to-stdout/rmake.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
//! If `-o -` or `--emit KIND=-` is provided, output should be written to stdout
//! instead. Binary output (`obj`, `llvm-bc`, `link` and `metadata`)
//! being written this way will result in an error if stdout is a tty.
//! Multiple output types going to stdout will trigger an error too,
//! as they would all be mixed together.
//!
//! See <https://github.com/rust-lang/rust/pull/111626>.
use std::fs::File;

use run_make_support::{diff, run_in_tmpdir, rustc};

// Test emitting text outputs to stdout works correctly
fn run_diff(name: &str, file_args: &[&str]) {
rustc().emit(format!("{name}={name}")).input("test.rs").args(file_args).run();
let out = rustc().emit(format!("{name}=-")).input("test.rs").run().stdout_utf8();
diff().expected_file(name).actual_text("stdout", &out).run();
}

// Test that emitting binary formats to a terminal gives the correct error
fn run_terminal_err_diff(name: &str) {
#[cfg(not(windows))]
let terminal = File::create("/dev/ptmx").unwrap();
// FIXME: If this test fails and the compiler does print to the console,
// then this will produce a lot of output.
// We should spawn a new console instead to print stdout.
#[cfg(windows)]
let terminal = File::options().read(true).write(true).open(r"\\.\CONOUT$").unwrap();

let err = File::create(name).unwrap();
rustc().emit(format!("{name}=-")).input("test.rs").stdout(terminal).stderr(err).run_fail();
diff().expected_file(format!("emit-{name}.stderr")).actual_file(name).run();
}

fn main() {
run_in_tmpdir(|| {
run_diff("asm", &[]);
run_diff("llvm-ir", &[]);
run_diff("dep-info", &["-Zdep-info-omit-d-target=yes"]);
run_diff("mir", &[]);

run_terminal_err_diff("llvm-bc");
run_terminal_err_diff("obj");
run_terminal_err_diff("metadata");
run_terminal_err_diff("link");

// Test error for emitting multiple types to stdout
rustc()
.input("test.rs")
.emit("asm=-")
.emit("llvm-ir=-")
.emit("dep-info=-")
.emit("mir=-")
.stderr(File::create("multiple-types").unwrap())
.run_fail();
diff().expected_file("emit-multiple-types.stderr").actual_file("multiple-types").run();

// Same as above, but using `-o`
rustc()
.input("test.rs")
.output("-")
.emit("asm,llvm-ir,dep-info,mir")
.stderr(File::create("multiple-types-option-o").unwrap())
.run_fail();
diff()
.expected_file("emit-multiple-types.stderr")
.actual_file("multiple-types-option-o")
.run();

// Test that `-o -` redirected to a file works correctly (#26719)
rustc().input("test.rs").output("-").stdout(File::create("out-stdout").unwrap()).run();
});
}

0 comments on commit 3afb7d6

Please sign in to comment.