#!perl
use
5.008001;
debugf find_perl_files scan_inner_packages scan scan_test_requires load_diff_src
)
;
my
$version
;
my
$diff
;
my
$include_empty
;
my
$scan_test_requires
;
my
$dir
=
"."
;
my
$ignorefile
;
my
$ignore_regexp
;
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
,
'ignore-file=s'
=> \
$ignorefile
,
'include-empty!'
=> \
$include_empty
,
'scan-test-requires'
=> \
$scan_test_requires
,
'dir=s'
=> \
$dir
,
);
push
@ignore
,
split
/,/,
$add_ignore
if
$add_ignore
;
if
(
$ignorefile
) {
! -r
$ignorefile
&&
die
"Unable to read ignore-file '$ignorefile' !"
;
open
my
$fh
,
'<'
,
$ignorefile
;
chomp
(
my
@lines
= <
$fh
>);
$ignore_regexp
=
join
'|'
,
@lines
;
close
$fh
;
}
if
(
$version
) {
printf
"%s %s\n"
,
File::Basename::basename($0),
$App::scan_prereqs_cpanfile::VERSION
;
exit
0;
}
{
my
(
$runtime_files
,
$test_files
,
$configure_files
,
$develop_files
) = find_perl_files(
$dir
,
ignore
=> \
@ignore
,
ignore_regexp
=>
$ignore_regexp
);
debugf(
$develop_files
);
my
@inner_packages
= scan_inner_packages(
@$test_files
,
@$runtime_files
,
@$configure_files
,
@$develop_files
);
my
$meta_prereqs
=
$diff
? load_diff_src(
$diff
) : +{};
my
$runtime_prereqs
= scan(
$runtime_files
, \
@inner_packages
,
$meta_prereqs
, [
qw(runtime)
],
'runtime'
, +{});
my
$test_prereqs
= scan(
$test_files
, \
@inner_packages
,
$meta_prereqs
, [
qw(test runtime)
],
'test'
,
$runtime_prereqs
);
my
$configure_prereqs
= scan(
$configure_files
, \
@inner_packages
,
$meta_prereqs
, [
qw(configure runtime)
],
'configure'
,
$runtime_prereqs
);
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(
$dir
,
$develop_prereqs
);
}
print
Module::CPANfile->from_prereqs(
{
runtime
=> {
requires
=>
$runtime_prereqs
,
},
configure
=> {
requires
=>
$configure_prereqs
,
},
test
=> {
requires
=>
$test_prereqs
,
},
develop
=> {
requires
=>
$develop_prereqs
,
},
}
)->to_string(
$include_empty
);
}