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

📄 mm_vms.pm

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 PM
📖 第 1 页 / 共 4 页
字号:
    # Redirection on VMS goes before the command, not after as on Unix.    # $(DEV_NULL) is used once and its not worth going nuts over making    # it work.  However, Unix's DEV_NULL is quite wrong for VMS.    $self->{DEV_NULL}   = '';    if ($self->{OBJECT} =~ /\s/) {        $self->{OBJECT} =~ s/(\\)?\n+\s+/ /g;        $self->{OBJECT} = $self->wraplist(            map $self->fixpath($_,0), split /,?\s+/, $self->{OBJECT}        );    }    $self->{LDFROM} = $self->wraplist(        map $self->fixpath($_,0), split /,?\s+/, $self->{LDFROM}    );}=item init_platform (override)Add PERL_VMS, MM_VMS_REVISION and MM_VMS_VERSION.MM_VMS_REVISION is for backwards compatibility before MM_VMS had a$VERSION.=cutsub init_platform {    my($self) = shift;    $self->{MM_VMS_REVISION} = $Revision;    $self->{MM_VMS_VERSION}  = $VERSION;    $self->{PERL_VMS} = $self->catdir($self->{PERL_SRC}, 'VMS')      if $self->{PERL_SRC};}=item platform_constants=cutsub platform_constants {    my($self) = shift;    my $make_frag = '';    foreach my $macro (qw(PERL_VMS MM_VMS_REVISION MM_VMS_VERSION))    {        next unless defined $self->{$macro};        $make_frag .= "$macro = $self->{$macro}\n";    }    return $make_frag;}=item init_VERSION (override)Override the *DEFINE_VERSION macros with VMS semantics.  Translate theMAKEMAKER filepath to VMS style.=cutsub init_VERSION {    my $self = shift;    $self->SUPER::init_VERSION;    $self->{DEFINE_VERSION}    = '"$(VERSION_MACRO)=""$(VERSION)"""';    $self->{XS_DEFINE_VERSION} = '"$(XS_VERSION_MACRO)=""$(XS_VERSION)"""';    $self->{MAKEMAKER} = vmsify($INC{'ExtUtils/MakeMaker.pm'});}=item constants (override)Fixes up numerous file and directory macros to insure VMS syntaxregardless of input syntax.  Also makes lists of filescomma-separated.=cutsub constants {    my($self) = @_;    # Be kind about case for pollution    for (@ARGV) { $_ = uc($_) if /POLLUTE/i; }    # Cleanup paths for directories in MMS macros.    foreach my $macro ( qw [            INST_BIN INST_SCRIPT INST_LIB INST_ARCHLIB             PERL_LIB PERL_ARCHLIB            PERL_INC PERL_SRC ],                        (map { 'INSTALL'.$_ } $self->installvars)                      )     {        next unless defined $self->{$macro};        next if $macro =~ /MAN/ && $self->{$macro} eq 'none';        $self->{$macro} = $self->fixpath($self->{$macro},1);    }    # Cleanup paths for files in MMS macros.    foreach my $macro ( qw[LIBPERL_A FIRST_MAKEFILE MAKEFILE_OLD                            MAKE_APERL_FILE MYEXTLIB] )     {        next unless defined $self->{$macro};        $self->{$macro} = $self->fixpath($self->{$macro},0);    }    # Fixup files for MMS macros    # XXX is this list complete?    for my $macro (qw/                   FULLEXT VERSION_FROM OBJECT LDFROM	      /	) {        next unless defined $self->{$macro};        $self->{$macro} = $self->fixpath($self->{$macro},0);    }    for my $macro (qw/ XS MAN1PODS MAN3PODS PM /) {        # Where is the space coming from? --jhi        next unless $self ne " " && defined $self->{$macro};        my %tmp = ();        for my $key (keys %{$self->{$macro}}) {            $tmp{$self->fixpath($key,0)} =                                      $self->fixpath($self->{$macro}{$key},0);        }        $self->{$macro} = \%tmp;    }    for my $macro (qw/ C O_FILES H /) {        next unless defined $self->{$macro};        my @tmp = ();        for my $val (@{$self->{$macro}}) {            push(@tmp,$self->fixpath($val,0));        }        $self->{$macro} = \@tmp;    }    # mms/k does not define a $(MAKE) macro.    $self->{MAKE} = '$(MMS)$(MMSQUALIFIERS)';    return $self->SUPER::constants;}=item special_targetsClear the default .SUFFIXES and put in our own list.=cutsub special_targets {    my $self = shift;    my $make_frag .= <<'MAKE_FRAG';.SUFFIXES :.SUFFIXES : $(OBJ_EXT) .c .cpp .cxx .xsMAKE_FRAG    return $make_frag;}=item cflags (override)Bypass shell script and produce qualifiers for CC directly (but warnuser if a shell script for this extension exists).  Fold multiple/Defines into one, since some C compilers pay attention to only oneinstance of this qualifier on the command line.=cutsub cflags {    my($self,$libperl) = @_;    my($quals) = $self->{CCFLAGS} || $Config{'ccflags'};    my($definestr,$undefstr,$flagoptstr) = ('','','');    my($incstr) = '/Include=($(PERL_INC)';    my($name,$sys,@m);    ( $name = $self->{NAME} . "_cflags" ) =~ s/:/_/g ;    print STDOUT "Unix shell script ".$Config{"$self->{'BASEEXT'}_cflags"}.         " required to modify CC command for $self->{'BASEEXT'}\n"    if ($Config{$name});    if ($quals =~ / -[DIUOg]/) {	while ($quals =~ / -([Og])(\d*)\b/) {	    my($type,$lvl) = ($1,$2);	    $quals =~ s/ -$type$lvl\b\s*//;	    if ($type eq 'g') { $flagoptstr = '/NoOptimize'; }	    else { $flagoptstr = '/Optimize' . (defined($lvl) ? "=$lvl" : ''); }	}	while ($quals =~ / -([DIU])(\S+)/) {	    my($type,$def) = ($1,$2);	    $quals =~ s/ -$type$def\s*//;	    $def =~ s/"/""/g;	    if    ($type eq 'D') { $definestr .= qq["$def",]; }	    elsif ($type eq 'I') { $incstr .= ',' . $self->fixpath($def,1); }	    else                 { $undefstr  .= qq["$def",]; }	}    }    if (length $quals and $quals !~ m!/!) {	warn "MM_VMS: Ignoring unrecognized CCFLAGS elements \"$quals\"\n";	$quals = '';    }    $definestr .= q["PERL_POLLUTE",] if $self->{POLLUTE};    if (length $definestr) { chop($definestr); $quals .= "/Define=($definestr)"; }    if (length $undefstr)  { chop($undefstr);  $quals .= "/Undef=($undefstr)";   }    # Deal with $self->{DEFINE} here since some C compilers pay attention    # to only one /Define clause on command line, so we have to    # conflate the ones from $Config{'ccflags'} and $self->{DEFINE}    # ($self->{DEFINE} has already been VMSified in constants() above)    if ($self->{DEFINE}) { $quals .= $self->{DEFINE}; }    for my $type (qw(Def Undef)) {	my(@terms);	while ($quals =~ m:/${type}i?n?e?=([^/]+):ig) {		my $term = $1;		$term =~ s:^\((.+)\)$:$1:;		push @terms, $term;	    }	if ($type eq 'Def') {	    push @terms, qw[ $(DEFINE_VERSION) $(XS_DEFINE_VERSION) ];	}	if (@terms) {	    $quals =~ s:/${type}i?n?e?=[^/]+::ig;	    $quals .= "/${type}ine=(" . join(',',@terms) . ')';	}    }    $libperl or $libperl = $self->{LIBPERL_A} || "libperl.olb";    # Likewise with $self->{INC} and /Include    if ($self->{'INC'}) {	my(@includes) = split(/\s+/,$self->{INC});	foreach (@includes) {	    s/^-I//;	    $incstr .= ','.$self->fixpath($_,1);	}    }    $quals .= "$incstr)";#    $quals =~ s/,,/,/g; $quals =~ s/\(,/(/g;    $self->{CCFLAGS} = $quals;    $self->{PERLTYPE} ||= '';    $self->{OPTIMIZE} ||= $flagoptstr || $Config{'optimize'};    if ($self->{OPTIMIZE} !~ m!/!) {	if    ($self->{OPTIMIZE} =~ m!-g!) { $self->{OPTIMIZE} = '/Debug/NoOptimize' }	elsif ($self->{OPTIMIZE} =~ /-O(\d*)/) {	    $self->{OPTIMIZE} = '/Optimize' . (defined($1) ? "=$1" : '');	}	else {	    warn "MM_VMS: Can't parse OPTIMIZE \"$self->{OPTIMIZE}\"; using default\n" if length $self->{OPTIMIZE};	    $self->{OPTIMIZE} = '/Optimize';	}    }    return $self->{CFLAGS} = qq{CCFLAGS = $self->{CCFLAGS}OPTIMIZE = $self->{OPTIMIZE}PERLTYPE = $self->{PERLTYPE}};}=item const_cccmd (override)Adds directives to point C preprocessor to the right place whenhandling #include E<lt>sys/foo.hE<gt> directives.  Also constructs CCcommand line a bit differently than MM_Unix method.=cutsub const_cccmd {    my($self,$libperl) = @_;    my(@m);    return $self->{CONST_CCCMD} if $self->{CONST_CCCMD};    return '' unless $self->needs_linking();    if ($Config{'vms_cc_type'} eq 'gcc') {        push @m,'.FIRST	',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" Then Define/NoLog SYS GNU_CC_Include:[VMS]';    }    elsif ($Config{'vms_cc_type'} eq 'vaxc') {        push @m,'.FIRST	',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("VAXC$Include").eqs."" Then Define/NoLog SYS Sys$Library	',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("VAXC$Include").nes."" Then Define/NoLog SYS VAXC$Include';    }    else {        push @m,'.FIRST	',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("DECC$System_Include").eqs."" Then Define/NoLog SYS ',		($Config{'archname'} eq 'VMS_AXP' ? 'Sys$Library' : 'DECC$Library_Include'),'	',$self->{NOECHO},'If F$TrnLnm("Sys").eqs."" .and. F$TrnLnm("DECC$System_Include").nes."" Then Define/NoLog SYS DECC$System_Include';    }    push(@m, "\n\nCCCMD = $Config{'cc'} \$(CCFLAGS)\$(OPTIMIZE)\n");    $self->{CONST_CCCMD} = join('',@m);}=item tools_other (override)Throw in some dubious extra macros for Makefile args.Also keep around the old $(SAY) macro in case somebody's using it.=cutsub tools_other {    my($self) = @_;    # XXX Are these necessary?  Does anyone override them?  They're longer    # than just typing the literal string.    my $extra_tools = <<'EXTRA_TOOLS';# Just in case anyone is using the old macro.USEMACROS = $(MACROSTART)SAY = $(ECHO)EXTRA_TOOLS    return $self->SUPER::tools_other . $extra_tools;}=item init_dist (override)VMSish defaults for some values.  macro         description                     default  ZIPFLAGS      flags to pass to ZIP            -Vu  COMPRESS      compression command to          gzip                use for tarfiles  SUFFIX        suffix to put on                -gz                 compressed files  SHAR          shar command to use             vms_share  DIST_DEFAULT  default target to use to        tardist                create a distribution  DISTVNAME     Use VERSION_SYM instead of      $(DISTNAME)-$(VERSION_SYM)                VERSION for the name=cutsub init_dist {    my($self) = @_;    $self->{ZIPFLAGS}     ||= '-Vu';    $self->{COMPRESS}     ||= 'gzip';    $self->{SUFFIX}       ||= '-gz';    $self->{SHAR}         ||= 'vms_share';    $self->{DIST_DEFAULT} ||= 'zipdist';    $self->SUPER::init_dist;    $self->{DISTVNAME}    = "$self->{DISTNAME}-$self->{VERSION_SYM}";}=item c_o (override)Use VMS syntax on command line.  In particular, $(DEFINE) and$(PERL_INC) have been pulled into $(CCCMD).  Also use MM[SK] macros.=cutsub c_o {    my($self) = @_;    return '' unless $self->needs_linking();    '.c$(OBJ_EXT) :	$(CCCMD) $(CCCDLFLAGS) $(MMS$TARGET_NAME).c.cpp$(OBJ_EXT) :	$(CCCMD) $(CCCDLFLAGS) $(MMS$TARGET_NAME).cpp.cxx$(OBJ_EXT) :	$(CCCMD) $(CCCDLFLAGS) $(MMS$TARGET_NAME).cxx';}=item xs_c (override)Use MM[SK] macros.=cutsub xs_c {    my($self) = @_;    return '' unless $self->needs_linking();    '.xs.c :	$(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $(MMS$TARGET_NAME).xs >$(MMS$TARGET)';}=item xs_o (override)Use MM[SK] macros, and VMS command line for C compiler.=cutsub xs_o {	# many makes are too dumb to use xs_c then c_o    my($self) = @_;    return '' unless $self->needs_linking();    '.xs$(OBJ_EXT) :	$(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $(MMS$TARGET_NAME).xs >$(MMS$TARGET_NAME).c	$(CCCMD) $(CCCDLFLAGS) $(MMS$TARGET_NAME).c';}=item dlsyms (override)Create VMS linker options files specifying universal symbols for thisextension's shareable image, and listing other shareable images or libraries to which it should be linked.=cutsub dlsyms {    my($self,%attribs) = @_;    return '' unless $self->needs_linking();    my($funcs) = $attribs{DL_FUNCS} || $self->{DL_FUNCS} || {};    my($vars)  = $attribs{DL_VARS}  || $self->{DL_VARS}  || [];    my($funclist)  = $attribs{FUNCLIST}  || $self->{FUNCLIST}  || [];    my(@m);    unless ($self->{SKIPHASH}{'dynamic'}) {	push(@m,'dynamic :: $(INST_ARCHAUTODIR)$(BASEEXT).opt	$(NOECHO) $(NOOP)');    }    push(@m,'static :: $(INST_ARCHAUTODIR)$(BASEEXT).opt	$(NOECHO) $(NOOP)') unless $self->{SKIPHASH}{'static'};    push @m,'$(INST_ARCHAUTODIR)$(BASEEXT).opt : $(BASEEXT).opt	$(CP) $(MMS$SOURCE) $(MMS$TARGET)$(BASEEXT).opt : Makefile.PL	$(PERLRUN) -e "use ExtUtils::Mksymlists;" -	',qq[-e "Mksymlists('NAME' => '$self->{NAME}', 'DL_FUNCS' => ],	neatvalue($funcs),q[, 'DL_VARS' => ],neatvalue($vars),	q[, 'FUNCLIST' => ],neatvalue($funclist),qq[)"\n];    push @m, '	$(PERL) -e "print ""$(INST_STATIC)/Include=';    if ($self->{OBJECT} =~ /\bBASEEXT\b/ or        $self->{OBJECT} =~ /\b$self->{BASEEXT}\b/i) {         push @m, ($Config{d_vms_case_sensitive_symbols}	           ? uc($self->{BASEEXT}) :'$(BASEEXT)');    }    else {  # We don't have a "main" object file, so pull 'em all in       # Upcase module names if linker is being case-sensitive       my($upcase) = $Config{d_vms_case_sensitive_symbols};	my(@omods) = map { s/\.[^.]*$//;         # Trim off file type	                   s[\$\(\w+_EXT\)][];   # even as a macro	                   s/.*[:>\/\]]//;       # Trim off dir spec			   $upcase ? uc($_) : $_;	                 } split ' ', $self->eliminate_macros($self->{OBJECT});        my($tmp,@lines,$elt) = '';	$tmp = shift @omods;	foreach $elt (@omods) {	    $tmp .= ",$elt";		if (length($tmp) > 80) { push @lines, $tmp;  $tmp = ''; }	}	push @lines, $tmp;	push @m, '(', join( qq[, -\\n\\t"";" >>\$(MMS\$TARGET)\n\t\$(PERL) -e "print ""], @lines),')';    }	push @m, '\n$(INST_STATIC)/Library\n"";" >>$(MMS$TARGET)',"\n";    if (length $self->{LDLOADLIBS}) {	my($lib); my($line) = '';	foreach $lib (split ' ', $self->{LDLOADLIBS}) {	    $lib =~ s%\$%\\\$%g;  # Escape '$' in VMS filespecs	    if (length($line) + length($lib) > 160) {		push @m, "\t\$(PERL) -e \"print qq{$line}\" >>\$(MMS\$TARGET)\n";		$line = $lib . '\n';	    }

⌨️ 快捷键说明

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