dougm       01/10/20 23:12:08

  Modified:    lib/ModPerl WrapXS.pm
  Log:
  add another .{def,exp} filter for ithreads
  
  Revision  Changes    Path
  1.29      +34 -22    modperl-2.0/lib/ModPerl/WrapXS.pm
  
  Index: WrapXS.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/lib/ModPerl/WrapXS.pm,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- WrapXS.pm 2001/10/21 05:46:20     1.28
  +++ WrapXS.pm 2001/10/21 06:12:08     1.29
  @@ -592,16 +592,20 @@
       my($self, $name, $ext) = @_;
   
       my $dir = $self->{XS_DIR};
  +    my %handles;
   
  -    my $exp_file = "$dir/$name.$ext";
  -    my $exp_file_inline = "$dir/${name}_inline.$ext";
  +    for my $type ("", "_inline", "_ithreads") {
  +        my $file = "$dir/$name$type.$ext";
   
  -    open my $exp_fh, '>', $exp_file or
  -      die "open $exp_file: $!";
  -    open my $exp_inline_fh, '>', $exp_file_inline or
  -      die "open $exp_file_inline: $!";
  +        open my $fh, '>', $file or
  +          die "open $file: $!";
   
  -    return($exp_fh, $exp_inline_fh);
  +        (my $fh_name = $type) =~ s/^_//;
  +        $fh_name ||= 'default';
  +        $handles{$fh_name} = $fh;
  +    }
  +
  +    \%handles;
   }
   
   sub func_is_static {
  @@ -639,19 +643,25 @@
       my($self, $val) = @_;
       "   $val\n";
   }
  -
  -#C::Scan doesnt always pickup static __inline__ of mpxs_ functions
  -#certain functions are only defined #ifdef USE_ITHREADS
  -#XXX might need a modperl_ithreads.{def,exp} if any xs modules reference
  -#these functions
   
  -my $skip_exports = join '|', qw{
  -mpxs_
  +my $ithreads_exports = join '|', qw{
   modperl_cmd_interp_
   modperl_interp_ modperl_list_ modperl_tipool_
  -modperl_mgv_
   };
   
  +sub export_func_handle {
  +    my($self, $entry, $handles) = @_;
  +
  +    if ($self->func_is_inline($entry)) {
  +        return $handles->{inline};
  +    }
  +    elsif ($entry->{name} =~ /^($ithreads_exports)/) {
  +        return $handles->{ithreads};
  +    }
  +
  +    $handles->{default};
  +}
  +
   sub write_export_file {
       my($self, $ext) = @_;
   
  @@ -664,23 +674,25 @@
       my $format = \&{"export_file_format_$ext"};
   
       while (my($name, $table) = each %files) {
  -        my($exp_fh, $exp_inline_fh) =
  -          $self->open_export_files($name, $ext);
  +        my $handles = $self->open_export_files($name, $ext);
   
  -        for my $fh ($exp_fh, $exp_inline_fh) {
  +        for my $fh (values %$handles) {
               print $fh $self->$header();
           }
   
           for my $entry (@$table) {
               next if $self->func_is_static($entry);
               my $name = $entry->{name};
  -            next if $name =~ /^($skip_exports)/o;
  -            my $fh = $self->func_is_inline($entry) ?
  -              $exp_inline_fh : $exp_fh;
  +
  +            #C::Scan doesnt always pickup static __inline__
  +            next if $name =~ /^mpxs_/o;
  +
  +            my $fh = $self->export_func_handle($entry, $handles);
  +
               print $fh $self->$format($name);
           }
   
  -        for my $fh ($exp_fh, $exp_inline_fh) {
  +        for my $fh (values %$handles) {
               close $fh;
           }
       }
  
  
  


Reply via email to