X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=author%2Fgenerate-mouse-tiny.pl;h=f80a03178e921d0790abba1501c06f5a3b200526;hb=6e64f8097e17ea8b7b950fee35046dfa43a5b4f3;hp=3719a288f49ca1be3e624aa9fa05f553fc144fbf;hpb=7e38a8416a8658b6551f16cf5728bd3d0457c163;p=gitmo%2FMouse.git diff --git a/author/generate-mouse-tiny.pl b/author/generate-mouse-tiny.pl index 3719a28..f80a031 100755 --- a/author/generate-mouse-tiny.pl +++ b/author/generate-mouse-tiny.pl @@ -2,61 +2,105 @@ use strict; use warnings; use File::Find; -use File::Slurp 'slurp'; -use List::MoreUtils 'uniq'; +use Fatal qw(open close); +#use File::Slurp 'slurp'; +#use List::MoreUtils 'uniq'; +#use autodie; -unlink 'lib/Mouse/Tiny.pm'; +print "Generate Mouse::Tiny ...\n"; + +sub slurp { + open my $in, '<', $_[0]; + local $/; + return scalar <$in>; +} +sub uniq{ + my %seen; + return grep{ !$seen{$_}++ } @_; +} + +require 'lib/Mouse/Spec.pm'; + +my $MouseTinyFile = shift || 'lib/Mouse/Tiny.pm'; my @files; find({ - wanted => sub { push @files, $_ if -f $_ && !/Squirrel|MouseX|\.sw[po]$/ }, + wanted => sub { + push @files, $_ + if -f $_ + && /\.pm$/ + && !/Squirrel/ + && !/Tiny/ + && !/Spec/ # has no functionality + && !/TypeRegistry/ # deprecated + && !/\bouse/ # ouse.pm + }, no_chdir => 1, }, 'lib'); my $mouse_tiny = ''; -for my $file (uniq 'lib/Mouse/Util.pm', sort @files) { +for my $file (uniq + 'lib/Mouse/Exporter.pm', + 'lib/Mouse/Util.pm', + 'lib/Mouse/PurePerl.pm', + 'lib/Mouse/Meta/TypeConstraint.pm', + 'lib/Mouse/Util/TypeConstraints.pm', + sort @files) { + my $contents = slurp $file; $contents =~ s/__END__\b.*//s; # remove documentation $contents =~ s/1;\n*$//; # remove success indicator - $contents =~ s/^.*\n//; # remove shebang - - $contents =~ s/^use Mouse\S*\s*\n//mg; # we're already loading everything - $contents =~ s/^use (Mouse\S*)\s*(.+);/BEGIN { $1->import($2) }/mg; + $mouse_tiny .= "BEGIN{ # #file\n"; $mouse_tiny .= $contents; + $mouse_tiny .= "}\n"; } -open my $handle, '>lib/Mouse/Tiny.pm' or die "Can't write lib/Mouse/Tiny.pm: $!"; +open my $handle, ">$MouseTinyFile"; -print { $handle } << 'EOF'; -# THIS FILE IS AUTOGENERATED! +print { $handle } << "EOF"; +# This file was generated by $0 from Mouse $Mouse::Spec::VERSION. +# +# ANY CHANGES MADE HERE WILL BE LOST! + +EOF +print { $handle } << 'EOF'; # if regular Mouse is loaded, bail out unless ($INC{'Mouse.pm'}) { -eval q{ - -# tell Perl we already have all of the Mouse files loaded: + # tell Perl we already have all of the Mouse files loaded: EOF for my $file (@files) { (my $inc = $file) =~ s{^lib/}{}; - print { $handle } "\$INC{'$inc'} = __FILE__;\n"; + printf { $handle } "%-45s = __FILE__;\n", "\$INC{'$inc'}"; } +print { $handle } << 'EOF'; +eval sprintf("#line %d %s\n", __LINE__, __FILE__) . <<'END_OF_TINY'; +EOF + print { $handle } "\n# and now their contents\n\n"; print { $handle } $mouse_tiny; -print { $handle } "}; #eval\n} #unless\n\n"; +print { $handle } << 'EOF'; +END_OF_TINY + die $@ if $@; +} # unless Mouse.pm is loaded +EOF print { $handle } << 'EOF'; package Mouse::Tiny; -use base 'Mouse'; +Mouse::Exporter->setup_import_methods(also => 'Mouse'); + +1; EOF -print { $handle } "1;\n\n"; +close $handle; +print "done.\n";