#!./perl -w
BEGIN {
chdir
'..'
if
!-d
'lib'
and -d
'../lib'
;
@INC
=
'lib'
;
$ENV
{PERL5LIB} =
'lib'
;
require
'./install_lib.pl'
;
}
our
(
$Is_VMS
,
$Is_W32
,
$Is_OS2
,
$Is_Cygwin
,
$Is_Darwin
,
$Is_AmigaOS
,
%opts
,
$packlist
);
my
$versiononly
;
BEGIN {
if
(
$Is_VMS
) {
eval
'use VMS::Filespec;'
}
}
my
$SO_MODE
=
$Is_AmigaOS
? 0777 : 0555;
my
$NON_SO_MODE
=
$Is_AmigaOS
? 0666 : 0444;
my
$scr_ext
= (
$Is_VMS
?
'.Com'
:
$Is_W32
?
'.bat'
:
''
);
use
Getopt::Long
qw(:config nogetopt_compat no_auto_abbrev noignorecase)
;
require
'./Porting/pod_lib.pl'
;
my
$mainperldir
=
"/usr/bin"
;
my
$exe_ext
=
$Config
{exe_ext};
my
$perl
=
defined
(
$ENV
{PERLNAME}) ?
$ENV
{PERLNAME} :
'perl'
;
my
$perl_verbase
=
defined
(
$ENV
{PERLNAME_VERBASE})
?
$ENV
{PERLNAME_VERBASE}
:
$perl
;
my
$dbg
=
''
;
my
$ndbg
=
''
;
if
(
$Is_VMS
) {
if
(
defined
$Config
{usevmsdebug} ) {
if
(
$Config
{usevmsdebug} eq
'define'
) {
$dbg
=
'dbg'
;
$ndbg
=
'ndbg'
;
}
}
}
$opts
{destdir} =
''
;
{
my
$usage
= 0;
if
(!GetOptions(\
%opts
,
'notify|n'
,
'strip|s'
,
'silent|S'
,
'skip-otherperls|o'
,
'force|f'
,
'verbose|V'
,
'archname|A'
,
'nopods|p'
,
'destdir:s'
,
'help|h|?'
,
'versiononly|v'
=> \
$versiononly
,
'<>'
=>
sub
{
if
(
$_
[0] eq
'+v'
) {
$versiononly
= 0;
}
else
{
$usage
= 1;
}
},
)) {
$usage
= 1;
}
$opts
{verbose} ||=
$opts
{notify};
if
(
$usage
||
$opts
{help}) {
print
<<"EOT";
Usage $0: [switches]
-n Don't actually run any commands; just print them.
-s Run strip on installed binaries.
-v Only install perl as a binary with the version number in the name.
(Override whatever config.sh says)
+v Install perl as "perl" and as a binary with the version number in
the name. (Override whatever config.sh says)
-S Silent mode.
-f Force installation (don't check if same version is there)
-o Skip checking for other copies of perl in your PATH.
-V Verbose mode.
-A Also install perl with the architecture's name in the perl binary's
name.
-p Don't install the pod files. [This will break use diagnostics;]
-destdir Prefix installation directories by this string.
-h Display this help message.
EOT
exit
$usage
;
}
}
$versiononly
= 1
if
$Config
{versiononly} && !
defined
$versiononly
;
my
(
@scripts
,
@tolink
);
open
SCRIPTS,
"utils.lst"
or
die
"Can't open utils.lst: $!"
;
while
(<SCRIPTS>) {
next
if
/^
chomp
;
if
(/(\S*)\s*
push
@scripts
, $1;
push
@tolink
, [$1, $2];
}
else
{
push
@scripts
,
$_
;
}
}
close
SCRIPTS;
if
(
$scr_ext
) {
@scripts
=
map
{
"$_$scr_ext"
}
@scripts
; }
my
%archpms
= (
Config
=> 1,
lib
=> 1,
);
if
((-e
"testcompile"
) && (
defined
(
$ENV
{
'COMPILE'
}))) {
push
(
@scripts
,
map
(
"$_.exe"
,
@scripts
));
}
my
@nonxs
=
grep
(!/^Errno$/,
split
(
' '
,
$Config
{
'nonxs_ext'
}));
my
@ext_dirs
=
qw(cpan dist ext)
;
foreach
my
$ext_dir
(
@ext_dirs
) {
find(
sub
{
if
((
$File::Find::name
=~ m{^
$ext_dir
\b(.*)/([^/]+)\.pm$}) &&
!
grep
{ (
my
$dir
=
$_
) =~ s/\//-/g;
$File::Find::name
=~ /^
$ext_dir
\/
$dir
\// }
@nonxs
)
{
my
(
$path
,
$modname
) = ($1,$2);
$path
=~ s{-}{/}g;
$path
=~ s{.*/lib\b}{} or
$path
=~ s{/[^/]*$}{};
$path
=~ s{^/}{};
$modname
=
"$path/$modname"
if
length
$path
;
$archpms
{
$modname
} = 1;
}
},
$ext_dir
);
}
my
$ver
=
$Config
{version};
my
$release
=
substr
($],0,3);
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
$installbin
=
"$opts{destdir}$Config{installbin}"
;
my
$installscript
=
"$opts{destdir}$Config{installscript}"
;
my
$installprivlib
=
"$opts{destdir}$Config{installprivlib}"
;
my
$installarchlib
=
"$opts{destdir}$Config{installarchlib}"
;
my
$installsitelib
=
"$opts{destdir}$Config{installsitelib}"
;
my
$installsitearch
=
"$opts{destdir}$Config{installsitearch}"
;
my
$installman1dir
=
"$opts{destdir}$Config{installman1dir}"
;
my
$man1ext
=
$Config
{man1ext};
my
$libperl
=
$Config
{libperl};
my
$so
=
$Config
{so};
my
$dlext
=
$Config
{dlext};
my
$dlsrc
=
$Config
{dlsrc};
if
($^O eq
'os390'
) {
my
$pwd
;
chomp
(
$pwd
=`pwd`);
my
$archlibexp
=
$Config
{archlibexp};
my
$usedl
=
$Config
{usedl};
if
(
$usedl
eq
'define'
) {
`./$^X -pibak -e
's{$pwd\/libperl.x}{$archlibexp/CORE/libperl.x}'
lib/Config.pm`;
}
}
my
$binexp
=
$Config
{binexp};
if
(
$Is_VMS
) {
foreach
( \
$installbin
, \
$installscript
, \
$installprivlib
,
\
$installarchlib
, \
$installsitelib
, \
$installsitearch
,
\
$installman1dir
) {
$$_
= unixify(
$$_
);
$$_
=~ s:/$::;
}
}
$installbin
||
die
"No installbin directory in config.sh\n"
;
-d
$installbin
|| mkpath(
$installbin
);
-d
$installbin
||
$opts
{notify} ||
die
"$installbin is not a directory\n"
;
-w
$installbin
||
$opts
{notify} ||
die
"$installbin is not writable by you\n"
unless
$installbin
=~ m
if
(!
$Is_VMS
) {
-x
'perl'
.
$exe_ext
||
die
"perl isn't executable!\n"
;
}
else
{
-x
$ndbg
.
'perl'
.
$exe_ext
||
die
"${ndbg}perl$exe_ext isn't executable!\n"
;
if
(
$dbg
) {
-x
$dbg
.
'perl'
.
$exe_ext
||
die
"${dbg}perl$exe_ext isn't executable!\n"
;
}
}
-f
't/rantests'
||
$Is_W32
||
warn
"WARNING: You've never run 'make test' or"
,
" some tests failed! (Installing anyway.)\n"
;
$packlist
= ExtUtils::Packlist->new(
"$installarchlib/.packlist"
);
if
(
$Is_W32
or
$Is_Cygwin
) {
my
$perldll
;
if
(
$Is_Cygwin
) {
$perldll
=
$libperl
;
}
else
{
$perldll
=
'perl5'
.
$Config
{patchlevel}.
'.'
.
$so
;
}
if
(
$dlsrc
ne
"dl_none.xs"
) {
-f
$perldll
||
die
"No perl DLL built\n"
;
}
safe_unlink(
"$installbin/$perldll"
);
copy(
"$perldll"
,
"$installbin/$perldll"
);
chmod
(0755,
"$installbin/$perldll"
);
$packlist
->{
"$Config{installbin}/$perldll"
} = {
type
=>
'file'
};
}
if
(
$Is_VMS
) {
safe_unlink(
"$installbin/perl_setup.com"
);
copy(
"perl_setup.com"
,
"$installbin/perl_setup.com"
);
chmod
(0755,
"$installbin/perl_setup.com"
);
safe_unlink(
"$installbin/$dbg$perl$exe_ext"
);
copy(
"$dbg$perl$exe_ext"
,
"$installbin/$dbg$perl$exe_ext"
);
chmod
(0755,
"$installbin/$dbg$perl$exe_ext"
);
safe_unlink(
"$installbin/$dbg${perl}shr$exe_ext"
);
copy(
"$dbg${perl}shr$exe_ext"
,
"$installbin/$dbg${perl}shr$exe_ext"
);
chmod
(0755,
"$installbin/$dbg${perl}shr$exe_ext"
);
if
(
$ndbg
) {
safe_unlink(
"$installbin/$ndbg$perl$exe_ext"
);
copy(
"$ndbg$perl$exe_ext"
,
"$installbin/$ndbg$perl$exe_ext"
);
chmod
(0755,
"$installbin/$ndbg$perl$exe_ext"
);
}
}
else
{
safe_unlink(
"$installbin/$perl_verbase$ver$exe_ext"
);
copy(
"perl$exe_ext"
,
"$installbin/$perl_verbase$ver$exe_ext"
);
strip(
"$installbin/$perl_verbase$ver$exe_ext"
);
fix_dep_names(
"$installbin/$perl_verbase$ver$exe_ext"
);
chmod
(0755,
"$installbin/$perl_verbase$ver$exe_ext"
);
`chtag -r
"$installbin/$perl_verbase$ver$exe_ext"
`
if
($^O eq
'os390'
);
}
my
$do_installarchlib
= !samepath(
$installarchlib
,
'lib'
);
my
$do_installprivlib
= !samepath(
$installprivlib
,
'lib'
);
my
$vershort
= (
$Is_Cygwin
and !
$Config
{usedevel}) ?
substr
(
$ver
,0,-2) :
$ver
;
$do_installprivlib
= 0
if
$versiononly
&& !(
$installprivlib
=~ m/\Q
$vershort
/);
mkpath(
$installprivlib
);
mkpath(
$installarchlib
);
mkpath(
$installsitelib
,
$opts
{verbose}, 0777)
if
(
$installsitelib
);
mkpath(
$installsitearch
,
$opts
{verbose}, 0777)
if
(
$installsitearch
);
if
(-d
'lib'
) {
find({
no_chdir
=> 1,
wanted
=> \
&installlib
},
'lib'
)
if
$do_installarchlib
||
$do_installprivlib
;
}
else
{
warn
"Can't install lib files - 'lib/' does not exist"
;
}
mkpath(
"$installarchlib/CORE"
);
my
@corefiles
;
if
(
$Is_VMS
) {
my
$coredir
=
"lib/$Config{archname}/$ver/CORE"
;
$coredir
=~
tr
/./_/;
map
{ s|^
$coredir
/||i; }
@corefiles
= <
$coredir
/*.*>;
}
elsif
(
$Is_Cygwin
) {
@corefiles
= <*.h libperl*.* perl
*$Config
{lib_ext}>;
my
$coredll
=
"$installarchlib/CORE/$libperl"
;
my
$instcoredll
=
"$Config{installarchlib}/CORE/$libperl"
;
safe_unlink(
$coredll
);
(
$Config
{
'd_link'
} eq
'define'
&&
eval
{
CORE::
link
(
"$installbin/$libperl"
,
$coredll
);
$packlist
->{
$instcoredll
} = {
from
=>
"$Config{installbin}/$libperl"
,
type
=>
'link'
};
}
) ||
eval
{
symlink
(
"$installbin/$libperl"
,
$coredll
);
$packlist
->{
$instcoredll
} = {
from
=>
"$Config{installbin}/$libperl"
,
type
=>
'link'
};
} ||
( copy(
"$installbin/$libperl"
,
$coredll
) &&
push
(
@corefiles
,
$instcoredll
)
)
}
elsif
(
$Is_W32
) {
@corefiles
= <*.h>;
}
else
{
@corefiles
= <*.h libperl*.* perl
*$Config
{lib_ext}>;
push
(
@corefiles
,
'perl.exp'
)
if
$^O eq
'aix'
;
}
foreach
my
$file
(
@corefiles
) {
if
(copy_if_diff(
$file
,
"$installarchlib/CORE/$file"
)) {
if
(
$file
=~ /\.(\Q
$so
\E|\Q
$dlext
\E)$/) {
strip(
"-S"
,
"$installarchlib/CORE/$file"
)
if
$^O eq
'darwin'
;
fix_dep_names(
"$installarchlib/CORE/$file"
);
chmod
(
$SO_MODE
,
"$installarchlib/CORE/$file"
);
}
else
{
chmod
(
$NON_SO_MODE
,
"$installarchlib/CORE/$file"
);
}
`chtag -r
"$installarchlib/CORE/$file"
`
if
($^O eq
'os390'
);
}
}
if
(
$Is_W32
) {
@corefiles
= <lib/CORE/libperl*.* lib/CORE/perl
*$Config
{lib_ext}>;
my
$dest
;
copy_if_diff(
$_
,(
$dest
=
$installarchlib
.
substr
(
$_
,3))) &&
chmod
(
$NON_SO_MODE
,
$dest
)
foreach
@corefiles
;
}
if
(!
$versiononly
&& ! samepath(
$installbin
,
'.'
) && !
$Is_VMS
) {
safe_unlink(
"$installbin/$perl$exe_ext"
,
"$installbin/suid$perl$exe_ext"
);
if
($^O eq
'vos'
) {
symlink
(
"$installbin/$perl_verbase$ver$exe_ext"
,
"$installbin/$perl$exe_ext"
);
}
else
{
link
(
"$installbin/$perl_verbase$ver$exe_ext"
,
"$installbin/$perl$exe_ext"
);
}
}
if
(
$opts
{archname} && ! samepath(
$installbin
,
'.'
) && !
$Is_VMS
) {
my
$archperl
=
"$perl_verbase$ver-$Config{archname}$exe_ext"
;
safe_unlink(
"$installbin/$archperl"
);
if
($^O eq
'vos'
) {
symlink
(
"$installbin/$perl_verbase$ver$exe_ext"
,
"$installbin/$archperl"
);
}
else
{
link
(
"$installbin/$perl_verbase$ver$exe_ext"
,
"$installbin/$archperl"
);
}
}
my
$mainperl_is_instperl
= 0;
if
(
$Config
{installusrbinperl} &&
$Config
{installusrbinperl} eq
'define'
&&
!
$versiononly
&& !
$opts
{notify} && !
$Is_W32
&& !
$Is_VMS
&& -t STDIN && -t STDERR
&& -w
$mainperldir
&& ! samepath(
$mainperldir
,
$installbin
)) {
my
(
$usrbinperl
) =
"$mainperldir/$perl$exe_ext"
;
my
(
$instperl
) =
"$installbin/$perl$exe_ext"
;
my
(
$expinstperl
) =
"$binexp/$perl$exe_ext"
;
if
(-x
$usrbinperl
) {
$mainperl_is_instperl
=
samepath(
$usrbinperl
,
$instperl
) ||
samepath(
$usrbinperl
,
$expinstperl
) ||
((
$binexp
ne
$installbin
) &&
(-l
$usrbinperl
) &&
((
readlink
$usrbinperl
) eq
$expinstperl
));
}
if
(!
$mainperl_is_instperl
) {
unlink
(
$usrbinperl
);
(
$Config
{
'd_link'
} eq
'define'
&&
eval
{ CORE::
link
$instperl
,
$usrbinperl
} ) ||
eval
{
symlink
$expinstperl
,
$usrbinperl
} ||
copy(
$instperl
,
$usrbinperl
);
`chtag -r
"$usrbinperl"
`
if
($^O eq
'os390'
);
$mainperl_is_instperl
= 1;
}
}
if
(!
$versiononly
&& (-f
'cppstdin'
) && (! samepath(
$installbin
,
'.'
))) {
safe_unlink(
"$installbin/cppstdin"
);
copy(
"cppstdin"
,
"$installbin/cppstdin"
);
chmod
(0755,
"$installbin/cppstdin"
);
}
sub
script_alias {
my
(
$installscript
,
$orig
,
$alias
,
$scr_ext
) =
@_
;
safe_unlink(
"$installscript/$alias$scr_ext"
);
if
(
$Is_VMS
or $^O eq
'transit'
) {
copy(
"$installscript/$orig$scr_ext"
,
"$installscript/$alias$scr_ext"
);
}
elsif
($^O eq
'vos'
) {
symlink
(
"$installscript/$orig$scr_ext"
,
"$installscript/$alias$scr_ext"
);
}
else
{
link
(
"$installscript/$orig$scr_ext"
,
"$installscript/$alias$scr_ext"
);
}
}
mkpath(
$installscript
);
if
(
$versiononly
) {
for
(
@scripts
) {
(
my
$base
=
$_
) =~ s
$base
.=
$ver
;
copy(
$_
,
"$installscript/$base"
);
chmod
(0755,
"$installscript/$base"
);
}
for
(
@tolink
) {
my
(
$from
,
$to
) =
map
{
"$_$ver"
}
@$_
;
(
my
$frbase
=
$from
) =~ s
(
my
$tobase
=
$to
) =~ s
script_alias(
$installscript
,
$frbase
,
$tobase
,
$scr_ext
);
}
}
else
{
for
(
@scripts
) {
(
my
$base
=
$_
) =~ s
copy(
$_
,
"$installscript/$base"
);
chmod
(0755,
"$installscript/$base"
);
if
(
$Is_AmigaOS
) {
my
$amigapath
= unixtoamiga(
"$installscript/$base"
);
amigaprotect(
$amigapath
,
"+s"
);
}
}
for
(
@tolink
) {
my
(
$from
,
$to
) =
@$_
;
(
my
$frbase
=
$from
) =~ s
(
my
$tobase
=
$to
) =~ s
script_alias(
$installscript
,
$frbase
,
$tobase
,
$scr_ext
);
}
}
if
(!
$opts
{nopods} && (!
$versiononly
|| (
$installprivlib
=~ m/\Q
$vershort
/))) {
my
$pod
= (
$Is_Cygwin
||
$Is_Darwin
||
$Is_VMS
||
$Is_W32
) ?
'pods'
:
'pod'
;
mkpath(
"${installprivlib}/$pod"
);
for
(
map
{
$_
->[1]} @{get_pod_metadata()->{master}}) {
(
my
$base
=
$_
) =~ s
copy_if_diff(
$_
,
"${installprivlib}/$pod/${base}"
);
chmod
(0644,
"${installprivlib}/$pod/${base}"
);
}
}
$packlist
->
write
()
unless
$opts
{notify};
print
" Installation complete\n"
if
$opts
{verbose};
exit
0;
sub
yn {
my
(
$prompt
) =
@_
;
my
(
$answer
);
my
(
$default
) =
$prompt
=~ m/\[([yn])\]\s*$/i;
print
STDERR
$prompt
;
chop
(
$answer
= <STDIN>);
$answer
=
$default
if
$answer
=~ m/^\s*$/;
(
$answer
=~ m/^[yY]/);
}
sub
safe_unlink {
return
if
$opts
{notify} or
$Is_VMS
;
my
@names
=
@_
;
foreach
my
$name
(
@names
) {
next
unless
-e
$name
;
chmod
0777,
$name
if
(
$Is_OS2
||
$Is_W32
);
print
" unlink $name\n"
if
$opts
{verbose};
next
if
CORE::
unlink
(
$name
);
warn
"Couldn't unlink $name: $!\n"
;
if
($! =~ /busy/i) {
print
" mv $name $name.old\n"
if
$opts
{verbose};
safe_rename(
$name
,
"$name.old"
)
or
warn
"Couldn't rename $name: $!\n"
;
}
}
}
sub
copy {
my
(
$from
,
$to
) =
@_
;
my
$xto
=
$to
;
$xto
=~ s/^\Q
$opts
{destdir}\E//;
print
$opts
{verbose} ?
" cp $from $xto\n"
:
" $xto\n"
unless
$opts
{silent};
print
" creating new version of $xto\n"
if
$Is_VMS
and -e
$to
and !
$opts
{silent};
unless
(
$opts
{notify} or File::Copy::copy(
$from
,
$to
)) {
warn
"Couldn't copy $from to $to: $!\n"
unless
-f
$to
and (
chmod
(0666,
$to
),
unlink
$to
)
and File::Copy::copy(
$from
,
$to
);
}
$packlist
->{
$xto
} = {
type
=>
'file'
};
}
sub
installlib {
my
$dir
=
$File::Find::dir
;
$dir
=~ s!\Alib/?!!;
m!([^/]+)\z!;
my
$name
= $1;
if
(
$name
=~ /^(?:CVS|RCS|SCCS|\.svn)\z/ and -d
$name
) {
$File::Find::prune
= 1;
return
;
}
return
if
$name
=~ m{\.orig$|\.rej$|~$|^
$dir
=~ m{/t(?:/|$)};
return
if
$name
=~ /^(?:cpan|instmodsh|prove|corelist|ptar|ptardiff|ptargrep|zipdetails)\z/;
return
if
$name
=~ /^makefile$/i;
return
if
$dir
=~ m{\b(?:XS/(?:APItest|Typemap)|Devel/PPPort)\b};
return
if
$name
=~ m{\b(?:APItest|Typemap)\.pm$};
return
if
$name
=~ /\bbuildcustomize\.pl$/;
return
if
$dir
=~ /\b(?:demos?|eg)\b/;
if
(
$dir
=~ /^unicore/ ) {
if
(
$name
=~ /\.txt\z/ ) {
return
unless
$name
=~ /\A(?:Blocks|SpecialCasing|NamedSequences)\.txt\z/;
}
else
{
return
if
$name
=~ /\ATestProp.pl\z/;
return
unless
$name
=~ /\A(?:version|\w+\.p[lm])\z/;
}
}
return
if
$name
=~ m{^(?:README(?:\.\w+)?)$} &&
$name
ne
'README.e2x'
;
return
if
$name
=~ m{^(?:MANIFEST|META\.yml)$};
return
if
$name
=~ m{^(?:INSTALL|TODO|BUGS|CREDITS)$}i;
return
if
$name
=~ m{^change(?:s|
log
)(?:\.libnet)?$}i;
return
if
$name
=~ m{^(?:SIGNATURE|PAUSE200\d\.pub)$};
return
if
$name
=~ m{^(?:NOTES|PATCHING)$};
return
if
$Config
{useshrplib} eq
'true'
and
(
$name
=~ /
$Config
{_a}$/ or
$name
=~ /\.
exp
$/ or (
$name
=~ /\.bs$/ and -z
$name
));
$name
=
"$dir/$name"
if
$dir
ne
''
;
return
if
/\.pod\z/ && is_duplicate_pod(
$_
);
return
if
$name
eq
'ExtUtils/XSSymSet.pm'
and !
$Is_VMS
;
return
if
$name
eq
'ExtUtils/MakeMaker/version/regex.pm'
;
my
$installlib
=
$installprivlib
;
if
(
$dir
=~ /^auto\// ||
(
$name
=~ /^(.*)\.(?:pm|pod)$/ &&
$archpms
{$1}) ||
(
$name
=~ /^(.*)\.(?:h|lib)$/i &&
$Is_W32
) ||
$name
=~/^Config_(heavy|git)\.pl\z/
) {
$installlib
=
$installarchlib
;
return
unless
$do_installarchlib
;
}
else
{
return
unless
$do_installprivlib
;
}
if
(-f
$_
) {
my
$xname
=
"$installlib/$name"
;
$xname
=~ s/^\Q
$opts
{destdir}\E//;
$packlist
->{
$xname
} = {
type
=>
'file'
};
if
(
$opts
{force} || compare(
$_
,
"$installlib/$name"
) ||
$opts
{notify}) {
unlink
(
"$installlib/$name"
);
mkpath(
"$installlib/$dir"
);
if
(copy_if_diff(
$_
,
"$installlib/$name"
)) {
strip(
"-S"
,
"$installlib/$name"
)
if
$^O eq
'darwin'
and /\.(?:so|
$dlext
|a)$/;
chmod
(/\.(so|
$dlext
)$/ ?
$SO_MODE
:
$NON_SO_MODE
,
"$installlib/$name"
);
}
}
}
}
sub
copy_if_diff {
my
(
$from
,
$to
)=
@_
;
return
1
if
(($^O eq
'VMS'
) && (-d
$from
));
my
$xto
=
$to
;
$xto
=~ s/^\Q
$opts
{destdir}\E//;
my
$perlpodbadsymlink
;
if
(
$from
=~ m!^pod/perl[\w-]+\.pod$! &&
-l
$from
&&
! -e
$from
) {
$perlpodbadsymlink
= 1;
}
-f
$from
||
$perlpodbadsymlink
||
warn
"$0: $from not found"
;
$packlist
->{
$xto
} = {
type
=>
'file'
};
if
(
$opts
{force} || compare(
$from
,
$to
) ||
$opts
{notify}) {
safe_unlink(
$to
);
if
(
$perlpodbadsymlink
&&
$from
=~ m!^pod/perl(.+)\.pod$!) {
$from
=
"README.$1"
;
}
copy(
$from
,
$to
);
if
(!
$opts
{notify} && (
$Is_OS2
||
$to
=~ /\.a$/)) {
my
(
$atime
,
$mtime
) = (
stat
$from
)[8,9];
utime
$atime
,
$mtime
,
$to
;
}
`chtag -r
"$to"
`
if
($^O eq
"os390"
);
1;
}
}
sub
strip
{
my
(
@args
) =
@_
;
return
unless
$opts
{strip};
my
@opts
;
while
(
@args
&&
$args
[0] =~ /^(-\w+)$/) {
push
@opts
,
shift
@args
;
}
foreach
my
$file
(
@args
) {
if
(-f
$file
) {
if
(
$opts
{verbose}) {
print
" strip "
.
join
(
' '
,
@opts
);
print
" "
if
(
@opts
);
print
"$file\n"
;
}
system
(
"strip"
,
@opts
,
$file
);
}
else
{
print
"# file '$file' skipped\n"
if
$opts
{verbose};
}
}
}
sub
fix_dep_names {
my
$file
=
shift
;
$^O eq
"darwin"
&&
$Config
{osvers} =~ /^(1[5-9]|[2-9])/
&&
$Config
{useshrplib}
or
return
;
my
@opts
;
my
$so
=
$Config
{so};
my
$libperl
=
"$Config{archlibexp}/CORE/libperl.$Config{so}"
;
if
(
$file
=~ /\blibperl.\Q
$Config
{so}\E$/a) {
push
@opts
,
-id
=>
$libperl
;
}
else
{
push
@opts
,
-change
=> getcwd .
"/libperl.$so"
,
$libperl
;
}
push
@opts
,
$file
;
$opts
{verbose} and
print
" install_name_tool @opts\n"
;
system
"install_name_tool"
,
@opts
and
die
"Cannot update $file dependency paths\n"
;
}