X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMouse.git;a=blobdiff_plain;f=tool%2Fgenerate-mouse-tiny.pl;fp=tool%2Fgenerate-mouse-tiny.pl;h=71d6b60d91be7c942567cd2e2ab197ee01d6cb0d;hp=0000000000000000000000000000000000000000;hb=bd0fe31fdcb1aefad78cad60d01dd0615e2cba9c;hpb=f259aaad8fd53f69a43ac932eb136cd77720c596 diff --git a/tool/generate-mouse-tiny.pl b/tool/generate-mouse-tiny.pl new file mode 100644 index 0000000..71d6b60 --- /dev/null +++ b/tool/generate-mouse-tiny.pl @@ -0,0 +1,106 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use File::Find; +use Fatal qw(open close); +#use File::Slurp 'slurp'; +#use List::MoreUtils 'uniq'; +#use autodie; + +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 $_ + && /\.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/PurePerl.pm', + 'lib/Mouse/Exporter.pm', + 'lib/Mouse/Util.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 + + $mouse_tiny .= "BEGIN{ # $file\n"; + $mouse_tiny .= $contents; + $mouse_tiny .= "}\n"; +} + +open my $handle, ">$MouseTinyFile"; + +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'}) { + # tell Perl we already have all of the Mouse files loaded: +EOF + +for my $file (@files) { + (my $inc = $file) =~ s{^lib/}{}; + 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 } << 'EOF'; +END_OF_TINY + die $@ if $@; +} # unless Mouse.pm is loaded +EOF + +print { $handle } << 'EOF'; +package Mouse::Tiny; + +Mouse::Exporter->setup_import_methods(also => 'Mouse'); + +1; +EOF + +close $handle; + +print "done.\n";