The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use warnings;
use strict;
use EV ();
use Feersum ();

require Getopt::Long;

my $native = 0;
Getopt::Long::Configure("no_ignore_case", "no_auto_abbrev", "pass_through");
Getopt::Long::GetOptions(
    "native!" => \$native,
);

my $runner;

if ($native) {
    my $listen = 'localhost:5000';
    my $pre_fork = 0;
    my $verbose = 0;
    Getopt::Long::GetOptions(
        "listen=s" => \$listen,
        "pre-fork=i" => \$pre_fork,
        "verbose!" => \$verbose,
    );
    require Feersum::Runner;
    my $app_file = pop @ARGV || 'app.feersum';
    $runner = Feersum::Runner->new(
        'listen' => [$listen],
        app_file => $app_file,
        pre_fork => $pre_fork,
        quiet => !$verbose,
    );
}
else {
    my @args = (
        server => 'Feersum',
        env => 'deployment',
        version_cb => sub {
            print "Feersum $Feersum::VERSION on EV $EV::VERSION\n";
        }
    );
    require Plack::Runner;
    $runner = Plack::Runner->new(@args);
    $runner->parse_options(@ARGV);
}

$runner->run;

__END__

=head1 NAME

feersum - feersum app loader

=head1 SYNOPSIS

  feersum [plackup opts] [--pre-fork=N] [app.psgi]
  feersum --native [--listen host:port] [--pre-fork=N] [app.feersum]

=head1 DESCRIPTION

Loads the specified app file into a Feersum server.

In both cases, if C<--pre-fork=N> is specified, that many worker processes are
used to serve requests. See L<Feersum::Runner> for details.

If in native mode (when running C<feersum --native>), currently only a
C<--listen> parameter is accepted.  By default, the server will listen on
localhost port 5000.

When running in PSGI mode (non-native), L<Plack::Runner> is used.  See that
module for documentation and defaults.

=cut