From: Heiko Schlittermann (HS12-RIPE) Date: Thu, 18 Jan 2018 21:55:15 +0000 (+0100) Subject: Testsuite: Try harder to locate the tools X-Git-Url: https://git.exim.org/users/jgh/exim.git/commitdiff_plain/50936073b7f81a4ca991809d02c77f6fd7813c80?ds=inline Testsuite: Try harder to locate the tools --- diff --git a/test/Makefile.in b/test/Makefile.in index 0f229a2cc..edcc4ab78 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -27,7 +27,7 @@ all: binaries sysbinaries binaries: $(BINARIES) sysbinaries: FORCE binaries - sh -x bin/locate initdb postgres pg_ctl mysqld + bin/locate initdb postgres pg_ctl mysqld ls -la bin.sys # Compile and link the programs: @@ -82,7 +82,7 @@ bin/showids: $(SRC)/showids.c Makefile $(CC) $(CFLAGS) $(LDFLAGS) -o bin/showids $(SRC)/showids.c bin/locate: $(SRC)/locate.sh Makefile - cp $(SRC)/locate.sh bin/locate + cp $(SRC)/locate.pl bin/locate chmod 0755 bin/locate clean:; rm -rf $(BINARIES) bin.sys diff --git a/test/src/locate.pl b/test/src/locate.pl new file mode 100644 index 000000000..6f752c137 --- /dev/null +++ b/test/src/locate.pl @@ -0,0 +1,51 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use File::Find; +use Cwd; + +my @dirs = grep { /^\// && -d } split(/:/, $ENV{PATH}), qw( + /bin + /usr/bin + /usr/sbin + /usr/libexec + /usr/local/bin + /usr/local/sbin + /usr/local + /opt +); + +my %path = map { $_ => locate($_, @dirs) } @ARGV; + +mkdir 'bin.sys' + or die "bin.sys: $!" + if not -d 'bin.sys'; + +foreach my $tool (keys %path) { + next if not defined $path{$tool}; + print "$tool $path{$tool}\n"; + + unlink "bin.sys/$tool"; + symlink $path{$tool}, "bin.sys/$tool" + or warn "bin.sys/$tool -> $path{$tool}: $!\n"; +} + +sub locate { + my ($tool, @dirs) = @_; + + # use die to break out of the find as soon + # as we found it + my $cwd = cwd; + eval { + find( + sub { + return unless $tool eq $_ and -x $_ and -f _; + die { found => $File::Find::name }; + }, + @dirs + ); + }; + chdir $cwd; + + return (ref $@ eq ref {} and $@->{found}) ? $@->{found} : undef; +}