mirror of
https://github.com/Gator96100/ProxSpace.git
synced 2025-01-09 04:13:15 -08:00
189 lines
5.0 KiB
Perl
189 lines
5.0 KiB
Perl
#!/usr/bin/perl
|
|
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
|
|
if 0; # ^ Run only under a shell
|
|
#!perl
|
|
use 5.006;
|
|
BEGIN { pop @INC if $INC[-1] eq '.' }
|
|
use strict;
|
|
eval {
|
|
require ExtUtils::ParseXS;
|
|
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] [-strip|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|strip=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;
|
|
|
|
my $pxs = ExtUtils::ParseXS->new;
|
|
$pxs->process_file(%args);
|
|
exit( $pxs->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.
|
|
|
|
=item B<-s=...> or B<-strip=...>
|
|
|
|
I<This option is obscure and discouraged.>
|
|
|
|
If specified, the given string will be stripped off from the beginning
|
|
of the C function name in the generated XS functions (if it starts with that prefix).
|
|
This only applies to XSUBs without C<CODE> or C<PPCODE> blocks.
|
|
For example, the XS:
|
|
|
|
void foo_bar(int i);
|
|
|
|
when C<xsubpp> is invoked with C<-s foo_> will install a C<foo_bar>
|
|
function in Perl, but really call C<bar(i)> in C. Most of the time,
|
|
this is the opposite of what you want and failure modes are somewhat
|
|
obscure, so please avoid this option where possible.
|
|
|
|
=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
|
|
|