From: Chris Nighswonger Date: Tue, 18 Dec 2007 18:59:09 +0000 (-0500) Subject: Win32 support: Adding a script to modify shebang lines per installation platfom. X-Git-Tag: v3.00.00-alpha~383^2~7 X-Git-Url: http://git.rot13.org/?p=koha.git;a=commitdiff_plain;h=b310be2bab507630cbb4ea5d48fb9c6f0963fd64 Win32 support: Adding a script to modify shebang lines per installation platfom. Signed-off-by: Galen Charlton --- diff --git a/fix-perl-path.PL b/fix-perl-path.PL new file mode 100644 index 0000000000..222ff8d34f --- /dev/null +++ b/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); + +