#!/usr/bin/perl
my
$o
= gopts(
'a:'
);
sub
abs_distro {
$o
->{a} ||=
'./'
;
my
$distdir
= Cwd::abs_path(
$o
->{a}) or
die
;
-d
$distdir
or
die
(
"$distdir is not even a directory"
);
-f
"$distdir/Makefile.PL"
or
die
(
"there is no Makefile.PL at '$distdir'"
);
return
$distdir
;
}
my
$abs_loc
= abs_distro();
debug(
"DEBUG ON, distro is $abs_loc"
);
my
$abs_makefile
=
"$abs_loc/Makefile.PL"
;
my
$abs_manifest
=
"$abs_loc/MANIFEST"
;
mkdir
"$abs_loc/inc"
;
mkdir
"$abs_loc/inc/Devel"
;
debug(
"made dirs"
);
my
@pm
= <DATA>;
open
( PMF,
'>'
,
"$abs_loc/inc/Devel/AssertEXE.pm"
) or
die
($!);
print
PMF
@pm
;
close
PMF;
debug(
"wrote module "
.
scalar
@pm
);
_file_prepend(
$abs_makefile
,
qq{use lib incu;\nuse Devel::AssertEXE qw(@ARGV);\n}
);
_file_prepend(
$abs_manifest
,
'inc/Devel/AssertEXE.pm'
);
sub
_file_prepend {
my
$abs
=
shift
;
my
$lineid
=
" #__assertexe__#\n"
;
my
@lines
;
for
my
$arg
(
@_
){
for
(
split
( /\n/,
$arg
) ){
push
@lines
,
"$_$lineid"
;
}
}
defined
@lines
or
die
;
if
(
open
(ORI,
'<'
,
$abs
)){
debug(
"$abs was there, will read.. "
);
push
@lines
, (
grep
{ !/
$lineid
/ } <ORI> );
close
ORI;
}
open
( NEW,
'>'
,
$abs
) or
die
($!);
print
NEW
@lines
;
close
NEW;
debug(
"$abs prepended"
);
return
$abs
;
}
sub
usage {
return
qq{
$0
DECRIPTION
Makes sure your distro checks for system binaries
OPTION FLAGS
-a abs path to target dist dir, default is cwd
-d debug
PARAMETERS
List of binary names.
USAGE EXAMPLES
This example will make your Makefil.PL check that the system has 'slocate', 'cat' and 'automake'.
$0 -a ./My-Distro slocate cat automake
SEE ALSO
LEOCHARRE::Dev
LEOCHARRE::CLI
Devel::AssertOS
use-devel-assertos
}
;
}
exit
;