diff --git a/src/binding_generator/bin_binding.rs b/src/binding_generator/bin_binding.rs index e359d2961..178669945 100644 --- a/src/binding_generator/bin_binding.rs +++ b/src/binding_generator/bin_binding.rs @@ -54,7 +54,7 @@ impl<'m> BindingGenerator for BinBindingGenerator<'m> { let scripts_dir = self.metadata.get_data_dir().join("scripts"); - let mut additional_files = None; + let mut additional_files = HashMap::new(); let artifact_target = if self.use_shim { // The real binary goes into platlib at {dist}.scripts/{bin_name} @@ -71,8 +71,7 @@ impl<'m> BindingGenerator for BinBindingGenerator<'m> { // the shim entry in .data/scripts/. let shim_name = bin_name.strip_suffix(".exe").unwrap_or(&bin_name); - let mut files = HashMap::new(); - files.insert( + additional_files.insert( scripts_dir.join(shim_name), ArchiveSource::Generated(GeneratedSourceData { data: generate_script_shim(&shim_path_str, &libs_dir_name).into(), @@ -80,7 +79,6 @@ impl<'m> BindingGenerator for BinBindingGenerator<'m> { executable: true, }), ); - additional_files = Some(files); ArtifactTarget::Binary(real_bin_dir.join(&bin_name)) } else { ArtifactTarget::Binary(scripts_dir.join(&bin_name)) @@ -90,8 +88,7 @@ impl<'m> BindingGenerator for BinBindingGenerator<'m> { update_entry_points(self.metadata, &bin_name)?; let dist_name = self.metadata.get_distribution_escaped(); - let files = additional_files.get_or_insert_with(HashMap::new); - files.insert( + additional_files.insert( Path::new(&dist_name) .join(bin_name.replace('-', "_")) .with_extension("py"), diff --git a/src/binding_generator/cffi_binding.rs b/src/binding_generator/cffi_binding.rs index 52e38b784..9322ee509 100644 --- a/src/binding_generator/cffi_binding.rs +++ b/src/binding_generator/cffi_binding.rs @@ -89,7 +89,7 @@ impl<'a> BindingGenerator for CffiBindingGenerator<'a> { Ok(GeneratorOutput { artifact_target, artifact_source_override: None, - additional_files: Some(additional_files), + additional_files, }) } } diff --git a/src/binding_generator/mod.rs b/src/binding_generator/mod.rs index 1a18e587c..50bb95eb3 100644 --- a/src/binding_generator/mod.rs +++ b/src/binding_generator/mod.rs @@ -90,7 +90,7 @@ pub(crate) struct GeneratorOutput { /// Additional files to be installed (e.g. __init__.py) /// The provided PathBuf should be relative to the archive root - additional_files: Option>, + additional_files: HashMap, } /// Every binding generator ultimately has to install the following: @@ -200,25 +200,23 @@ where } // 3a. Install additional files - if let Some(additional_files) = additional_files { - for (target, source) in additional_files { - let target = base_path.join(target); - fs::create_dir_all(target.parent().unwrap())?; - debug!("Generating file {}", target.display()); - let mut options = File::options(); - options.write(true).create(true).truncate(true); - #[cfg(unix)] - { - options.mode(default_permission(source.executable())); - } + for (target, source) in additional_files { + let target = base_path.join(target); + fs::create_dir_all(target.parent().unwrap())?; + debug!("Generating file {}", target.display()); + let mut options = File::options(); + options.write(true).create(true).truncate(true); + #[cfg(unix)] + { + options.mode(default_permission(source.executable())); + } - let mut file = options.open(&target)?; - match source { - ArchiveSource::Generated(source) => file.write_all(&source.data)?, - ArchiveSource::File(source) => { - let mut source = File::options().read(true).open(source.path)?; - io::copy(&mut source, &mut file)?; - } + let mut file = options.open(&target)?; + match source { + ArchiveSource::Generated(source) => file.write_all(&source.data)?, + ArchiveSource::File(source) => { + let mut source = File::options().read(true).open(source.path)?; + io::copy(&mut source, &mut file)?; } } } @@ -252,12 +250,10 @@ where writer.add_file_force(artifact_target.path(), source, true)?; // 3b. Install additional files - if let Some(additional_files) = additional_files { - for (target, source) in additional_files { - debug!("Generating archive entry {}", target.display()); - // Use add_entry_force to bypass exclusion checks for generated binding files - writer.add_entry_force(target, source)?; - } + for (target, source) in additional_files { + debug!("Generating archive entry {}", target.display()); + // Use add_entry_force to bypass exclusion checks for generated binding files + writer.add_entry_force(target, source)?; } // 4b. Install import library on Windows diff --git a/src/binding_generator/pyo3_binding.rs b/src/binding_generator/pyo3_binding.rs index acce3ca25..b3c74d089 100644 --- a/src/binding_generator/pyo3_binding.rs +++ b/src/binding_generator/pyo3_binding.rs @@ -172,7 +172,7 @@ if hasattr({ext_name}, "__all__"): Ok(GeneratorOutput { artifact_target, artifact_source_override, - additional_files: Some(additional_files), + additional_files, }) } } diff --git a/src/binding_generator/uniffi_binding.rs b/src/binding_generator/uniffi_binding.rs index 30d090dbe..32eb8516c 100644 --- a/src/binding_generator/uniffi_binding.rs +++ b/src/binding_generator/uniffi_binding.rs @@ -78,7 +78,7 @@ impl BindingGenerator for UniFfiBindingGenerator { Ok(GeneratorOutput { artifact_target, artifact_source_override: None, - additional_files: Some(additional_files), + additional_files, }) } }