third_party/rust
- ..
- .cargo/
- anstream/
- anstyle/
- anstyle_parse/
- anstyle_query/
- anstyle_wincon/
- clap/
- clap_builder/
- clap_derive/
- clap_lex/
- colorchoice/
- darling/
- darling_core/
- darling_macro/
- heck/
- ident_case/
- is_terminal_polyfill/
- once_cell_polyfill/
- proc_macro2/
- quote/
- strsim/
- syn/
- unicode_ident/
- utf8parse/
- windows_link/
- windows_sys/
- BUILD.gn
- Cargo.lock
- Cargo.toml
- build.rs
third_party/rust/build.rs
//! Takes a 'cargo build script-like' executable and parse its output
//! cmd is <output_dir> <build_script>
fn main() {
let args: Vec<String> = std::env::args().collect();
if args.len() != 3 {
eprintln!("Usage: <output_file> <build_script>");
std::process::exit(1);
}
let output_file = &args[1];
let build_script = &args[2];
let build_script_path = if std::path::Path::new(build_script).is_absolute() {
std::path::PathBuf::from(build_script)
} else {
std::env::current_dir().unwrap().join(build_script)
};
let output = std::process::Command::new(&build_script_path)
.output()
.expect(&format!(
"Failed to run build script {}",
build_script_path.to_string_lossy()
));
if !output.status.success() {
eprintln!("Build script failed");
let stdout = String::from_utf8_lossy(&output.stdout);
let stderr = String::from_utf8_lossy(&output.stderr);
eprintln!("stdout: {}", stdout);
eprintln!("stderr: {}", stderr);
std::process::exit(1);
}
let stdout = String::from_utf8_lossy(&output.stdout);
let lines: Vec<&str> = stdout.lines().collect();
let mut flags: Vec<String> = Vec::new();
for line in lines {
if line.starts_with("cargo:rustc-cfg") {
let flag = line["cargo:rustc-cfg=".len()..].to_string();
flags.push(format!("--cfg={}", flag));
}
}
let flags: String = flags.join("\n");
std::fs::write(output_file, flags).expect("Failed to write flags");
}