Testsuite: Try harder to locate the tools
[exim.git] / test / src / locate.pl
CommitLineData
50936073
HSHR
1#!/usr/bin/env perl
2use strict;
3use warnings;
4use File::Find;
5use Cwd;
6
7my @dirs = grep { /^\// && -d } split(/:/, $ENV{PATH}), qw(
8 /bin
9 /usr/bin
10 /usr/sbin
11 /usr/libexec
12 /usr/local/bin
13 /usr/local/sbin
14 /usr/local
15 /opt
16);
17
18my %path = map { $_ => locate($_, @dirs) } @ARGV;
19
20mkdir 'bin.sys'
21 or die "bin.sys: $!"
22 if not -d 'bin.sys';
23
24foreach my $tool (keys %path) {
25 next if not defined $path{$tool};
26 print "$tool $path{$tool}\n";
27
28 unlink "bin.sys/$tool";
29 symlink $path{$tool}, "bin.sys/$tool"
30 or warn "bin.sys/$tool -> $path{$tool}: $!\n";
31}
32
33sub locate {
34 my ($tool, @dirs) = @_;
35
36 # use die to break out of the find as soon
37 # as we found it
38 my $cwd = cwd;
39 eval {
40 find(
41 sub {
42 return unless $tool eq $_ and -x $_ and -f _;
43 die { found => $File::Find::name };
44 },
45 @dirs
46 );
47 };
48 chdir $cwd;
49
50 return (ref $@ eq ref {} and $@->{found}) ? $@->{found} : undef;
51}