blob: f2b9825bbd2f5076e11f581a98d559ae6b2f72dc [file] [log] [blame]
# please insert nothing before this line: -*- mode: cperl; cperl-indent-level: 4; cperl-continued-statement-offset: 4; indent-tabs-mode: nil -*-
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
package ModPerl::TestReport;
use strict;
use warnings FATAL => 'all';
use base qw(Apache::TestReportPerl);
use ExtUtils::MakeMaker ();
my @interesting_packages = qw(
CGI
ExtUtils::MakeMaker
Apache2::Request
mod_perl2
LWP
Apache2
mod_perl
);
# we want to see only already installed packages, so skip over
# modules that are about to be installed
my @skip_dirs = qw(
blib/lib
blib/arch
lib
);
my $skip_dir_str = join '|', map { s|/|[/\\\\]|g; $_ } @skip_dirs;
my $skip_dir_pat = qr|[/\\]($skip_dir_str)[/\\]*$|;
sub packages {
my @inc = grep !/$skip_dir_pat/, @INC;
my %packages = ();
my $max_len = 0;
for my $package (sort @interesting_packages ) {
$max_len = length $package if length $package > $max_len;
my $filename = package2filename($package);
my @ver = ();
for my $dir (@inc) {
my $path = "$dir/$filename";
if (-e $path) {
my $ver = MM->parse_version($path);
# two versions could be installed (one under Apache2/)
push @{ $packages{$package} }, $ver if $ver;
}
}
}
my @lines = "*** Packages of interest status:\n";
for my $package (sort @interesting_packages) {
my $vers = exists $packages{$package}
? join ", ", sort @{ $packages{$package} }
: "-";
push @lines, sprintf "%-${max_len}s: %s", $package, $vers;
}
return join "\n", @lines, '';
}
sub config {
my $self = shift;
my @report = ();
# core config
push @report, ModPerl::Config::as_string();
# installed packages
push @report, $self->packages;
# this report is generated by user/group
return join "\n", @report;
}
sub package2filename {
my $package = shift;
$package =~ s|::|/|g;
$package .= ".pm";
return $package;
}
sub report_to { 'modperl@perl.apache.org' }
1;