App-Info
view release on metacpan or search on metacpan
lib/App/Info/HTTPD/Apache.pm view on Meta::CPAN
my $self = shift;
return unless $self->{executable};
# Load data.
$get_version->($self) unless exists $self->{-v};
# Handle an unknown value.
unless ($self->{version}) {
# Create a validation code reference.
my $chk_version = sub {
# Try to get the version number parts.
my ($x, $y, $z) = /^(\d+)\.(\d+).(\d+)$/;
# Return false if we didn't get all three.
return unless $x and defined $y and defined $z;
# Save all three parts.
@{$self}{qw(major minor patch)} = ($x, $y, $z);
# Return true.
return 1;
};
$self->{version} = $self->unknown( key => 'apache version number',
callback => $chk_version);
}
# Return the version number.
return $self->{version};
}
##############################################################################
=head3 major_version
my $major_version = $apache->major_version;
Returns the Apache major version number. App::Info::HTTPD::Apache parses the
version number from the system call C<`httpd --v`>. For example, if
C<version()> returns "1.3.24", then this method returns "1".
B<Events:>
=over 4
=item info
Executing `httpd -v`
=item error
Failed to find Apache version data with `httpd -v`
Failed to parse Apache name and version from string
=item unknown
Enter a valid Apache major version number
=back
=cut
# This code reference is used by major_version(), minor_version(), and
# patch_version() to validate a version number entered by a user.
my $is_int = sub { /^\d+$/ };
sub major_version {
my $self = shift;
return unless $self->{executable};
# Load data.
$get_version->($self) unless exists $self->{-v};
# Handle an unknown value.
$self->{major} = $self->unknown( key => 'apache major version number',
callback => $is_int)
unless $self->{major};
return $self->{major};
}
##############################################################################
=head3 minor_version
my $minor_version = $apache->minor_version;
Returns the Apache minor version number. App::Info::HTTPD::Apache parses the
version number from the system call C<`httpd --v`>. For example, if
C<version()> returns "1.3.24", then this method returns "3". See the
L<version|"version"> method for a list of possible errors.
B<Events:>
=over 4
=item info
Executing `httpd -v`
=item error
Failed to find Apache version data with `httpd -v`
Failed to parse Apache name and version from string
=item unknown
Enter a valid Apache minor version number
=back
=cut
sub minor_version {
my $self = shift;
return unless $self->{executable};
# Load data.
$get_version->($self) unless exists $self->{-v};
# Handle an unknown value.
$self->{minor} = $self->unknown( key => 'apache minor version number',
callback => $is_int)
unless defined $self->{minor};
return $self->{minor};
}
##############################################################################
lib/App/Info/HTTPD/Apache.pm view on Meta::CPAN
Executing `httpd -V`
=item error
Unable to extract compile settings from `httpd -V`
Cannot parse HTTPD root from `httpd -V`
=item unknown
Enter a valid HTTPD root
=back
=cut
# This code ref takes care of processing the compile settings. It is used by
# httpd_root(), magic_number(), or compile_option(), whichever is called
# first.
my $get_compile_settings = sub {
my $self = shift;
$self->{-V} = 1;
$self->info(qq{Executing `"$self->{executable}" -V`});
# Get the compile settings.
my $data = `"$self->{executable}" -V`;
unless ($data) {
$self->error("Unable to extract compile settings from ",
qq{`"$self->{executable}" -V`});
return;
}
# Split out the parts.
foreach (split /\s*\n\s*/, $data) {
if (/magic\s+number:\s+(.*)$/i) {
$self->{magic_number} = $1;
} elsif (/=/) {
$_ =~ s/^-D\s+//;
$_ =~ s/"$//;
my ($k, $v) = split /\s*=\s*"/, $_;
$self->{lc $k} = $v;
if (WIN32) {
if ($k eq 'SUEXEC_BIN') {
$self->{lc $k} = 0;
} elsif ($k eq 'HTTPD_ROOT') {
$self->{lc $k} =
join('\\', (split /\\/, $self->{executable} )[0 .. 1]);
}
}
} elsif (/-D/) {
$_ =~ s/^-D\s+//;
$self->{lc $_} = 1;
}
}
# Issue a warning if no httpd root was found.
$self->error("Cannot parse HTTPD root from ",
qq{`"$self->{executable}" -V`}) unless $self->{httpd_root};
};
# This code reference is used by httpd_root(), lib_dir(), bin_dir(), and
# so_lib_dir() to validate a directory entered by the user.
my $is_dir = sub { -d };
sub httpd_root {
my $self = shift;
return unless $self->{executable};
# Get the compile settings.
$get_compile_settings->($self) unless $self->{-V};
# Handle an unknown value.
$self->{httpd_root} = $self->unknown( key => 'apache httpd root',
callback => $is_dir)
unless defined $self->{httpd_root};
return $self->{httpd_root};
}
##############################################################################
=head3 magic_number
my $magic_number = $apache->magic_number;
Returns the "Magic Number" for the Apache installation. This number is defined
at compile time, and App::Info::HTTPD::Apache parses it from the system call
C<`httpd -V`>.
B<Events:>
=over 4
=item info
Executing `httpd -V`
=item error
Unable to extract compile settings from `httpd -V`
Cannot parse HTTPD root from `httpd -V`
=item unknown
Enter a valid magic number
=back
=cut
sub magic_number {
my $self = shift;
return unless $self->{executable};
# Get the compile settings.
$get_compile_settings->($self) unless $self->{-V};
# Handle an unknown value.
$self->{magic_number} = $self->unknown( key => 'apache magic number' )
unless defined $self->{magic_number};
return $self->{magic_number};
}
##############################################################################
=head3 compile_option
( run in 1.010 second using v1.01-cache-2.11-cpan-39bf76dae61 )