testmm.pm

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PM 代码 · 共 251 行

PM
251
字号
# Copyright 2001-2005 The Apache Software Foundation or its licensors, as# applicable.## Licensed 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 Apache::TestMM;use strict;use warnings FATAL => 'all';use Config;use Apache::TestConfig ();use Apache::TestTrace;sub import {    my $class = shift;    for my $section (@_) {        unless (defined &$section) {            die "unknown Apache::TestMM section: $section";        }        no strict 'refs';        my $sub = "MY::$section";        # Force aliasing, since previous WriteMakefile might have        # moved it        undef &$sub if defined &$sub;        *$sub = \&{$section};    }}sub add_dep {    my($string, $targ, $add) = @_;    $$string =~ s/($targ\s+::)/$1 $add /;}sub clean {    my $self = shift;    my $string = $self->MM::clean(@_);    add_dep(\$string, clean => 'test_clean');    $string;}sub test {    my $self = shift;    my $env = Apache::TestConfig->passenv_makestr();    my $tests = 'TEST_FILES = ' . (exists $self->{'test'} ? $self->{'test'}->{'TESTS'} : '') . "\n";    my $preamble = Apache::TestConfig::WIN32 ? "" : <<EOF;PASSENV = $envEOF    my $cover;    if (eval { require Devel::Cover }) {        my $atdir = File::Spec->catfile($ENV{HOME}, '.apache-test');        $cover = <<"EOF"testcover :	-\@cover -delete	-HARNESS_PERL_SWITCHES=-MDevel::Cover=+inc,$atdir \\	APACHE_TEST_EXTRA_ARGS=-one-process \$(MAKE) test	-\@coverEOF    }    else {        $cover = <<'EOF';testcover :	@echo "Cannot run testcover action unless Devel::Cover is installed"EOF    }    return $preamble . $tests . <<'EOF' . $cover;TEST_VERBOSE = 0test_clean :	$(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) \	t/TEST $(APACHE_TEST_EXTRA_ARGS) -cleanrun_tests :	$(PASSENV) \	$(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) \	t/TEST $(APACHE_TEST_EXTRA_ARGS) -bugreport -verbose=$(TEST_VERBOSE) $(TEST_FILES)test :: pure_all test_clean run_teststest_config :	$(PASSENV) \	$(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) \	t/TEST $(APACHE_TEST_EXTRA_ARGS) -confcmodules: test_config	cd c-modules && $(MAKE) allcmodules_clean: test_config	cd c-modules && $(MAKE) cleanEOF}sub generate_script {    my $file = shift;    unlink $file if -e $file;    my $body = "BEGIN { eval { require blib && blib->import; } }\n";    my %args = @Apache::TestMM::Argv;    while (my($k, $v) = each %args) {        $v =~ s/\|/\\|/g;        $body .= "\n\$Apache::TestConfig::Argv{'$k'} = q|$v|;\n";    }    my $in = Symbol::gensym();    open $in, "$file.PL" or die "Couldn't open $file.PL: $!";    {        local $/;        $body .= <$in>;    }    close $in;    info "generating script $file";    Apache::Test::basic_config()->write_perlscript($file, $body);}sub filter_args {    my($argv, $vars) =        Apache::TestConfig::filter_args(\@ARGV, \%Apache::TestConfig::Usage);    @ARGV = @$argv;    @Apache::TestMM::Argv = %$vars;}1;=head1 NAMEApache::TestMM - Provide MakeMaker Wrapper Methods=head1 SYNOPSIS  require Apache::TestMM;    # import MY::test and MY::clean overrides for MM  Apache::TestMM->import(qw(test clean));    # parse command line args  Apache::TestMM::filter_args();    # autogenerate the script  Apache::TestMM::generate_script('t/TEST');=head1 DESCRIPTIONC<Apache::TestMM> provides wrappers for the C<ExtUtils::MakeMaker>craft, making it easier to extend the autogenerated F<Makefile> withC<Apache::Test>.=head1 FUNCTIONS=head2 C<import>  use Apache::TestMM qw(test clean);or:  Apache::TestMM->import(qw(test clean));Imports C<MY::> overrides for the default C<ExtUtils::MakeMaker>I<test> and I<clean> targets, as if you have defined:  sub MY::test {...}  sub MY::clean {...}in F<Makefile.PL>. C<Apache::TestMM> does this for you so that these Makefiletargets will run the Apache server and the tests for it, and clean up afterits mess.=head2 C<filter_args>  push @ARGV, '-apxs', $apxs_path;  Apache::TestMM::filter_args();  WriteMakefile(...);When C<WriteMakefile()> is called it parses C<@ARGV>, hoping to findspecial options like C<PREFIX=/home/stas/perl>. C<Apache::Test>accepts a lot of configuration options of its own. WhenC<Apache::TestMM::filter_args()> is called, it removes anyC<Apache::Test>-specific options from C<@ARGV> and stores theminternally, so when C<WriteMakefile()> is called they aren't inC<@ARGV> and thus won't be processed by C<WriteMakefile()>.The options can be set when F<Makefile.PL> is called:  % perl Makefile.PL -apxs /path/to/apxsOr you can push them manually to C<@ARGV> from the code:  push @ARGV, '-apxs', $apxs_path;When:  Apache::TestMM::generate_script('t/TEST');is called, C<Apache::Test>-specific options extracted byC<Apache::TestMM::filter_args()> are written to the autogeneratedfile. In our example, the autogenerated F<t/TEST> will include:  %Apache::TestConfig::Argv = qw(apxs /path/to/apxs);which is going to be used by the C<Apache::Test> runtime.The other frequently used options are: C<-httpd>, telling where tofind the httpd (usually when the C<-apxs> option is not used),C<-libmodperl> to use a specific mod_perl shared object (if yourmod_perl is built as DSO), C<-maxclients> to change the default numberof the configured C<MaxClients> directive, C<-port> to start theserver on a specific port, etc. To get the complete list of availableconfiguration options and their purpose and syntax, run:  % perl -MApache::TestConfig -le 'Apache::TestConfig::usage()'You may wish to document some of these in your application's F<README>file, especially the C<-apxs> and C<-httpd> options.=head2 C<generate_script>  Apache::TestMM::generate_script('t/TEST');C<generate_script()> accepts the name of the script to generate andwill look for a template with the same name and suffix I<.PL>. So inour example it'll look for F<t/TEST.PL>. The autogenerated scriptF<t/TEST> will include the contents of F<t/TEST.PL>, and specialdirectives, including any configuration options passed viaC<L<filter_args()|/C_filter_args_>> called from F<Makefile.PL>, specialfixup code, etc.=cut

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?