#!/usr/bin/perl -w
# -*- perl -*-

#######
# I wrote this script to be able to move the browser beween my home
# computer (development) and work where the files are actually
# used. The main difference is that the perl distribution I have at
# home is more recent and contains more modules.
#
#######
#  How to run installation script
#
# Type:
# perl install.pl
#
#######

$| = 1 ; # Wonderful perl syntax for turning output buffering off!

## find out of we have CGI.pm
#
my $c = "CGI" ;

eval "use $c;"  ;
my $gotCGI =  $@ eq "" ;

if($gotCGI) {
    print "We have the $c module\n" ;
}
else {
    die "CGI.pm module not present. Download from http://www.cpan.org/ !" ; 
} ;

## find perl
#
my $perl = &pathToApp("perl") ;

if(defined $perl and $perl ne "") {
    print "Perl: $perl\n" ;
}
else {
    die "Can not find perl in PATH!\n" ;
} ;

## Ask operator to confirm
#
my $p =`pwd` ;
chomp $p ;

while(1) {
    print "\n\nOK to install cgi bins in $p? [y/n] " ;
    $_ = <STDIN>;
    chomp ;
    my $a = uc $_ ;
    $a eq "Y" and do { last ; };
    $a eq "N" and die "Aborted"; 
    print "Answer 'y' or 'n'." ;
}

				# Make sure we can open cgi_files.tar
unless( -r "cgi_files.tar") { die "Can not open \"cgi_files.tar\" for read." ; } ;

				# Get file list and filter out .cgi, .pl and .perl
local *P ;
open(P,"tar -tf cgi_files.tar|") or die "Can not read \"cgi_files.tar\"" ;
my @perlfiles ;
while(<P>) {
    chomp ;
    (/\.cgi$/ or /\.pl/ or /\.perl/) and do { push @perlfiles,$_ ; } ;
}
close P ;

				# Extract files and make writeable
system("tar xvf cgi_files.tar") ;
chmod 0755,@perlfiles ;

				# Change first line of all files to point to
				# perl
my $f ;
foreach $f (@perlfiles) {
    # Read file
    open(P,"<$f") ;
    my @file=<P> ;
    close P ;
    # Change first line  
    $file[0]="#!$perl -w\n" ; 
    # Write file
    open(P,">$f") ;
    print P @file ;
    close P ;    
}
chmod 0755,@perlfiles ;

				# Clean up
unlink "cgi_files.tar" ;


################ SUBROUTINES ################
###
### Find path to an app ("type -path" does not work on all systems")
###
sub pathToApp($)
{
    my $app = shift @_ ;
    my $result ;
    my $p ;
    foreach $p (split(':',$ENV{"PATH"} )) {
	$p =~ s|/$|| ;
	if(-x "$p/$app") {
	    $result = "$p/$app" ;
	}
    }
    return $result ;
} ;







syntax highlighted by Code2HTML, v. 0.9.1