Skip to content

Commit

Permalink
fix(package): Don't let case-insensitivty to get in the way
Browse files Browse the repository at this point in the history
  • Loading branch information
epage committed Apr 10, 2024
1 parent 5dcc524 commit b2b704f
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions src/cargo/util/toml/targets.rs
Original file line number Diff line number Diff line change
Expand Up @@ -628,7 +628,7 @@ fn resolve_targets_with_legacy_path(
fn inferred_lib(package_root: &Path) -> Option<PathBuf> {
let lib = Path::new("src").join("lib.rs");
if package_root.join(&lib).exists() {
Some(lib)
Some(normalize_case(package_root, &lib))
} else {
None
}
Expand All @@ -638,7 +638,7 @@ fn inferred_bins(package_root: &Path, package_name: &str) -> Vec<(String, PathBu
let main = "src/main.rs";
let mut result = Vec::new();
if package_root.join(main).exists() {
let main = PathBuf::from(main);
let main = normalize_case(package_root, Path::new(main));
result.push((package_name.to_string(), main));
}
let default_bin_dir_name = Path::new("src").join("bin");
Expand Down Expand Up @@ -1046,7 +1046,12 @@ pub fn resolve_build(build: Option<&StringOrBool>, package_root: &Path) -> Optio
// a build script.
let build_rs = package_root.join(BUILD_RS);
if build_rs.is_file() {
Some(StringOrBool::String(BUILD_RS.to_owned()))
let build_rs = normalize_case(package_root, Path::new(BUILD_RS));
let build_rs = build_rs
.into_os_string()
.into_string()
.unwrap_or_else(|_| BUILD_RS.to_owned());
Some(StringOrBool::String(build_rs))
} else {
Some(StringOrBool::Bool(false))
}
Expand All @@ -1057,6 +1062,18 @@ pub fn resolve_build(build: Option<&StringOrBool>, package_root: &Path) -> Optio
}
}

fn normalize_case(package_root: &Path, rel_path: &Path) -> PathBuf {
try_normalize_case(package_root, rel_path).unwrap_or_else(|| rel_path.to_owned())
}

fn try_normalize_case(package_root: &Path, rel_path: &Path) -> Option<PathBuf> {
let path = package_root.join(rel_path);
let path = path.canonicalize().ok()?;
let package_root = package_root.canonicalize().ok()?;
let rel_path = path.strip_prefix(&package_root).ok()?;
Some(rel_path.to_owned())
}

fn name_or_panic(target: &TomlTarget) -> &str {
target
.name
Expand Down

0 comments on commit b2b704f

Please sign in to comment.