package
MyBuilder;
use
warnings
qw(FATAL all NONFATAL misc)
;
sub
lexpand {
return
unless
defined
$_
[0];
%{
$_
[0]};
}
sub
my_cpanfile_specs {
my
(
$pack
) =
@_
;
my
$file
= Module::CPANfile->load(
"cpanfile"
);
my
$prereq
=
$file
->prereq_specs;
my
%args
;
%{
$args
{requires}} = lexpand(
$prereq
->{runtime}{requires});
foreach
my
$phase
(
qw/configure runtime build test/
) {
%{
$args
{
$phase
.
"_requires"
}} = lexpand(
$prereq
->{
$phase
}{requires});
}
%{
$args
{recommends}} = (
map
{lexpand(
$prereq
->{
$_
}{recommends})}
keys
%$prereq
);
%args
}
sub
process_yatt_dist_files {
my
(
$self
) =
@_
;
$self
->pm_files(\
my
%pm_files
);
$self
->pod_files(\
my
%pod_files
);
$self
->script_files(\
my
%script_files
);
foreach
my
$desc
([
pm
=> \
%pm_files
], [
pod
=> \
%pod_files
]) {
my
(
$ext
,
$map
) =
@$desc
;
my
(
$src
,
$dest
) = (
"Lite.$ext"
,
"lib/YATT/Lite.$ext"
);
$map
->{
$src
} =
$dest
;
$self
->_yatt_dist_ensure_blib_copied(
$src
,
$dest
);
}
find({
no_chdir
=> 1,
wanted
=>
sub
{
return
$self
->prune
if
/^\.git|^lib$/;
return
if
-d
$_
;
my
$dest
;
if
(/\.pm$/) {
$dest
= \
%pm_files
}
elsif
(/\.pod$/) {
$dest
= \
%pod_files
}
else
{
return
;
}
my
$d
=
$dest
->{
$_
} =
"lib/YATT/$_"
;
$self
->_yatt_dist_ensure_blib_copied(
$_
,
$d
);
}},
"Lite"
);
find({
no_chdir
=> 1,
wanted
=>
sub
{
return
$self
->prune
if
/^\.git|^lib$/;
return
if
-d
$_
;
return
unless
-x
$_
and m{/yatt[^/]*$};
my
$d
=
$script_files
{
$_
} =
"bin/"
. File::Basename::basename(
$_
);
$self
->_yatt_dist_ensure_blib_copied(
$_
,
$d
);
}},
'scripts'
);
find({
no_chdir
=> 1,
wanted
=>
sub
{
return
$self
->prune
if
/^\.git|^lib$/;
return
if
-d
$_
;
return
unless
m{\.el$};
my
$d
=
$pm_files
{
$_
} =
"lib/YATT/$_"
;
$self
->_yatt_dist_ensure_blib_copied(
$_
,
$d
);
}},
'elisp'
);
}
sub
_yatt_dist_ensure_blib_copied {
my
(
$self
,
$from
,
$dest
) =
@_
;
my
$to
=
$self
->catfile(
$self
->blib,
$dest
);
if
(
$ENV
{DEBUG_BUILD}) {
print
STDERR
"$from => $to\n"
;
}
else
{
$self
->copy_if_modified(
from
=>
$from
,
to
=>
$to
);
}
}
sub
prune {
$File::Find::prune
= 1;
}
sub
dist_version {
my
(
$self
) =
@_
;
my
$ver
=
$self
->SUPER::dist_version
or
die
"Can't detect dist_version"
;
$ver
=~ s/^v//;
$ver
;
}
1;