diff options
Diffstat (limited to 'lib/App/Acmeman/Apache/Layout.pm')
-rw-r--r-- | lib/App/Acmeman/Apache/Layout.pm | 100 |
1 files changed, 44 insertions, 56 deletions
diff --git a/lib/App/Acmeman/Apache/Layout.pm b/lib/App/Acmeman/Apache/Layout.pm index 1f2027c..5c6d191 100644 --- a/lib/App/Acmeman/Apache/Layout.pm +++ b/lib/App/Acmeman/Apache/Layout.pm @@ -6,6 +6,8 @@ use Carp; use File::Basename; use feature 'state'; use App::Acmeman::Log qw(:all); +use Apache::Defaults; +use Carp; sub _find_httpd { my $httpd; @@ -44,65 +46,60 @@ sub modules { @$loaders; } -# new(NAME) -# new() sub new { - my $class = shift; - - if (@_ == 0) { - # Autodetect - debug(3, "detecting Apache configuration layout"); - my $ap = new Apache::Defaults(server => $class->_find_httpd, - on_error => 'return'); - if ($ap->status) { - croak "unable to get Apache defaults: " . $ap->error; - } - - foreach my $mod ($class->modules) { - debug(3, "trying layout module $mod"); - my $obj; - eval { - $obj = $mod->new($ap); - }; - if ($obj) { - return $obj; - } - if ($@) { - debug(3, "layout module failed: $@"); - } - } + my ($class, $ap, %args) = @_; - if ($ap) { - return new App::Acmeman::Apache::Layout::auto($ap); - } + unless ($ap->isa('Apache::Defaults')) { + croak "unrecognized argument"; + } - croak "unrecognized Apache layout"; + my $self = bless { _defaults => $ap }, $class; + foreach my $kw (qw(layout_name incdir restart_command)) { + if (defined(my $v = delete $args{$kw})) { + $self->{$kw} = $v; + } } - my ($name, %args) = @_; - if (ref($name) eq '') { - my $mod = "$class::$name"; - my $obj; - eval { - require $mod; - }; + return $self; +} + +sub detect { + my $class = shift; + my $server = $class->_find_httpd; + + if (my $name = shift) { + my $mod = "${class}::$name"; + eval "require $mod"; croak "undefined Apache layout $name" if ($@); - return $mod->new; + my $self = $mod->new(new Apache::Defaults(server => $server), @_); + if (!$self) { + croak "can't use layout $name"; + } + return $self; } - - unless ($name->isa('Apache::Defaults')) { - croak "unrecognized argument"; + + # Autodetect + debug(3, "detecting Apache configuration layout" + .(defined($server) ? " (using httpd binary $server)" : '')); + my $ap = new Apache::Defaults(server => $server, on_error => 'return'); + if ($ap->status) { + croak "unable to get Apache defaults: " . $ap->error; } - my $self = bless { _defaults => $name }, $class; - foreach my $kw (qw(layout_name incdir restart_command)) { - if (defined(my $v = delete $args{$kw})) { - $self->{$kw} = $v; + foreach my $mod ($class->modules) { + debug(3, "trying layout module $mod"); + my $obj; + eval { $obj = $mod->new($ap) }; + if ($obj) { + return $obj; + } + if ($@) { + debug(3, "layout module failed: $@"); } } - return $self; -} + return new App::Acmeman::Apache::Layout($ap, layout_name => 'auto'); +} sub apache { shift->{_defaults} } @@ -181,14 +178,5 @@ sub restart_command { sub pre_setup {} sub post_setup {} - -package App::Acmeman::Apache::Layout::auto; -my @ISA = qw(App::Acmeman::Apache::Layout); -use App::Acmeman::Log qw(:all); - -sub new { - my ($class, $ap) = @_; - return $class->SUPER::new($ap); -} 1; |