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


Reply via email to