1 | #!/usr/bin/perl |
---|
2 | # |
---|
3 | # Check whether dependency files in ../BINDEP |
---|
4 | # match arb-binaries in ../bin |
---|
5 | |
---|
6 | my @ignored_binaries = qw/arb_perf_test arb_test arb_readseq/; |
---|
7 | my %ignored_binaries = map { $_ => 1; } @ignored_binaries; |
---|
8 | |
---|
9 | my $ARBHOME = $ENV{ARBHOME}; |
---|
10 | if (not -d $ARBHOME) { |
---|
11 | die "ARBHOME has to be defined and has to mark a directory"; |
---|
12 | } |
---|
13 | chdir($ARBHOME); |
---|
14 | |
---|
15 | sub check_dependencies($$) { |
---|
16 | my ($bindir,$depdir) = @_; |
---|
17 | |
---|
18 | my %used_dep = (); |
---|
19 | my $fail = 0; |
---|
20 | |
---|
21 | opendir(BIN,$bindir) || die "Failed to read directory '$bindir' (Reason: $!)"; |
---|
22 | opendir(DEP,$depdir) || die "Failed to read directory '$depdir' (Reason: $!)"; |
---|
23 | |
---|
24 | foreach (readdir(BIN)) { |
---|
25 | if ($_ ne '.' and $_ ne '..') { |
---|
26 | my $fullbin = $bindir.'/'.$_; |
---|
27 | |
---|
28 | if (-d $fullbin) { ; } # skip subdirs |
---|
29 | elsif (-l $fullbin) { ; } # skip links |
---|
30 | elsif (not -x $fullbin) { ; } # skip non-executables |
---|
31 | elsif (not /^arb_/) { ; } # skip non-arb-tools |
---|
32 | elsif (/\.(sh|pl)$/) { ; } # skip perl- and shell-scripts |
---|
33 | elsif (defined $ignored_binaries{$_}) { ; } # skip ignored_binaries |
---|
34 | else { |
---|
35 | my $dep_file = $depdir.'/needs_libs.'.$_; |
---|
36 | if (-e $dep_file) { # dependencies defined. ok. |
---|
37 | $used_dep{$_} = 1; |
---|
38 | } |
---|
39 | else { |
---|
40 | print "$dep_file:1: missing dependency for '$_'\n"; |
---|
41 | $fail = 1; |
---|
42 | } |
---|
43 | } |
---|
44 | } |
---|
45 | } |
---|
46 | |
---|
47 | foreach (readdir(DEP)) { |
---|
48 | if (/^needs_libs\./o) { |
---|
49 | my $name = $'; |
---|
50 | if ($used_dep{$name}) { ; } # ok, have seen binary |
---|
51 | else { |
---|
52 | my $fulldep = $depdir.'/'.$_; |
---|
53 | print $fulldep.":1: unused dependency file (no such binary '$name')\n"; |
---|
54 | $fail = 1; |
---|
55 | } |
---|
56 | } |
---|
57 | } |
---|
58 | |
---|
59 | closedir(DEP); |
---|
60 | closedir(BIN); |
---|
61 | |
---|
62 | if ($fail==1) { |
---|
63 | die "Error: dependencies not defined correctly\n"; |
---|
64 | } |
---|
65 | } |
---|
66 | |
---|
67 | sub main() { |
---|
68 | check_dependencies($ARBHOME.'/bin', $ARBHOME.'/BINDEP'); |
---|
69 | } |
---|
70 | main(); |
---|