Browse Source

Return an error if the non-default RomFS directory isn't found

pull/10/head
AzureMarker 3 years ago
parent
commit
6ca3f96a39
No known key found for this signature in database
GPG Key ID: 47A133F3BF9D03D3
  1. 20
      src/main.rs

20
src/main.rs

@ -292,10 +292,16 @@ fn build_3dsx(config: &CTRConfig) {
.arg(format!("--smdh={}.smdh", config.target_path)); .arg(format!("--smdh={}.smdh", config.target_path));
// If romfs directory exists, automatically include it // If romfs directory exists, automatically include it
let romfs_path = get_romfs_path(config); let (romfs_path, is_default_romfs) = get_romfs_path(config);
if romfs_path.is_dir() { if romfs_path.is_dir() {
println!("Adding RomFS from {}", romfs_path.display()); println!("Adding RomFS from {}", romfs_path.display());
process = process.arg(format!("--romfs={}", romfs_path.display())); process = process.arg(format!("--romfs={}", romfs_path.display()));
} else if !is_default_romfs {
eprintln!(
"Could not find configured RomFS dir: {}",
romfs_path.display()
);
process::exit(1);
} }
let mut process = process let mut process = process
@ -329,7 +335,8 @@ fn link(config: &CTRConfig) {
} }
/// Read the RomFS path from the Cargo manifest. If it's unset, use the default. /// Read the RomFS path from the Cargo manifest. If it's unset, use the default.
fn get_romfs_path(config: &CTRConfig) -> PathBuf { /// The returned boolean is true when the default is used.
fn get_romfs_path(config: &CTRConfig) -> (PathBuf, bool) {
let manifest_path = &config.cargo_manifest_path; let manifest_path = &config.cargo_manifest_path;
let manifest_str = std::fs::read_to_string(manifest_path) let manifest_str = std::fs::read_to_string(manifest_path)
.unwrap_or_else(|e| panic!("Could not open {}: {e}", manifest_path.display())); .unwrap_or_else(|e| panic!("Could not open {}: {e}", manifest_path.display()));
@ -337,6 +344,7 @@ fn get_romfs_path(config: &CTRConfig) -> PathBuf {
toml::de::from_str(&manifest_str).expect("Could not parse Cargo manifest as TOML"); toml::de::from_str(&manifest_str).expect("Could not parse Cargo manifest as TOML");
// Find the romfs setting and compute the path // Find the romfs setting and compute the path
let mut is_default = false;
let romfs_dir_setting = manifest_data let romfs_dir_setting = manifest_data
.as_table() .as_table()
.and_then(|table| table.get("package")) .and_then(|table| table.get("package"))
@ -347,9 +355,13 @@ fn get_romfs_path(config: &CTRConfig) -> PathBuf {
.and_then(toml::Value::as_table) .and_then(toml::Value::as_table)
.and_then(|table| table.get("romfs_dir")) .and_then(|table| table.get("romfs_dir"))
.and_then(toml::Value::as_str) .and_then(toml::Value::as_str)
.unwrap_or("romfs"); .unwrap_or_else(|| {
is_default = true;
"romfs"
});
let mut romfs_path = manifest_path.clone(); let mut romfs_path = manifest_path.clone();
romfs_path.pop(); // Pop Cargo.toml romfs_path.pop(); // Pop Cargo.toml
romfs_path.push(romfs_dir_setting); romfs_path.push(romfs_dir_setting);
romfs_path
(romfs_path, is_default)
} }

Loading…
Cancel
Save