51 lines
1.7 KiB
Rust
51 lines
1.7 KiB
Rust
|
//! Build script that can be used outside of Nix builds to inject the
|
||
|
//! ATWARD_INDEX_HTML variable when building in development mode.
|
||
|
//!
|
||
|
//! Note that this script assumes that atward is in a checkout of the
|
||
|
//! TVL depot.
|
||
|
|
||
|
use std::process::Command;
|
||
|
|
||
|
static ATWARD_INDEX_HTML: &str = "ATWARD_INDEX_HTML";
|
||
|
static ERROR_MESSAGE: &str = r#"Failed to build index page.
|
||
|
|
||
|
When building during development, atward expects to be in a checkout
|
||
|
of the TVL depot. This is required to automatically build the index
|
||
|
page that is needed at compile time.
|
||
|
|
||
|
As atward can not automatically detect the location of the page,
|
||
|
you must set the `ATWARD_INDEX_HTML` environment variable to the
|
||
|
right path.
|
||
|
|
||
|
The expected page is build using the files in //web/atward/indexHtml
|
||
|
in the depot."#;
|
||
|
|
||
|
fn main() {
|
||
|
// Do nothing if the variable is already set (e.g. via Nix)
|
||
|
if let Ok(_) = std::env::var(ATWARD_INDEX_HTML) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Otherwise ask Nix to build it and inject the result.
|
||
|
let output = Command::new("nix-build")
|
||
|
.arg("-A").arg("web.atward.indexHtml")
|
||
|
// ... assuming atward is at //web/atward ...
|
||
|
.arg("../..")
|
||
|
.output()
|
||
|
.expect(ERROR_MESSAGE);
|
||
|
|
||
|
if !output.status.success() {
|
||
|
eprintln!("{}\nNix output: {}", ERROR_MESSAGE, String::from_utf8_lossy(&output.stderr));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
let out_path = String::from_utf8(output.stdout)
|
||
|
.expect("Nix returned invalid output after building index page");
|
||
|
|
||
|
// Return an instruction to Cargo that will set the environment
|
||
|
// variable during rustc calls.
|
||
|
//
|
||
|
// https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-envvarvalue
|
||
|
println!("cargo:rustc-env={}={}", ATWARD_INDEX_HTML, out_path.trim());
|
||
|
}
|