From 5dfa9548b7936edd1b6af3e67323198d26423f32 Mon Sep 17 00:00:00 2001 From: Terts Diepraam Date: Sat, 25 Mar 2023 18:04:01 +0100 Subject: [PATCH] stdbuf: get profile from the end of the path The path is not always /target/{PROFILE}, because cross uses /target/{TARGET_TRIPLE}/profile, so we have to get the name in another way. StackOverflow recommended the getting the third component from the back of the path --- src/uu/stdbuf/build.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/uu/stdbuf/build.rs b/src/uu/stdbuf/build.rs index 5938f6396..9ed9a6207 100644 --- a/src/uu/stdbuf/build.rs +++ b/src/uu/stdbuf/build.rs @@ -37,15 +37,20 @@ fn main() { // var for the profile can only be "debug" or "release", not a custom // profile name, so we have to use the name of the directory within target // as the profile name. + // + // Adapted from https://stackoverflow.com/questions/73595435/how-to-get-profile-from-cargo-toml-in-build-rs-or-at-runtime + let profile_name = out_dir + .split(std::path::MAIN_SEPARATOR) + .nth_back(3) + .unwrap(); + let mut name = target_dir.file_name().unwrap().to_string_lossy(); - let mut profile_name = name.clone(); while name != "target" && !name.starts_with("cargo-install") { target_dir = target_dir.parent().unwrap(); - profile_name = name.clone(); name = target_dir.file_name().unwrap().to_string_lossy(); } let mut dir = target_dir.to_path_buf(); - dir.push(profile_name.as_ref()); + dir.push(profile_name); dir.push("deps"); let mut path = None;