XS-Install

 view release on metacpan or  search on metacpan

lib/XS/Install/FrozenShit/Typemaps/Cmd.pm  view on Meta::CPAN

use 5.006001;
use strict;
use warnings;
our $VERSION = '3.57';

use XS::Install::FrozenShit::Typemaps;

require Exporter;

our @ISA = qw(Exporter);
our @EXPORT = qw(embeddable_typemap);
our %EXPORT_TAGS = (all => \@EXPORT);

sub embeddable_typemap {
  my @tms = @_;

  # Get typemap objects
  my @tm_objs = map [$_, _intuit_typemap_source($_)], @tms;

  # merge or short-circuit
  my $final_tm;
  if (@tm_objs == 1) {
    # just one, merge would be pointless
    $final_tm = shift(@tm_objs)->[1];

lib/XS/Install/FrozenShit/Typemaps/Cmd.pm  view on Meta::CPAN


=head1 NAME

XS::Install::FrozenShit::Typemaps::Cmd - Quick commands for handling typemaps

=head1 SYNOPSIS

From XS:

  INCLUDE_COMMAND: $^X -MXS::Install::FrozenShit::Typemaps::Cmd \
                   -e "print embeddable_typemap(q{Excommunicated})"

Loads C<XS::Install::FrozenShit::Typemaps::Excommunicated>, instantiates an object,
and dumps it as an embeddable typemap for use directly in your XS file.

=head1 DESCRIPTION

This is a helper module for L<XS::Install::FrozenShit::Typemaps> for quick
one-liners, specifically for inclusion of shared typemaps
that live on CPAN into an XS file (see SYNOPSIS).

For this reason, the following functions are exported by default:

=head1 EXPORTED FUNCTIONS

=head2 embeddable_typemap

Given a list of identifiers, C<embeddable_typemap>
tries to load typemaps from a file of the given name(s),
or from a module that is an C<XS::Install::FrozenShit::Typemaps> subclass.

Returns a string representation of the merged typemaps that can
be included verbatim into XS. Example:

  print embeddable_typemap(
    "Excommunicated", "XS::Install::FrozenShit::Typemaps::Basic", "./typemap"
  );

This will try to load a module C<XS::Install::FrozenShit::Typemaps::Excommunicated>
and use it as an C<XS::Install::FrozenShit::Typemaps> subclass. If that fails, it'll
try loading C<Excommunicated> as a module, if that fails, it'll try to
read a file called F<Excommunicated>. It'll work similarly for the
second argument, but the third will be loaded as a file first.

After loading all typemap files or modules, it will merge them in the



( run in 0.664 second using v1.01-cache-2.11-cpan-0c5ce583b80 )