Perhaps it would be useful to attach the patch. =) -- Benjamin Reed a.k.a. Ranger Rick ([EMAIL PROTECTED]) http://ranger.befunk.com/ "Flash, don't heckle the supervillian!" -- Green Lantern
Index: perlmod/Fink/PkgVersion.pm =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/PkgVersion.pm,v retrieving revision 1.60 diff -u -b -r1.60 PkgVersion.pm --- perlmod/Fink/PkgVersion.pm 21 Mar 2002 19:49:56 -0000 1.60 +++ perlmod/Fink/PkgVersion.pm 23 Mar 2002 19:36:47 -0000 @@ -1058,13 +1058,9 @@ ### patch $self->set_env(); - foreach $cmd (split(/\n/,$patch_script)) { - next unless $cmd; # skip empty lines - - if (&execute($cmd)) { + if (&execute($patch_script) > 0) { die "patching ".$self->get_fullname()." failed\n"; } - } } ### compile @@ -1110,13 +1106,9 @@ ### compile $self->set_env(); - foreach $cmd (split(/\n/,$compile_script)) { - next unless $cmd; # skip empty lines - - if (&execute($cmd)) { + if (&execute($compile_script) > 0) { die "compiling ".$self->get_fullname()." failed\n"; } - } } ### install @@ -1224,12 +1216,8 @@ ### install $self->set_env(); - foreach $cmd (split(/\n/,$install_script)) { - next unless $cmd; # skip empty lines - - if (&execute($cmd)) { + if (&execute($install_script) > 0) { die "installing ".$self->get_fullname()." failed\n"; - } } ### splitoffs Index: perlmod/Fink/Services.pm =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/Services.pm,v retrieving revision 1.18 diff -u -b -r1.18 Services.pm --- perlmod/Fink/Services.pm 16 Mar 2002 11:22:39 -0000 1.18 +++ perlmod/Fink/Services.pm 23 Mar 2002 19:36:47 -0000 @@ -200,16 +200,71 @@ sub execute { my $cmd = shift; my $quiet = shift || 0; - my ($retval, $prog); + my ($retval, $prog, $commandname, $tempfile); + $cmd =~ s/[\r\n]+$//s; + $cmd =~ s/^\s*//; + + if ($cmd =~ /^#!/) { + # multiline, make a tempfile and execute + $tempfile = mktemp(); + open (OUT, ">$tempfile") or die "unable to write to $tempfile: $!"; + print OUT "$cmd\n"; + close (OUT) or die "an unexpected error occurred closing $tempfile: $!"; + chmod(0755, $tempfile); + $retval = execute_line($tempfile, $quiet); + if ($retval == 0) { + unlink($tempfile); + } + return $retval; + } elsif (defined $cmd and $cmd ne "") { + # otherwise, just exec the command like we used to + foreach $cmd (split(/\n/,$cmd)) { + $retval = execute_line($cmd, $quiet); + if ($retval) { + return $retval; + } + } + return 0; + } else { + # command is empty -- assuming it's OK + return 0; + } +} + +### perform the actual single execute and give a return value + +sub execute_line { + my $cmd = shift; + my $quiet = shift || 0; print "$cmd\n"; - $retval = system($cmd); + my $retval = system($cmd); $retval >>= 8 if defined $retval and $retval >= 256; if ($retval and not $quiet) { - ($prog) = split(/\s+/, $cmd); - print "### $prog failed, exit code $retval\n"; + my ($commandname) = split(/\s+/, $cmd); + print "### execute of $commandname failed, exit code $retval\n"; } return $retval; +} + +### create a temporary file + +sub mktemp { + # I'm being paranoid, since if anything goes wrong here, bad things happen + + my $tmpdir = $ENV{TMPDIR}; + if (not defined $tmpdir or $tmpdir !~ /\//) { + $tmpdir = '/tmp'; + } + open (MKTEMP, "mktemp $tmpdir/fink.XXXXXXXX |") or die "can't run mktemp in +$tmpdir: $!"; + my $tempfile = <MKTEMP>; + chomp($tempfile); + close(MKTEMP) or die "an unexpected error occurred closing mktemp: $!"; + if (defined $tempfile and $tempfile ne "") { + return $tempfile; + } else { + return; + } } ### do % substitutions on a string