|
|
|
use std::path::PathBuf;
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
// Open Cargo.toml
|
|
|
|
let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap();
|
|
|
|
let manifest_path = format!("{manifest_dir}/Cargo.toml");
|
|
|
|
let manifest_str = std::fs::read_to_string(&manifest_path)
|
|
|
|
.unwrap_or_else(|e| panic!("Could not open {manifest_path}: {e}"));
|
|
|
|
let manifest_data: toml::Value =
|
|
|
|
toml::de::from_str(&manifest_str).expect("Could not parse Cargo manifest as TOML");
|
|
|
|
|
|
|
|
// Find the romfs setting and compute the path
|
|
|
|
let romfs_dir_setting = manifest_data
|
|
|
|
.as_table()
|
|
|
|
.and_then(|table| table.get("package"))
|
|
|
|
.and_then(toml::Value::as_table)
|
|
|
|
.and_then(|table| table.get("metadata"))
|
|
|
|
.and_then(toml::Value::as_table)
|
|
|
|
.and_then(|table| table.get("cargo-3ds"))
|
|
|
|
.and_then(toml::Value::as_table)
|
|
|
|
.and_then(|table| table.get("romfs_dir"))
|
|
|
|
.and_then(toml::Value::as_str)
|
|
|
|
.unwrap_or("romfs");
|
|
|
|
let romfs_path = PathBuf::from(format!("{manifest_dir}/{romfs_dir_setting}"));
|
|
|
|
|
|
|
|
// Check if the romfs path exists so we can compile the module
|
|
|
|
if romfs_path.exists() {
|
|
|
|
println!("cargo:rustc-cfg=romfs_exists");
|
|
|
|
}
|
|
|
|
|
|
|
|
println!("cargo:rerun-if-changed={manifest_dir}");
|
|
|
|
}
|