X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FDevel-GlobalDestruction.git;a=blobdiff_plain;f=Makefile.PL;fp=Makefile.PL;h=e62347b13fed9b255d3d66d1dddd31c9475c1a5a;hp=5546667af1186d7486ce4630c44833bb06f0a45e;hb=caf20b647fe3598165760d19b4feec0c7712d914;hpb=9a8f4463a129a883238c0b9eac49662fd4e191d7 diff --git a/Makefile.PL b/Makefile.PL index 5546667..e62347b 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -1,6 +1,8 @@ use strict; use warnings FATAL => 'all'; use 5.006; +use lib 'inc'; +use ExtUtils::HasCompiler qw(can_compile_loadable_object); my %META = ( name => 'Devel-GlobalDestruction', @@ -37,29 +39,14 @@ my %META = ( my %MM_ARGS = ( PREREQ_PM => { - ( (defined ${^GLOBAL_PHASE} or parse_args()->{PUREPERL_ONLY} or !can_xs() ) + ( (defined ${^GLOBAL_PHASE} or parse_args()->{PUREPERL_ONLY} + or !can_compile_loadable_object(quiet => 1) ) ? () : ('Devel::GlobalDestruction::XS' => 0) ), }, ); -use ExtUtils::MakeMaker; -BEGIN { if ( $^O eq 'cygwin' ) { - require ExtUtils::MM_Cygwin; - require ExtUtils::MM_Win32; - if ( ! defined(&ExtUtils::MM_Cygwin::maybe_command) ) { - *ExtUtils::MM_Cygwin::maybe_command = sub { - my ($self, $file) = @_; - if ($file =~ m{^/cygdrive/}i and ExtUtils::MM_Win32->can('maybe_command')) { - ExtUtils::MM_Win32->maybe_command($file); - } else { - ExtUtils::MM_Unix->maybe_command($file); - } - } - } -}} - use Text::ParseWords; sub parse_args { @@ -87,105 +74,6 @@ pure_site_install :: }; } -# can we locate a (the) C compiler -sub can_cc { - my @chunks = split(/ /, $Config::Config{cc}) or return; - - # $Config{cc} may contain args; try to find out the program part - while (@chunks) { - return can_run("@chunks") || (pop(@chunks), next); - } - - return; -} - -# check if we can run some command -sub can_run { - my ($cmd) = @_; - - return $cmd if -x $cmd; - if (my $found_cmd = MM->maybe_command($cmd)) { - return $found_cmd; - } - - require File::Spec; - for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { - next if $dir eq ''; - my $abs = File::Spec->catfile($dir, $cmd); - return $abs if (-x $abs or $abs = MM->maybe_command($abs)); - } - - return; -} - -# Can our C compiler environment build XS files -sub can_xs { - # Do we have the configure_requires checker? - local $@; - eval "require ExtUtils::CBuilder; ExtUtils::CBuilder->VERSION(0.27)"; - if ( $@ ) { - # They don't obey configure_requires, so it is - # someone old and delicate. Try to avoid hurting - # them by falling back to an older simpler test. - return can_cc(); - } - - # Do we have a working C compiler - my $builder = ExtUtils::CBuilder->new( - quiet => 1, - ); - unless ( $builder->have_compiler ) { - # No working C compiler - return 0; - } - - # Write a C file representative of what XS becomes - require File::Temp; - my ( $FH, $tmpfile ) = File::Temp::tempfile( - "compilexs-XXXXX", - SUFFIX => '.c', - ); - binmode $FH; - print $FH <<'END_C'; -#include "EXTERN.h" -#include "perl.h" -#include "XSUB.h" - -int main(int argc, char **argv) { - return 0; -} - -int boot_sanexs() { - return 1; -} - -END_C - close $FH; - - # Can the C compiler access the same headers XS does - my @libs = (); - my $object = undef; - eval { - local $^W = 0; - $object = $builder->compile( - source => $tmpfile, - ); - @libs = $builder->link( - objects => $object, - module_name => 'sanexs', - ); - }; - my $result = $@ ? 0 : 1; - - # Clean up all the build files - foreach ( $tmpfile, $object, @libs ) { - next unless defined $_; - 1 while unlink; - } - - return $result; -} - ## BOILERPLATE ############################################################### require ExtUtils::MakeMaker; (do 'maint/Makefile.PL.include' or die $@) unless -f 'META.yml';