source: branches/help/SOURCE_TOOLS/check_bin_dependencies.pl

Last change on this file was 17050, checked in by westram, 7 years ago
  • fix builds w/o unit tests (e.g. RELEASE)
    • was broken by [16919]
    • complained about dependency file for "unknown" binary arb_sub2ascii (only build for UNIT_TESTS)
  • dependencies in TOOLS change with variable UNIT_TESTS (force to 1 for 'depends')
  • Property svn:executable set to *
File size: 2.2 KB
Line 
1#!/usr/bin/perl
2#
3# Check whether dependency files in ../BINDEP
4# match arb-binaries in ../bin
5
6# ignore the following binaries (i.e. do not expect dependency files for them):
7my @ignored_binaries = qw/arb_perf_test arb_test arb_readseq/;
8my %ignored_binaries = map { $_ => 1; } @ignored_binaries;
9
10# ignore the following dependency files (i.e. do not expect binaries for them):
11# [
12#   useful if binary is not build under certain build conditions
13#   - arb_sub2ascii only build when tests enabled
14# ]
15my @ignored_depfiles = qw/arb_sub2ascii/;
16my %ignored_depfiles = map { $_ => 1; } @ignored_depfiles;
17
18my $ARBHOME = $ENV{ARBHOME};
19if (not -d $ARBHOME) {
20  die "ARBHOME has to be defined and has to mark a directory";
21}
22chdir($ARBHOME);
23
24sub check_dependencies($$) {
25  my ($bindir,$depdir) = @_;
26
27  my %used_dep = ();
28  my $fail = 0;
29
30  opendir(BIN,$bindir) || die "Failed to read directory '$bindir' (Reason: $!)";
31  opendir(DEP,$depdir) || die "Failed to read directory '$depdir' (Reason: $!)";
32
33  foreach (readdir(BIN)) {
34    if ($_ ne '.' and $_ ne '..') {
35      my $fullbin = $bindir.'/'.$_;
36
37      if (-d $fullbin) { ; }        # skip subdirs
38      elsif (-l $fullbin) { ; }     # skip links
39      elsif (not -x $fullbin) { ; } # skip non-executables
40      elsif (not /^arb_/) { ; }     # skip non-arb-tools
41      elsif (/\.(sh|pl)$/) { ; }    # skip perl- and shell-scripts
42      elsif (defined $ignored_binaries{$_}) { ; } # skip ignored_binaries
43      else {
44        my $dep_file = $depdir.'/needs_libs.'.$_;
45        if (-e $dep_file) { # dependencies defined. ok.
46          $used_dep{$_} = 1;
47        }
48        else {
49          print "$dep_file:1: missing dependency for '$_'\n";
50          $fail = 1;
51        }
52      }
53    }
54  }
55
56  foreach (readdir(DEP)) {
57    if (/^needs_libs\./o) {
58      my $name = $';
59      if ($used_dep{$name}) { ; } # ok, have seen binary
60      elsif (not defined $ignored_depfiles{$name}) {
61        my $fulldep = $depdir.'/'.$_;
62        print $fulldep.":1: unused dependency file (no such binary '$name')\n";
63        $fail = 1;
64      }
65    }
66  }
67
68  closedir(DEP);
69  closedir(BIN);
70
71  if ($fail==1) {
72    die "Error: dependencies not defined correctly\n";
73  }
74}
75
76sub main() {
77  check_dependencies($ARBHOME.'/bin', $ARBHOME.'/BINDEP');
78}
79main();
Note: See TracBrowser for help on using the repository browser.