stas        2004/04/13 20:39:31

  Modified:    lib/Apache ParseSource.pm
  Log:
  - tweaks to make the source scanner happy
  - now using a local fork of C::Scan (ModPerl::CScan)
  
  Revision  Changes    Path
  1.49      +26 -10    modperl-2.0/lib/Apache/ParseSource.pm
  
  Index: ParseSource.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/lib/Apache/ParseSource.pm,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -u -r1.48 -r1.49
  --- ParseSource.pm    4 Mar 2004 06:01:05 -0000       1.48
  +++ ParseSource.pm    14 Apr 2004 03:39:31 -0000      1.49
  @@ -17,6 +17,8 @@
   use strict;
   use Apache::Build ();
   use Config;
  +use File::Basename;
  +use File::Spec::Functions qw(catdir);
   
   our $VERSION = '0.02';
   
  @@ -56,7 +58,7 @@
   {
       package Apache::ParseSource::Scan;
   
  -    our @ISA = qw(C::Scan);
  +    our @ISA = qw(ModPerl::CScan);
   
       sub get {
           local $SIG{__DIE__} = \&Carp::confess;
  @@ -68,20 +70,31 @@
       'CORE_PRIVATE',   #so we get all of apache
       'MP_SOURCE_SCAN', #so we can avoid some c-scan barfing
       '_NETINET_TCP_H', #c-scan chokes on netinet/tcp.h
  -    'APR_OPTIONAL_H', #c-scan chokes on apr_optional.h
  + #   'APR_OPTIONAL_H', #c-scan chokes on apr_optional.h
       'apr_table_do_callback_fn_t=void', #c-scan chokes on function pointers
   );
   
  +
  +# some types c-scan failing to resolve
  +push @c_scan_defines, map { "$_=void" } 
  +    qw(PPADDR_t PerlExitListEntry modperl_tipool_vtbl_t);
  +
   sub scan {
  -    require C::Scan;
  -    C::Scan->VERSION(0.75);
  +    require ModPerl::CScan;
  +    ModPerl::CScan->VERSION(0.75);
       require Carp;
   
       my $self = shift;
   
  -    my $c = C::Scan->new(filename => $self->{scan_filename});
  +    my $c = ModPerl::CScan->new(filename => $self->{scan_filename});
  +
  +    my $includes = $self->includes;
  +
  +    # where to find perl headers, but we don't want to parse them otherwise
  +    my $perl_core_path = catdir $Config{installarchlib}, "CORE";
  +    push @$includes, $perl_core_path;
   
  -    $c->set(includeDirs => $self->includes);
  +    $c->set(includeDirs => $includes);
   
       my @defines = @c_scan_defines;
   
  @@ -149,11 +162,14 @@
       my $includes = $self->find_includes;
   
       my $filename = '.apache_includes';
  -
       open my $fh, '>', $filename or die "can't open $filename: $!";
  -    for (@$includes) {
  -        print $fh qq(\#include "$_"\n);
  +
  +    for my $path (@$includes) {
  +        my $filename = basename $path;
  +        next if $filename =~ /^modperl_/; # no modperl_ headers
  +        print $fh qq(\#include "$path"\n);
       }
  +
       close $fh;
   
       return $filename;
  @@ -343,7 +359,7 @@
               }
           }
   
  -        #XXX: working around C::Scan confusion here
  +        #XXX: working around ModPerl::CScan confusion here
           #macro defines ap_run_error_log causes
           #cpp filename:linenumber to be included as part of the type
           for (@$args) {
  
  
  

Reply via email to