This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Split shebang line fix-up from file processing in MM->fixin().
authorCraig A. Berry <craigberry@mac.com>
Mon, 24 Jan 2011 00:30:56 +0000 (18:30 -0600)
committerCraig A. Berry <craigberry@mac.com>
Mon, 24 Jan 2011 00:30:56 +0000 (18:30 -0600)
By putting the shebang line gyrations on their own in the new
_fixin_replace_shebang method, we can override that part without
dragging along the file processing code.

Tracks upstream commit:

https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/commit/33d7db29a2adb5bbb12fb2a783063245fe58dfc1

cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm

index 0310fd7..6964eea 100644 (file)
@@ -1079,7 +1079,6 @@ Inserts the sharpbang or equivalent magic number to a set of @files.
 sub fixin {    # stolen from the pink Camel book, more or less
     my ( $self, @files ) = @_;
 
-    my ($does_shbang) = $Config{'sharpbang'} =~ /^\s*\#\!/;
     for my $file (@files) {
         my $file_new = "$file.new";
         my $file_bak = "$file.bak";
@@ -1088,58 +1087,9 @@ sub fixin {    # stolen from the pink Camel book, more or less
         local $/ = "\n";
         chomp( my $line = <$fixin> );
         next unless $line =~ s/^\s*\#!\s*//;    # Not a shbang file.
-        # Now figure out the interpreter name.
-        my ( $cmd, $arg ) = split ' ', $line, 2;
-        $cmd =~ s!^.*/!!;
-
-        # Now look (in reverse) for interpreter in absolute PATH (unless perl).
-        my $interpreter;
-        if ( $cmd =~ m{^perl(?:\z|[^a-z])} ) {
-            if ( $Config{startperl} =~ m,^\#!.*/perl, ) {
-                $interpreter = $Config{startperl};
-                $interpreter =~ s,^\#!,,;
-            }
-            else {
-                $interpreter = $Config{perlpath};
-            }
-        }
-        else {
-            my (@absdirs)
-                = reverse grep { $self->file_name_is_absolute($_) } $self->path;
-            $interpreter = '';
-
-            foreach my $dir (@absdirs) {
-                if ( $self->maybe_command($cmd) ) {
-                    warn "Ignoring $interpreter in $file\n"
-                        if $Verbose && $interpreter;
-                    $interpreter = $self->catfile( $dir, $cmd );
-                }
-            }
-        }
-
-        # Figure out how to invoke interpreter on this machine.
 
-        my ($shb) = "";
-        if ($interpreter) {
-            print STDOUT "Changing sharpbang in $file to $interpreter"
-                if $Verbose;
-
-            # this is probably value-free on DOSISH platforms
-            if ($does_shbang) {
-                $shb .= "$Config{'sharpbang'}$interpreter";
-                $shb .= ' ' . $arg if defined $arg;
-                $shb .= "\n";
-            }
-            $shb .= qq{
-eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}'
-    if 0; # not running under some shell
-} unless $Is{Win32};    # this won't work on win32, so don't
-        }
-        else {
-            warn "Can't find $cmd in PATH, $file unchanged"
-                if $Verbose;
-            next;
-        }
+        my $shb = $self->_fixin_replace_shebang( $file, $line );
+        next unless defined $shb;
 
         open( my $fixout, ">", "$file_new" ) or do {
             warn "Can't create new $file: $!\n";
@@ -1189,6 +1139,63 @@ sub _rename {
     return rename($old, $new);
 }
 
+sub _fixin_replace_shebang {
+    my ( $self, $file, $line ) = @_;
+
+    # Now figure out the interpreter name.
+    my ( $cmd, $arg ) = split ' ', $line, 2;
+    $cmd =~ s!^.*/!!;
+
+    # Now look (in reverse) for interpreter in absolute PATH (unless perl).
+    my $interpreter;
+    if ( $cmd =~ m{^perl(?:\z|[^a-z])} ) {
+        if ( $Config{startperl} =~ m,^\#!.*/perl, ) {
+            $interpreter = $Config{startperl};
+            $interpreter =~ s,^\#!,,;
+        }
+        else {
+            $interpreter = $Config{perlpath};
+        }
+    }
+    else {
+        my (@absdirs)
+            = reverse grep { $self->file_name_is_absolute($_) } $self->path;
+        $interpreter = '';
+     
+         foreach my $dir (@absdirs) {
+            if ( $self->maybe_command($cmd) ) {
+                warn "Ignoring $interpreter in $file\n"
+                    if $Verbose && $interpreter;
+                $interpreter = $self->catfile( $dir, $cmd );
+            }
+        }
+    }
+
+    # Figure out how to invoke interpreter on this machine.
+    my ($does_shbang) = $Config{'sharpbang'} =~ /^\s*\#\!/;
+    my ($shb) = "";
+    if ($interpreter) {
+        print STDOUT "Changing sharpbang in $file to $interpreter"
+            if $Verbose;
+         # this is probably value-free on DOSISH platforms
+        if ($does_shbang) {
+            $shb .= "$Config{'sharpbang'}$interpreter";
+            $shb .= ' ' . $arg if defined $arg;
+            $shb .= "\n";
+        }
+        $shb .= qq{
+eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}'
+    if 0; # not running under some shell
+} unless $Is{Win32};    # this won't work on win32, so don't
+    }
+    else {
+        warn "Can't find $cmd in PATH, $file unchanged"
+            if $Verbose;
+        return undef;
+    }
+    return $shb
+}
 
 =item force (o)