This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Sync EU::ParseXS Changes and $VERSION with CPAN
[perl5.git] / dist / ExtUtils-ParseXS / lib / ExtUtils / xsubpp
CommitLineData
f68635b3
S
1#!perl
2use 5.006;
3use strict;
4eval {
5 require ExtUtils::ParseXS;
6 ExtUtils::ParseXS->import(
7 qw(
8 process_file
9 report_error_count
10 )
11 );
12 1;
13}
14or do {
15 my $err = $@ || 'Zombie error';
16 my $v = $ExtUtils::ParseXS::VERSION;
17 $v = '<undef>' if not defined $v;
18 die "Failed to load or import from ExtUtils::ParseXS (version $v). Please check that ExtUtils::ParseXS is installed correctly and that the newest version will be found in your \@INC path: $err";
19};
75f92628 20
6b09c160
YST
21use Getopt::Long;
22
23my %args = ();
24
008fb49c 25my $usage = "Usage: xsubpp [-v] [-csuffix csuffix] [-except] [-prototypes] [-noversioncheck] [-nolinenumbers] [-nooptimize] [-noinout] [-noargtypes] [-s pattern] [-typemap typemap]... file.xs\n";
6b09c160
YST
26
27Getopt::Long::Configure qw(no_auto_abbrev no_ignore_case);
28
29@ARGV = grep {$_ ne '-C++'} @ARGV; # Allow -C++ for backward compatibility
30GetOptions(\%args, qw(hiertype!
31 prototypes!
32 versioncheck!
33 linenumbers!
34 optimize!
35 inout!
36 argtypes!
37 object_capi!
38 except!
39 v
40 typemap=s@
41 output=s
42 s=s
008fb49c 43 csuffix=s
6b09c160
YST
44 ))
45 or die $usage;
46
47if ($args{v}) {
48 print "xsubpp version $ExtUtils::ParseXS::VERSION\n";
49 exit;
50}
51
52@ARGV == 1 or die $usage;
53
54$args{filename} = shift @ARGV;
55
56process_file(%args);
c74be726 57exit( report_error_count() ? 1 : 0 );
6b09c160
YST
58
59__END__
60
75f92628
AD
61=head1 NAME
62
63xsubpp - compiler to convert Perl XS code into C code
64
65=head1 SYNOPSIS
66
6b09c160 67B<xsubpp> [B<-v>] [B<-except>] [B<-s pattern>] [B<-prototypes>] [B<-noversioncheck>] [B<-nolinenumbers>] [B<-nooptimize>] [B<-typemap typemap>] [B<-output filename>]... file.xs
75f92628
AD
68
69=head1 DESCRIPTION
70
f68635b3
S
71This compiler is typically run by the makefiles created by L<ExtUtils::MakeMaker>
72or by L<Module::Build> or other Perl module build tools.
b26a54d0 73
75f92628
AD
74I<xsubpp> will compile XS code into C code by embedding the constructs
75necessary to let C functions manipulate Perl values and creates the glue
76necessary to let Perl access those functions. The compiler uses typemaps to
77determine how to map C function parameters and variables to Perl values.
78
79The compiler will search for typemap files called I<typemap>. It will use
80the following search path to find default typemaps, with the rightmost
81typemap taking precedence.
82
83 ../../../typemap:../../typemap:../typemap:typemap
84
6b09c160
YST
85It will also use a default typemap installed as C<ExtUtils::typemap>.
86
75f92628
AD
87=head1 OPTIONS
88
b26a54d0
GS
89Note that the C<XSOPT> MakeMaker option may be used to add these options to
90any makefiles generated by MakeMaker.
91
75f92628
AD
92=over 5
93
0ab125c1
NIS
94=item B<-hiertype>
95
863b2ca0 96Retains '::' in type names so that C++ hierarchical types can be mapped.
0ab125c1 97
75f92628
AD
98=item B<-except>
99
100Adds exception handling stubs to the C code.
101
102=item B<-typemap typemap>
103
104Indicates that a user-supplied typemap should take precedence over the
105default typemaps. This option may be used multiple times, with the last
106typemap having the highest precedence.
107
6b09c160
YST
108=item B<-output filename>
109
110Specifies the name of the output file to generate. If no file is
111specified, output will be written to standard output.
112
8e07c86e
AD
113=item B<-v>
114
115Prints the I<xsubpp> version number to standard output, then exits.
116
8fc38fda 117=item B<-prototypes>
382b8d97 118
8fc38fda 119By default I<xsubpp> will not automatically generate prototype code for
120all xsubs. This flag will enable prototypes.
121
122=item B<-noversioncheck>
123
124Disables the run time test that determines if the object file (derived
125from the C<.xs> file) and the C<.pm> files have the same version
126number.
382b8d97 127
6f1abe2b
JT
128=item B<-nolinenumbers>
129
130Prevents the inclusion of `#line' directives in the output.
131
b26a54d0
GS
132=item B<-nooptimize>
133
134Disables certain optimizations. The only optimization that is currently
135affected is the use of I<target>s by the output C code (see L<perlguts>).
136This may significantly slow down the generated code, but this is the way
137B<xsubpp> of 5.005 and earlier operated.
138
11416672
GS
139=item B<-noinout>
140
141Disable recognition of C<IN>, C<OUT_LIST> and C<INOUT_LIST> declarations.
142
143=item B<-noargtypes>
144
145Disable recognition of ANSI-like descriptions of function signature.
146
6b09c160
YST
147=item B<-C++>
148
149Currently doesn't do anything at all. This flag has been a no-op for
150many versions of perl, at least as far back as perl5.003_07. It's
151allowed here for backwards compatibility.
152
c5be433b 153=back
75f92628
AD
154
155=head1 ENVIRONMENT
156
157No environment variables are used.
158
159=head1 AUTHOR
160
6b09c160
YST
161Originally by Larry Wall. Turned into the C<ExtUtils::ParseXS> module
162by Ken Williams.
75f92628 163
f06db76b
AD
164=head1 MODIFICATION HISTORY
165
6b09c160 166See the file F<Changes>.
e50aee73 167
75f92628
AD
168=head1 SEE ALSO
169
6b09c160 170perl(1), perlxs(1), perlxstut(1), ExtUtils::ParseXS
75f92628
AD
171
172=cut
93a17b20 173