mirror of
https://github.com/dexoron/dcr.git
synced 2026-10-24 14:59:22 +00:00
fix: make cross-target tests and vscode launch path robust for macOS + Windows
This commit is contained in:
@@ -207,19 +207,17 @@ fn run_project(
|
||||
|
||||
let out_dir =
|
||||
crate::cli::build::get_build_string_with_profile(&config, "out_dir", &flags.profile);
|
||||
let normalized_target_dir = if !out_dir.is_empty() {
|
||||
Some(out_dir)
|
||||
} else {
|
||||
match workspace_root {
|
||||
Some(wr) => target
|
||||
.as_ref()
|
||||
.and_then(|t| crate::utils::build::normalize_target(t, &flags.profile))
|
||||
.map(|rel| wr.join(&rel).to_string_lossy().to_string()),
|
||||
None => target
|
||||
.as_ref()
|
||||
.and_then(|t| crate::utils::build::normalize_target(t, &flags.profile)),
|
||||
}
|
||||
};
|
||||
let build_target_str = target.clone().unwrap_or_default();
|
||||
let has_explicit = target.as_ref().is_some_and(|t| !t.trim().is_empty());
|
||||
|
||||
let normalized_target_dir = Some(crate::utils::build::resolve_artifact_target_dir(
|
||||
root,
|
||||
workspace_root,
|
||||
&flags.profile,
|
||||
&build_target_str,
|
||||
&out_dir,
|
||||
has_explicit,
|
||||
));
|
||||
|
||||
let version = config
|
||||
.get("package.version")
|
||||
|
||||
@@ -348,20 +348,7 @@ mod tests {
|
||||
#[test]
|
||||
fn resolve_bin_default() {
|
||||
let p = resolve_artifact_path("bin", "debug", "hello", None, None, None).unwrap();
|
||||
if cfg!(target_os = "linux") {
|
||||
let arch = std::env::consts::ARCH;
|
||||
let expected = Path::new("./target")
|
||||
.join(format!("{arch}-unknown-linux-gnu"))
|
||||
.join("debug")
|
||||
.join("hello");
|
||||
assert_eq!(p, expected.to_string_lossy());
|
||||
} else if cfg!(windows) {
|
||||
let expected = Path::new("./target").join("debug").join("hello.exe");
|
||||
assert_eq!(p, expected.to_string_lossy());
|
||||
} else {
|
||||
let expected = Path::new("./target").join("debug").join("hello");
|
||||
assert_eq!(p, expected.to_string_lossy());
|
||||
}
|
||||
assert_eq!(p, platform::bin_path("debug", "hello", None));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -62,26 +62,9 @@ fn ensure_target_dirs(
|
||||
if let Some(dir) = &target_dir {
|
||||
let _ = fs::create_dir_all(dir);
|
||||
} else {
|
||||
let default_dir = if cfg!(target_os = "linux") {
|
||||
let arch = std::env::consts::ARCH;
|
||||
format!("{arch}-unknown-linux-gnu/{profile}")
|
||||
} else if cfg!(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "openbsd",
|
||||
target_os = "netbsd",
|
||||
target_os = "dragonfly"
|
||||
)) {
|
||||
let arch = std::env::consts::ARCH;
|
||||
let os = std::env::consts::OS;
|
||||
format!("{arch}-unknown-{os}/{profile}")
|
||||
} else {
|
||||
profile.to_string()
|
||||
};
|
||||
let target_path = project_root.join("target");
|
||||
let target_items = check_dir(target_path.to_str()).unwrap_or_default();
|
||||
if !target_items.contains(&default_dir) {
|
||||
let _ = fs::create_dir_all(target_path.join(&default_dir));
|
||||
}
|
||||
let _ = fs::create_dir_all(
|
||||
project_root.join(crate::utils::build::native_host_target_rel(profile)),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -610,24 +593,9 @@ fn build_project_at(
|
||||
let target_str = build_target
|
||||
.map(normalize_target_os)
|
||||
.filter(|t| !t.is_empty());
|
||||
let default_dir = if cfg!(target_os = "linux") {
|
||||
let arch = std::env::consts::ARCH;
|
||||
format!("{arch}-unknown-linux-gnu/{profile}")
|
||||
} else if cfg!(any(
|
||||
target_os = "freebsd",
|
||||
target_os = "openbsd",
|
||||
target_os = "netbsd",
|
||||
target_os = "dragonfly"
|
||||
)) {
|
||||
let arch = std::env::consts::ARCH;
|
||||
let os = std::env::consts::OS;
|
||||
format!("{arch}-unknown-{os}/{profile}")
|
||||
} else {
|
||||
profile.to_string()
|
||||
};
|
||||
let rel = match target_str {
|
||||
Some(ref t) => Path::new("target").join(t).join(profile),
|
||||
None => Path::new("target").join(&default_dir),
|
||||
None => crate::utils::build::native_host_target_rel(profile),
|
||||
};
|
||||
let dep_build_lib1 = dep_member.path.join(&rel);
|
||||
let dep_build_lib2 = wroot.join(&rel);
|
||||
|
||||
@@ -135,15 +135,10 @@ pub fn resolve_artifact_target_dir(
|
||||
}
|
||||
|
||||
let base = if has_explicit_target {
|
||||
let triple = {
|
||||
let n = normalize_target_os(build_target.trim());
|
||||
if n.is_empty() {
|
||||
default_target_triple()
|
||||
} else {
|
||||
n.to_string()
|
||||
}
|
||||
};
|
||||
PathBuf::from(format!("target/{triple}/{profile}"))
|
||||
match normalize_target(build_target, profile) {
|
||||
Some(rel) => PathBuf::from(rel),
|
||||
None => native_host_target_rel(profile),
|
||||
}
|
||||
} else {
|
||||
native_host_target_rel(profile)
|
||||
};
|
||||
@@ -694,13 +689,14 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn normalize_target_with_profile() {
|
||||
let linux = normalize_target_os("linux");
|
||||
assert_eq!(
|
||||
normalize_target("linux", "debug"),
|
||||
Some("target/x86_64-unknown-linux-gnu/debug".into())
|
||||
Some(format!("target/{linux}/debug"))
|
||||
);
|
||||
assert_eq!(
|
||||
normalize_target("x86_64-unknown-linux-gnu", "release"),
|
||||
Some("target/x86_64-unknown-linux-gnu/release".into())
|
||||
normalize_target(linux, "release"),
|
||||
Some(format!("target/{linux}/release"))
|
||||
);
|
||||
assert_eq!(normalize_target("", "debug"), None);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user