The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Mogstored::HTTPServer::Apache;
use strict;
use base 'Mogstored::HTTPServer';
use File::Temp ();

sub start {
    my $self = shift;
    my $exe = $self->{bin};

    if ($exe && ! -x $exe) {
        die "Provided apache path $exe not valid.\n";
    }
    unless ($exe) {
        # TODO: not sure where else common locations are... just guessing
        my @loc = qw(/usr/sbin/apache
                     /usr/sbin/httpd
                     );
        foreach my $loc (@loc) {
            $exe = $loc;
            last if -x $exe;
        }
        unless (-x $exe) {
            die "Can't find apache in @loc\n";
        }
    }

    my $pid = fork();
    die "Can't fork: $!" unless defined $pid;

    if ($pid) {
        $self->{pid} = $pid;
        Mogstored->on_pid_death($pid => sub {
            die "apache died";
        });
        return;
    }

    my ($fh, $filename) = File::Temp::tempfile();
    $self->{temp_conf_file} = $filename;

    my $portnum = $self->listen_port;
    my $bind_ip = $self->bind_ip;

    print $fh qq{
ServerType standalone
ErrorLog /dev/null
LoadModule dav_module  /usr/lib/apache/1.3/libdav.so

Listen 7500
<VirtualHost *:7500>
  DocumentRoot $self->{docroot}

  <Directory $self->{docroot}>
    Options +Indexes +FollowSymLinks
  </Directory>

  <Location />
    DAV On
  </Location>
</VirtualHost>

};

    exec $exe, "-F", "-f", $filename;
}

sub DESTROY {
    my $self = shift;
    unlink $self->{temp_conf_file} if $self->{temp_conf_file};
}

1;