| 1 | #!/usr/bin/perl |
|---|
| 2 | |
|---|
| 3 | my $ARBHOME = $ENV{ARBHOME}; |
|---|
| 4 | if (not -d $ARBHOME) { |
|---|
| 5 | die "ARBHOME has to be defined and has to mark a directory"; |
|---|
| 6 | } |
|---|
| 7 | chdir($ARBHOME); |
|---|
| 8 | |
|---|
| 9 | sub make_suffix($) { |
|---|
| 10 | my ($name) = @_; |
|---|
| 11 | |
|---|
| 12 | $name =~ s/[\/\.]/_/g; |
|---|
| 13 | |
|---|
| 14 | $name =~ s/needs_libs//; |
|---|
| 15 | |
|---|
| 16 | $name =~ s/__*/_/g; |
|---|
| 17 | $name =~ s/^_//; |
|---|
| 18 | $name =~ s/_$//; |
|---|
| 19 | |
|---|
| 20 | return $name; |
|---|
| 21 | } |
|---|
| 22 | |
|---|
| 23 | sub execute($) { |
|---|
| 24 | my ($cmd) = @_; |
|---|
| 25 | system($cmd)==0 || die "error calling '$cmd'"; |
|---|
| 26 | } |
|---|
| 27 | |
|---|
| 28 | sub main() { |
|---|
| 29 | my @dep_files = map { |
|---|
| 30 | if (/\.(svn|git)/o) { ; } |
|---|
| 31 | else { chomp; s/^\.\///; $_; } |
|---|
| 32 | } `cd $ARBHOME;find . -name "needs_libs*"`; |
|---|
| 33 | |
|---|
| 34 | my %gif_suffix = map { $_ => make_suffix($_); } @dep_files; |
|---|
| 35 | |
|---|
| 36 | my $dest = 'dep_graphs'; |
|---|
| 37 | if (not -d $dest) { |
|---|
| 38 | mkdir($dest) || die "can't create dir '$dest' (Reason: $!)"; |
|---|
| 39 | } |
|---|
| 40 | |
|---|
| 41 | my @childs = (); |
|---|
| 42 | foreach (@dep_files) { |
|---|
| 43 | my $pid = fork(); |
|---|
| 44 | while (not defined $pid) { |
|---|
| 45 | print "Warning: could not fork\n"; |
|---|
| 46 | sleep(1); |
|---|
| 47 | $pid = fork(); # retry |
|---|
| 48 | } |
|---|
| 49 | if ($pid == 0) { # child |
|---|
| 50 | my $destgif = "$dest/".$gif_suffix{$_}.".gif"; |
|---|
| 51 | execute("SOURCE_TOOLS/needed_libs.pl -G $destgif -U -B -S $_"); |
|---|
| 52 | exit(0); |
|---|
| 53 | } |
|---|
| 54 | |
|---|
| 55 | push @childs, $pid; |
|---|
| 56 | } |
|---|
| 57 | |
|---|
| 58 | # ---------------------------------------- |
|---|
| 59 | # create custom dependency gifs: |
|---|
| 60 | my $custom_gifbase = "$dest/custom"; |
|---|
| 61 | |
|---|
| 62 | # my $custom_libs = "SL/ITEMS/ITEMS.a SL/DB_QUERY/DB_QUERY.a SL/DB_UI/DB_UI.a"; |
|---|
| 63 | # my $custom_libs = "SL/PVP/PVP.a SL/TREE_READ/TREE_READ.a"; |
|---|
| 64 | # my $custom_libs = "arb_edit4 arb_ntree"; |
|---|
| 65 | # my $custom_libs = "AWTI/AWTI.a MERGE/MERGE.a SL/ITEMS/ITEMS.a"; |
|---|
| 66 | # my $custom_libs = "lib/libAWT.so SL/MACROS/MACROS.a"; |
|---|
| 67 | # my $custom_libs = "ARB_GDE/ARB_GDE.a SL/MACROS/MACROS.a"; |
|---|
| 68 | # my $custom_libs = "lib/libAWT.so SL/APP/APP.a SL/MACROS/MACROS.a"; |
|---|
| 69 | my $custom_libs = "SL/APP/APP.a SL/MACROS/MACROS.a"; |
|---|
| 70 | # my $custom_libs = "lib/libAWT.so SL/APP/APP.a"; |
|---|
| 71 | |
|---|
| 72 | execute("SOURCE_TOOLS/needed_libs.pl -G ${custom_gifbase}_both.gif -U -B -S $custom_libs"); |
|---|
| 73 | execute("SOURCE_TOOLS/needed_libs.pl -G ${custom_gifbase}_inheritents.gif -U -I -S $custom_libs"); |
|---|
| 74 | execute("SOURCE_TOOLS/needed_libs.pl -G ${custom_gifbase}_depends.gif -U -S $custom_libs"); |
|---|
| 75 | execute("SOURCE_TOOLS/needed_libs.pl -G ${custom_gifbase}_reduced.gif -U -n -S $custom_libs"); |
|---|
| 76 | # ---------------------------------------- |
|---|
| 77 | |
|---|
| 78 | print "Waiting for childs...\n"; |
|---|
| 79 | foreach (@childs) { |
|---|
| 80 | waitpid($_, 0); |
|---|
| 81 | } |
|---|
| 82 | print "All childs terminated\n"; |
|---|
| 83 | } |
|---|
| 84 | main(); |
|---|