X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Makefile.PL;h=266f171a3dfe296a84534ff078a8f37876c16a87;hb=39dbc69b27dbf7800719b3e60a9042b9a1ae58f8;hp=ad21f645369f3de2d07de4ee8c14f3c15c167624;hpb=b08c2ab9eed3bb3d00faf1f1ab920c473c8701bf;p=p5sagit%2Fnamespace-clean.git diff --git a/Makefile.PL b/Makefile.PL index ad21f64..266f171 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -1,31 +1,149 @@ -#!/usr/bin/env perl -use warnings; use strict; +use warnings; +use 5.008001; + +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.88', +); + +my %RUN_DEPS = ( + 'Package::Stash' => '0.23', + 'B::Hooks::EndOfScope' => '0.12', +); -use inc::Module::Install; +# a sub-namer is needed if using the debugger on some perls +my %OPT_RUN_DEPS = ( ( + require 'lib/namespace/clean/_Util.pm' + and + namespace::clean::_Util::DEBUGGER_NEEDS_CV_RENAME() + and + namespace::clean::_Util::_namer_load_error() + and + can_xs() +) + # when changing version, also change $sn_ver in namespace/clean/_Util.pm + ? ( 'Sub::Name' => '0.04' ) + : () +); -name q{namespace-clean}; -license q{perl}; -author q{Robert 'phaylon' Sedlacek }; -all_from q{lib/namespace/clean.pm}; +my %META_BITS = ( + resources => { + homepage => 'http://search.cpan.org/dist/namespace-clean', -build_requires q{Test::More}, '0.88'; -build_requires q{FindBin}, 0; + # EUMM not supporting nested meta :( + #repository => { + # type => 'git', + # url => 'git://git.shadowcat.co.uk/p5sagit/namespace-clean.git', + # web => 'http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit/namespace-clean.git', + #} + #bugtracker => { + # mailto => 'bug-namespace-clean@rt.cpan.org', + # web => 'http://rt.cpan.org/Public/Dist/Display.html?Name=namespace-clean', + #}, -requires q{B::Hooks::EndOfScope}, '0.07'; -requires q{Stash::Manip}, '0.01'; -requires q{Sub::Name}, '0.04'; -requires q{Sub::Identify}, '0.04'; + repository => 'git://git.shadowcat.co.uk/p5sagit/namespace-clean.git', + bugtracker => 'http://rt.cpan.org/Public/Dist/Display.html?Name=namespace-clean', + }, +); -auto_provides; +my %WriteMakefileArgs = ( + 'NAME' => 'namespace::clean', + 'VERSION_FROM' => 'lib/namespace/clean.pm', + 'ABSTRACT' => 'Keep imports and functions out of your namespace', + 'AUTHOR' => 'Robert \'phaylon\' Sedlacek , Florian Ragwitz , Jesse Luehrs ', + 'CONFIGURE_REQUIRES' => { 'ExtUtils::CBuilder' => 0.27 }, + 'PREREQ_PM' => { + %RUN_DEPS, %OPT_RUN_DEPS, + $mymeta_works ? () : (%BUILD_DEPS), + }, -if (-e 'MANIFEST.SKIP') { + $mymeta_works + ? ( # BUILD_REQUIRES makes MYMETA right, requires stops META being wrong + 'BUILD_REQUIRES' => \%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, + }, + ) + , - print "Creating README file\n"; - system 'pod2text lib/namespace/clean.pm > README'; + ($mymeta and !$mymeta_works) ? ( 'NO_MYMETA' => 1 ) : (), - print "Adding author tests to 'make test' run\n"; - tests 't/*.t t_author/*.t'; + '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}; + } + } } -WriteAll; +delete $WriteMakefileArgs{CONFIGURE_REQUIRES} + unless eval { ExtUtils::MakeMaker->VERSION('6.52') }; + +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; +} + +# 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)); + } + + return; +}