geoff 2003/11/07 07:03:39
Modified: perl-framework/Apache-Test/lib/Apache TestConfigParse.pm
Log:
use apxs PREFIX to resolve relative httpd.conf directives
ServerRoot is not present
Revision Changes Path
1.36 +48 -6
httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfigParse.pm
Index: TestConfigParse.pm
===================================================================
RCS file:
/home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfigParse.pm,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- TestConfigParse.pm 9 Aug 2003 02:38:44 -0000 1.35
+++ TestConfigParse.pm 7 Nov 2003 15:03:39 -0000 1.36
@@ -8,7 +8,7 @@
use Apache::TestTrace;
-use File::Spec::Functions qw(rel2abs splitdir);
+use File::Spec::Functions qw(rel2abs splitdir file_name_is_absolute);
use File::Basename qw(basename);
sub strip_quotes {
@@ -47,14 +47,56 @@
sub server_file_rel2abs {
my($self, $file, $base) = @_;
- $base ||= $self->{inherit_config}->{ServerRoot};
+ my ($serverroot, $result) = ();
- unless ($base) {
- warning "unable to resolve $file (ServerRoot not defined yet?)";
- return $file;
+ # order search sequence
+ my @tries = ([ $base,
+ 'user-supplied $base' ],
+ [ $self->{inherit_config}->{ServerRoot},
+ 'httpd.conf inherited ServerRoot' ],
+ [ $self->apxs('PREFIX'),
+ 'apxs-derived ServerRoot' ]);
+
+ if (file_name_is_absolute($file)) {
+ debug "$file is already absolute";
+ $result = $file;
}
+ else {
+ foreach my $try (@tries) {
+ next unless defined $try->[0];
+
+ if (-d $try->[0]) {
+ $serverroot = $try->[0];
+ debug "using $try->[1] to resolve $file";
+ last;
+ }
+ }
+
+ if ($serverroot) {
+ $result = rel2abs $file, $serverroot;
+ }
+ else {
+ warning "unable to resolve $file - cannot find a suitable
ServerRoot";
+ warning "please specify a ServerRoot in your httpd.conf or use
apxs";
+
+ # return early, skipping file test below
+ return $file;
+ }
- rel2abs $file, $base;
+ }
+
+ if (-e $result) {
+ debug "$file successfully resolved to existing file $result";
+ }
+ else {
+ warning "configuration file $result does not exist";
+
+ # fall back to relative file we started with
+ # same as older behavior which returned $file on error
+ $result = $file;
+ }
+
+ return $result;
}
sub server_file {