1# -*- mode: perl; c-basic-offset: 4; indent-tabs-mode: nil; -*-
2
3use strict;
4use ExtUtils::MakeMaker qw(WriteMakefile);
5# See lib/ExtUtils/MakeMaker.pm for details of how to influence
6# the contents of the Makefile that is written.
7
8# Normalize version strings like 6.30_02 to 6.3002,
9# so that we can do numerical comparisons on it.
10my $eumm_version = $ExtUtils::MakeMaker::VERSION;
11$eumm_version =~ s/_//;
12
13my $module = 'WWW::Mechanize::Shell';
14(my $main_file = "lib/$module.pm" ) =~ s!::!/!g;
15(my $distbase = $module) =~ s!::!-!g;
16my $distlink = $distbase;
17
18my @tests = map { glob $_ } 't/*.t', 't/*/*.t';
19
20my %module = (
21    NAME                => $module,
22    AUTHOR              => q{Max Maischein <corion@cpan.org>},
23    VERSION_FROM        => $main_file,
24    ABSTRACT_FROM       => $main_file,
25    META_MERGE => {
26        "meta-spec" => { version => 2 },
27        resources => {
28            repository => {
29                web => "https://github.com/Corion/$distlink",
30                url => "git://github.com/Corion/$distlink.git",
31                type => 'git',
32            },
33            bugtracker => "https://rt.cpan.org/Public/Dist/Display.html?Name=$distbase",
34            license    => "https://dev.perl.org/licenses/",
35        },
36        dynamic_config   => 0, # we promise to keep META.* up-to-date
37        x_static_install => 1, # we are pure Perl and don't do anything fancy
38    },
39
40    MIN_PERL_VERSION => '5.006', # I use // in some places
41
42    'LICENSE'=> 'perl',
43
44    PL_FILES            => {},
45    BUILD_REQUIRES => {
46        'ExtUtils::MakeMaker' => 0,
47    },
48
49    PREREQ_PM    => {
50        'Term::Shell' => 0.02,
51        'parent' => 0,
52        'URI::URL' => 0.00,
53        'Test::Harness' => 2.30,
54        'LWP' => 5.69,
55        'LWP::UserAgent' => 0,
56        'WWW::Mechanize' => 1.20,
57        'WWW::Mechanize::Link' => 1.20,
58        'WWW::Mechanize::FormFiller' => 0.05,
59        'Hook::LexWrap' => 0.20,
60        'HTTP::Cookies' => 0,
61        'HTML::Display' => 0,
62        'HTML::TokeParser::Simple' => 2.0,
63    },
64    TEST_REQUIRES => {
65        'Test::More'              => 0,
66        'CGI'                     => 0,
67        'File::Temp'              => 0,
68        'Test::HTTP::LocalServer' => '0.68', # we need basic auth handling
69        'URI'                     => 0,
70        'Test::Without::Module'   => 0, # we lazy-load some optional modules
71    },
72
73    dist                => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
74    clean               => { FILES => "$distbase-*" },
75
76    test            => { TESTS => join( ' ', @tests ) },
77);
78
79# This is so that we can do
80#     require 'Makefile.PL'
81# and then call get_module_info
82
83sub get_module_info { %module }
84
85if( ! caller ) {
86    # I should maybe use something like Shipwright...
87    regen_README($main_file);
88    regen_EXAMPLES() if -d 'examples';
89    WriteMakefile1(get_module_info);
90};
91
921;
93
94sub WriteMakefile1 {  #Written by Alexandr Ciornii, version 0.21. Added by eumm-upgrade.
95    my %params=@_;
96    my $eumm_version=$ExtUtils::MakeMaker::VERSION;
97    $eumm_version=eval $eumm_version;
98    die "EXTRA_META is deprecated" if exists $params{EXTRA_META};
99    die "License not specified" if not exists $params{LICENSE};
100    if ($params{BUILD_REQUIRES} and $eumm_version < 6.5503) {
101        #EUMM 6.5502 has problems with BUILD_REQUIRES
102        $params{PREREQ_PM}={ %{$params{PREREQ_PM} || {}} , %{$params{BUILD_REQUIRES}} };
103        delete $params{BUILD_REQUIRES};
104    }
105    if ($params{TEST_REQUIRES} and $eumm_version < 6.64) {
106        $params{PREREQ_PM}={ %{$params{PREREQ_PM} || {}} , %{$params{TEST_REQUIRES}} };
107        delete $params{TEST_REQUIRES};
108    }
109    delete $params{CONFIGURE_REQUIRES} if $eumm_version < 6.52;
110    delete $params{MIN_PERL_VERSION} if $eumm_version < 6.48;
111    delete $params{META_MERGE} if $eumm_version < 6.46;
112    delete $params{META_ADD} if $eumm_version < 6.46;
113    delete $params{LICENSE} if $eumm_version < 6.31;
114    delete $params{AUTHOR} if $] < 5.005;
115    delete $params{ABSTRACT_FROM} if $] < 5.005;
116    delete $params{BINARY_LOCATION} if $] < 5.005;
117
118    WriteMakefile(%params);
119}
120
121sub regen_README {
122    # README is the short version that just tells people what this is
123    # and how to install it
124    eval {
125        # Get description
126        my $readme = join "\n",
127            pod_section($_[0], 'NAME', 'no heading' ),
128            pod_section($_[0], 'DESCRIPTION' ),
129            <<INSTALL,
130
131INSTALLATION
132
133This is a Perl module distribution. It should be installed with whichever
134tool you use to manage your installation of Perl, e.g. any of
135
136  cpanm .
137  cpan  .
138  cpanp -i .
139
140Consult https://www.cpan.org/modules/INSTALL.html for further instruction.
141Should you wish to install this module manually, the procedure is
142
143  perl Makefile.PL
144  make
145  make test
146  make install
147
148INSTALL
149            pod_section($_[0], 'REPOSITORY'),
150            pod_section($_[0], 'SUPPORT'),
151            pod_section($_[0], 'TALKS'),
152            pod_section($_[0], 'KNOWN ISSUES'),
153            pod_section($_[0], 'BUG TRACKER'),
154            pod_section($_[0], 'CONTRIBUTING'),
155            pod_section($_[0], 'SEE ALSO'),
156            pod_section($_[0], 'AUTHOR'),
157            pod_section($_[0], 'LICENSE' ),
158            pod_section($_[0], 'COPYRIGHT' ),
159    ;
160        update_file( 'README', $readme );
161    };
162    # README.mkdn is the documentation that will be shown as the main
163    # page of the repository on Github. Hence we recreate the POD here
164    # as Markdown
165    eval {
166        require Pod::Markdown;
167
168        my $parser = Pod::Markdown->new();
169
170        # Read POD from Module.pm and write to README
171        $parser->parse_from_file($_[0]);
172        my $readme_mkdn = <<STATUS . $parser->as_markdown;
173
174[![Travis Build Status](https://travis-ci.org/Corion/$distlink.svg?branch=master)](https://travis-ci.org/Corion/$distlink)
175[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/Corion/$distlink?branch=master&svg=true)](https://ci.appveyor.com/project/Corion/$distlink)
176
177STATUS
178        update_file( 'README.mkdn', $readme_mkdn );
179    };
180}
181
182sub pod_section {
183    my( $filename, $section, $remove_heading ) = @_;
184    open my $fh, '<', $filename
185        or die "Couldn't read '$filename': $!";
186
187    my @section =
188        grep { /^=head1\s+$section/.../^=/ } <$fh>;
189
190    # Trim the section
191    if( @section ) {
192        pop @section if $section[-1] =~ /^=/;
193        shift @section if $remove_heading;
194
195        pop @section
196            while @section and $section[-1] =~ /^\s*$/;
197        shift @section
198            while @section and $section[0] =~ /^\s*$/;
199    };
200
201    @section = map { $_ =~ s!^=\w+\s+!!; $_ } @section;
202    return join "", @section;
203}
204
205sub regen_EXAMPLES {
206    my $perl = $^X;
207    if ($perl =~/\s/) {
208        $perl = qq{"$perl"};
209    };
210    (my $example_file = $main_file) =~ s!\.pm$!/Examples.pm!;
211    my $examples = `$perl -w examples/gen_examples_pod.pl`;
212    if ($examples) {
213        warn "(Re)Creating $example_file\n";
214        $examples =~ s/\r\n/\n/g;
215        update_file( $example_file, $examples );
216    };
217};
218
219sub update_file {
220    my( $filename, $new_content ) = @_;
221    my $content;
222    if( -f $filename ) {
223        open my $fh, '<', $filename
224            or die "Couldn't read '$filename': $!";
225        binmode $fh;
226        local $/;
227        $content = <$fh>;
228    };
229
230    if( $content ne $new_content ) {
231        if( open my $fh, '>', $filename ) {
232            binmode $fh;
233            print $fh $new_content;
234        } else {
235            warn "Couldn't (re)write '$filename': $!";
236        };
237    };
238}
239