/perl/bin/xsubpp
Perl | 173 lines | 114 code | 58 blank | 1 comment | 7 complexity | 4d75bc2f7becceb6a194afa3670840d7 MD5 | raw file
Possible License(s): LGPL-3.0, Unlicense, GPL-2.0, LGPL-2.0, BSD-3-Clause, LGPL-2.1, AGPL-1.0, GPL-3.0
- #!perl
- use 5.006;
- use strict;
- eval {
- require ExtUtils::ParseXS;
- ExtUtils::ParseXS->import(
- qw(
- process_file
- report_error_count
- )
- );
- 1;
- }
- or do {
- my $err = $@ || 'Zombie error';
- my $v = $ExtUtils::ParseXS::VERSION;
- $v = '<undef>' if not defined $v;
- 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";
- };
- use Getopt::Long;
- my %args = ();
- my $usage = "Usage: xsubpp [-v] [-csuffix csuffix] [-except] [-prototypes] [-noversioncheck] [-nolinenumbers] [-nooptimize] [-noinout] [-noargtypes] [-s pattern] [-typemap typemap]... file.xs\n";
- Getopt::Long::Configure qw(no_auto_abbrev no_ignore_case);
- @ARGV = grep {$_ ne '-C++'} @ARGV; # Allow -C++ for backward compatibility
- GetOptions(\%args, qw(hiertype!
- prototypes!
- versioncheck!
- linenumbers!
- optimize!
- inout!
- argtypes!
- object_capi!
- except!
- v
- typemap=s@
- output=s
- s=s
- csuffix=s
- ))
- or die $usage;
- if ($args{v}) {
- print "xsubpp version $ExtUtils::ParseXS::VERSION\n";
- exit;
- }
- @ARGV == 1 or die $usage;
- $args{filename} = shift @ARGV;
- process_file(%args);
- exit( report_error_count() ? 1 : 0 );
- __END__
- =head1 NAME
- xsubpp - compiler to convert Perl XS code into C code
- =head1 SYNOPSIS
- B<xsubpp> [B<-v>] [B<-except>] [B<-s pattern>] [B<-prototypes>] [B<-noversioncheck>] [B<-nolinenumbers>] [B<-nooptimize>] [B<-typemap typemap>] [B<-output filename>]... file.xs
- =head1 DESCRIPTION
- This compiler is typically run by the makefiles created by L<ExtUtils::MakeMaker>
- or by L<Module::Build> or other Perl module build tools.
- I<xsubpp> will compile XS code into C code by embedding the constructs
- necessary to let C functions manipulate Perl values and creates the glue
- necessary to let Perl access those functions. The compiler uses typemaps to
- determine how to map C function parameters and variables to Perl values.
- The compiler will search for typemap files called I<typemap>. It will use
- the following search path to find default typemaps, with the rightmost
- typemap taking precedence.
- ../../../typemap:../../typemap:../typemap:typemap
- It will also use a default typemap installed as C<ExtUtils::typemap>.
- =head1 OPTIONS
- Note that the C<XSOPT> MakeMaker option may be used to add these options to
- any makefiles generated by MakeMaker.
- =over 5
- =item B<-hiertype>
- Retains '::' in type names so that C++ hierarchical types can be mapped.
- =item B<-except>
- Adds exception handling stubs to the C code.
- =item B<-typemap typemap>
- Indicates that a user-supplied typemap should take precedence over the
- default typemaps. This option may be used multiple times, with the last
- typemap having the highest precedence.
- =item B<-output filename>
- Specifies the name of the output file to generate. If no file is
- specified, output will be written to standard output.
- =item B<-v>
- Prints the I<xsubpp> version number to standard output, then exits.
- =item B<-prototypes>
- By default I<xsubpp> will not automatically generate prototype code for
- all xsubs. This flag will enable prototypes.
- =item B<-noversioncheck>
- Disables the run time test that determines if the object file (derived
- from the C<.xs> file) and the C<.pm> files have the same version
- number.
- =item B<-nolinenumbers>
- Prevents the inclusion of `#line' directives in the output.
- =item B<-nooptimize>
- Disables certain optimizations. The only optimization that is currently
- affected is the use of I<target>s by the output C code (see L<perlguts>).
- This may significantly slow down the generated code, but this is the way
- B<xsubpp> of 5.005 and earlier operated.
- =item B<-noinout>
- Disable recognition of C<IN>, C<OUT_LIST> and C<INOUT_LIST> declarations.
- =item B<-noargtypes>
- Disable recognition of ANSI-like descriptions of function signature.
- =item B<-C++>
- Currently doesn't do anything at all. This flag has been a no-op for
- many versions of perl, at least as far back as perl5.003_07. It's
- allowed here for backwards compatibility.
- =back
- =head1 ENVIRONMENT
- No environment variables are used.
- =head1 AUTHOR
- Originally by Larry Wall. Turned into the C<ExtUtils::ParseXS> module
- by Ken Williams.
- =head1 MODIFICATION HISTORY
- See the file F<Changes>.
- =head1 SEE ALSO
- perl(1), perlxs(1), perlxstut(1), ExtUtils::ParseXS
- =cut