aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2020-01-13 15:44:18 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2020-01-13 16:52:26 +0200
commit3a9980f96e6fe23b8de35556d16984d34e853b2a (patch)
tree4b4000b88539777387f60847b758f33fe859161d
parentec2c3da9a865bd51c8766d5c25f9339738a40073 (diff)
downloadacmeman-3a9980f96e6fe23b8de35556d16984d34e853b2a.tar.gz
acmeman-3a9980f96e6fe23b8de35556d16984d34e853b2a.tar.bz2
Fix apache layout detection
* lib/App/Acmeman/Apache/Layout.pm (new): Split into two constructors: new and detect. Always pass the server parameter to the Apache::Defaults constructor. (App::Acmeman::Apache::Layout::auto): Remove. * lib/App/Acmeman/Source/Apache.pm (new): Use Layout->detect, instead of new. (server_root): Return server_root from the layout, unless it was set explicitly.
-rw-r--r--lib/App/Acmeman/Apache/Layout.pm84
-rw-r--r--lib/App/Acmeman/Source/Apache.pm8
2 files changed, 39 insertions, 53 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,16 +46,42 @@ sub modules {
@$loaders;
}
-# new(NAME)
-# new()
sub new {
+ my ($class, $ap, %args) = @_;
+
+ unless ($ap->isa('Apache::Defaults')) {
+ croak "unrecognized argument";
+ }
+
+ 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;
+ }
+ }
+
+ 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 ($@);
+ my $self = $mod->new(new Apache::Defaults(server => $server), @_);
+ if (!$self) {
+ croak "can't use layout $name";
+ }
+ return $self;
+ }
- if (@_ == 0) {
# Autodetect
- debug(3, "detecting Apache configuration layout");
- my $ap = new Apache::Defaults(server => $class->_find_httpd,
- on_error => 'return');
+ 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;
}
@@ -61,9 +89,7 @@ sub new {
foreach my $mod ($class->modules) {
debug(3, "trying layout module $mod");
my $obj;
- eval {
- $obj = $mod->new($ap);
- };
+ eval { $obj = $mod->new($ap) };
if ($obj) {
return $obj;
}
@@ -72,36 +98,7 @@ sub new {
}
}
- if ($ap) {
- return new App::Acmeman::Apache::Layout::auto($ap);
- }
-
- croak "unrecognized Apache layout";
- }
-
- my ($name, %args) = @_;
- if (ref($name) eq '') {
- my $mod = "$class::$name";
- my $obj;
- eval {
- require $mod;
- };
- croak "undefined Apache layout $name" if ($@);
- return $mod->new;
- }
-
- unless ($name->isa('Apache::Defaults')) {
- croak "unrecognized argument";
- }
-
- 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;
- }
- }
-
- return $self;
+ return new App::Acmeman::Apache::Layout($ap, layout_name => 'auto');
}
sub apache { shift->{_defaults} }
@@ -182,13 +179,4 @@ 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;
diff --git a/lib/App/Acmeman/Source/Apache.pm b/lib/App/Acmeman/Source/Apache.pm
index 29fe24a..a9a6195 100644
--- a/lib/App/Acmeman/Source/Apache.pm
+++ b/lib/App/Acmeman/Source/Apache.pm
@@ -19,10 +19,8 @@ sub new {
my $server_root;
GetOptionsFromArray(\@_,
'server-root=s' => \$server_root);
- my $self = bless { _layout => new App::Acmeman::Apache::Layout(@_) }, $class;
- unless ($server_root) {
- $server_root = Apache::Defaults->new->server_root;
- }
+ my $layout = detect App::Acmeman::Apache::Layout(@_);
+ my $self = bless { _layout => $layout }, $class;
$self->server_root($server_root) if $server_root;
return $self;
}
@@ -132,7 +130,7 @@ sub server_root {
croak "too many arguments" if $@;
$self->{_server_root} = $v;
}
- return $self->{_server_root};
+ return $self->{_server_root} || $self->layout->apache->server_root;
}
sub mkpath {

Return to:

Send suggestions and report system problems to the System administrator.