From aff2c68ce584d6073ecee6b4bb9613e454acefde Mon Sep 17 00:00:00 2001 From: SFG545 Date: Tue, 10 Mar 2026 22:54:22 -0500 Subject: [PATCH] feat: enhance perl command resolution with PATH environment handling --- src/builder/perl.rs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/builder/perl.rs b/src/builder/perl.rs index 8b68139..c4324d1 100644 --- a/src/builder/perl.rs +++ b/src/builder/perl.rs @@ -48,7 +48,8 @@ pub fn build( let configure_script = resolve_perl_configure_script(spec, &actual_src); crate::log_info!("Running perl {}...", configure_script.display()); - let mut configure_cmd = Command::new("perl"); + let mut configure_cmd = + Command::new(resolved_command_path("perl").unwrap_or_else(|| PathBuf::from("perl"))); configure_cmd.current_dir(&actual_src); configure_cmd.arg(&configure_script); if !has_assignment_prefix(&flags.configure, "INSTALLDIRS") { @@ -307,15 +308,27 @@ fn resolved_script_path(cmd: &Command) -> Option { return Some(program.to_path_buf()); } - let path_value = cmd - .get_envs() - .find_map(|(key, value)| (key == "PATH").then_some(value)) - .flatten()?; - std::env::split_paths(path_value) + let path_value = command_path_env(cmd)?; + std::env::split_paths(&path_value) .map(|dir| dir.join(program)) .find(|candidate| candidate.is_file()) } +fn resolved_command_path(program: &str) -> Option { + let path_value = std::env::var_os("PATH")?; + std::env::split_paths(&path_value) + .map(|dir| dir.join(program)) + .find(|candidate| candidate.is_file()) +} + +fn command_path_env(cmd: &Command) -> Option { + cmd.get_envs() + .find_map(|(key, value)| (key == "PATH").then_some(value)) + .flatten() + .map(|value| value.to_os_string()) + .or_else(|| std::env::var_os("PATH")) +} + fn has_assignment_prefix(args: &[String], name: &str) -> bool { args.iter().any(|arg| { let trimmed = arg.trim();