⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makemaker.pm

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 PM
📖 第 1 页 / 共 5 页
字号:
            $unsatisfied{$prereq} = 'not installed';        } elsif ($pr_version < $self->{PREREQ_PM}->{$prereq} ){            warn sprintf "Warning: prerequisite %s %s not found. We have %s.\n",              $prereq, $self->{PREREQ_PM}{$prereq},                 ($pr_version || 'unknown version')                   unless $self->{PREREQ_FATAL};            $unsatisfied{$prereq} = $self->{PREREQ_PM}->{$prereq} ?               $self->{PREREQ_PM}->{$prereq} : 'unknown version' ;        }    }         if (%unsatisfied && $self->{PREREQ_FATAL}){        my $failedprereqs = join "\n", map {"    $_ $unsatisfied{$_}"}                             sort { $a cmp $b } keys %unsatisfied;        die <<"END";MakeMaker FATAL: prerequisites not found.$failedprereqsPlease install these modules first and rerun 'perl Makefile.PL'.END    }        if (defined $self->{CONFIGURE}) {        if (ref $self->{CONFIGURE} eq 'CODE') {            %configure_att = %{&{$self->{CONFIGURE}}};            $self = { %$self, %configure_att };        } else {            Carp::croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n";        }    }    # This is for old Makefiles written pre 5.00, will go away    if ( Carp::longmess("") =~ /runsubdirpl/s ){        Carp::carp("WARNING: Please rerun 'perl Makefile.PL' to regenerate your Makefiles\n");    }    my $newclass = ++$PACKNAME;    local @Parent = @Parent;    # Protect against non-local exits    {        no strict 'refs';        print "Blessing Object into class [$newclass]\n" if $Verbose>=2;        mv_all_methods("MY",$newclass);        bless $self, $newclass;        push @Parent, $self;        require ExtUtils::MY;        @{"$newclass\:\:ISA"} = 'MM';    }    if (defined $Parent[-2]){        $self->{PARENT} = $Parent[-2];        my $key;        for $key (@Prepend_parent) {            next unless defined $self->{PARENT}{$key};            # Don't stomp on WriteMakefile() args.            next if defined $self->{ARGS}{$key} and                    $self->{ARGS}{$key} eq $self->{$key};            $self->{$key} = $self->{PARENT}{$key};            unless ($Is_VMS && $key =~ /PERL$/) {                $self->{$key} = $self->catdir("..",$self->{$key})                  unless $self->file_name_is_absolute($self->{$key});            } else {                # PERL or FULLPERL will be a command verb or even a                # command with an argument instead of a full file                # specification under VMS.  So, don't turn the command                # into a filespec, but do add a level to the path of                # the argument if not already absolute.                my @cmd = split /\s+/, $self->{$key};                $cmd[1] = $self->catfile('[-]',$cmd[1])                  unless (@cmd < 2) || $self->file_name_is_absolute($cmd[1]);                $self->{$key} = join(' ', @cmd);            }        }        if ($self->{PARENT}) {            $self->{PARENT}->{CHILDREN}->{$newclass} = $self;            foreach my $opt (qw(POLLUTE PERL_CORE LINKTYPE)) {                if (exists $self->{PARENT}->{$opt}                    and not exists $self->{$opt})                    {                        # inherit, but only if already unspecified                        $self->{$opt} = $self->{PARENT}->{$opt};                    }            }        }        my @fm = grep /^FIRST_MAKEFILE=/, @ARGV;        parse_args($self,@fm) if @fm;    } else {        parse_args($self,split(' ', $ENV{PERL_MM_OPT} || ''),@ARGV);    }    $self->{NAME} ||= $self->guess_name;    ($self->{NAME_SYM} = $self->{NAME}) =~ s/\W+/_/g;    $self->init_MAKE;    $self->init_main;    $self->init_VERSION;    $self->init_dist;    $self->init_INST;    $self->init_INSTALL;    $self->init_DEST;    $self->init_dirscan;    $self->init_PM;    $self->init_MANPODS;    $self->init_xs;    $self->init_PERL;    $self->init_DIRFILESEP;    $self->init_linker;    $self->init_ABSTRACT;    if (! $self->{PERL_SRC} ) {        require VMS::Filespec if $Is_VMS;        my($pthinks) = $self->canonpath($INC{'Config.pm'});        my($cthinks) = $self->catfile($Config{'archlibexp'},'Config.pm');        $pthinks = VMS::Filespec::vmsify($pthinks) if $Is_VMS;        if ($pthinks ne $cthinks &&            !($Is_Win32 and lc($pthinks) eq lc($cthinks))) {            print "Have $pthinks expected $cthinks\n";            if ($Is_Win32) {                $pthinks =~ s![/\\]Config\.pm$!!i; $pthinks =~ s!.*[/\\]!!;            }            else {                $pthinks =~ s!/Config\.pm$!!; $pthinks =~ s!.*/!!;            }            print STDOUT <<END unless $self->{UNINSTALLED_PERL};Your perl and your Config.pm seem to have different ideas about the architecture they are running on.Perl thinks: [$pthinks]Config says: [$Config{archname}]This may or may not cause problems. Please check your installation of perl if you have problems building this extension.END        }    }    $self->init_others();    $self->init_platform();    $self->init_PERM();    my($argv) = neatvalue(\@ARGV);    $argv =~ s/^\[/(/;    $argv =~ s/\]$/)/;    push @{$self->{RESULT}}, <<END;# This Makefile is for the $self->{NAME} extension to perl.## It was generated automatically by MakeMaker version# $VERSION (Revision: $Revision) from the contents of# Makefile.PL. Don't edit this file, edit Makefile.PL instead.##       ANY CHANGES MADE HERE WILL BE LOST!##   MakeMaker ARGV: $argv##   MakeMaker Parameters:END    foreach my $key (sort keys %initial_att){        next if $key eq 'ARGS';        my($v) = neatvalue($initial_att{$key});        $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;        $v =~ tr/\n/ /s;        push @{$self->{RESULT}}, "#     $key => $v";    }    undef %initial_att;        # free memory    if (defined $self->{CONFIGURE}) {       push @{$self->{RESULT}}, <<END;#   MakeMaker 'CONFIGURE' Parameters:END        if (scalar(keys %configure_att) > 0) {            foreach my $key (sort keys %configure_att){               next if $key eq 'ARGS';               my($v) = neatvalue($configure_att{$key});               $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;               $v =~ tr/\n/ /s;               push @{$self->{RESULT}}, "#     $key => $v";            }        }        else        {           push @{$self->{RESULT}}, "# no values returned";        }        undef %configure_att;  # free memory    }    # turn the SKIP array into a SKIPHASH hash    my (%skip,$skip);    for $skip (@{$self->{SKIP} || []}) {        $self->{SKIPHASH}{$skip} = 1;    }    delete $self->{SKIP}; # free memory    if ($self->{PARENT}) {        for (qw/install dist dist_basics dist_core distdir dist_test dist_ci/) {            $self->{SKIPHASH}{$_} = 1;        }    }    # We run all the subdirectories now. They don't have much to query    # from the parent, but the parent has to query them: if they need linking!    unless ($self->{NORECURS}) {        $self->eval_in_subdirs if @{$self->{DIR}};    }    foreach my $section ( @MM_Sections ){        # Support for new foo_target() methods.        my $method = $section;        $method .= '_target' unless $self->can($method);        print "Processing Makefile '$section' section\n" if ($Verbose >= 2);        my($skipit) = $self->skipcheck($section);        if ($skipit){            push @{$self->{RESULT}}, "\n# --- MakeMaker $section section $skipit.";        } else {            my(%a) = %{$self->{$section} || {}};            push @{$self->{RESULT}}, "\n# --- MakeMaker $section section:";            push @{$self->{RESULT}}, "# " . join ", ", %a if $Verbose && %a;            push @{$self->{RESULT}}, $self->maketext_filter(                $self->$method( %a )            );        }    }    push @{$self->{RESULT}}, "\n# End.";    $self;}sub WriteEmptyMakefile {    Carp::croak "WriteEmptyMakefile: Need an even number of args" if @_ % 2;    my %att = @_;    my $self = MM->new(\%att);        my $new = $self->{MAKEFILE};    my $old = $self->{MAKEFILE_OLD};    if (-f $old) {        _unlink($old) or warn "unlink $old: $!";    }    if ( -f $new ) {        _rename($new, $old) or warn "rename $new => $old: $!"    }    open MF, '>'.$new or die "open $new for write: $!";    print MF <<'EOP';all :clean :install :makemakerdflt :test :EOP    close MF or die "close $new for write: $!";}sub check_manifest {    print STDOUT "Checking if your kit is complete...\n";    require ExtUtils::Manifest;    # avoid warning    $ExtUtils::Manifest::Quiet = $ExtUtils::Manifest::Quiet = 1;    my(@missed) = ExtUtils::Manifest::manicheck();    if (@missed) {        print STDOUT "Warning: the following files are missing in your kit:\n";        print "\t", join "\n\t", @missed;        print STDOUT "\n";        print STDOUT "Please inform the author.\n";    } else {        print STDOUT "Looks good\n";    }}sub parse_args{    my($self, @args) = @_;    foreach (@args) {        unless (m/(.*?)=(.*)/) {            ++$Verbose if m/^verb/;            next;        }        my($name, $value) = ($1, $2);        if ($value =~ m/^~(\w+)?/) { # tilde with optional username            $value =~ s [^~(\w*)]                [$1 ?                 ((getpwnam($1))[7] || "~$1") :                 (getpwuid($>))[7]                 ]ex;        }        # Remember the original args passed it.  It will be useful later.        $self->{ARGS}{uc $name} = $self->{uc $name} = $value;    }    # catch old-style 'potential_libs' and inform user how to 'upgrade'    if (defined $self->{potential_libs}){        my($msg)="'potential_libs' => '$self->{potential_libs}' should be";        if ($self->{potential_libs}){            print STDOUT "$msg changed to:\n\t'LIBS' => ['$self->{potential_libs}']\n";        } else {            print STDOUT "$msg deleted.\n";        }        $self->{LIBS} = [$self->{potential_libs}];        delete $self->{potential_libs};    }    # catch old-style 'ARMAYBE' and inform user how to 'upgrade'    if (defined $self->{ARMAYBE}){        my($armaybe) = $self->{ARMAYBE};        print STDOUT "ARMAYBE => '$armaybe' should be changed to:\n",                        "\t'dynamic_lib' => {ARMAYBE => '$armaybe'}\n";        my(%dl) = %{$self->{dynamic_lib} || {}};        $self->{dynamic_lib} = { %dl, ARMAYBE => $armaybe};        delete $self->{ARMAYBE};    }    if (defined $self->{LDTARGET}){        print STDOUT "LDTARGET should be changed to LDFROM\n";        $self->{LDFROM} = $self->{LDTARGET};        delete $self->{LDTARGET};    }    # Turn a DIR argument on the command line into an array    if (defined $self->{DIR} && ref \$self->{DIR} eq 'SCALAR') {        # So they can choose from the command line, which extensions they want        # the grep enables them to have some colons too much in case they        # have to build a list with the shell        $self->{DIR} = [grep $_, split ":", $self->{DIR}];    }    # Turn a INCLUDE_EXT argument on the command line into an array    if (defined $self->{INCLUDE_EXT} && ref \$self->{INCLUDE_EXT} eq 'SCALAR') {        $self->{INCLUDE_EXT} = [grep $_, split '\s+', $self->{INCLUDE_EXT}];    }    # Turn a EXCLUDE_EXT argument on the command line into an array    if (defined $self->{EXCLUDE_EXT} && ref \$self->{EXCLUDE_EXT} eq 'SCALAR') {        $self->{EXCLUDE_EXT} = [grep $_, split '\s+', $self->{EXCLUDE_EXT}];    }    foreach my $mmkey (sort keys %$self){        next if $mmkey eq 'ARGS';        print STDOUT "  $mmkey => ", neatvalue($self->{$mmkey}), "\n" if $Verbose;        print STDOUT "'$mmkey' is not a known MakeMaker parameter name.\n"            unless exists $Recognized_Att_Keys{$mmkey};    }    $| = 1 if $Verbose;}sub check_hints {    my($self) = @_;    # We allow extension-specific hints files.    require File::Spec;    my $curdir = File::Spec->curdir;    my $hint_dir = File::Spec->catdir($curdir, "hints");    return unless -d $hint_dir;    # First we look for the best hintsfile we have    my($hint)="${^O}_$Config{osvers}";    $hint =~ s/\./_/g;    $hint =~ s/_$//;    return unless $hint;    # Also try without trailing minor version numbers.    while (1) {        last if -f File::Spec->catfile($hint_dir, "$hint.pl");  # found    } continue {        last unless $hint =~ s/_[^_]*$//; # nothing to cut off    }    my $hint_file = File::Spec->catfile($hint_dir, "$hint.pl");    return unless -f $hint_file;    # really there    _run_hintfile($self, $hint_file);}sub _run_hintfile {    no strict 'vars';    local($self) = shift;       # make $self available to the hint file.    my($hint_file) = shift;    local($@, $!);    print STDERR "Processing hints file $hint_file\n";    # Just in case the ./ isn't on the hint file, which File::Spec can    # often strip off, we bung the curdir into @INC    local @INC = (File::Spec->curdir, @INC);    my $ret = do $hint_file;    if( !defined $ret ) {        my $error = $@ || $!;        print STDERR $error;    }}sub mv_all_methods {    my($from,$to) = @_;    no strict 'refs';    my($symtab) = \%{"${from}::"};    # Here you see the *current* list of methods that are overridable    # from Makefile.PL via MY:: subroutines. As of VERSION 5.07 I'm    # still trying to reduce the list to some reasonable minimum --    # because I want to make it easier for the user. A.K.    local $SIG{__WARN__} = sub {         # can't use 'no warnings redefined', 5.6 only        warn @_ unless $_[0] =~ /^Subroutine .* redefined/     };    foreach my $method (@Overridable) {        # We cannot say "next" here. Nick might call MY->makeaperl        # which isn't defined right now        # Above statement was written at 4.23 time when Tk-b8 was        # around. As Tk-b9 only builds with 5.002something and MM 5 is

⌨️ 快捷键说明

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