use std::path::PathBuf;
use std::process::Command;
fn main() {
println!("cargo:rerun-if-env-changed=CARGO_FEATURE_WASM_RUNTIME");
if std::env::var_os("CARGO_FEATURE_WASM_RUNTIME").is_none() {
return;
}
let fixture_dir = PathBuf::from("tests/fixtures/sample_stub");
println!(
"cargo:rerun-if-changed={}/src/lib.rs",
fixture_dir.display()
);
println!(
"cargo:rerun-if-changed={}/Cargo.toml",
fixture_dir.display()
);
println!(
"cargo:rerun-if-changed={}/Cargo.lock",
fixture_dir.display()
);
println!("cargo:rerun-if-changed=../rustledger-plugin-types/src");
println!("cargo:rerun-if-changed=../rustledger-plugin-types/Cargo.toml");
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-env-changed=CARGO_LLVM_COV");
let out_dir = PathBuf::from(std::env::var_os("OUT_DIR").expect("OUT_DIR set by cargo"));
let sentinel = out_dir.join("sample_stub.wasm");
if std::env::var_os("CARGO_LLVM_COV").is_some() {
println!(
"cargo:warning=skipping sample_stub wasm32 plugin fixture build under cargo-llvm-cov (incompatible with -Cinstrument-coverage); Test job exercises e2e for real"
);
return;
}
if sentinel.exists() {
std::fs::remove_file(&sentinel).expect("remove stale sample_stub.wasm sentinel");
}
let target_dir = out_dir.join("sample_stub_target");
let output = Command::new(std::env::var_os("CARGO").unwrap_or_else(|| "cargo".into()))
.env_remove("RUSTFLAGS")
.env_remove("CARGO_ENCODED_RUSTFLAGS")
.env_remove("CARGO_BUILD_RUSTFLAGS")
.env_remove("CARGO_BUILD_TARGET")
.env_remove("RUSTDOCFLAGS")
.env_remove("CARGO_INCREMENTAL")
.env_remove("LLVM_PROFILE_FILE")
.args([
"--config",
"target.wasm32-unknown-unknown.rustflags=[]",
"build",
"--release",
"--target",
"wasm32-unknown-unknown",
"--manifest-path",
])
.arg(fixture_dir.join("Cargo.toml"))
.arg("--target-dir")
.arg(&target_dir)
.output();
match output {
Ok(out) if out.status.success() => {
let built = target_dir
.join("wasm32-unknown-unknown")
.join("release")
.join("sample_stub_wasm_plugin.wasm");
if !built.exists() {
println!(
"cargo:warning=expected wasm output at {} but it's missing; e2e test will skip (local) or panic (CI)",
built.display()
);
return;
}
std::fs::copy(&built, &sentinel).expect("copy stub wasm to OUT_DIR");
}
Ok(out) => {
for line in String::from_utf8_lossy(&out.stderr).lines() {
println!("cargo:warning=sample_stub plugin stderr: {line}");
}
println!(
"cargo:warning=cargo build for sample_stub plugin fixture exited {}; e2e test will skip (local) or panic (CI)",
out.status
);
}
Err(e) => {
println!(
"cargo:warning=failed to invoke cargo for sample_stub plugin fixture ({e}); e2e test will skip (local) or panic (CI)"
);
}
}
}