5 use Fatal qw(open close);
6 #use File::Slurp 'slurp';
7 #use List::MoreUtils 'uniq';
10 print "Generate Mouse::Tiny ...\n";
13 open my $in, '<', $_[0];
19 return grep{ !$seen{$_}++ } @_;
22 require 'lib/Mouse/Spec.pm';
24 my $MouseTinyFile = shift || 'lib/Mouse/Tiny.pm';
35 && !/Spec/ # has no functionality
36 && !/TypeRegistry/ # deprecated
37 && !/\bouse/ # ouse.pm
45 'lib/Mouse/PurePerl.pm',
46 'lib/Mouse/Exporter.pm',
48 'lib/Mouse/Meta/TypeConstraint.pm',
49 'lib/Mouse/Util/TypeConstraints.pm',
52 my $contents = slurp $file;
54 $contents =~ s/__END__\b.*//s; # remove documentation
55 $contents =~ s/1;\n*$//; # remove success indicator
57 $contents =~ s{^( (?:[ ]{4})+ )}{ "\t" x (length($1) / 4) }xmsge; # spaces to tabs
59 $mouse_tiny .= "BEGIN{ # $file\n";
60 $mouse_tiny .= $contents;
64 open my $handle, ">$MouseTinyFile";
66 print { $handle } << "EOF";
67 # This file was generated by $0 from Mouse $Mouse::Spec::VERSION.
69 # ANY CHANGES MADE HERE WILL BE LOST!
73 print { $handle } << 'EOF';
74 # if regular Mouse is loaded, bail out
75 unless ($INC{'Mouse.pm'}) {
76 # tell Perl we already have all of the Mouse files loaded:
79 for my $file (@files) {
80 (my $inc = $file) =~ s{^lib/}{};
81 printf { $handle } "%-45s = __FILE__;\n", "\$INC{'$inc'}";
84 print { $handle } << 'EOF';
85 eval sprintf("#line %d %s\n", __LINE__, __FILE__) . <<'END_OF_TINY';
88 print { $handle } "\n# and now their contents\n\n";
90 print { $handle } $mouse_tiny;
92 print { $handle } << 'EOF';
95 } # unless Mouse.pm is loaded
98 print { $handle } << 'EOF';
101 Mouse::Exporter->setup_import_methods(also => 'Mouse');