diff --git a/src/build.rs b/src/build.rs index 19f2472..e3d548a 100644 --- a/src/build.rs +++ b/src/build.rs @@ -174,6 +174,7 @@ fn write_def_file( /// Build import library for windows-gnu fn build_implib_file( ws: &Workspace, + build_targets: &BuildTargets, name: &str, target: &target::Target, targetdir: &Path, @@ -201,10 +202,7 @@ fn build_implib_file( } }; - let lib_path = match flavor { - Flavor::Msvc => targetdir.join(format!("{name}.dll.lib")), - Flavor::Gnu => targetdir.join(format!("{name}.dll.a")), - }; + let lib_path = build_targets.impl_lib.as_ref().unwrap(); let lib_file = cargo_util::paths::create(lib_path)?; write_implib(lib_file, machine_type, flavor, &def_contents)?; @@ -1200,7 +1198,7 @@ pub fn cbuild( if !library_types.only_staticlib() && capi_config.library.import_library { let lib_name = name; build_def_file(ws, lib_name, &rustc_target, &root_output)?; - build_implib_file(ws, lib_name, &rustc_target, &root_output)?; + build_implib_file(ws, build_targets, lib_name, &rustc_target, &root_output)?; } if capi_config.header.enabled { diff --git a/src/build_targets.rs b/src/build_targets.rs index 3113146..e5dc48a 100644 --- a/src/build_targets.rs +++ b/src/build_targets.rs @@ -74,7 +74,9 @@ impl BuildTargets { None }; - let Some(file_names) = FileNames::from_target(target, name, targetdir) else { + let Some(file_names) = + FileNames::from_target(target, name, targetdir, use_meson_naming_convention) + else { return Err(anyhow::anyhow!( "The target {}-{} is not supported yet", target.os, @@ -145,7 +147,12 @@ struct FileNames { } impl FileNames { - fn from_target(target: &Target, lib_name: &str, targetdir: &Path) -> Option { + fn from_target( + target: &Target, + lib_name: &str, + targetdir: &Path, + use_meson_naming_convention: bool, + ) -> Option { let (shared_lib, static_lib, impl_lib, debug_info, def) = match target.os.as_str() { "none" | "linux" | "freebsd" | "dragonfly" | "netbsd" | "android" | "haiku" | "illumos" | "openbsd" | "emscripten" | "hurd" => { @@ -164,13 +171,19 @@ impl FileNames { if target.env == "msvc" { let static_lib = targetdir.join(format!("{lib_name}.lib")); - let impl_lib = targetdir.join(format!("{lib_name}.dll.lib")); + let impl_lib = match use_meson_naming_convention { + false => targetdir.join(format!("{lib_name}.dll.lib")), + true => targetdir.join(format!("{lib_name}.lib")), + }; let pdb = Some(targetdir.join(format!("{lib_name}.pdb"))); (shared_lib, static_lib, Some(impl_lib), pdb, Some(def)) } else { let static_lib = targetdir.join(format!("lib{lib_name}.a")); - let impl_lib = targetdir.join(format!("{lib_name}.dll.a")); + let impl_lib = match use_meson_naming_convention { + false => targetdir.join(format!("{lib_name}.dll.a")), + true => targetdir.join(format!("lib{lib_name}.dll.a")), + }; let pdb = None; (shared_lib, static_lib, Some(impl_lib), pdb, Some(def)) @@ -215,7 +228,8 @@ mod test { os: os.to_string(), env: String::from(""), }; - let file_names = FileNames::from_target(&target, "ferris", Path::new("/foo/bar")); + let file_names = + FileNames::from_target(&target, "ferris", Path::new("/foo/bar"), false); let expected = FileNames { static_lib: PathBuf::from("/foo/bar/libferris.a"), @@ -238,7 +252,8 @@ mod test { os: os.to_string(), env: String::from(""), }; - let file_names = FileNames::from_target(&target, "ferris", Path::new("/foo/bar")); + let file_names = + FileNames::from_target(&target, "ferris", Path::new("/foo/bar"), false); let expected = FileNames { static_lib: PathBuf::from("/foo/bar/libferris.a"), @@ -260,7 +275,7 @@ mod test { os: String::from("windows"), env: String::from("msvc"), }; - let file_names = FileNames::from_target(&target, "ferris", Path::new("/foo/bar")); + let file_names = FileNames::from_target(&target, "ferris", Path::new("/foo/bar"), false); let expected = FileNames { static_lib: PathBuf::from("/foo/bar/ferris.lib"), @@ -281,7 +296,7 @@ mod test { os: String::from("windows"), env: String::from("gnu"), }; - let file_names = FileNames::from_target(&target, "ferris", Path::new("/foo/bar")); + let file_names = FileNames::from_target(&target, "ferris", Path::new("/foo/bar"), false); let expected = FileNames { static_lib: PathBuf::from("/foo/bar/libferris.a"), diff --git a/src/install.rs b/src/install.rs index 7cc1c4b..4e568e5 100644 --- a/src/install.rs +++ b/src/install.rs @@ -270,11 +270,7 @@ pub fn cinstall(ws: &Workspace, packages: &[CPackage]) -> anyhow::Result<()> { } if capi_config.library.import_library { let impl_lib = build_targets.impl_lib.as_ref().unwrap(); - let impl_lib_name = if build_targets.use_meson_naming_convention { - format!("{}.lib", build_targets.name).into() - } else { - impl_lib.file_name().unwrap().to_owned() - }; + let impl_lib_name = impl_lib.file_name().unwrap(); copy(ws, impl_lib, install_path_lib.join(impl_lib_name))?; let def = build_targets.def.as_ref().unwrap(); let def_name = def.file_name().unwrap();