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

📄 ppphbin

📁 source of perl for linux application,
💻
📖 第 1 页 / 共 2 页
字号:
      }      else {        diag("Uses $func");      }    }    $warnings += hint($func);  }  unless ($opt{quiet}) {    for $func (sort keys %{$file{uses_todo}}) {      print "*** WARNING: Uses $func, which may not be portable below perl ",            format_version($API{$func}{todo}), ", even with '$ppport'\n";      $warnings++;    }  }  for $func (sort keys %{$file{needed_static}}) {    my $message = '';    if (not exists $file{uses}{$func}) {      $message = "No need to define NEED_$func if $func is never used";    }    elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {      $message = "No need to define NEED_$func when already needed globally";    }    if ($message) {      diag($message);      $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);    }  }  for $func (sort keys %{$file{needed_global}}) {    my $message = '';    if (not exists $global{uses}{$func}) {      $message = "No need to define NEED_${func}_GLOBAL if $func is never used";    }    elsif (exists $file{needs}{$func}) {      if ($file{needs}{$func} eq 'extern') {        $message = "No need to define NEED_${func}_GLOBAL when already needed globally";      }      elsif ($file{needs}{$func} eq 'static') {        $message = "No need to define NEED_${func}_GLOBAL when only used in this file";      }    }    if ($message) {      diag($message);      $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);    }  }  $file{needs_inc_ppport} = keys %{$file{uses}};  if ($file{needs_inc_ppport}) {    my $pp = '';    for $func (sort keys %{$file{needs}}) {      my $type = $file{needs}{$func};      next if $type eq 'extern';      my $suffix = $type eq 'global' ? '_GLOBAL' : '';      unless (exists $file{"needed_$type"}{$func}) {        if ($type eq 'global') {          diag("Files [@{$global{needs}{$func}}] need $func, adding global request");        }        else {          diag("File needs $func, adding static request");        }        $pp .= "#define NEED_$func$suffix\n";      }    }    if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {      $pp = '';      $file{changes}++;    }    unless ($file{has_inc_ppport}) {      diag("Needs to include '$ppport'");      $pp .= qq(#include "$ppport"\n)    }    if ($pp) {      $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)                     || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)                     || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)                     || ($c =~ s/^/$pp/);    }  }  else {    if ($file{has_inc_ppport}) {      diag("No need to include '$ppport'");      $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);    }  }  # put back in our C comments  my $ix;  my $cppc = 0;  my @ccom = @{$file{ccom}};  for $ix (0 .. $#ccom) {    if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {      $cppc++;      $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;    }    else {      $c =~ s/$rccs$ix$rcce/$ccom[$ix]/;    }  }  if ($cppc) {    my $s = $cppc != 1 ? 's' : '';    warning("Uses $cppc C++ style comment$s, which is not portable");  }  my $s = $warnings != 1 ? 's' : '';  my $warn = $warnings ? " ($warnings warning$s)" : '';  info("Analysis completed$warn");  if ($file{changes}) {    if (exists $opt{copy}) {      my $newfile = "$filename$opt{copy}";      if (-e $newfile) {        error("'$newfile' already exists, refusing to write copy of '$filename'");      }      else {        local *F;        if (open F, ">$newfile") {          info("Writing copy of '$filename' with changes to '$newfile'");          print F $c;          close F;        }        else {          error("Cannot open '$newfile' for writing: $!");        }      }    }    elsif (exists $opt{patch} || $opt{changes}) {      if (exists $opt{patch}) {        unless ($patch_opened) {          if (open PATCH, ">$opt{patch}") {            $patch_opened = 1;          }          else {            error("Cannot open '$opt{patch}' for writing: $!");            delete $opt{patch};            $opt{changes} = 1;            goto fallback;          }        }        mydiff(\*PATCH, $filename, $c);      }      else {fallback:        info("Suggested changes:");        mydiff(\*STDOUT, $filename, $c);      }    }    else {      my $s = $file{changes} == 1 ? '' : 's';      info("$file{changes} potentially required change$s detected");    }  }  else {    info("Looks good");  }}close PATCH if $patch_opened;exit 0;#######################################################################sub try_use { eval "use @_;"; return $@ eq '' }sub mydiff{  local *F = shift;  my($file, $str) = @_;  my $diff;  if (exists $opt{diff}) {    $diff = run_diff($opt{diff}, $file, $str);  }  if (!defined $diff and try_use('Text::Diff')) {    $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });    $diff = <<HEADER . $diff;--- $file+++ $file.patchedHEADER  }  if (!defined $diff) {    $diff = run_diff('diff -u', $file, $str);  }  if (!defined $diff) {    $diff = run_diff('diff', $file, $str);  }  if (!defined $diff) {    error("Cannot generate a diff. Please install Text::Diff or use --copy.");    return;  }  print F $diff;}sub run_diff{  my($prog, $file, $str) = @_;  my $tmp = 'dppptemp';  my $suf = 'aaa';  my $diff = '';  local *F;  while (-e "$tmp.$suf") { $suf++ }  $tmp = "$tmp.$suf";  if (open F, ">$tmp") {    print F $str;    close F;    if (open F, "$prog $file $tmp |") {      while (<F>) {        s/\Q$tmp\E/$file.patched/;        $diff .= $_;      }      close F;      unlink $tmp;      return $diff;    }    unlink $tmp;  }  else {    error("Cannot open '$tmp' for writing: $!");  }  return undef;}sub rec_depend{  my($func, $seen) = @_;  return () unless exists $depends{$func};  $seen = {%{$seen||{}}};  return () if $seen->{$func}++;  my %s;  grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};}sub parse_version{  my $ver = shift;  if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {    return ($1, $2, $3);  }  elsif ($ver !~ /^\d+\.[\d_]+$/) {    die "cannot parse version '$ver'\n";  }  $ver =~ s/_//g;  $ver =~ s/$/000000/;  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;  $v = int $v;  $s = int $s;  if ($r < 5 || ($r == 5 && $v < 6)) {    if ($s % 10) {      die "cannot parse version '$ver'\n";    }  }  return ($r, $v, $s);}sub format_version{  my $ver = shift;  $ver =~ s/$/000000/;  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;  $v = int $v;  $s = int $s;  if ($r < 5 || ($r == 5 && $v < 6)) {    if ($s % 10) {      die "invalid version '$ver'\n";    }    $s /= 10;    $ver = sprintf "%d.%03d", $r, $v;    $s > 0 and $ver .= sprintf "_%02d", $s;    return $ver;  }  return sprintf "%d.%d.%d", $r, $v, $s;}sub info{  $opt{quiet} and return;  print @_, "\n";}sub diag{  $opt{quiet} and return;  $opt{diag} and print @_, "\n";}sub warning{  $opt{quiet} and return;  print "*** ", @_, "\n";}sub error{  print "*** ERROR: ", @_, "\n";}my %given_hints;my %given_warnings;sub hint{  $opt{quiet} and return;  my $func = shift;  my $rv = 0;  if (exists $warnings{$func} && !$given_warnings{$func}++) {    my $warn = $warnings{$func};    $warn =~ s!^!*** !mg;    print "*** WARNING: $func\n", $warn;    $rv++;  }  if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) {    my $hint = $hints{$func};    $hint =~ s/^/   /mg;    print "   --- hint for $func ---\n", $hint;  }  $rv;}sub usage{  my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;  my %M = ( 'I' => '*' );  $usage =~ s/^\s*perl\s+\S+/$^X $0/;  $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;  print <<ENDUSAGE;Usage: $usageSee perldoc $0 for details.ENDUSAGE  exit 2;}sub strip{  my $self = do { local(@ARGV,$/)=($0); <> };  my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms;  $copy =~ s/^(?=\S+)/    /gms;  $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms;  $self =~ s/^SKIP.*(?=^__DATA__)/SKIPif (\@ARGV && \$ARGV[0] eq '--unstrip') {  eval { require Devel::PPPort };  \$@ and die "Cannot require Devel::PPPort, please install.\\n";  if (\$Devel::PPPort::VERSION < $VERSION) {    die "$0 was originally generated with Devel::PPPort $VERSION.\\n"      . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n"      . "Please install a newer version, or --unstrip will not work.\\n";  }  Devel::PPPort::WriteFile(\$0);  exit 0;}print <<END;Sorry, but this is a stripped version of \$0.To be able to use its original script and doc functionality,please try to regenerate this file using:  \$^X \$0 --unstripEND/ms;  my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms;  $c =~ s{    / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)  | ( "[^"\\]*(?:\\.[^"\\]*)*"    | '[^'\\]*(?:\\.[^'\\]*)*' )  | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex;  $c =~ s!\s+$!!mg;  $c =~ s!^$LF!!mg;  $c =~ s!^\s*#\s*!#!mg;  $c =~ s!^\s+!!mg;  open OUT, ">$0" or die "cannot strip $0: $!\n";  print OUT "$pl$c\n";  exit 0;}

⌨️ 快捷键说明

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