Browse Source

Win32 support: Adding a script to modify shebang lines per installation platfom.

Signed-off-by: Galen Charlton <galen.charlton@liblime.com>
3.0.x
Chris Nighswonger 17 years ago
committed by Galen Charlton
parent
commit
b310be2bab
  1. 109
      fix-perl-path.PL

109
fix-perl-path.PL

@ -0,0 +1,109 @@
#!c:\strawberry-perl\perl\bin\perl
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
#
use strict;
use ExtUtils::MakeMaker::Config;
use Tie::File;
my $basedir = (shift);
my $DEBUG = 1;
$DEBUG = 1 if $basedir eq 'test';
my $bindir = $Config{installbin};
$bindir =~ s!\\!/!g; # make all directory separators uniform...
my $shebang = "#!$bindir\/perl -w";
warn "Perl binary located in $bindir on this system.\n" if $DEBUG;
warn "The shebang line for this sytems should be $shebang\n\n" if $DEBUG;
die if $basedir eq 'test';
=head1 NAME
fix-perl-path.PL - A script to correct the shebang line to match the current platform
=head1 SYNOPSIS
=head2 BASIC USAGE
perl fix-perl-path.PL /absolute/path/to/foo
=head1 DESCRIPTION
This script should be run from the base of the directory
structure which contains the file(s) that need the
shebang line corrected. It will recurse through all
directories below the one called from and modify all
.pl files.
=head2 fixshebang
This sub will recurse through a given directory and its subdirectories checking for the existence of a shebang
line in .pl files and replacing it with the correct line for the current OS if needed. It should be called
in a manner similar to 'fixshebang (foodir)' but may be supplied with any directory.
=cut
sub fixshebang{
# NOTE: this might be dressed up a bit with File::Spec since we're using it here already.
my $dir = shift;
opendir my $dh, $dir or die $!;
warn "Reading $dir contents.\n" if $DEBUG;
while( my $file = readdir($dh) ) {
# this may be used to exclude any desired files from the scan
if ( $file =~ /shebang|wixgen/ ) { next; }
# handle files... other extensions could be substituted/added if needed
if ( $file =~ /\.pl$/ ) {
my @filearray;
my $pathfile =$dir . '/' . $file;
warn "Found a perl script named $pathfile\n" if $DEBUG;
tie @filearray, 'Tie::File', $pathfile or die $!;
print "First line of $file is $filearray[0]\n\n";
if ( ( $filearray[0] =~ /#!.*perl/ ) && ( $filearray[0] !~ /$shebang/ ) ) {
warn "\n\tRe-writing shebang line for $pathfile\n" if $DEBUG;
warn "\tOriginal shebang line: $filearray[0]\n" if $DEBUG;
$filearray[0] = $shebang;
warn "\tNew shebang line is: $filearray[0]\n\n" if $DEBUG;
untie @filearray;
next;
}
elsif ( $filearray[0] =~ /$shebang/ ) {
warn "\n\tShebang line is correct.\n\n" if $DEBUG;
untie @filearray;
next;
}
else {
warn "\n\tNo shebang line found in $pathfile\n\n" if $DEBUG;
untie @filearray;
next;
}
}
# handle directories
elsif ( -d ($dir . '/' . $file) && $file !~ /^\.{1,2}/ ) {
my $dirpath = $dir . '/' . $file;
warn "Found a subdir named $dirpath\n" if $DEBUG;
fixshebang ($dirpath);
# closedir $dh; # I'm not really sure if this is necessary
}
}
closedir $dh;
}
fixshebang ($basedir);
Loading…
Cancel
Save