The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;
use lib 'lib';
use lib '../openframe3/lib';
use lib '../Vx/lib';
use Cwd;
use OpenFrame;
use Getopt::Long;
use Sys::Hostname;
use Template;


my $cwd = cwd;
my $port = 7500 + $<; # give every user a different port
my $hostname = hostname;

my $httpd;
my @httpds = (
  "/usr/local/apache2/bin/httpd",
  "$ENV{HOME}/apache2/bin/httpd",
);
foreach (@httpds) {
  next unless -f $_;
  $httpd = $_;
  last;
}

if (not defined $httpd) {
  warn "This script failed to find an Apache2 binary\n";
  warn "Change \@httpds in apache.pl to point to a working Apache2 binary.\n";
  exit;
}

my $mod_perl = $httpd;
$mod_perl =~ s{/bin/httpd}{/modules/mod_perl.so};

my($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,$shell,$expire) = getpwuid($<);
my $user  = getpwuid($uid);
my $group = getgrgid($gid);


my $default_conf = "$cwd/apache/conf/httpd.conf.default";
my $new_conf     = "$cwd/apache/conf/httpd.conf";
my $default_ctl = "$cwd/apache/bin/apachectl.default";
my $new_ctl     = "$cwd/apache/bin/apachectl";
my $default_startup = "$cwd/apache/bin/startup.pl.default";
my $new_startup     = "$cwd/apache/bin/startup.pl";

my $vars = {
  cwd => $cwd,
  port => $port,
  user => $user,
  group => $group,
  httpd => $httpd,
  mod_perl => $mod_perl,
  conf => $new_conf,
};

my $tt = Template->new({
  ABSOLUTE => 1,
});

$tt->process($default_conf, $vars, $new_conf) || die $tt->error(), "\n";
$tt->process($default_ctl, $vars, $new_ctl) || die $tt->error(), "\n";
$tt->process($default_startup, $vars, $new_startup) || die $tt->error(), "\n";
chmod 0755, $new_ctl;

my $mode = shift() || '';
if ($mode eq 'exit') {
  # don't start the servers if we're being run by the test suite
  exit;
}

$SIG{INT} = \&quit;
system "$new_ctl start";

print "Point your browser at the following URL to see the website:\n";
print "http://$hostname:$port/\n";
sleep 100 while 1; # sleep for a long time

# When the user hits control-C we shut down the httpds we started up
sub quit {
  system "$new_ctl stop";
  exit;
};




__END__

=head1 NAME

website.pl - Run a small website through Apache

=head1 DESCRIPTION

Run the script and point your favourite web browser at the URL that it
reports.

=head1 AUTHOR

Leon Brocard <leon@fotango.com>

=head1 COPYRIGHT

Copyright (C) 2002, Fotango Ltd.

This module is free software; you can redistribute it or modify it
under the same terms as Perl itself.