wasm-bindgen/crates/webidl-tests/build.rs
Andrew Chin 156eb24359 Use raw string in paths in webidl-tests generated code
This fixes things on Windows, which uses backslashes in their paths
2018-08-14 19:11:58 -04:00

52 lines
1.6 KiB
Rust

extern crate wasm_bindgen_webidl;
use std::env;
use std::fs;
use std::path::PathBuf;
use std::process::Command;
fn main() {
let idls = fs::read_dir(".")
.unwrap()
.map(|f| f.unwrap().path())
.filter(|f| f.extension().and_then(|s| s.to_str()) == Some("webidl"))
.map(|f| (fs::read_to_string(&f).unwrap(), f));
let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap());
for (i, (idl, path)) in idls.enumerate() {
println!("processing {:?}", path);
let mut generated_rust = wasm_bindgen_webidl::compile(&idl).unwrap();
let out_file = out_dir.join(path.file_name().unwrap())
.with_extension("rs");
let js_file = path.with_extension("js")
.canonicalize()
.unwrap();
generated_rust.push_str(&format!(r#"
pub mod import_script {{
use wasm_bindgen::prelude::*;
use wasm_bindgen_test::*;
#[wasm_bindgen(module = r"{}")]
extern {{
fn not_actually_a_function{1}();
}}
#[wasm_bindgen_test]
fn foo() {{
if ::std::env::var("NOT_GONNA_WORK").is_ok() {{
not_actually_a_function{1}();
}}
}}
}}
"#, js_file.display(), i));
fs::write(&out_file, generated_rust).unwrap();
// Attempt to run rustfmt, but don't worry if it fails or if it isn't
// installed, this is just to help with debugging
drop(Command::new("rustfmt").arg(&out_file).status());
}
}