-my $has_version_pm;
-BEGIN {
- eval { require Config };
- die 'OS unsupported' if $@;
- Config->import(qw/%Config/);
- eval { require File::Spec };
- die 'OS unsupported' if $@;
- $has_version_pm = eval "require version; 1" || 0;
+use Config;
+use File::Spec;
+
+sub validate_exe {
+ my ($name, $preferred_path) = @_;
+
+ my (@candidates, @args);
+ if (File::Spec->file_name_is_absolute($name)) {
+ # No need to look for args if the name is absolute.
+ @candidates = $name;
+ } else {
+ my @path;
+ if (defined $preferred_path) {
+ @path = ($preferred_path, grep { $_ ne $preferred_path } File::Spec->path);
+ } else {
+ @path = File::Spec->path;
+ }
+
+ (my $base, @args) = split ' ', $name;
+ for my $path_entry (@path) {
+ my ($vol, $dir, $file) = File::Spec->splitpath($path_entry, 1);
+ next if defined $file and length $file;
+ push @candidates, File::Spec->catpath($vol, $dir, $base);
+ }
+ }
+
+ for my $path (@candidates) {
+ my $command = MM->maybe_command($path);
+ if (defined $command) {
+ $command .= " @args" if @args;
+ return $command;
+ }
+ }
+
+ return;