#![cfg_attr(test, allow(dead_code))] use std::env; use std::fs::File; use std::io::prelude::*; use std::path::PathBuf; fn main() { let mut args = env::args(); let program = args.next().expect("Unexpected empty args"); let out_dir = PathBuf::from( env::var_os("GCCTEST_OUT_DIR").expect(&format!("{}: GCCTEST_OUT_DIR not found", program)), ); // Find the first nonexistent candidate file to which the program's args can be written. for i in 0.. { let candidate = &out_dir.join(format!("out{}", i)); // If the file exists, commands have already run. Try again. if candidate.exists() { continue; } // Create a file and record the args passed to the command. let mut f = File::create(candidate).expect(&format!( "{}: can't create candidate: {}", program, candidate.to_string_lossy() )); for arg in args { writeln!(f, "{}", arg).expect(&format!( "{}: can't write to candidate: {}", program, candidate.to_string_lossy() )); } break; } // Create a file used by some tests. let path = &out_dir.join("libfoo.a"); File::create(path).expect(&format!( "{}: can't create libfoo.a: {}", program, path.to_string_lossy() )); }