1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
#!/usr/bin/perl
my $ARBHOME = $ENV{ARBHOME};
if (not -d $ARBHOME) {
die "ARBHOME has to be defined and has to mark a directory";
}
chdir($ARBHOME);
sub make_suffix($) {
my ($name) = @_;
$name =~ s/[\/\.]/_/g;
$name =~ s/needs_libs//;
$name =~ s/__*/_/g;
$name =~ s/^_//;
$name =~ s/_$//;
return $name;
}
sub execute($) {
my ($cmd) = @_;
system($cmd)==0 || die "error calling '$cmd'";
}
sub main() {
my @dep_files = map {
if (/\.svn/) { ; }
else { chomp; s/^\.\///; $_; }
} `cd $ARBHOME;find . -name "needs_libs*"`;
my %gif_suffix = map { $_ => make_suffix($_); } @dep_files;
my $dest = 'dep_graphs';
if (not -d $dest) {
mkdir($dest) || die "can't create dir '$dest' (Reason: $!)";
}
my @childs = ();
foreach (@dep_files) {
my $pid = fork();
while (not defined $pid) {
print "Warning: could not fork\n";
sleep(1);
$pid = fork(); # retry
}
if ($pid == 0) { # child
my $destgif = "$dest/".$gif_suffix{$_}.".gif";
execute("SOURCE_TOOLS/needed_libs.pl -G $destgif -U -B -S $_");
exit(0);
}
push @childs, $pid;
}
print "Waiting for childs...\n";
foreach (@childs) {
waitpid($_, 0);
}
print "All childs terminated\n";
}
main();
|