summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>2018-01-18 22:55:15 +0100
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>2018-01-18 22:55:15 +0100
commit50936073b7f81a4ca991809d02c77f6fd7813c80 (patch)
treed4cdd774ea41a40332562f603f129423c63f3645
parente7ae83be731ad82537bc906560e91f29b81be088 (diff)
Testsuite: Try harder to locate the tools
-rw-r--r--test/Makefile.in4
-rw-r--r--test/src/locate.pl51
2 files changed, 53 insertions, 2 deletions
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;
+}