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

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

    if ($exe && ! -x $exe) {
        die "Provided lighttpd path $exe not valid.\n";
    }
    unless ($exe) {
        my @loc = qw(/usr/local/sbin/lighttpd
                     /usr/sbin/lighttpd
                     /usr/local/bin/lighttpd
                     /usr/bin/lighttpd
                     );
        foreach my $loc (@loc) {
            $exe = $loc;
            last if -x $exe;
        }
        unless (-x $exe) {
            die "Can't find lighttpd 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 "lighttpd died";
        });
        return;
    }

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

    my $portnum = $self->listen_port;
    my $bind_ip = $self->bind_ip;
    
    my $include_line = sprintf('include "%s"', $self->{include})
        if $self->{include};

    print $fh qq{
server.document-root = "$self->{docroot}"
server.port = $portnum
server.bind = "$bind_ip"
server.modules = ( "mod_webdav", "mod_status" )
webdav.activate = "enable"
status.status-url  = "/"
$include_line
};

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

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

1;