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

📄 windows.pm

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 PM
📖 第 1 页 / 共 2 页
字号:
  my @cmds; # Stores the series of commands needed to build the module.  push @cmds, [ grep {defined && length} (    $spec{ld}               ,    @{$spec{lddlflags}}     ,    @{$spec{libpath}}       ,    @{$spec{other_ldflags}} ,    @{$spec{startup}}       ,    @{$spec{objects}}       ,    $spec{map_file}         ,    $spec{libperl}          ,    @{$spec{perllibs}}      ,    $spec{def_file}         ,    $spec{implib}           ,    $spec{output}           ,  ) ];  # Embed the manifest file for VC 2005 (aka VC 8) or higher, but not for the 64-bit Platform SDK compiler  if ($cf->{ivsize} == 4 && $cf->{cc} eq 'cl' and $cf->{ccversion} =~ /^(\d+)/ and $1 >= 14) {    push @cmds, [      'mt', '-nologo', $spec{manifest}, '-outputresource:' . "$output;2"    ];  }  return @cmds;}sub write_linker_script {  my ($self, %spec) = @_;  my $script = File::Spec->catfile( $spec{srcdir},                                    $spec{basename} . '.lds' );  $self->add_to_cleanup($script);  print "Generating script '$script'\n" if !$self->{quiet};  open( SCRIPT, ">$script" )    or die( "Could not create script '$script': $!" );  print SCRIPT join( "\n",    map { ref $_ ? @{$_} : $_ }    grep defined,    delete(      @spec{ qw(lddlflags libpath other_ldflags                startup objects libperl perllibs                def_file implib map_file)            } )  );  close SCRIPT;  push @{$spec{lddlflags}}, '@"' . $script . '"';  return %spec;}1;########################################################################package ExtUtils::CBuilder::Platform::Windows::BCC;sub format_compiler_cmd {  my ($self, %spec) = @_;  foreach my $path ( @{ $spec{includes} || [] },                     @{ $spec{perlinc}  || [] } ) {    $path = '-I' . $path;  }  %spec = $self->write_compiler_script(%spec)    if $spec{use_scripts};  return [ grep {defined && length} (    $spec{cc}, '-c'         ,    @{$spec{includes}}      ,    @{$spec{cflags}}        ,    @{$spec{optimize}}      ,    @{$spec{defines}}       ,    @{$spec{perlinc}}       ,    "-o$spec{output}"       ,    $spec{source}           ,  ) ];}sub write_compiler_script {  my ($self, %spec) = @_;  my $script = File::Spec->catfile( $spec{srcdir},                                    $spec{basename} . '.ccs' );  $self->add_to_cleanup($script);  print "Generating script '$script'\n" if !$self->{quiet};  open( SCRIPT, ">$script" )    or die( "Could not create script '$script': $!" );  # XXX Borland "response files" seem to be unable to accept macro  # definitions containing quoted strings. Escaping strings with  # backslash doesn't work, and any level of quotes are stripped. The  # result is is a floating point number in the source file where a  # string is expected. So we leave the macros on the command line.  print SCRIPT join( "\n",    map { ref $_ ? @{$_} : $_ }    grep defined,    delete(      @spec{ qw(includes cflags optimize perlinc) } )  );  close SCRIPT;  push @{$spec{includes}}, '@"' . $script . '"';  return %spec;}sub format_linker_cmd {  my ($self, %spec) = @_;  foreach my $path ( @{$spec{libpath}} ) {    $path = "-L$path";  }  push( @{$spec{startup}}, 'c0d32.obj' )    unless ( $spec{starup} && @{$spec{startup}} );  %spec = $self->write_linker_script(%spec)    if $spec{use_scripts};  return [ grep {defined && length} (    $spec{ld}               ,    @{$spec{lddlflags}}     ,    @{$spec{libpath}}       ,    @{$spec{other_ldflags}} ,    @{$spec{startup}}       ,    @{$spec{objects}}       , ',',    $spec{output}           , ',',    $spec{map_file}         , ',',    $spec{libperl}          ,    @{$spec{perllibs}}      , ',',    $spec{def_file}  ) ];}sub write_linker_script {  my ($self, %spec) = @_;  # To work around Borlands "unique" commandline syntax,  # two scripts are used:  my $ld_script = File::Spec->catfile( $spec{srcdir},                                       $spec{basename} . '.lds' );  my $ld_libs   = File::Spec->catfile( $spec{srcdir},                                       $spec{basename} . '.lbs' );  $self->add_to_cleanup($ld_script, $ld_libs);  print "Generating scripts '$ld_script' and '$ld_libs'.\n" if !$self->{quiet};  # Script 1: contains options & names of object files.  open( LD_SCRIPT, ">$ld_script" )    or die( "Could not create linker script '$ld_script': $!" );  print LD_SCRIPT join( " +\n",    map { @{$_} }    grep defined,    delete(      @spec{ qw(lddlflags libpath other_ldflags startup objects) } )  );  close LD_SCRIPT;  # Script 2: contains name of libs to link against.  open( LD_LIBS, ">$ld_libs" )    or die( "Could not create linker script '$ld_libs': $!" );  print LD_LIBS join( " +\n",     (delete $spec{libperl}  || ''),    @{delete $spec{perllibs} || []},  );  close LD_LIBS;  push @{$spec{lddlflags}}, '@"' . $ld_script  . '"';  push @{$spec{perllibs}},  '@"' . $ld_libs    . '"';  return %spec;}1;########################################################################package ExtUtils::CBuilder::Platform::Windows::GCC;sub format_compiler_cmd {  my ($self, %spec) = @_;  foreach my $path ( @{ $spec{includes} || [] },                     @{ $spec{perlinc}  || [] } ) {    $path = '-I' . $path;  }  # split off any -arguments included in cc  my @cc = split / (?=-)/, $spec{cc};  return [ grep {defined && length} (    @cc, '-c'               ,    @{$spec{includes}}      ,    @{$spec{cflags}}        ,    @{$spec{optimize}}      ,    @{$spec{defines}}       ,    @{$spec{perlinc}}       ,    '-o', $spec{output}     ,    $spec{source}           ,  ) ];}sub format_linker_cmd {  my ($self, %spec) = @_;  # The Config.pm variable 'libperl' is hardcoded to the full name  # of the perl import library (i.e. 'libperl56.a'). GCC will not  # find it unless the 'lib' prefix & the extension are stripped.  $spec{libperl} =~ s/^(?:lib)?([^.]+).*$/-l$1/;  unshift( @{$spec{other_ldflags}}, '-nostartfiles' )    if ( $spec{startup} && @{$spec{startup}} );  # From ExtUtils::MM_Win32:  #  ## one thing for GCC/Mingw32:  ## we try to overcome non-relocateable-DLL problems by generating  ##    a (hopefully unique) image-base from the dll's name  ## -- BKS, 10-19-1999  File::Basename::basename( $spec{output} ) =~ /(....)(.{0,4})/;  $spec{image_base} = sprintf( "0x%x0000", unpack('n', $1 ^ $2) );  %spec = $self->write_linker_script(%spec)    if $spec{use_scripts};  foreach my $path ( @{$spec{libpath}} ) {    $path = "-L$path";  }  my @cmds; # Stores the series of commands needed to build the module.  push @cmds, [    'dlltool', '--def'        , $spec{def_file},               '--output-exp' , $spec{explib}  ];  # split off any -arguments included in ld  my @ld = split / (?=-)/, $spec{ld};  push @cmds, [ grep {defined && length} (    @ld                       ,    '-o', $spec{output}       ,    "-Wl,--base-file,$spec{base_file}"   ,    "-Wl,--image-base,$spec{image_base}" ,    @{$spec{lddlflags}}       ,    @{$spec{libpath}}         ,    @{$spec{startup}}         ,    @{$spec{objects}}         ,    @{$spec{other_ldflags}}   ,    $spec{libperl}            ,    @{$spec{perllibs}}        ,    $spec{explib}             ,    $spec{map_file} ? ('-Map', $spec{map_file}) : ''  ) ];  push @cmds, [    'dlltool', '--def'        , $spec{def_file},               '--output-exp' , $spec{explib},               '--base-file'  , $spec{base_file}  ];  push @cmds, [ grep {defined && length} (    @ld                       ,    '-o', $spec{output}       ,    "-Wl,--image-base,$spec{image_base}" ,    @{$spec{lddlflags}}       ,    @{$spec{libpath}}         ,    @{$spec{startup}}         ,    @{$spec{objects}}         ,    @{$spec{other_ldflags}}   ,    $spec{libperl}            ,    @{$spec{perllibs}}        ,    $spec{explib}             ,    $spec{map_file} ? ('-Map', $spec{map_file}) : ''  ) ];  return @cmds;}sub write_linker_script {  my ($self, %spec) = @_;  my $script = File::Spec->catfile( $spec{srcdir},                                    $spec{basename} . '.lds' );  $self->add_to_cleanup($script);  print "Generating script '$script'\n" if !$self->{quiet};  open( SCRIPT, ">$script" )    or die( "Could not create script '$script': $!" );  print( SCRIPT 'SEARCH_DIR(' . $_ . ")\n" )    for @{delete $spec{libpath} || []};  # gcc takes only one startup file, so the first object in startup is  # specified as the startup file and any others are shifted into the  # beginning of the list of objects.  if ( $spec{startup} && @{$spec{startup}} ) {    print SCRIPT 'STARTUP(' . shift( @{$spec{startup}} ) . ")\n";    unshift @{$spec{objects}},      @{delete $spec{startup} || []};  }  print SCRIPT 'INPUT(' . join( ',',    @{delete $spec{objects}  || []}  ) . ")\n";  print SCRIPT 'INPUT(' . join( ' ',     (delete $spec{libperl}  || ''),    @{delete $spec{perllibs} || []},  ) . ")\n";  close SCRIPT;  push @{$spec{other_ldflags}}, '"' . $script . '"';  return %spec;}1;__END__=head1 NAMEExtUtils::CBuilder::Platform::Windows - Builder class for Windows platforms=head1 DESCRIPTIONThis module implements the Windows-specific parts of ExtUtils::CBuilder.Most of the Windows-specific stuff has to do with compiling andlinking C code.  Currently we support the 3 compilers perl itselfsupports: MSVC, BCC, and GCC.This module inherits from C<ExtUtils::CBuilder::Base>, so any functionalitynot implemented here will be implemented there.  The interfaces aredefined by the L<ExtUtils::CBuilder> documentation.=head1 AUTHORKen Williams <ken@mathforum.org>Most of the code here was written by Randy W. Sims <RandyS@ThePierianSpring.org>.=head1 SEE ALSOperl(1), ExtUtils::CBuilder(3), ExtUtils::MakeMaker(3)=cut

⌨️ 快捷键说明

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