The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Build.PL 582
Changes 027
MANIFEST 01
META.json 1119
META.yml 1721
README.md 11
cpanfile 13
lib/App/scan_prereqs_cpanfile.pm 11
minil.toml 01
script/scan-prereqs-cpanfile 963
10 files changed (This is a version diff) 98139
@@ -4,65 +4,9 @@
 # =========================================================================
 
 use 5.008_001;
-
 use strict;
-use warnings;
-use utf8;
-
-use Module::Build;
-use File::Basename;
-use File::Spec;
-use CPAN::Meta;
-use CPAN::Meta::Prereqs;
-
-my %args = (
-    license              => 'perl',
-    dynamic_config       => 0,
-
-    configure_requires => {
-        'Module::Build' => 0.38,
-    },
-
-    name            => 'App-scan_prereqs_cpanfile',
-    module_name     => 'App::scan_prereqs_cpanfile',
-    allow_pureperl => 0,
-
-    script_files => [glob('script/*'), glob('bin/*')],
 
-    test_files           => ((-d '.git' || $ENV{RELEASE_TESTING}) && -d 'xt') ? 't/ xt/' : 't/',
-    recursive_test_files => 1,
-);
-if (-d 'share') {
-    $args{share_dir} = 'share';
-}
+use Module::Build::Tiny 0.035;
 
-my $builder = Module::Build->subclass(
-    class => 'MyBuilder',
-    code => q{
-        sub ACTION_distmeta {
-            die "Do not run distmeta. Install Minilla and `minil install` instead.\n";
-        }
-        sub ACTION_installdeps {
-            die "Do not run installdeps. Run `cpanm --installdeps .` instead.\n";
-        }
-    }
-)->new(%args);
-$builder->create_build_script();
+Build_PL();
 
-my $mbmeta = CPAN::Meta->load_file('MYMETA.json');
-my $meta = CPAN::Meta->load_file('META.json');
-my $prereqs_hash = CPAN::Meta::Prereqs->new(
-    $meta->prereqs
-)->with_merged_prereqs(
-    CPAN::Meta::Prereqs->new($mbmeta->prereqs)
-)->as_string_hash;
-my $mymeta = CPAN::Meta->new(
-    {
-        %{$meta->as_struct},
-        prereqs => $prereqs_hash
-    }
-);
-print "Merging cpanfile prereqs to MYMETA.yml\n";
-$mymeta->save('MYMETA.yml', { version => 1.4 });
-print "Merging cpanfile prereqs to MYMETA.json\n";
-$mymeta->save('MYMETA.json', { version => 2 });
@@ -1,5 +1,32 @@
 Revision history for Perl extension App-scan_prereqs_cpanfile
 
+1.02 2014-07-16T06:47:07Z
+
+    - Added experimental --scan-test-requires option.
+      (songmu)
+
+1.01 2014-05-02T01:33:31Z
+
+    - ignore ./.build/
+
+1.00 2014-04-02T22:49:36Z
+
+    - Make Perl::PrereqScanner::Lite as the default scanner.
+      (moznion)
+
+0.10 2014-03-21T10:14:20Z
+
+    - --fast option
+      (moznion)
+
+0.09 2014-02-26T05:45:47Z
+
+    commit 8b855a107aedf0248fc7b6e42f7a981e3ec0f340
+    Author: HIROSE Masaaki <hirose31@gmail.com>
+    Date:   Wed Feb 26 14:37:58 2014 +0900
+
+        Treat t/(author|release)-*.t as develop files
+
 0.08 2013-06-17T06:28:03Z
 
     - Do not use /usr/bin/env
@@ -5,6 +5,7 @@ META.json
 README.md
 cpanfile
 lib/App/scan_prereqs_cpanfile.pm
+minil.toml
 script/scan-prereqs-cpanfile
 t/00_compile.t
 META.yml
@@ -4,8 +4,10 @@
       "tokuhirom <tokuhirom@gmail.com>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Minilla/v0.5.3",
-   "license" : "perl_5",
+   "generated_by" : "Minilla/v2.1.0",
+   "license" : [
+      "perl_5"
+   ],
    "meta-spec" : {
       "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
       "version" : "2"
@@ -19,26 +21,29 @@
          "share",
          "eg",
          "examples",
-         "author"
+         "author",
+         "builder"
       ]
    },
    "prereqs" : {
       "configure" : {
          "requires" : {
-            "CPAN::Meta" : "0",
-            "CPAN::Meta::Prereqs" : "0",
-            "Module::Build" : "0.38"
+            "Module::Build::Tiny" : "0.035"
          }
       },
       "develop" : {
          "requires" : {
             "Test::CPAN::Meta" : "0",
-            "Test::MinimumVersion" : "0.10108",
+            "Test::MinimumVersion::Fast" : "0.04",
+            "Test::PAUSE::Permissions" : "0.04",
             "Test::Pod" : "1.41",
             "Test::Spellunker" : "v0.2.7"
          }
       },
       "runtime" : {
+         "recommends" : {
+            "Test::Requires::Scanner" : "0"
+         },
          "requires" : {
             "CPAN::Meta" : "0",
             "CPAN::Meta::Requirements" : "0",
@@ -46,7 +51,7 @@
             "Module::CPANfile" : "0.9020",
             "Module::CoreList" : "0",
             "Module::Metadata" : "0",
-            "Perl::PrereqScanner" : "0",
+            "Perl::PrereqScanner::Lite" : "0.15",
             "perl" : "5.008005",
             "version" : "0"
          }
@@ -60,7 +65,7 @@
    "provides" : {
       "App::scan_prereqs_cpanfile" : {
          "file" : "lib/App/scan_prereqs_cpanfile.pm",
-         "version" : "0.08"
+         "version" : "1.02"
       }
    },
    "release_status" : "stable",
@@ -74,9 +79,12 @@
          "web" : "https://github.com/tokuhirom/App-scan_prereqs_cpanfile"
       }
    },
-   "version" : "0.08",
+   "version" : "1.02",
    "x_contributors" : [
       "Syohei YOSHIDA <syohex@gmail.com>",
-      "Kan Fushihara <kan.fushihara@gmail.com>"
+      "Kan Fushihara <kan.fushihara@gmail.com>",
+      "HIROSE Masaaki <hirose31@gmail.com>",
+      "moznion <moznion@gmail.com>",
+      "Songmu <y.songmu@gmail.com>"
    ]
 }
@@ -3,17 +3,15 @@ abstract: 'Scan prerequisite modules and generate CPANfile'
 author:
   - 'tokuhirom <tokuhirom@gmail.com>'
 build_requires:
-  Test::More: 0.98
+  Test::More: '0.98'
 configure_requires:
-  CPAN::Meta: 0
-  CPAN::Meta::Prereqs: 0
-  Module::Build: 0.38
+  Module::Build::Tiny: '0.035'
 dynamic_config: 0
-generated_by: 'Minilla/v0.5.3, CPAN::Meta::Converter version 2.130880'
+generated_by: 'Minilla/v2.1.0, CPAN::Meta::Converter version 2.141520'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
-  version: 1.4
+  version: '1.4'
 name: App-scan_prereqs_cpanfile
 no_index:
   directory:
@@ -24,25 +22,31 @@ no_index:
     - eg
     - examples
     - author
+    - builder
 provides:
   App::scan_prereqs_cpanfile:
     file: lib/App/scan_prereqs_cpanfile.pm
-    version: 0.08
+    version: '1.02'
+recommends:
+  Test::Requires::Scanner: '0'
 requires:
-  CPAN::Meta: 0
-  CPAN::Meta::Requirements: 0
-  Getopt::Long: 0
-  Module::CPANfile: 0.9020
-  Module::CoreList: 0
-  Module::Metadata: 0
-  Perl::PrereqScanner: 0
-  perl: 5.008005
-  version: 0
+  CPAN::Meta: '0'
+  CPAN::Meta::Requirements: '0'
+  Getopt::Long: '0'
+  Module::CPANfile: '0.9020'
+  Module::CoreList: '0'
+  Module::Metadata: '0'
+  Perl::PrereqScanner::Lite: '0.15'
+  perl: '5.008005'
+  version: '0'
 resources:
   bugtracker: https://github.com/tokuhirom/App-scan_prereqs_cpanfile/issues
   homepage: https://github.com/tokuhirom/App-scan_prereqs_cpanfile
   repository: git://github.com/tokuhirom/App-scan_prereqs_cpanfile.git
-version: 0.08
+version: '1.02'
 x_contributors:
   - 'Syohei YOSHIDA <syohex@gmail.com>'
   - 'Kan Fushihara <kan.fushihara@gmail.com>'
+  - 'HIROSE Masaaki <hirose31@gmail.com>'
+  - 'moznion <moznion@gmail.com>'
+  - 'Songmu <y.songmu@gmail.com>'
@@ -4,7 +4,7 @@ App::scan\_prereqs\_cpanfile - Scan prerequisite modules and generate CPANfile
 
 # DESCRIPTION
 
-Please look [scan-prereqs-cpanfile](http://search.cpan.org/perldoc?scan-prereqs-cpanfile).
+Please look [scan-prereqs-cpanfile](https://metacpan.org/pod/scan-prereqs-cpanfile).
 
 # LICENSE
 
@@ -4,9 +4,11 @@ requires 'Getopt::Long';
 requires 'Module::CPANfile', '0.9020';
 requires 'Module::CoreList';
 requires 'Module::Metadata';
-requires 'Perl::PrereqScanner';
+requires 'Perl::PrereqScanner::Lite', '0.15';
 requires 'version';
 
+recommends 'Test::Requires::Scanner';
+
 on test => sub {
     requires 'Test::More', 0.98;
 };
@@ -2,7 +2,7 @@ package App::scan_prereqs_cpanfile;
 use strict;
 use warnings;
 use 5.008005;
-our $VERSION = "0.08";
+our $VERSION = "1.02";
 
 
 
@@ -0,0 +1 @@
+module_maker="ModuleBuildTiny"
@@ -6,7 +6,6 @@ use 5.008001;
 
 use version;
 use CPAN::Meta;
-use Perl::PrereqScanner;
 use Getopt::Long;
 use CPAN::Meta::Requirements ();
 use File::Find qw(find);
@@ -15,8 +14,9 @@ use Module::CPANfile;
 use File::Spec;
 use File::Basename ();
 use Module::Metadata;
+use Perl::PrereqScanner::Lite;
 
-our $VERSION = '0.08';
+our $VERSION = '1.02';
 
 sub debugf {
     if ($ENV{SCAN_PREREQS_CPANFILE_DEBUG}) {
@@ -33,16 +33,18 @@ sub debugf {
 my $version;
 my $diff;
 my $include_empty;
-my @ignore = qw(eg examples share fatlib _build .git blib local);
+my $scan_test_requires;
+my @ignore = qw(eg examples share fatlib _build .git blib local .build);
 my $add_ignore;
 my $p = Getopt::Long::Parser->new(
     config => [qw(posix_default no_ignore_case auto_help)]
 );
 $p->getoptions(
     'version!'       => \$version,
-    'diff=s' => \$diff,
-    'ignore=s' => \$add_ignore,
+    'diff=s'         => \$diff,
+    'ignore=s'       => \$add_ignore,
     'include-empty!' => \$include_empty,
+    'scan-test-requires' => \$scan_test_requires,
 );
 push @ignore, split /,/,$add_ignore if $add_ignore;
 if ($version) {
@@ -71,6 +73,10 @@ sub main {
     # develop
     my $develop_prereqs = scan($develop_files, \@inner_packages, $meta_prereqs, [qw(develop test runtime)], 'develop', +{ %{$runtime_prereqs||{}}, %{$test_prereqs||{}}});
 
+    if ($scan_test_requires) {
+        $develop_prereqs = scan_test_requires($develop_prereqs);
+    }
+
     print Module::CPANfile->from_prereqs(
         {
             runtime => {
@@ -131,7 +137,10 @@ sub scan_files {
     my $combined = CPAN::Meta::Requirements->new;
     for my $file (@files) {
         debugf("Reading %s", $file);
-        my $prereqs = Perl::PrereqScanner->new->scan_file($file);
+
+        my $scanner = Perl::PrereqScanner::Lite->new;
+        $scanner->add_extra_scanner('Moose');
+        my $prereqs = $scanner->scan_file($file);
         $combined->add_requirements($prereqs);
     }
     my $prereqs = $combined->as_string_hash;
@@ -216,7 +225,12 @@ sub find_perl_files {
                     push @configure_files, $_
                 } elsif ($topdir eq 't') {
                     if (/\.(pl|pm|psgi|t)$/) {
-                        push @test_files, $_
+                        if ($basename =~ /^(?:author|release)-/) {
+                            # dzil creates author test files to t/author-XXX.t
+                            push @develop_files, $_
+                        } else {
+                            push @test_files, $_
+                        }
                     }
                 } elsif ($topdir eq 'xt' || $topdir eq 'author' || $topdir eq 'benchmark') {
                     if (/\.(pl|pm|psgi|t)$/) {
@@ -245,6 +259,42 @@ sub find_perl_files {
     return (\@runtime_files, \@test_files, \@configure_files, \@develop_files);
 }
 
+sub scan_test_requires {
+    my $develop_prereqs = shift;
+
+    require Test::Requires::Scanner;
+
+    my @test_files;
+    find(
+        {
+            no_chdir => 1,
+            wanted   => sub {
+                return if $_ eq '.';
+                return if -S $_; # Ignore UNIX socket
+
+                my (undef, $topdir, ) = File::Spec->splitdir($_);
+                if (($topdir eq 'xt' || $topdir eq 't') && /\.t$/ ) {
+                    push @test_files, $_
+                }
+            },
+        },
+        '.'
+    );
+    my $test_requires_prereqs = Test::Requires::Scanner->scan_files(@test_files);
+
+    for my $module (keys %$test_requires_prereqs) {
+        my $version = $test_requires_prereqs->{$module};
+
+        if (! exists $develop_prereqs->{$module} ||
+            parse_version($version) > parse_version($develop_prereqs->{$module})
+        ) {
+            $develop_prereqs->{$module} = $version || 0;
+        }
+    }
+
+    return $develop_prereqs;
+}
+
 __END__
 
 =head1 NAME
@@ -301,11 +351,15 @@ Ignore some directories.
 By default, phases without any prereqs are not dumped, By giving this option, cpanfile will have an empty block such as:
 
     on test => sub {
-    
+
     };
 
 Defaults to false.
 
+=item --scan-test-requires (EXPERIMENTAL)
+
+Scan test files and include the modules specified by L<Test::Requires> as 'develop' requires.
+
 =back
 
 =head1 AUTHOR
@@ -314,5 +368,5 @@ Tokuhiro Matsuno
 
 =head1 SEE ALSO
 
-L<Module::CPANfile>, L<Perl::PrereqScanner>
+L<Module::CPANfile>, L<Perl::PrereqScanner::Lite>