fix(bundler): DLL resources, closes #3948 (#3949)

This commit is contained in:
Lucas Fernandes Nogueira 2022-04-23 07:01:52 -07:00 committed by GitHub
parent 0198c2ba45
commit f66bc3c2b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 28 deletions

View File

@ -0,0 +1,5 @@
---
"tauri-bundler": patch
---
Fixes DLL resource usage on Windows.

View File

@ -796,34 +796,7 @@ fn generate_resource_data(settings: &Settings) -> crate::Result<ResourceMap> {
let mut resources = ResourceMap::new();
let cwd = std::env::current_dir()?;
let mut dlls = vec![];
for dll in glob::glob(
settings
.project_out_directory()
.join("*.dll")
.to_string_lossy()
.to_string()
.as_str(),
)? {
let path = dll?;
let resource_path = path.to_string_lossy().to_string();
dlls.push(ResourceFile {
id: format!("I{}", Uuid::new_v4().as_simple()),
guid: Uuid::new_v4().to_string(),
path: resource_path,
});
}
if !dlls.is_empty() {
resources.insert(
"".to_string(),
ResourceDirectory {
path: "".to_string(),
name: "".to_string(),
directories: vec![],
files: dlls,
},
);
}
let mut added_resources = Vec::new();
for src in settings.resource_files() {
let src = src?;
@ -834,6 +807,8 @@ fn generate_resource_data(settings: &Settings) -> crate::Result<ResourceMap> {
.into_string()
.expect("failed to read resource path");
added_resources.push(resource_path.clone());
let resource_entry = ResourceFile {
id: format!("I{}", Uuid::new_v4().as_simple()),
guid: Uuid::new_v4().to_string(),
@ -904,5 +879,37 @@ fn generate_resource_data(settings: &Settings) -> crate::Result<ResourceMap> {
directory_entry.add_file(resource_entry);
}
let mut dlls = Vec::new();
let out_dir = settings.project_out_directory();
for dll in glob::glob(out_dir.join("*.dll").to_string_lossy().to_string().as_str())? {
let path = dll?;
let resource_path = path.to_string_lossy().into_owned();
let relative_path = path
.strip_prefix(&out_dir)
.unwrap()
.to_string_lossy()
.into_owned();
if !added_resources.iter().any(|r| r.ends_with(&relative_path)) {
dlls.push(ResourceFile {
id: format!("I{}", Uuid::new_v4().as_simple()),
guid: Uuid::new_v4().to_string(),
path: resource_path,
});
}
}
if !dlls.is_empty() {
resources.insert(
"".to_string(),
ResourceDirectory {
path: "".to_string(),
name: "".to_string(),
directories: vec![],
files: dlls,
},
);
}
Ok(resources)
}