/usr/lib/perl5/Wx/XSP/Event.pm is in libwx-perl 1:0.9922-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | package build::Wx::XSP::Event;
# Allow use when installed for other Wx based modules
# but always use this when building Wx
package Wx::XSP::Event; @ISA = qw( build::Wx::XSP::Event );
package build::Wx::XSP::Event;
use strict;
use warnings;
sub new { return bless { parser => $_[1], events => [] }, $_[0] }
sub register_plugin {
my( $class, $parser ) = @_;
my $plugin = $class->new( $parser );
$parser->add_toplevel_tag_plugin( plugin => $plugin );
$parser->add_post_process_plugin( plugin => $plugin );
}
sub handle_toplevel_tag {
my( $self, undef, $tag, %args ) = @_;
my( $evt, $const ) = ( $args{any_positional_arguments}[0][0],
$args{any_positional_arguments}[1][0] );
my( $name, $args ) = $evt =~ /^(\w+)\((.*)\)$/ or die $evt;
my @args = split /\s*,\s*/, $args;
push @{$self->{events}}, [ $name, 1 + @args, $const, $args{condition} ];
}
sub post_process {
my( $self, $nodes ) = @_;
my $parser = $self->{parser};
my( @events, %conditions );
foreach my $e ( @{$self->{events}} ) {
my( $name, $args, $const, $cond ) = @$e;
if( !$const ) {
push @events, " wxPli_StdEvent( $name, $args )";
} else {
push @events, " wxPli_Event( $name, $args, $const )";
}
$conditions{$cond} ||= 1;
}
( my $name = File::Basename::basename( $parser->current_file ) ) =~ tr/./_/;
my $file = "xspp/evt_$name.h";
my $evts = join "\n", @events;
my $all_conditions = join ' && ', 1,
map "defined( $_ )",
keys %conditions;
my @lines = sprintf <<'EOT', $all_conditions, $name, $evts;
#if %s
// !package: Wx::Event
// !tag:
// !parser: sub { $_[0] =~ m<^\s*wxPli_(?:Std)?Event\(\s*(\w+)\s*\,> }
#include "cpp/helpers.h"
static wxPliEventDescription %s_events[] =
{
%s
{ 0, 0, 0 }
};
#endif
EOT
push @$nodes,
ExtUtils::XSpp::Node::Raw->new( rows => [ qq{#include "$file"} ] ),
ExtUtils::XSpp::Node::File->new( file => $file ),
ExtUtils::XSpp::Node::Raw->new( rows => \@lines ),
ExtUtils::XSpp::Node::File->new( file => '-' ),
ExtUtils::XSpp::Node::Raw->new
( rows => [ 'BOOT:', " wxPli_set_events( ${name}_events );" ],
emit_condition => $all_conditions,
)
;
}
1;
|