$WWWHOME = $ARGV[0] or die ; $HTTPD_BIN = "$WWWHOME/bin/httpd" ; $HTTPD_CONF = "$WWWHOME/conf/httpd.conf" ; my @newcode = map { "$_\n" } split /\n/, < PerlChildExitHandler Apache::ChildExit EOF my $fh = do { local *FH ; } ; while (1) { print "\nAutomatically update httpd.conf [y/n]? " ; my $r = ; exit 0 if $r =~ /^n/i ; last if $r =~ /^y/i ; } unless ( -f $HTTPD_BIN ) { print STDERR "Cannot locate file $HTTPD_BIN", "\n" ; exit 1 ; } unless ( grep /mod_perl\.c/, `$HTTPD_BIN -l` ) { print STDERR "$HTTPD_BIN is not built with mod_perl", "\n" ; exit 1 ; } unless ( -f $HTTPD_CONF && open( $fh, $HTTPD_CONF ) ) { print STDERR "$HTTPD_CONF is unreadable", "\n" ; exit 1 ; } my @fh = <$fh> ; close $fh ; foreach ( grep $fh[$_] =~ /PerlChildExitHandler/i, 0 .. $#fh ) { my $t = $fh[$_] ; $t =~ s/PerlChildExitHandler.*// ; next if $t =~ /#/ ; print STDERR "$HTTPD_CONF already contains a PerlChildExitHandler directive:", "\n" ; printf STDERR "\t(line %d) %s\n", $_ +1, $fh[$_] ; exit 0 ; } my @ifconfig = grep( $fh[$_] =~ /<\s*ifmodule\s.*>/i, 0 .. $#fh ) ; my @unifconfig = grep( $fh[$_] =~ /<\s*\/ifmodule.*>/i, 0 .. $#fh ) ; unless ( @ifconfig && @unifconfig ) { print STDERR "Trouble parsing $HTTPD_CONF", "\n" ; print STDERR "Please edit this file manually", "\n" ; exit 0 ; } my %ifconfig = sort { $a <=> $b } @ifconfig, grep( $fh[$_] =~ /<\s*\/ifmodule.*>/i, 0 .. $#fh ) ; if ( my @t = grep $fh[$_] =~ /mod_perl\.c/, @ifconfig ) { splice @fh, $ifconfig{ $t[0] }, 0, @newcode[2] ; } else { splice @fh, $ifconfig{ $ifconfig[0] } +1, 0, @newcode ; } unless ( rename $HTTPD_CONF, "${HTTPD_CONF}." . time ) { print STDERR "Cannot replace $HTTPD_CONF", "\n" ; exit 1 ; } open $fh, "> $HTTPD_CONF" or die "Error writing $HTTPD_CONF" ; print $fh @fh ; close $fh ; exit 0 ;