Async-Trampoline

 view release on metacpan or  search on metacpan

inc/MyModuleBuild.pm  view on Meta::CPAN


sub cbuilder {
    # patch CBuilder to infer C++ness of files
    state $require_once = do {
        require ExtUtils::CBuilder;
        my $orig = ExtUtils::CBuilder->can('compile');
        *ExtUtils::CBuilder::compile = sub {
            return __MyModuleBuild_CBuilder_patched_compile($orig, @_);
        };
    };
    my $cbuilder = shift->SUPER::cbuilder(@_);
    $cbuilder->have_cplusplus or die "C++ compiler required";
    return $cbuilder;
}

sub _construct {
    my ($class, @args) = @_;

    if ($ENV{AUTOMATED_TESTING}) {
        for my $var (qw( CXXFLAGS PERL_MB_OPT )) {
            if (exists $ENV{$var}) {
                warn sprintf "env %s=%s\n", $var, $ENV{$var} // q();
            }
            else {
                warn "env $var not set\n";
            }
        }
    }

    return $class->SUPER::_construct(@args);
}

sub __MyModuleBuild_CBuilder_patched_compile {
    my ($orig, $self, %args) = @_;
    my $source = $args{source};
    $args{'C++'} //= ($source =~ /\.(?:cpp|cxx|c\+\+)$/);
    return $self->$orig(%args);
}

sub _infer_xs_spec {
    my ($self, $file) = @_;
    my $spec = $self->SUPER::_infer_xs_spec($file);

    # The spec always infers a ".c" file.
    # Fix it: .xs -> .c, .xs++ -> .cpp
    $spec->{c_file} =~ s/\.c$/.cpp/ if $file =~ /\.xs\+\+$/;

    return $spec;
}

sub find_xs_files {
    shift->_find_file_by_type(qr/xs|xs\+\+/, 'lib');



( run in 0.389 second using v1.01-cache-2.11-cpan-a9ef4e587e4 )