From: Peter Rabbitson Date: Fri, 7 Dec 2012 08:48:39 +0000 (+0100) Subject: Use EUMM instead of MI, drop compatibility back to 5.6.0 X-Git-Tag: 0.25~4 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=e3c0c9d359a2bd8630ec9548e86b96cc05088747;hp=38a897e9c77a71c63e750d85a25934e7c5937cae;p=gitmo%2FClass-C3.git Use EUMM instead of MI, drop compatibility back to 5.6.0 --- diff --git a/ChangeLog b/ChangeLog index 43e742d..954cd19 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ Revision history for Perl extension Class::C3. + - Drop compatibility from 5.6.2 to 5.6.0 - Pod typo fixes (RT#77453) - Only ask for Devel::Hide on perls where it will be actually used (RT#81106) diff --git a/Makefile.PL b/Makefile.PL index 0fcdc76..da4b59f 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -1,45 +1,136 @@ -use warnings; use strict; +use warnings; +use 5.006; + +use ExtUtils::MakeMaker; + +my $mymeta_works = eval { ExtUtils::MakeMaker->VERSION('6.5707'); 1 }; +my $mymeta = $mymeta_works || eval { ExtUtils::MakeMaker->VERSION('6.5702'); 1 }; + +my %BUILD_DEPS = ( + 'Test::More' => '0.47', +); +my %OPT_BUILD_DEPS = ( $] < 5.009_005 and is_smoker() ) + ? ( 'Devel::Hide' => 0 ) : () +; -use 5.006002; -use inc::Module::Install 1.06; +my %RUN_DEPS = ( + # needed by the PP version only, have them installed + # regardless of XS availability or perl version + # (for fatpacking and whatnot) + 'Algorithm::C3' => '0.07', + 'Scalar::Util' => '0', +); +my %OPT_RUN_DEPS = ( $] < 5.009_005 and can_xs() ) + ? ( 'Class::C3::XS' => '0.13' ) : () +; -perl_version '5.006002'; -name 'Class-C3'; -all_from 'lib/Class/C3.pm'; +my %META_BITS = ( + resources => { + homepage => 'http://search.cpan.org/dist/Class-C3', + repository => 'git://git.shadowcat.co.uk/gitmo/Class-C3.git', + bugtracker => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Class-C3', + }, +); -test_requires 'Test::More' => '0.47'; +my %WriteMakefileArgs = ( + 'NAME' => 'Class::C3', + 'AUTHOR' => 'Stevan Little, ', + 'VERSION_FROM' => 'lib/Class/C3.pm', + 'ABSTRACT_FROM' => 'lib/Class/C3.pm', + 'CONFIGURE_REQUIRES' => { 'ExtUtils::CBuilder' => 0.27 }, + 'PREREQ_PM' => { + %RUN_DEPS, %OPT_RUN_DEPS, + $mymeta_works ? () : (%BUILD_DEPS, %OPT_BUILD_DEPS), + }, -# needed by the PP version only, have them installed -# regardless of XS availability or perl version -# (for fatpacking and whatnot) -requires 'Algorithm::C3' => '0.07'; -requires 'Scalar::Util' => '0'; + $mymeta_works + ? ( # BUILD_REQUIRES makes MYMETA right, requires stops META being wrong + 'BUILD_REQUIRES' => { %BUILD_DEPS, %OPT_BUILD_DEPS }, + 'META_ADD' => { + %META_BITS, + requires => \%RUN_DEPS, + }, + ) + : ( # META_ADD both to get META right - only Makefile written + 'META_ADD' => { + %META_BITS, + requires => \%RUN_DEPS, + build_requires => \%BUILD_DEPS, + }, + ) + , -if ($] < 5.009_005) { - # XS not interesting after mro is cored - requires 'Class::C3::XS' => '0.13' if can_xs(); - test_requires 'Devel::Hide' => 0 if is_smoker(); + ($mymeta and !$mymeta_works) ? ( 'NO_MYMETA' => 1 ) : (), + + 'LICENSE' => 'perl', +); + + +unless ( eval { ExtUtils::MakeMaker->VERSION('6.56') } ) { + my $br = delete $WriteMakefileArgs{BUILD_REQUIRES}; + my $pp = $WriteMakefileArgs{PREREQ_PM}; + for my $mod ( keys %$br ) { + if ( exists $pp->{$mod} ) { + $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod}; + } + else { + $pp->{$mod} = $br->{$mod}; + } + } } -if($Module::Install::AUTHOR) { - # compiler detection, goes into META - configure_requires 'ExtUtils::MakeMaker' => '6.52'; - configure_requires 'ExtUtils::CBuilder' => '0.27'; +delete $WriteMakefileArgs{CONFIGURE_REQUIRES} + unless eval { ExtUtils::MakeMaker->VERSION('6.52') }; + +system("pod2text lib/Class/C3.pm >README") + unless -f 'META.yml'; - # Rebuild README for maintainers - system("pod2text lib/Class/C3.pm >README"); +WriteMakefile(%WriteMakefileArgs); + +# Secondary compile testing via ExtUtils::CBuilder +sub can_xs { + # Do we have the configure_requires checker? + local $@; + eval "require ExtUtils::CBuilder;"; + 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(); + } + + return ExtUtils::CBuilder->new( quiet => 1 )->have_compiler; +} + +# 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; } -WriteAll; +# 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; + } + + 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)); + } -if ($Module::Install::AUTHOR) { - @{Meta->{values}{requires}} = grep - { $_->[0] !~ /^ (?: Class::C3::XS | Devel::Hide ) $/x } - @{Meta->{values}{requires}} - ; - print "Regenerating META with XS/test requires excluded\n"; - Meta->write; + return; } sub is_smoker {