Fix author/generate-mouse-tiny.pl. Now Mouse::Tiny is generated in the "make" command
[gitmo/Mouse.git] / author / generate-mouse-tiny.pl
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use File::Find;
5 use File::Slurp 'slurp';
6 use List::MoreUtils 'uniq';
7 use autodie;
8
9 require 'lib/Mouse/Spec.pm';
10
11 my $MouseTinyFile = shift || 'lib/Mouse/Tiny.pm';
12
13 my @files;
14
15 find({
16     wanted => sub {
17         push @files, $_
18             if -f $_
19             &&  /\.pm$/
20             && !/Squirrel/
21             && !/Tiny/
22             && !/Spec/         # has no functionality
23             && !/TypeRegistry/ # deprecated
24             && !/\bouse/       # ouse.pm
25     },
26     no_chdir => 1,
27 }, 'lib');
28
29 my $mouse_tiny = '';
30
31 for my $file (uniq
32         'lib/Mouse/Exporter.pm',
33         'lib/Mouse/Util.pm',
34         'lib/Mouse/Meta/TypeConstraint.pm',
35         'lib/Mouse/Util/TypeConstraints.pm',
36             sort @files) {
37
38     my $contents = slurp $file;
39
40     $contents =~ s/__END__\b.*//s;          # remove documentation
41     $contents =~ s/1;\n*$//;                # remove success indicator
42
43     $mouse_tiny .= "BEGIN{ # #file\n";
44     $mouse_tiny .= $contents;
45     $mouse_tiny .= "}\n";
46 }
47
48 open my $handle, ">$MouseTinyFile";
49
50 print { $handle } << "EOF";
51 # This file was generated by $0 from Mouse $Mouse::Spec::VERSION.
52 #
53 # ANY CHANGES MADE HERE WILL BE LOST!
54
55 EOF
56
57 print { $handle } << 'EOF';
58 # if regular Mouse is loaded, bail out
59 unless ($INC{'Mouse.pm'}) {
60 EOF
61
62 for my $file (@files) {
63     (my $inc = $file) =~ s{^lib/}{};
64     printf { $handle } "%-45s = __FILE__;\n", "\$INC{'$inc'}";
65 }
66
67 print { $handle } << 'EOF';
68 eval sprintf("#line %d %s\n", __LINE__, __FILE__) . <<'END_OF_TINY';
69
70 # tell Perl we already have all of the Mouse files loaded:
71 EOF
72
73 print { $handle } "\n# and now their contents\n\n";
74
75 print { $handle } $mouse_tiny;
76
77 print { $handle } << 'EOF';
78 END_OF_TINY
79     die $@ if $@;
80 } # unless Mouse.pm is loaded
81 EOF
82
83 print { $handle } << 'EOF';
84 package Mouse::Tiny;
85
86 Mouse::Exporter->setup_import_methods(also => 'Mouse');
87
88 1;
89 EOF
90
91 close $handle;