From: Peter Rabbitson Date: Sun, 31 Jul 2011 03:28:30 +0000 (+0200) Subject: De-dzilify. This may look odd and borderline revolting - read on X-Git-Tag: 0.21~7 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=fa84e42544f1d59c0bfc118d516d20c2b5848c0b;p=p5sagit%2Fnamespace-clean.git De-dzilify. This may look odd and borderline revolting - read on Currently available dzil plugins do not offer the dynconfig flexibility that this module requires. Instead of taking a 2 day course in dzil internals, I opted for using a tool I know to accomplish the same task. I have absolutely no problem with someone reverting this commit and re- doing things in dzil, as long as the resulting Makefile.PL is functionally equivalent. Some points: * Dzil's autorequires can't possibly understand what an optional dep is This is an easy fix - just specify all deps manually * There is no plugin for "require list depending on can_cc". Package::Stash does something to the effect, but with some sort of hack I am not entirely capable of comprehending * There is no plugin to "require list depending on smoking env", nor there is an easy mechanism (that I see) of combining it with the above --- diff --git a/Makefile.PL b/Makefile.PL new file mode 100644 index 0000000..054cca9 --- /dev/null +++ b/Makefile.PL @@ -0,0 +1,127 @@ +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', + can_cc() ? ( + 'B::Hooks::EndOfScope' => '0.07', # when changing, also change version in namespace/clean.pm + is_smoker() ? ( 'Devel::Hide' => 0 ) : (), # make sure we smoke the pure-perl version + ) : (), +); + +my %META_BITS = ( + resources => { + homepage => 'http://search.cpan.org/dist/namespace-clean', + + # 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', + #}, + + repository => 'git://git.shadowcat.co.uk:p5sagit/namespace-clean.git', + bugtracker => 'http://rt.cpan.org/Public/Dist/Display.html?Name=namespace-clean', + }, +); + +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 ', + + 'PREREQ_PM' => { + %RUN_DEPS, + $mymeta_works ? () : (%BUILD_DEPS), + }, + + $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, + }, + ) + , + + ($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}; + } + } +} + +delete $WriteMakefileArgs{CONFIGURE_REQUIRES} + unless eval { ExtUtils::MakeMaker->VERSION('6.52') }; + +WriteMakefile(%WriteMakefileArgs); + + +# 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; +} + +sub is_smoker { + return ( $ENV{AUTOMATED_TESTING} && ! $ENV{PERL5_CPANM_IS_RUNNING} && ! $ENV{RELEASE_TESTING} ) +} diff --git a/dist.ini b/dist.ini deleted file mode 100644 index b05736a..0000000 --- a/dist.ini +++ /dev/null @@ -1,16 +0,0 @@ -name = namespace-clean -version = 0.20 -author = Robert 'phaylon' Sedlacek -author = Florian Ragwitz -author = Jesse Luehrs -license = Perl_5 -copyright_holder = Robert 'phaylon' Sedlacek - -[@FLORA] -dist = namespace-clean -repository_at = github -authority = cpan:PHAYLON -auto_prereq = 0 - -[AutoPrereq] -skip = ^Inheritance diff --git a/lib/namespace/clean.pm b/lib/namespace/clean.pm index 8197618..41cd7a3 100644 --- a/lib/namespace/clean.pm +++ b/lib/namespace/clean.pm @@ -7,12 +7,14 @@ use strict; use vars qw( $STORAGE_VAR ); use Package::Stash; +our $VERSION = '0.20'; + $STORAGE_VAR = '__NAMESPACE_CLEAN_STORAGE'; BEGIN { if (eval { require B::Hooks::EndOfScope; - B::Hooks::EndOfScope->VERSION('0.07'); + B::Hooks::EndOfScope->VERSION('0.07'); # when changing also change in Makefile.PL 1 } ) { B::Hooks::EndOfScope->import('on_scope_end'); @@ -161,7 +163,9 @@ option like this: If you don't care about Cs discover-and-C<-except> logic, and just want to remove subroutines, try L. -=method clean_subroutines +=head1 METHODS + +=head2 clean_subroutines This exposes the actual subroutine-removal logic. @@ -245,7 +249,7 @@ sub clean_subroutines { $RemoveSubs->($cleanee, {}, @subs); } -=method import +=head2 import Makes a snapshot of the current defined functions and installs a L hook in the current scope to invoke the cleanups. @@ -310,7 +314,7 @@ sub import { } } -=method unimport +=head2 unimport This method will be called when you do a @@ -338,7 +342,7 @@ sub unimport { return 1; } -=method get_class_store +=head2 get_class_store This returns a reference to a hash in a passed package containing information about function names included and excluded from removal. @@ -354,7 +358,7 @@ sub get_class_store { return $stash->get_symbol($var); } -=method get_functions +=head2 get_functions Takes a class as argument and returns all currently defined functions in it as a hash reference with the function name as key and a typeglob @@ -405,6 +409,34 @@ L Many thanks to Matt S Trout for the inspiration on the whole idea. +=head1 AUTHORS + +=over + +=item * + +Robert 'phaylon' Sedlacek + +=item * + +Florian Ragwitz + +=item * + +Jesse Luehrs + +=item * + +Peter Rabbitson + +=back + +=head1 COPYRIGHT AND LICENSE + +This software is copyright (c) 2011 by Robert 'phaylon' Sedlacek. + +This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. + =cut no warnings;