dougm       01/03/04 19:55:56

  Added:       util     xs_check.pl
  Log:
  script to check if things are lined up properly, whats missing, what doesnt exist, 
etc.
  
  Revision  Changes    Path
  1.1                  modperl-2.0/util/xs_check.pl
  
  Index: xs_check.pl
  ===================================================================
  use lib qw(lib);
  
  use strict;
  use warnings qw(FATAL all);
  
  use ModPerl::TypeMap ();
  use ModPerl::FunctionMap ();
  use ModPerl::StructureMap ();
  use ModPerl::WrapXS ();
  use ModPerl::MapUtil qw(disabled_reason);
  
  my %check = (
      types      => ModPerl::TypeMap->new,
      functions  => ModPerl::FunctionMap->new,
      structures => ModPerl::StructureMap->new,
  );
  
  my %missing;
  while (my($things, $obj) = each %check) {
      $missing{$things} = $obj->check;
      if (my $missing = $missing{$things}) {
          my $n = @$missing;
          print "$n $things are not mapped:\n";
          print "--> $_\n" for @$missing;
      }
      else {
          print "all $things are mapped\n";
      }
  }
  
  my %check_exists = (
      functions => $check{functions},
      structure_members => $check{structures},
      types => $check{types},
  );
  
  while (my($things, $obj) = each %check_exists) {
      if (my $missing = $obj->check_exists) {
          my $n = @$missing;
          print "$n mapped $things do not exist:\n";
          print "--> $_\n" for @$missing;
      }
      else {
          print "all mapped $things exist\n";
      }
  }
  
  my %unmapped = map { $_,1 } @{ $missing{functions} } if $missing{functions};
  my $typemap = $check{types};
  my $function_map = $check{functions};
  my @missing;
  
  for my $entry (@$Apache::FunctionTable) {
      my $func;
      my $name = $entry->{name};
      next if $unmapped{$name};
      next unless $function_map->{map}->{$name};
      next if $func = $typemap->map_function($entry);
      push @missing, $name;
  }
  
  if (@missing) {
      my $n = @missing;
      print "unable to glue $n mapped functions:\n";
      print "--> $_\n" for @missing;
  }
  else {
      print "all mapped functions are glued\n";
  }
  
  my $stats = ModPerl::WrapXS->new->stats;
  my($total_modules, $total_xsubs);
  
  while (my($module, $n) = each %$stats) {
      $total_modules++;
      $total_xsubs += $n;
  }
  
  print "$total_modules total modules, ",
            "$total_xsubs total xsubs\n";
  
  while (my($module, $n) = each %$stats) {
      print "$module: $n\n";
  }
  
  for (qw(functions structure_members)) {
      my $disabled = $check_exists{$_}->disabled;
      my $total = 0;
      for my $names (values %$disabled) {
          $total += @$names;
      }
      print "$total $_ are not wrapped:\n";
      while (my($r, $names) = each %$disabled) {
          printf "%4d are %s\n", scalar @$names, disabled_reason($r);
      }
  }
  
  if (@ARGV) {
      my $key = '!';
      for (qw(functions structure_members)) {
          my $disabled = $check_exists{$_}->disabled;
          my $names = $disabled->{$key};
          printf "%s $_:\n", disabled_reason($key);
          for my $name (sort @$names) {
              print "   $name\n";
          }
      }
  }
  
  
  

Reply via email to