208 lines
5 KiB
Perl
208 lines
5 KiB
Perl
use 5.005;
|
|
|
|
use lib qw(lib);
|
|
use Apache::Test5005compat;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
# was this file invoked directly via perl, or via the top-level
|
|
# (mp2) Makefile.PL? if top-level, this env var will be set
|
|
use constant TOP_LEVEL => $ENV{MOD_PERL_2_BUILD};
|
|
|
|
if (!TOP_LEVEL) {
|
|
# see if we are building from within mp root, add src lib if we are
|
|
eval { require File::Spec };
|
|
unless ($@) {
|
|
if ( -e File::Spec->catdir('..', 'lib') ) {
|
|
|
|
# building A-T from mp subdirectory, use the mp lib
|
|
unshift @INC, File::Spec->catdir('..', 'lib');
|
|
}
|
|
}
|
|
}
|
|
|
|
use ExtUtils::MakeMaker;
|
|
use Symbol;
|
|
use File::Find qw(finddepth);
|
|
|
|
use Apache::TestMM qw(test clean); #enable 'make test and make clean'
|
|
use Apache::TestRun;
|
|
use Apache::TestTrace;
|
|
use Apache::TestReport;
|
|
use Apache::TestConfig ();
|
|
use Apache::TestRunPerl;
|
|
|
|
my $VERSION;
|
|
set_version();
|
|
|
|
Apache::TestMM::filter_args();
|
|
|
|
my @scripts = qw(t/TEST);
|
|
|
|
finddepth(sub {
|
|
return if $_ eq 'Apache-TestItSelf';
|
|
return unless /(.*?\.pl)\.PL$/;
|
|
push @scripts, "$File::Find::dir/$1";
|
|
}, '.');
|
|
|
|
for (@scripts) {
|
|
Apache::TestMM::generate_script($_);
|
|
}
|
|
Apache::TestReport->generate_script;
|
|
|
|
my @clean_files =
|
|
qw(.mypacklist
|
|
t/TEST
|
|
t/REPORT
|
|
Makefile.old
|
|
);
|
|
|
|
my %prereq = (
|
|
'File::Spec' => '0.8',
|
|
'Cwd' => '2.06',
|
|
);
|
|
|
|
# Apache::TestServer uses Win32::Process on Windows.
|
|
if ($^O =~ /MSWin32/i) {
|
|
$prereq{'Win32::Process'} = '0'
|
|
}
|
|
|
|
# Apache-Test/META.yml is excluded from mp2 distro to make PAUSE
|
|
# indexer happy, but then perl Makefile.PL complains about a missing
|
|
# META.yml, so autogenerate it if it wasn't in the distro
|
|
my $no_meta = TOP_LEVEL ? 1 : 0;
|
|
|
|
WriteMakefile(
|
|
NAME => 'Apache::Test',
|
|
VERSION => $VERSION,
|
|
PREREQ_PM => \%prereq,
|
|
NO_META => $no_meta,
|
|
dist => {
|
|
COMPRESS => 'gzip -9f', SUFFIX => 'gz',
|
|
PREOP => 'find $(DISTVNAME) -type d -print|xargs chmod 0755 && ' .
|
|
'find $(DISTVNAME) -type f -print|xargs chmod 0644',
|
|
TO_UNIX => 'find $(DISTVNAME) -type f -print|xargs dos2unix'
|
|
},
|
|
clean => {
|
|
FILES => "@clean_files",
|
|
},
|
|
);
|
|
|
|
# after CPAN/CPANPLUS had a chance to satisfy the requirements,
|
|
# enforce those (for those who run things manually)
|
|
check_prereqs();
|
|
|
|
sub check_prereqs {
|
|
my %fail = ();
|
|
for (sort keys %prereq) {
|
|
unless (chk_version($_, $prereq{$_})) {
|
|
$fail{$_} = $prereq{$_};
|
|
}
|
|
}
|
|
if (%fail) {
|
|
error "\nThe following Apache-Test dependencies aren't satisfied:",
|
|
map { "\t$_: $fail{$_}" } sort keys %fail;
|
|
error "Install those from http://search.cpan.org and try again";
|
|
exit 0;
|
|
}
|
|
}
|
|
|
|
sub chk_version {
|
|
my($pkg, $wanted) = @_;
|
|
|
|
no strict 'refs';
|
|
local $| = 1;
|
|
|
|
print "Checking for $pkg...";
|
|
(my $p = $pkg . ".pm") =~ s#::#/#g;
|
|
eval { require $p;};
|
|
print("not ok\n$@"), return if $@;
|
|
|
|
my $vstr = ${"${pkg}::VERSION"} ? "found v" . ${"${pkg}::VERSION"}
|
|
: "not found";
|
|
my $vnum = eval(${"${pkg}::VERSION"}) || 0;
|
|
|
|
print $vnum >= $wanted ? "ok\n" : " " . $vstr . "\n";
|
|
|
|
$vnum >= $wanted;
|
|
}
|
|
|
|
sub set_version {
|
|
$VERSION = $Apache::Test::VERSION;
|
|
|
|
my $fh = Symbol::gensym();
|
|
open $fh, 'Changes' or die "Can't open Changes: $!";
|
|
while (<$fh>) {
|
|
if(/^=item.*-(dev|rc\d+)/) {
|
|
$VERSION .= "-$1";
|
|
last;
|
|
}
|
|
last if /^=item/;
|
|
}
|
|
close $fh;
|
|
}
|
|
|
|
sub add_dep {
|
|
my($string, $targ, $add) = @_;
|
|
$$string =~ s/($targ\s+::)/$1 $add/;
|
|
}
|
|
|
|
no warnings 'redefine';
|
|
sub MY::postamble {
|
|
my $self = shift;
|
|
|
|
my $q = ($^O =~ /MSWin32/i ? '"' : "'");
|
|
|
|
my $string = $self->MM::postamble;
|
|
|
|
$string .= <<"EOF";
|
|
tag :
|
|
svn copy -m $q\$(VERSION_SYM) tag$q https://svn.apache.org/repos/asf/perl/Apache-Test/trunk https://svn.apache.org/repos/asf/perl/Apache-Test/tags/\$(VERSION_SYM)
|
|
EOF
|
|
|
|
return $string;
|
|
}
|
|
|
|
|
|
|
|
sub MY::test {
|
|
my $self = shift;
|
|
|
|
# run tests normally if non root user
|
|
return $self->Apache::TestMM::test(@_) if (($> != 0) # root user
|
|
or (Apache::TestConfig::WINFU)); # win users
|
|
# or win32
|
|
|
|
return <<EOF
|
|
test::
|
|
\t\@echo
|
|
\t\@echo Apache::Test tests cannot be run as the root user.
|
|
\t\@echo Apache cannot spawn child processes as 'root', therefore
|
|
\t\@echo the test suite must be run with a non privileged user.
|
|
\t\@echo Please build Apache::Test as a non-privileged user to
|
|
\t\@echo run the test suite.
|
|
\t\@echo
|
|
EOF
|
|
}
|
|
|
|
sub MY::constants {
|
|
my $self = shift;
|
|
|
|
my $string = $self->MM::constants;
|
|
|
|
# mp2 installs this into INSTALLSITEARCH, so in order to avoid
|
|
# problems when users forget 'make install UNINST=1', trick MM into
|
|
# installing pure perl modules to the sitearch location, when this is
|
|
# not installed as a part of mp2 build
|
|
if (!$ENV{MOD_PERL_2_BUILD}) {
|
|
$string .= <<'EOI';
|
|
|
|
# install into the same location as mod_perl 2.0
|
|
INSTALLSITELIB = $(INSTALLSITEARCH)
|
|
DESTINSTALLSITELIB = $(DESTINSTALLSITEARCH)
|
|
EOI
|
|
}
|
|
|
|
$string;
|
|
}
|