Hello community, here is the log from the commit of package perl-namespace-clean for openSUSE:Factory checked in at 2015-10-19 22:49:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/perl-namespace-clean (Old) and /work/SRC/openSUSE:Factory/.perl-namespace-clean.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-namespace-clean" Changes: -------- --- /work/SRC/openSUSE:Factory/perl-namespace-clean/perl-namespace-clean.changes 2014-03-18 13:58:46.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.perl-namespace-clean.new/perl-namespace-clean.changes 2015-10-19 22:49:49.000000000 +0200 @@ -1,0 +2,6 @@ +Sat Oct 10 09:37:59 UTC 2015 - co...@suse.com + +- updated to 0.26 + see /usr/share/doc/packages/perl-namespace-clean/Changes + +------------------------------------------------------------------- Old: ---- namespace-clean-0.25.tar.gz New: ---- cpanspec.yml namespace-clean-0.26.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ perl-namespace-clean.spec ++++++ --- /var/tmp/diff_new_pack.rOB5T8/_old 2015-10-19 22:49:50.000000000 +0200 +++ /var/tmp/diff_new_pack.rOB5T8/_new 2015-10-19 22:49:50.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package perl-namespace-clean # -# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,14 +17,15 @@ Name: perl-namespace-clean -Version: 0.25 +Version: 0.26 Release: 0 %define cpan_name namespace-clean Summary: Keep imports and functions out of your namespace License: Artistic-1.0 or GPL-1.0+ Group: Development/Libraries/Perl Url: http://search.cpan.org/dist/namespace-clean/ -Source: http://www.cpan.org/authors/id/R/RI/RIBASUSHI/%{cpan_name}-%{version}.tar.gz +Source0: http://www.cpan.org/authors/id/R/RI/RIBASUSHI/%{cpan_name}-%{version}.tar.gz +Source1: cpanspec.yml BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: perl @@ -42,15 +43,6 @@ %prep %setup -q -n %{cpan_name}-%{version} -# MANUAL BEGIN -%if 0%{?suse_version} <= 1110 -for i in `find t -type f` ; do - sed -i -e "s@^\s*use\s\s*Test::More@use lib '%{perl_vendorlib}';\nuse Test::More@" $i -done -# fail due to missing Sub/Name.pm -rm -f t/07-debugger.t -rm -f t/10-pure-perl.t -%endif %build %{__perl} Makefile.PL INSTALLDIRS=vendor ++++++ cpanspec.yml ++++++ --- #description_paragraphs: 3 #no_testing: broken upstream #sources: # - source1 # - source2 #patches: # foo.patch: -p1 # bar.patch: #preamble: |- # BuildRequires: gcc-c++ #post_prep: |- # hunspell=`pkg-config --libs hunspell | sed -e 's,-l,,; s, *,,g'` # sed -i -e "s,hunspell-X,$hunspell," t/00-prereq.t Makefile.PL #post_install: |- # sed on %{name}.files #license: SUSE-NonFree #skip_noarch: 1 #custom_build: |- #./Build build flags=%{?_smp_mflags} --myflag #custom_test: |- #startserver && make test #ignore_requires: Bizarre::Module ++++++ namespace-clean-0.25.tar.gz -> namespace-clean-0.26.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/namespace-clean-0.25/Changes new/namespace-clean-0.26/Changes --- old/namespace-clean-0.25/Changes 2014-03-05 12:24:28.000000000 +0100 +++ new/namespace-clean-0.26/Changes 2015-10-07 19:43:07.000000000 +0200 @@ -1,32 +1,47 @@ - [0.25] +0.26 2015-10-07 17:43 (UTC) + - Exclusively use Package::Stash::PP on perls < 5.8.7 until a fixed + Package::Stash::XS ships - breakage keeps getting reintroduced + ( RT#107343, RT#74151 ) + - Explicitly document the late runtime binding of `sort SUBNAME ...` + ( RT#101247 ) + - No longer rely on Sub::Identify - either use Sub::Util or B + ( should solve RT#96945 ) + + +0.25 2014-03-05 11:27 (UTC) - Fix incorrect ExtUtils::CBuilder detection routine leading to Makefile.PL crashes when EU::CB is not available - [0.24] + +0.24 2012-12-04 22:59 (UTC) - Properly skip debugger test when optional deps not available - Make sure pure-perl tests pass correctly on space-containing paths (RT#77528) - Remove all the pure-perl fallback code and depend on PP-capable B::H::EOS 0.12 - [0.23] + +0.23 2012-03-11 15:06 (UTC) - Rely on B::Hooks::EndOfScope version 0.10 to fix issues with new Module::Runtime versions (>= 0.012) on perl 5.10 due to incorrect hook firing due to %^H localisation. - Fix failures on 5.13.6 due to incorrect version number threshold (RT#74683) - [0.22] (official fix of all the %^H ickyness) + +0.22 (official fix of all the %^H ickyness) 2011-12-26 13:04 (UTC) - Simplify the >= 5.10 PP variant even more - move the hook from DESTROY into DELETE - Force explicit callback invocation order on 5.8 PP - [0.21_02] + +0.21_02 2011-12-22 11:33 (UTC) - Replace the %^H tie approach with fieldhashes, fixes all known corner cases and caveats on supported perls >= 5.8.1 (FC) - Compile away the debugger fixup on perls >= 5.15.5 (FC) - [0.21_01] + +0.21_01 2011-12-21 11:39 (UTC) - More robust handling of the tied %^H in pure perl mode (RT#73402) - Limit the debugger workarounds to perls between 5.8.8 and 5.14, extend debugger support to all perl versions (FC) (RT#69862) @@ -34,12 +49,14 @@ workaround libraries on perls between 5.8.8 and 5.14 (RT#72368) - Add back dropped NAME section (RT#70259) - [0.21] + +0.21 2011-08-03 21:51 (UTC) - When using the tie() fallback ensure we do not obliterate a foreign tie() - Better document how to disable the tie() fallback - [0.20_01] (the "mst made me do it" release) + +0.20_01 (the "mst made me do it" release) 2011-07-31 09:26 (UTC) - Only invoke the deleted sub stashing if we run udner a debugger (avoid runtime penalty of Sub::Name/Sub::Identify) - Spellfixes (RT#54388) @@ -47,81 +64,100 @@ tie() of %^H. While it can not 100% replace B::H::EOS, it does everything n::c needs - [0.20] + +0.20 2011-01-06 18:07 (UTC) - Bump Package::Stash dependency to 0.22 to pull in a bugfix in Package::Stash::XS 0.19. - [0.19] + +0.19 2011-01-03 16:36 (UTC) - Port to the new Package::Stash 0.18 API and depend on it. - Don't rely on package::stash's remove_package_symbol implementation (doy). - [0.18] + +0.18 2010-06-13 17:12 (UTC) - Make sure we continue working on future Package::Stash versions (doy). - [0.17] + +0.17 2010-06-05 23:16 (UTC) - Make sure the debugger author test is skipped for non-authors before the debugger is even loaded. - [0.16] + +0.16 2010-06-05 20:53 (UTC) - Release all changes of 0.15 as part of a stable release. - Convert from Module::Install to Dist::Zilla. - [0.15] TRIAL release + +0.15 TRIAL release 2010-05-14 17:30 (UTC) - Use Package::Stash for the stash manipulation bits (doy). - [0.14] Thu Mar 18 11:15:38 CET 2010 + +0.14 2010-03-18 11:15:38 (CET) - Disable auto_install. - Turn the error prone debugger test into an author test. - [0.13] Sun Jan 17 02:40:48 CET 2010 + +0.13 2010-01-17 02:40:48 (CET) - Skip failing debugger tests on 5.8.8 and older. - [0.12] Thu Jan 14 03:22:03 CET 2010 + +0.12 2010-01-14 03:22:03 (CET) - Stop relying on stash entries always being upgraded into real GVs (Zefram). - Work around $DB::sub (Yuval Kogman). - Fix restoring of non-code symbols when cleaning (Ben Morrows). - [0.11] Tue Mar 3 17:34:49 CET 2009 + +0.11 2009-03-03 17:34:49 (CET) - Added -cleanee option to specify the package to clean (Closes RT#41850). - Added n:c->clean_subroutines($cleanee, @subs). - [0.10] Fri Feb 20 14:31:36 CET 2009 + +0.10 2009-02-20 14:31:36 (CET) - Depend on B::Hooks::EndOfScope 0.07 to avoid segfaults and lost error messages when something goes wrong. - [0.09] Wed Oct 22 17:48:49 CEST 2008 + +0.09 2008-10-22 17:48:49 (CEST) - Use B::Hooks::EndOfScope instead of %^H + Scope::Guard. - [0.08] Sun Mar 9 22:01:01 CET 2008 + +0.08 2008-03-09 22:01:01 (CET) - Added explicit cleanup behaviour - [0.07] Sun Mar 9 20:13:33 CET 2008 + +0.07 2008-03-09 20:13:33 (CET) - Switched from Filter::EOF to a much saner implementation via %^H and Scope::Guard. (mst & autobox)++ for this. - [0.06] Wed Feb 20 15:09:00 CET 2008 + +0.06 2008-02-20 15:09:00 (CET) - Fixed 'uninitialized value in ref-to-glob cast' error if unimport was used before. - [0.05] Sun Aug 12 18:24:49 CEST 2007 + +0.05 2007-08-12 18:24:49 (CEST) - Minor POD improvements - -except now accepts a single value too - [0.04] Sat Mar 17 16:22:10 CET 2007 + +0.04 2007-03-17 16:22:10 (CET) - Added -except flag - Non-CODE type slots will not be removed - [0.03] Sat Feb 24 22:34:55 CET 2007 + +0.03 2007-02-24 22:34:55 (CET) - Minor comment and POD cleanups - Tried to clarify how the module works - [0.02] Tue Feb 20 00:38:24 CET 2007 + +0.02 2007-02-19 00:38:24 (CET) - Added unimport behaviour - [0.01] Sun Feb 18 17:33:18 CET 2007 - - Initial Version +0.01 2007-02-18 17:33:18 (CET) + - Initial Version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/namespace-clean-0.25/MANIFEST new/namespace-clean-0.26/MANIFEST --- old/namespace-clean-0.25/MANIFEST 2014-03-05 12:25:05.000000000 +0100 +++ new/namespace-clean-0.26/MANIFEST 2015-10-07 19:43:37.000000000 +0200 @@ -1,5 +1,6 @@ Changes lib/namespace/clean.pm +lib/namespace/clean/_Util.pm Makefile.PL MANIFEST This list of files t/00-basic.t diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/namespace-clean-0.25/META.json new/namespace-clean-0.26/META.json --- old/namespace-clean-0.25/META.json 2014-03-05 12:25:05.000000000 +0100 +++ new/namespace-clean-0.26/META.json 2015-10-07 19:43:37.000000000 +0200 @@ -1,10 +1,14 @@ { "abstract" : "Keep imports and functions out of your namespace", "author" : [ - "Robert 'phaylon' Sedlacek <r...@474.at>, Florian Ragwitz <r...@debian.org>, Jesse Luehrs <d...@tozt.net>" + "Robert 'phaylon' Sedlacek <r...@474.at>", + "Florian Ragwitz <r...@debian.org>", + "Jesse Luehrs <d...@tozt.net>", + "Peter Rabbitson <ribasu...@cpan.org>", + "Father Chrysostomos <spr...@cpan.org>" ], "dynamic_config" : 1, - "generated_by" : "ExtUtils::MakeMaker version 6.84, CPAN::Meta::Converter version 2.132830", + "generated_by" : "ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.150005", "license" : [ "perl_5" ], @@ -12,7 +16,7 @@ "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : "2" }, - "name" : "namespace-clean", + "name" : "namespace::clean", "no_index" : { "directory" : [ "t", @@ -20,32 +24,40 @@ ] }, "prereqs" : { - "build" : { - "requires" : { - "Test::More" : "0.88" - } - }, + "build" : {}, "configure" : { "requires" : { - "ExtUtils::CBuilder" : "0.27" + "ExtUtils::CBuilder" : "0.27", + "ExtUtils::MakeMaker" : "0" } }, "runtime" : { "requires" : { "B::Hooks::EndOfScope" : "0.12", - "Package::Stash" : "0.23" + "Package::Stash" : "0.23", + "perl" : "5.008001" + } + }, + "test" : { + "requires" : { + "Test::More" : "0.88" } } }, "release_status" : "stable", "resources" : { "bugtracker" : { + "mailto" : "bug-namespace-cl...@rt.cpan.org", "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=namespace-clean" }, "homepage" : "http://search.cpan.org/dist/namespace-clean", "repository" : { - "url" : "git://git.shadowcat.co.uk/p5sagit/namespace-clean.git" - } + "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" + }, + "x_IRC" : "irc://irc.perl.org/#toolchain" }, - "version" : "0.25" + "version" : "0.26", + "x_serialization_backend" : "JSON::PP version 2.27203" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/namespace-clean-0.25/META.yml new/namespace-clean-0.26/META.yml --- old/namespace-clean-0.25/META.yml 2014-03-05 12:25:05.000000000 +0100 +++ new/namespace-clean-0.26/META.yml 2015-10-07 19:43:37.000000000 +0200 @@ -1,27 +1,35 @@ --- abstract: 'Keep imports and functions out of your namespace' author: - - "Robert 'phaylon' Sedlacek <r...@474.at>, Florian Ragwitz <r...@debian.org>, Jesse Luehrs <d...@tozt.net>" + - "Robert 'phaylon' Sedlacek <r...@474.at>" + - 'Florian Ragwitz <r...@debian.org>' + - 'Jesse Luehrs <d...@tozt.net>' + - 'Peter Rabbitson <ribasu...@cpan.org>' + - 'Father Chrysostomos <spr...@cpan.org>' build_requires: - Test::More: 0.88 + Test::More: '0.88' configure_requires: - ExtUtils::CBuilder: 0.27 + ExtUtils::CBuilder: '0.27' + ExtUtils::MakeMaker: '0' dynamic_config: 1 -generated_by: 'ExtUtils::MakeMaker version 6.84, CPAN::Meta::Converter version 2.132830' +generated_by: 'ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version 2.150005' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html - version: 1.4 -name: namespace-clean + version: '1.4' +name: namespace::clean no_index: directory: - t - inc requires: - B::Hooks::EndOfScope: 0.12 - Package::Stash: 0.23 + B::Hooks::EndOfScope: '0.12' + Package::Stash: '0.23' + perl: '5.008001' resources: + IRC: irc://irc.perl.org/#toolchain bugtracker: http://rt.cpan.org/Public/Dist/Display.html?Name=namespace-clean homepage: http://search.cpan.org/dist/namespace-clean repository: git://git.shadowcat.co.uk/p5sagit/namespace-clean.git -version: 0.25 +version: '0.26' +x_serialization_backend: 'CPAN::Meta::YAML version 0.016' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/namespace-clean-0.25/Makefile.PL new/namespace-clean-0.26/Makefile.PL --- old/namespace-clean-0.25/Makefile.PL 2014-03-05 12:19:07.000000000 +0100 +++ new/namespace-clean-0.26/Makefile.PL 2015-10-01 05:54:37.000000000 +0200 @@ -2,113 +2,117 @@ 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', -); - -# these pieces are needed if using the debugger on the perl range -my %OPT_RUN_DEPS = ( $] > 5.008_008_9 and $] < 5.013_005_1 and can_xs() ) - # when changing versions, also change $sn_ver and $si_ver in namespace/clean.pm - ? ( 'Sub::Name' => '0.04', 'Sub::Identify' => '0.04' ) : () -; +my %META = ( + name => 'namespace::clean', + license => 'perl_5', + + abstract => 'Keep imports and functions out of your namespace', + author => [ + 'Robert \'phaylon\' Sedlacek <r...@474.at>', + 'Florian Ragwitz <r...@debian.org>', + 'Jesse Luehrs <d...@tozt.net>', + 'Peter Rabbitson <ribasu...@cpan.org>', + 'Father Chrysostomos <spr...@cpan.org>', + ], + + prereqs => { + configure => { + requires => { + 'ExtUtils::MakeMaker' => 0, + 'ExtUtils::CBuilder' => 0.27, + } + }, + runtime => { + requires => { + 'Package::Stash' => '0.23', + 'B::Hooks::EndOfScope' => '0.12', + 'perl' => '5.008001', + }, + }, + test => { + requires => { + 'Test::More' => '0.88', + } + }, + }, -my %META_BITS = ( resources => { + x_IRC => 'irc://irc.perl.org/#toolchain', 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-cl...@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', + 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-cl...@rt.cpan.org', + web => '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 <r...@474.at>, Florian Ragwitz <r...@debian.org>, Jesse Luehrs <d...@tozt.net>', - 'CONFIGURE_REQUIRES' => { 'ExtUtils::CBuilder' => 0.27 }, - 'PREREQ_PM' => { - %RUN_DEPS, %OPT_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', +my %MM_ARGS = ( ( + # a sub-namer is needed if using the debugger on some perls + 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 + ? ( PREREQ_PM => { 'Sub::Name' => '0.04' } ) + : () ); -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}; - } - } -} +## BOILERPLATE ############################################################### +require ExtUtils::MakeMaker; -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; +# have to do this since old EUMM dev releases miss the eval $VERSION line +my $eumm_version = eval $ExtUtils::MakeMaker::VERSION; +my $mymeta = $eumm_version >= 6.57_02; +my $mymeta_broken = $mymeta && $eumm_version < 6.57_07; + +($MM_ARGS{NAME} = $META{name}) =~ s/-/::/g; +($MM_ARGS{VERSION_FROM} = "lib/$MM_ARGS{NAME}.pm") =~ s{::}{/}g; +$META{license} = [ $META{license} ] + if $META{license} && !ref $META{license}; +$MM_ARGS{LICENSE} = $META{license}[0] + if $META{license} && $eumm_version >= 6.30; +$MM_ARGS{NO_MYMETA} = 1 + if $mymeta_broken; +$MM_ARGS{META_ADD} = { 'meta-spec' => { version => 2 }, %META } + unless -f 'META.yml'; + +for (qw(configure build test runtime)) { + my $key = $_ eq 'runtime' ? 'PREREQ_PM' : uc $_.'_REQUIRES'; + my $r = $MM_ARGS{$key} = { + %{$META{prereqs}{$_}{requires} || {}}, + %{delete $MM_ARGS{$key} || {}}, + }; + defined $r->{$_} or delete $r->{$_} for keys %$r; } +$MM_ARGS{MIN_PERL_VERSION} = delete $MM_ARGS{PREREQ_PM}{perl} || 0; + +delete $MM_ARGS{MIN_PERL_VERSION} + if $eumm_version < 6.47_01; +$MM_ARGS{BUILD_REQUIRES} = {%{$MM_ARGS{BUILD_REQUIRES}}, %{delete $MM_ARGS{TEST_REQUIRES}}} + if $eumm_version < 6.63_03; +$MM_ARGS{PREREQ_PM} = {%{$MM_ARGS{PREREQ_PM}}, %{delete $MM_ARGS{BUILD_REQUIRES}}} + if $eumm_version < 6.55_01; +delete $MM_ARGS{CONFIGURE_REQUIRES} + if $eumm_version < 6.51_03; + +ExtUtils::MakeMaker::WriteMakefile(%MM_ARGS); +## END BOILERPLATE ########################################################### + + +# FIXME +# Need to replace with EU::HC, but too many changes for this release already +########################################### # can we locate a (the) C compiler sub can_cc { my @chunks = split(/ /, $Config::Config{cc}) or return; @@ -130,6 +134,7 @@ 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); @@ -138,3 +143,71 @@ 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; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/namespace-clean-0.25/lib/namespace/clean/_Util.pm new/namespace-clean-0.26/lib/namespace/clean/_Util.pm --- old/namespace-clean-0.25/lib/namespace/clean/_Util.pm 1970-01-01 01:00:00.000000000 +0100 +++ new/namespace-clean-0.26/lib/namespace/clean/_Util.pm 2015-10-07 08:59:58.000000000 +0200 @@ -0,0 +1,112 @@ +### !!!ACHTUNG!!! +# +# This module is to be loaded at configure time straight from the Makefile.PL +# in order to get access to some of the constants / utils +# None of the dependencies will be available yet at this point, so make +# sure to never use anything beyond what the minimum supported perl came with +# (no, relying on configure_requires is not ok) + +package # hide from the pauses + namespace::clean::_Util; + +use warnings; +use strict; + +use base 'Exporter'; +our @EXPORT_OK = qw( DEBUGGER_NEEDS_CV_RENAME DEBUGGER_NEEDS_CV_PIVOT ); + +use constant DEBUGGER_NEEDS_CV_RENAME => ( ( $] > 5.008_008 ) and ( $] < 5.013_006 ) ); +use constant DEBUGGER_NEEDS_CV_PIVOT => ( ( ! DEBUGGER_NEEDS_CV_RENAME ) and ( $] < 5.015_005 ) ); + +# FIXME - ideally this needs to be provided by some abstraction lib +# but we don't have that yet +BEGIN { + # + # Note - both get_subname and set_subname are only called by one block + # which is compiled away unless CV_RENAME is true ( the 5.8.9 ~ 5.12 range ). + # Hence we compile/provide the definitions here only when needed + # + DEBUGGER_NEEDS_CV_RENAME and ( eval <<'EOS' or die $@ ); +{ + my( $sub_name_loaded, $sub_util_loaded ); + + sub _namer_load_error { + return '' if $sub_util_loaded or $sub_name_loaded; + + # if S::N is loaded first *and* so is B - then go with that, otherwise + # prefer Sub::Util as S::U will provide a faster get_subname and will + # not need further require() calls + # this is rather arbitrary but remember this code exists only perls + # between 5.8.9 ~ 5.13.5 + + # when changing version also change in Makefile.PL + my $sn_ver = 0.04; + + local $@; + my $err = ''; + + ( + ! ( + $INC{"B.pm"} + and + $INC{"Sub/Name.pm"} + and + eval { Sub::Name->VERSION($sn_ver) } + ) + and + eval { require Sub::Util } + and + # see https://github.com/moose/Moo/commit/dafa5118 + defined &Sub::Util::set_subname + and + $sub_util_loaded = 1 + ) + or + ( + eval { require Sub::Name and Sub::Name->VERSION($sn_ver) } + and + $sub_name_loaded = 1 + ) + or + $err = "When running under -d on this perl $], namespace::clean requires either Sub::Name $sn_ver or Sub::Util to be installed" + ; + + $err; + } + + sub set_subname { + if( my $err = _namer_load_error() ) { + die $err; + } + elsif( $sub_name_loaded ) { + &Sub::Name::subname; + } + elsif( $sub_util_loaded ) { + &Sub::Util::set_subname; + } + else { + die "How the fuck did we get here? Read source and debug please!"; + } + } + + sub get_subname { + if( + _namer_load_error() + or + ! $sub_util_loaded + ) { + require B; + my $gv = B::svref_2object( $_[0] )->GV; + join '::', $gv->STASH->NAME, $gv->NAME; + } + else { + &Sub::Util::subname; + } + } +} +1; +EOS + +} + +1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/namespace-clean-0.25/lib/namespace/clean.pm new/namespace-clean-0.26/lib/namespace/clean.pm --- old/namespace-clean-0.25/lib/namespace/clean.pm 2014-03-05 12:22:29.000000000 +0100 +++ new/namespace-clean-0.26/lib/namespace/clean.pm 2015-10-07 19:43:20.000000000 +0200 @@ -3,13 +3,227 @@ use warnings; use strict; -use Package::Stash; +our $VERSION = '0.26'; +$VERSION = eval $VERSION if $VERSION =~ /_/; # numify for warning-free dev releases -our $VERSION = '0.25'; our $STORAGE_VAR = '__NAMESPACE_CLEAN_STORAGE'; use B::Hooks::EndOfScope 'on_scope_end'; +# FIXME This is a crock of shit, needs to go away +# currently here to work around https://rt.cpan.org/Ticket/Display.html?id=74151 +# kill with fire when PS::XS is *finally* fixed +BEGIN { + my $provider; + + if ( $] < 5.008007 ) { + require Package::Stash::PP; + $provider = 'Package::Stash::PP'; + } + else { + require Package::Stash; + $provider = 'Package::Stash'; + } + eval <<"EOS" or die $@; + +sub stash_for (\$) { + $provider->new(\$_[0]); +} + +1; + +EOS +} + +use namespace::clean::_Util qw( DEBUGGER_NEEDS_CV_RENAME DEBUGGER_NEEDS_CV_PIVOT ); + +# Built-in debugger CV-retrieval fixups necessary before perl 5.15.5: +# since we are deleting the glob where the subroutine was originally +# defined, the assumptions below no longer hold. +# +# In 5.8.9 ~ 5.13.5 (inclusive) the debugger assumes that a CV can +# always be found under sub_fullname($sub) +# Workaround: use sub naming to properly name the sub hidden in the package's +# deleted-stash +# +# In the rest of the range ( ... ~ 5.8.8 and 5.13.6 ~ 5.15.4 ) the debugger +# assumes the name of the glob passed to entersub can be used to find the CV +# Workaround: realias the original glob to the deleted-stash slot +# +# Can not tie constants to the current value of $^P directly, +# as the debugger can be enabled during runtime (kinda dubious) +# + +my $RemoveSubs = sub { + my $cleanee = shift; + my $store = shift; + my $cleanee_stash = stash_for($cleanee); + my $deleted_stash; + + SYMBOL: + for my $f (@_) { + + # ignore already removed symbols + next SYMBOL if $store->{exclude}{ $f }; + + my $sub = $cleanee_stash->get_symbol("&$f") + or next SYMBOL; + + my $need_debugger_fixup = + ( DEBUGGER_NEEDS_CV_RENAME or DEBUGGER_NEEDS_CV_PIVOT ) + && + $^P + && + ref(my $globref = \$cleanee_stash->namespace->{$f}) eq 'GLOB' + && + ( $deleted_stash ||= stash_for("namespace::clean::deleted::$cleanee") ) + ; + + # convince the Perl debugger to work + # see the comment on top + if ( DEBUGGER_NEEDS_CV_RENAME and $need_debugger_fixup ) { + # + # Note - both get_subname and set_subname are only compiled when CV_RENAME + # is true ( the 5.8.9 ~ 5.12 range ). On other perls this entire block is + # constant folded away, and so are the definitions in ::_Util + # + # Do not be surprised that they are missing without DEBUGGER_NEEDS_CV_RENAME + # + namespace::clean::_Util::get_subname( $sub ) eq ( $cleanee_stash->name . "::$f" ) + and + $deleted_stash->add_symbol( + "&$f", + namespace::clean::_Util::set_subname( $deleted_stash->name . "::$f", $sub ), + ); + } + elsif ( DEBUGGER_NEEDS_CV_PIVOT and $need_debugger_fixup ) { + $deleted_stash->add_symbol("&$f", $sub); + } + + my @symbols = map { + my $name = $_ . $f; + my $def = $cleanee_stash->get_symbol($name); + defined($def) ? [$name, $def] : () + } '$', '@', '%', ''; + + $cleanee_stash->remove_glob($f); + + # if this perl needs no renaming trick we need to + # rename the original glob after the fact + DEBUGGER_NEEDS_CV_PIVOT + and + $need_debugger_fixup + and + *$globref = $deleted_stash->namespace->{$f}; + + $cleanee_stash->add_symbol(@$_) for @symbols; + } +}; + +sub clean_subroutines { + my ($nc, $cleanee, @subs) = @_; + $RemoveSubs->($cleanee, {}, @subs); +} + +sub import { + my ($pragma, @args) = @_; + + my (%args, $is_explicit); + + ARG: + while (@args) { + + if ($args[0] =~ /^\-/) { + my $key = shift @args; + my $value = shift @args; + $args{ $key } = $value; + } + else { + $is_explicit++; + last ARG; + } + } + + my $cleanee = exists $args{ -cleanee } ? $args{ -cleanee } : scalar caller; + if ($is_explicit) { + on_scope_end { + $RemoveSubs->($cleanee, {}, @args); + }; + } + else { + + # calling class, all current functions and our storage + my $functions = $pragma->get_functions($cleanee); + my $store = $pragma->get_class_store($cleanee); + my $stash = stash_for($cleanee); + + # except parameter can be array ref or single value + my %except = map {( $_ => 1 )} ( + $args{ -except } + ? ( ref $args{ -except } eq 'ARRAY' ? @{ $args{ -except } } : $args{ -except } ) + : () + ); + + # register symbols for removal, if they have a CODE entry + for my $f (keys %$functions) { + next if $except{ $f }; + next unless $stash->has_symbol("&$f"); + $store->{remove}{ $f } = 1; + } + + # register EOF handler on first call to import + unless ($store->{handler_is_installed}) { + on_scope_end { + $RemoveSubs->($cleanee, $store, keys %{ $store->{remove} }); + }; + $store->{handler_is_installed} = 1; + } + + return 1; + } +} + +sub unimport { + my ($pragma, %args) = @_; + + # the calling class, the current functions and our storage + my $cleanee = exists $args{ -cleanee } ? $args{ -cleanee } : scalar caller; + my $functions = $pragma->get_functions($cleanee); + my $store = $pragma->get_class_store($cleanee); + + # register all unknown previous functions as excluded + for my $f (keys %$functions) { + next if $store->{remove}{ $f } + or $store->{exclude}{ $f }; + $store->{exclude}{ $f } = 1; + } + + return 1; +} + +sub get_class_store { + my ($pragma, $class) = @_; + my $stash = stash_for($class); + my $var = "%$STORAGE_VAR"; + $stash->add_symbol($var, {}) + unless $stash->has_symbol($var); + return $stash->get_symbol($var); +} + +sub get_functions { + my ($pragma, $class) = @_; + + my $stash = stash_for($class); + return { + map { $_ => $stash->get_symbol("&$_") } + $stash->list_all_symbols('CODE') + }; +} + +'Danger! Laws of Thermodynamics may not apply.' + +__END__ + =head1 NAME namespace::clean - Keep imports and functions out of your namespace @@ -73,6 +287,30 @@ If you just want to C<-except> a single sub, you can pass it directly. For more than one value you have to use an array reference. +=head3 Late binding caveat + +Note that the L<technique used by this module|/IMPLEMENTATION DETAILS> relies +on perl having resolved all names to actual code references during the +compilation of a scope. While this is almost always what the interpreter does, +there are some exceptions, notably the L<sort SUBNAME|perlfunc/sort> style of +the C<sort> built-in invocation. The following example will not work, because +C<sort> does not try to resolve the function name to an actual code reference +until B<runtime>. + + use MyApp::Utils 'my_sorter'; + use namespace::clean; + + my @sorted = sort my_sorter @list; + +You need to work around this by forcing a compile-time resolution like so: + + use MyApp::Utils 'sorter'; + use namespace::clean; + + my $my_sorter_cref = \&sorter; + + my @sorted = sort $my_sorter_cref @list; + =head2 Explicitly removing functions when your scope is compiled It is also possible to explicitly tell C<namespace::clean> what packages @@ -140,186 +378,11 @@ effect at a specific time (e.g. C<namespace::clean> acts on scope compile end) it is your responsibility to make sure it runs at that time. -=cut - -# Constant to optimise away the unused code branches -use constant FIXUP_NEEDED => $] < 5.015_005_1; -use constant FIXUP_RENAME_SUB => $] > 5.008_008_9 && $] < 5.013_005_1; -{ - no strict; - delete ${__PACKAGE__."::"}{FIXUP_NEEDED}; - delete ${__PACKAGE__."::"}{FIXUP_RENAME_SUB}; -} - -# Debugger fixup necessary before perl 5.15.5 -# -# In perl 5.8.9-5.12, it assumes that sub_fullname($sub) can -# always be used to find the CV again. -# In perl 5.8.8 and 5.14, it assumes that the name of the glob -# passed to entersub can be used to find the CV. -# since we are deleting the glob where the subroutine was originally -# defined, those assumptions no longer hold. -# -# So in 5.8.9-5.12 we need to move it elsewhere and point the -# CV's name to the new glob. -# -# In 5.8.8 and 5.14 we move it elsewhere and rename the -# original glob by assigning the new glob back to it. -my $sub_utils_loaded; -my $DebuggerFixup = sub { - my ($f, $sub, $cleanee_stash, $deleted_stash) = @_; - - if (FIXUP_RENAME_SUB) { - if (! defined $sub_utils_loaded ) { - $sub_utils_loaded = do { - - # when changing version also change in Makefile.PL - my $sn_ver = 0.04; - eval { require Sub::Name; Sub::Name->VERSION($sn_ver) } - or die "Sub::Name $sn_ver required when running under -d or equivalent: $@"; - - # when changing version also change in Makefile.PL - my $si_ver = 0.04; - eval { require Sub::Identify; Sub::Identify->VERSION($si_ver) } - or die "Sub::Identify $si_ver required when running under -d or equivalent: $@"; - - 1; - } ? 1 : 0; - } - - if ( Sub::Identify::sub_fullname($sub) eq ($cleanee_stash->name . "::$f") ) { - my $new_fq = $deleted_stash->name . "::$f"; - Sub::Name::subname($new_fq, $sub); - $deleted_stash->add_symbol("&$f", $sub); - } - } - else { - $deleted_stash->add_symbol("&$f", $sub); - } -}; - -my $RemoveSubs = sub { - my $cleanee = shift; - my $store = shift; - my $cleanee_stash = Package::Stash->new($cleanee); - my $deleted_stash; - - SYMBOL: - for my $f (@_) { - - # ignore already removed symbols - next SYMBOL if $store->{exclude}{ $f }; - - my $sub = $cleanee_stash->get_symbol("&$f") - or next SYMBOL; - - my $need_debugger_fixup = - FIXUP_NEEDED - && - $^P - && - ref(my $globref = \$cleanee_stash->namespace->{$f}) eq 'GLOB' - ; - - if (FIXUP_NEEDED && $need_debugger_fixup) { - # convince the Perl debugger to work - # see the comment on top of $DebuggerFixup - $DebuggerFixup->( - $f, - $sub, - $cleanee_stash, - $deleted_stash ||= Package::Stash->new("namespace::clean::deleted::$cleanee"), - ); - } - - my @symbols = map { - my $name = $_ . $f; - my $def = $cleanee_stash->get_symbol($name); - defined($def) ? [$name, $def] : () - } '$', '@', '%', ''; - - $cleanee_stash->remove_glob($f); - - # if this perl needs no renaming trick we need to - # rename the original glob after the fact - # (see commend of $DebuggerFixup - if (FIXUP_NEEDED && !FIXUP_RENAME_SUB && $need_debugger_fixup) { - *$globref = $deleted_stash->namespace->{$f}; - } - - $cleanee_stash->add_symbol(@$_) for @symbols; - } -}; - -sub clean_subroutines { - my ($nc, $cleanee, @subs) = @_; - $RemoveSubs->($cleanee, {}, @subs); -} - =head2 import Makes a snapshot of the current defined functions and installs a L<B::Hooks::EndOfScope> hook in the current scope to invoke the cleanups. -=cut - -sub import { - my ($pragma, @args) = @_; - - my (%args, $is_explicit); - - ARG: - while (@args) { - - if ($args[0] =~ /^\-/) { - my $key = shift @args; - my $value = shift @args; - $args{ $key } = $value; - } - else { - $is_explicit++; - last ARG; - } - } - - my $cleanee = exists $args{ -cleanee } ? $args{ -cleanee } : scalar caller; - if ($is_explicit) { - on_scope_end { - $RemoveSubs->($cleanee, {}, @args); - }; - } - else { - - # calling class, all current functions and our storage - my $functions = $pragma->get_functions($cleanee); - my $store = $pragma->get_class_store($cleanee); - my $stash = Package::Stash->new($cleanee); - - # except parameter can be array ref or single value - my %except = map {( $_ => 1 )} ( - $args{ -except } - ? ( ref $args{ -except } eq 'ARRAY' ? @{ $args{ -except } } : $args{ -except } ) - : () - ); - - # register symbols for removal, if they have a CODE entry - for my $f (keys %$functions) { - next if $except{ $f }; - next unless $stash->has_symbol("&$f"); - $store->{remove}{ $f } = 1; - } - - # register EOF handler on first call to import - unless ($store->{handler_is_installed}) { - on_scope_end { - $RemoveSubs->($cleanee, $store, keys %{ $store->{remove} }); - }; - $store->{handler_is_installed} = 1; - } - - return 1; - } -} =head2 unimport @@ -329,60 +392,17 @@ It will start a new section of code that defines functions to clean up. -=cut - -sub unimport { - my ($pragma, %args) = @_; - - # the calling class, the current functions and our storage - my $cleanee = exists $args{ -cleanee } ? $args{ -cleanee } : scalar caller; - my $functions = $pragma->get_functions($cleanee); - my $store = $pragma->get_class_store($cleanee); - - # register all unknown previous functions as excluded - for my $f (keys %$functions) { - next if $store->{remove}{ $f } - or $store->{exclude}{ $f }; - $store->{exclude}{ $f } = 1; - } - - return 1; -} - =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. -=cut - -sub get_class_store { - my ($pragma, $class) = @_; - my $stash = Package::Stash->new($class); - my $var = "%$STORAGE_VAR"; - $stash->add_symbol($var, {}) - unless $stash->has_symbol($var); - return $stash->get_symbol($var); -} - =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 reference to the symbol as value. -=cut - -sub get_functions { - my ($pragma, $class) = @_; - - my $stash = Package::Stash->new($class); - return { - map { $_ => $stash->get_symbol("&$_") } - $stash->list_all_symbols('CODE') - }; -} - =head1 IMPLEMENTATION DETAILS This module works through the effect that a @@ -439,8 +459,3 @@ This software is copyright (c) 2011 by L</AUTHORS> 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; -'Danger! Laws of Thermodynamics may not apply.' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/namespace-clean-0.25/t/07-debugger.t new/namespace-clean-0.26/t/07-debugger.t --- old/namespace-clean-0.25/t/07-debugger.t 2013-07-10 04:19:30.000000000 +0200 +++ new/namespace-clean-0.26/t/07-debugger.t 2015-10-07 08:03:43.000000000 +0200 @@ -1,21 +1,19 @@ use Test::More; BEGIN { - eval { require Sub::Name } - or plan skip_all => "Test requires Sub::Name"; - - eval { require Sub::Identify } - or plan skip_all => "Test requires Sub::Identify"; + require namespace::clean; + if ( + namespace::clean::_Util::DEBUGGER_NEEDS_CV_RENAME() + and + my $missing_xs = namespace::clean::_Util::_namer_load_error() + ) { + plan skip_all => $missing_xs; + } } - BEGIN { # shut up the debugger $ENV{PERLDB_OPTS} = 'NonStop'; - - # work aroud the regex + P::S::XS buggery on - # < 5.8.6 - require Package::Stash; } BEGIN { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/namespace-clean-0.25/t/10-pure-perl.t new/namespace-clean-0.26/t/10-pure-perl.t --- old/namespace-clean-0.25/t/10-pure-perl.t 2013-07-10 04:19:30.000000000 +0200 +++ new/namespace-clean-0.26/t/10-pure-perl.t 2015-10-01 05:54:37.000000000 +0200 @@ -9,13 +9,18 @@ plan skip_all => "B::Hooks::EndOfScope ($INC{'B/Hooks/EndOfScope.pm'}) loaded before the test even started >.<" if $INC{'B/Hooks/EndOfScope.pm'}; + plan skip_all => "Package::Stash ($INC{'Package/Stash.pm'}) loaded before the test even started >.<" + if $INC{'Package/Stash.pm'}; + eval { require Variable::Magic } or plan skip_all => "PP tests already executed"; $ENV{B_HOOKS_ENDOFSCOPE_IMPLEMENTATION} = 'PP'; + $ENV{PACKAGE_STASH_IMPLEMENTATION} = 'PP'; } use B::Hooks::EndOfScope 0.12; +use Package::Stash; ok( ($INC{'B/Hooks/EndOfScope/PP.pm'} && ! $INC{'B/Hooks/EndOfScope/XS.pm'}), @@ -25,6 +30,14 @@ qw|EndOfScope.pm EndOfScope/XS.pm EndOfScope/PP.pm| ; +ok( + ($INC{'Package/Stash/PP.pm'} && ! $INC{'Package/Stash/XS.pm'}), + 'PP Package::Stash loaded properly' +) || diag join "\n", + map { sprintf '%s => %s', $_, $INC{"Package/$_"} || 'undef' } + qw|Stash.pm Stash/XS.pm Stash/PP.pm| +; + use Config; use FindBin qw($Bin); use IPC::Open2 qw(open2);