Apache-Config-Preproc
view release on metacpan or search on metacpan
lib/Apache/Config/Preproc/include.pm view on Meta::CPAN
package Apache::Config::Preproc::include;
use parent 'Apache::Config::Preproc::Expand';
use strict;
use warnings;
use Apache::Admin::Config;
use Apache::Config::Preproc;
use File::Spec;
use Cwd 'abs_path';
use IPC::Open3;
use Carp;
our $VERSION = '1.03';
sub new {
my $class = shift;
my $conf = shift;
my $self = $class->SUPER::new($conf);
$self->{context} = [];
local %_ = @_;
$self->{server_root} = delete $_{server_root};
if (my $v = delete $_{probe}) {
if (ref($v) eq 'ARRAY') {
$self->probe(@$v);
} else {
$self->probe;
}
}
croak "unrecognized arguments" if keys(%_);
$self->{check_included} = $^O eq 'MSWin32'
? \&_check_included_path
: \&_check_included_stat;
return $self;
}
sub server_root {
my $self = shift;
if (my $v = shift) {
$self->{server_root} = $self->conf->dequote($v);
}
return $self->{server_root};
}
sub context_string {
my ($self, $file) = @_;
my ($dev,$ino) = stat($file);
$file = abs_path($file);
return "\"$file\" $dev $ino";
}
sub context_push {
my ($self,$file,$dev,$ino) = @_;
push @{$self->{context}}, { file => $file, dev => $dev, ino => $ino };
}
sub context_pop {
my $self = shift;
pop @{$self->{context}};
}
sub expand {
my ($self, $d, $repl) = @_;
if ($d->type eq 'directive') {
if (lc($d->name) eq 'serverroot') {
$self->server_root($d->value);
} elsif ($d->name =~ /^include(optional)?$/i) {
my $optional = $1;
my $pat = $self->conf->dequote($d->value);
unless (File::Spec->file_name_is_absolute($pat)) {
if (my $d = $self->server_root) {
$pat = File::Spec->catfile($d, $pat);
}
}
$pat = File::Spec->catfile($pat, '*') if -d $pat;
my @filelist = glob $pat;
( run in 0.640 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )