#!./perl -w
BEGIN {
@INC
=
qw(lib)
;
require
'./install_lib.pl'
;
}
our
(
%opts
,
$packlist
);
require
'./Porting/pod_lib.pl'
;
my
%man1
= (
map
{(
$_
->[0],
$_
->[1])} @{get_pod_metadata()->{master}});
$ENV
{SHELL} =
'sh'
if
$^O eq
'os2'
;
my
$patchlevel
=
substr
($],3,2);
die
"Patchlevel of perl ($patchlevel)"
,
"and patchlevel of config.sh ($Config{'PERL_VERSION'}) don't match\n"
if
$patchlevel
!=
$Config
{
'PERL_VERSION'
};
my
$usage
=
"Usage: installman --man1dir=/usr/wherever --man1ext=1
--man3dir=/usr/wherever --man3ext=3
--notify --verbose --silent --help
Defaults are:
man1dir =
$Config
{
'installman1dir'
};
man1ext =
$Config
{
'man1ext'
};
man3dir =
$Config
{
'installman3dir'
};
man3ext =
$Config
{
'man3ext'
};
--notify (or -n) just lists commands that would be executed.
--verbose (or -V) report all progress.
--silent (or -S) be silent. Only report errors.\n";
GetOptions( \
%opts
,
qw( man1dir=s man1ext=s man3dir=s man3ext=s
destdir:s notify|n help|h|? silent|S verbose|V strip)
)
||
die
$usage
;
die
$usage
if
$opts
{help};
$opts
{destdir} //=
''
;
foreach
my
$pre
(
qw(man1 man3)
) {
$opts
{
"${pre}dir"
} //=
$opts
{destdir} .
$Config
{
"install${pre}dir"
};
$opts
{
"${pre}ext"
} //=
$Config
{
"${pre}ext"
};
}
$opts
{verbose} ||=
$opts
{notify};
if
(
$opts
{man1dir} eq
''
&&
$opts
{man3dir} eq
''
) {
warn
"Manual page installation was disabled by Configure\n"
;
exit
0;
}
-x
"./perl$Config{exe_ext}"
or
warn
"./perl$Config{exe_ext} not found! Have you run make?\n"
;
-d
"$opts{destdir}$Config{'installprivlib'}"
||
warn
"Perl library directory
$Config
{
'installprivlib'
} not found.
Have you run make install?. (Installing anyway.)\n";
-x
"t/perl$Config{exe_ext}"
||
warn
"WARNING: You've never run 'make test'!!!"
,
" (Installing anyway.)\n"
;
$packlist
= ExtUtils::Packlist->new(
"$opts{destdir}$Config{installarchlib}/.packlist"
);
pod2man(\
%man1
,
$opts
{man1dir},
$opts
{man1ext},
'pod'
);
if
(
$opts
{man3dir} ne
''
) {
my
$found
= pods_to_install();
pod2man(
$found
->{
$_
},
$opts
{man3dir},
$opts
{man3ext},
'lib'
)
foreach
qw(MODULE PRAGMA)
;
}
if
(
$opts
{man1dir} ne
''
) {
my
$has_man1dir
= -d
$opts
{man1dir};
my
$fh
= open_or_die(
'utils.lst'
);
while
(<
$fh
>) {
next
if
/^
chomp
;
my
(
$path
,
$leaf
) = m|^(\S*/(\S+))|;
next
if
$man1
{
$leaf
};
pod2man({
$leaf
,
$path
},
$opts
{man1dir},
$opts
{man1ext});
if
(
$has_man1dir
) {
if
(
my
(
$link
) = m|
my
$old
=
"$opts{man1dir}/$leaf.$opts{man1ext}"
;
my
$new
=
"$opts{man1dir}/$link.$opts{man1ext}"
;
unlink
(
$new
);
link
(
$old
,
$new
);
$old
=~ s/^\Q
$opts
{destdir}\E//
if
$opts
{destdir};
$new
=~ s/^\Q
$opts
{destdir}\E//
if
$opts
{destdir};
$packlist
->{
$new
} = {
from
=>
$old
,
type
=>
'link'
};
}
}
}
close
$fh
or my_die(
"close 'utils.lst': $!"
);
}
sub
pod2man {
my
(
$modpods
,
$mandir
,
$manext
,
$where
) =
@_
;
if
(
$mandir
eq
' '
or
$mandir
eq
''
) {
if
(
$where
) {
warn
"Skipping installation of $where man pages.\n"
}
else
{
warn
"Skipping installation of $_ man page.\n"
foreach
values
%$modpods
;
}
return
;
}
if
(
$opts
{verbose}) {
if
(
$where
) {
print
"installing from $where\n"
;
}
else
{
print
"installing $_\n"
foreach
sort
keys
%$modpods
;
}
}
mkpath(
$mandir
);
foreach
my
$manpage
(
sort
keys
%$modpods
) {
my
$mod
=
$modpods
->{
$manpage
};
my
$has_pod
;
my
$fh
= open_or_die(
$mod
);
while
(
my
$line
= <
$fh
>) {
if
(
$line
=~ /^=head1\b/) {
++
$has_pod
;
last
;
}
}
close
$fh
or my_die(
"close '$mod': $!"
);
unless
(
$has_pod
)
{
print
"no documentation in $mod\n"
if
$opts
{verbose};
next
;
}
if
($^O eq
'os2'
|| $^O eq
'amigaos'
|| $^O eq
'cygwin'
) {
$manpage
=~ s
}
my
$tmp
=
"${mandir}/${manpage}.tmp"
;
$manpage
=
"${mandir}/${manpage}.${manext}"
;
my
$parser
= Pod::Man->new(
section
=>
$manext
,
official
=> 1,
center
=>
'Perl Programmers Reference Guide'
);
my
$xmanpage
=
$manpage
;
$xmanpage
=~ s/^\Q
$opts
{
'destdir'
}\E//
if
$opts
{
'destdir'
};
print
" $xmanpage\n"
unless
$opts
{silent};
if
(!
$opts
{notify} &&
$parser
->parse_from_file(
$mod
,
$tmp
)) {
if
(-s
$tmp
) {
local
$opts
{silent} = 1;
if
(safe_rename(
$tmp
,
$manpage
)) {
$packlist
->{
$xmanpage
} = {
type
=>
'file'
};
next
;
}
}
unlink
(
$tmp
);
}
}
}
$packlist
->
write
()
unless
$opts
{notify};
print
" Installation complete\n"
if
$opts
{verbose};