[3181] | 1 | #!./perl
|
---|
| 2 |
|
---|
| 3 | BEGIN {
|
---|
| 4 | require 5.004;
|
---|
| 5 | chdir '..' if !-d 'lib' and -d '../lib';
|
---|
| 6 | @INC = 'lib';
|
---|
| 7 | $ENV{PERL5LIB} = 'lib';
|
---|
| 8 | }
|
---|
| 9 |
|
---|
| 10 | use strict;
|
---|
| 11 | my ($Is_VMS, $Is_W32, $Is_OS2, $Is_Cygwin, $Is_Darwin,
|
---|
| 12 | $nonono, $dostrip, $versiononly, $silent, $verbose, $force,
|
---|
| 13 | $otherperls, $archname, $Is_NetWare, $nwinstall, $nopods);
|
---|
| 14 | use vars qw /$depth/;
|
---|
| 15 |
|
---|
| 16 | BEGIN {
|
---|
| 17 | $Is_VMS = $^O eq 'VMS';
|
---|
| 18 | $Is_W32 = $^O eq 'MSWin32';
|
---|
| 19 | $Is_OS2 = $^O eq 'os2';
|
---|
| 20 | $Is_Cygwin = $^O eq 'cygwin';
|
---|
| 21 | $Is_Darwin = $^O eq 'darwin';
|
---|
| 22 | if ($Is_VMS) { eval 'use VMS::Filespec;' }
|
---|
| 23 | }
|
---|
| 24 |
|
---|
| 25 | my $scr_ext = ($Is_VMS ? '.Com' : $Is_W32 ? '.bat' : '');
|
---|
| 26 |
|
---|
| 27 | use File::Find;
|
---|
| 28 | use File::Compare;
|
---|
| 29 | use File::Copy ();
|
---|
| 30 | use File::Path ();
|
---|
| 31 | use ExtUtils::Packlist;
|
---|
| 32 | use Config;
|
---|
| 33 | use subs qw(unlink link chmod);
|
---|
| 34 |
|
---|
| 35 | if ($Config{d_umask}) {
|
---|
| 36 | umask(022); # umasks like 077 aren't that useful for installations
|
---|
| 37 | }
|
---|
| 38 |
|
---|
| 39 | $Is_NetWare = $Config{osname} eq 'NetWare';
|
---|
| 40 | if ($Is_NetWare) {
|
---|
| 41 | $Is_W32 = 0;
|
---|
| 42 | $scr_ext = '.pl';
|
---|
| 43 | }
|
---|
| 44 |
|
---|
| 45 | # override the ones in the rest of the script
|
---|
| 46 | sub mkpath {
|
---|
| 47 | File::Path::mkpath(@_) unless $nonono;
|
---|
| 48 | }
|
---|
| 49 |
|
---|
| 50 | my $mainperldir = "/usr/bin";
|
---|
| 51 | my $exe_ext = $Config{exe_ext};
|
---|
| 52 |
|
---|
| 53 | # Allow ``make install PERLNAME=something_besides_perl'':
|
---|
| 54 | my $perl = defined($ENV{PERLNAME}) ? $ENV{PERLNAME} : 'perl';
|
---|
| 55 |
|
---|
| 56 | # This is the base used for versioned names, like "perl5.6.0".
|
---|
| 57 | # It's separate because a common use of $PERLNAME is to install
|
---|
| 58 | # perl as "perl5", if that's used as base for versioned files you
|
---|
| 59 | # get "perl55.6.0".
|
---|
| 60 | my $perl_verbase = defined($ENV{PERLNAME_VERBASE})
|
---|
| 61 | ? $ENV{PERLNAME_VERBASE}
|
---|
| 62 | : $perl;
|
---|
| 63 | my $dbg = '';
|
---|
| 64 | my $ndbg = '';
|
---|
| 65 | if ( $Is_VMS ) {
|
---|
| 66 | if ( defined $Config{usevmsdebug} ) {
|
---|
| 67 | if ( $Config{usevmsdebug} eq 'define' ) {
|
---|
| 68 | $dbg = 'dbg';
|
---|
| 69 | $ndbg = 'ndbg';
|
---|
| 70 | }
|
---|
| 71 | }
|
---|
| 72 | }
|
---|
| 73 |
|
---|
| 74 | $otherperls = 1;
|
---|
| 75 | my $destdir = '';
|
---|
| 76 | while (@ARGV) {
|
---|
| 77 | $nonono = 1 if $ARGV[0] eq '-n';
|
---|
| 78 | $dostrip = 1 if $ARGV[0] eq '-s';
|
---|
| 79 | $versiononly = 1 if $ARGV[0] eq '-v';
|
---|
| 80 | $versiononly = 0 if $ARGV[0] eq '+v';
|
---|
| 81 | $silent = 1 if $ARGV[0] eq '-S';
|
---|
| 82 | $otherperls = 0 if $ARGV[0] eq '-o';
|
---|
| 83 | $force = 1 if $ARGV[0] eq '-f';
|
---|
| 84 | $verbose = 1 if $ARGV[0] eq '-V' || $ARGV [0] eq '-n';
|
---|
| 85 | $archname = 1 if $ARGV[0] eq '-A';
|
---|
| 86 | $nwinstall = 1 if $ARGV[0] eq '-netware';
|
---|
| 87 | $nopods = 1 if $ARGV[0] eq '-p';
|
---|
| 88 | $destdir = $1 if $ARGV[0] =~ /^-?-destdir=(.*)$/;
|
---|
| 89 | if ($ARGV[0] eq '-?' or $ARGV[0] =~ /^-?-h/) {
|
---|
| 90 | print <<"EOT";
|
---|
| 91 | Usage $0: [switches]
|
---|
| 92 | -n Don't actually run any commands; just print them.
|
---|
| 93 | -s Run strip on installed binaries.
|
---|
| 94 | -v Only install perl as a binary with the version number in the name.
|
---|
| 95 | (Override whatever config.sh says)
|
---|
| 96 | +v Install perl as "perl" and as a binary with the version number in
|
---|
| 97 | the name. (Override whatever config.sh says)
|
---|
| 98 | -S Silent mode.
|
---|
| 99 | -f Force installation (don't check if same version is there)
|
---|
| 100 | -o Skip checking for other copies of perl in your PATH.
|
---|
| 101 | -V Verbose mode.
|
---|
| 102 | -A Also install perl with the architecture's name in the perl binary's
|
---|
| 103 | name.
|
---|
| 104 | -p Don't install the pod files. [This will break use diagnostics;]
|
---|
| 105 | -netware Install correctly on a Netware server.
|
---|
| 106 | -destdir Prefix installation directories by this string.
|
---|
| 107 | EOT
|
---|
| 108 | exit;
|
---|
| 109 | }
|
---|
| 110 | shift;
|
---|
| 111 | }
|
---|
| 112 |
|
---|
| 113 | $versiononly = 1 if $Config{versiononly} && !defined $versiononly;
|
---|
| 114 | my (@scripts, @tolink);
|
---|
| 115 | open SCRIPTS, "utils.lst" or die "Can't open utils.lst: $!";
|
---|
| 116 | while (<SCRIPTS>) {
|
---|
| 117 | next if /^#/;
|
---|
| 118 | s/\s*#\s*pod\s*=.*//; # install script regardless of pod location
|
---|
| 119 | next if /a2p/; # a2p is binary, to be installed separately
|
---|
| 120 | chomp;
|
---|
| 121 | if (/(\S*)\s*#\s*link\s*=\s*(\S*)/) {
|
---|
| 122 | push @scripts, $1;
|
---|
| 123 | push @tolink, [$1, $2];
|
---|
| 124 | } else {
|
---|
| 125 | push @scripts, $_;
|
---|
| 126 | }
|
---|
| 127 | }
|
---|
| 128 | close SCRIPTS;
|
---|
| 129 |
|
---|
| 130 | if ($scr_ext) { @scripts = map { "$_$scr_ext" } @scripts; }
|
---|
| 131 |
|
---|
| 132 | my @pods = $nopods ? () : (<pod/*.pod>, 'x2p/a2p.pod');
|
---|
| 133 |
|
---|
| 134 | # Specify here any .pm files that are actually architecture-dependent.
|
---|
| 135 | # (Those included with XS extensions under ext/ are automatically
|
---|
| 136 | # added later.)
|
---|
| 137 | # Now that the default privlib has the full perl version number included,
|
---|
| 138 | # we no longer have to play the trick of sticking version-specific .pm
|
---|
| 139 | # files under the archlib directory.
|
---|
| 140 | my %archpms = (
|
---|
| 141 | Config => 1,
|
---|
| 142 | lib => 1,
|
---|
| 143 | Cwd => 1,
|
---|
| 144 | );
|
---|
| 145 |
|
---|
| 146 | if ($^O eq 'dos') {
|
---|
| 147 | push(@scripts,'djgpp/fixpmain');
|
---|
| 148 | $archpms{config} = $archpms{filehand} = 1;
|
---|
| 149 | }
|
---|
| 150 |
|
---|
| 151 | if ((-e "testcompile") && (defined($ENV{'COMPILE'}))) {
|
---|
| 152 | push(@scripts, map("$_.exe", @scripts));
|
---|
| 153 | }
|
---|
| 154 |
|
---|
| 155 | find(sub {
|
---|
| 156 | if ("$File::Find::dir/$_" =~ m{^ext\b(.*)/([^/]+)\.pm$}) {
|
---|
| 157 | my($path, $modname) = ($1,$2);
|
---|
| 158 |
|
---|
| 159 | # strip trailing component first
|
---|
| 160 | $path =~ s{/[^/]*$}{};
|
---|
| 161 |
|
---|
| 162 | # strip optional "/lib";
|
---|
| 163 | $path =~ s{/lib\b}{};
|
---|
| 164 |
|
---|
| 165 | # strip any leading /
|
---|
| 166 | $path =~ s{^/}{};
|
---|
| 167 |
|
---|
| 168 | # reconstitute canonical module name
|
---|
| 169 | $modname = "$path/$modname" if length $path;
|
---|
| 170 |
|
---|
| 171 | # remember it
|
---|
| 172 | $archpms{$modname} = 1;
|
---|
| 173 | }
|
---|
| 174 | }, 'ext');
|
---|
| 175 |
|
---|
| 176 | # print "[$_]\n" for sort keys %archpms;
|
---|
| 177 |
|
---|
| 178 | my $ver = $Config{version};
|
---|
| 179 | my $release = substr($],0,3); # Not used currently.
|
---|
| 180 | my $patchlevel = substr($],3,2);
|
---|
| 181 | die "Patchlevel of perl ($patchlevel)",
|
---|
| 182 | "and patchlevel of config.sh ($Config{'PERL_VERSION'}) don't match\n"
|
---|
| 183 | if $patchlevel != $Config{'PERL_VERSION'};
|
---|
| 184 |
|
---|
| 185 | # Fetch some frequently-used items from %Config
|
---|
| 186 | my $installbin = "$destdir$Config{installbin}";
|
---|
| 187 | my $installscript = "$destdir$Config{installscript}";
|
---|
| 188 | my $installprivlib = "$destdir$Config{installprivlib}";
|
---|
| 189 | my $installarchlib = "$destdir$Config{installarchlib}";
|
---|
| 190 | my $installsitelib = "$destdir$Config{installsitelib}";
|
---|
| 191 | my $installsitearch = "$destdir$Config{installsitearch}";
|
---|
| 192 | my $installman1dir = "$destdir$Config{installman1dir}";
|
---|
| 193 | my $man1ext = $Config{man1ext};
|
---|
| 194 | my $libperl = $Config{libperl};
|
---|
| 195 | # Shared library and dynamic loading suffixes.
|
---|
| 196 | my $so = $Config{so};
|
---|
| 197 | my $dlext = $Config{dlext};
|
---|
| 198 | my $dlsrc = $Config{dlsrc};
|
---|
| 199 | if ($^O eq 'os390') {
|
---|
| 200 | my $pwd;
|
---|
| 201 | chomp($pwd=`pwd`);
|
---|
| 202 | my $archlibexp = $Config{archlibexp};
|
---|
| 203 | my $usedl = $Config{usedl};
|
---|
| 204 | if ($usedl eq 'define') {
|
---|
| 205 | `./$^X -pibak -e 's{$pwd\/libperl.x}{$archlibexp/CORE/libperl.x}' lib/Config.pm`;
|
---|
| 206 | }
|
---|
| 207 | }
|
---|
| 208 |
|
---|
| 209 | if ($nwinstall) {
|
---|
| 210 | # This is required only if we are installing on a NetWare server
|
---|
| 211 | $installscript = $Config{installnwscripts};
|
---|
| 212 | $installprivlib = $Config{installnwlib};
|
---|
| 213 | $installarchlib = $Config{installnwlib};
|
---|
| 214 | $installsitelib = $Config{installnwlib};
|
---|
| 215 | }
|
---|
| 216 |
|
---|
| 217 | my $d_dosuid = $Config{d_dosuid};
|
---|
| 218 | my $binexp = $Config{binexp};
|
---|
| 219 |
|
---|
| 220 | if ($Is_VMS) { # Hang in there until File::Spec hits the big time
|
---|
| 221 | foreach ( \$installbin, \$installscript, \$installprivlib,
|
---|
| 222 | \$installarchlib, \$installsitelib, \$installsitearch,
|
---|
| 223 | \$installman1dir ) {
|
---|
| 224 | $$_ = unixify($$_); $$_ =~ s:/$::;
|
---|
| 225 | }
|
---|
| 226 | }
|
---|
| 227 |
|
---|
| 228 | # Do some quick sanity checks.
|
---|
| 229 |
|
---|
| 230 | if (!$nonono && $d_dosuid && $>) { die "You must run as root to install suidperl\n"; }
|
---|
| 231 |
|
---|
| 232 | $installbin || die "No installbin directory in config.sh\n";
|
---|
| 233 | -d $installbin || mkpath($installbin, $verbose, 0777);
|
---|
| 234 | -d $installbin || $nonono || die "$installbin is not a directory\n";
|
---|
| 235 | -w $installbin || $nonono || die "$installbin is not writable by you\n"
|
---|
| 236 | unless $installbin =~ m#^/afs/# || $nonono;
|
---|
| 237 |
|
---|
| 238 | if (!$Is_NetWare) {
|
---|
| 239 | if (!$Is_VMS) {
|
---|
| 240 | -x 'perl' . $exe_ext || die "perl isn't executable!\n";
|
---|
| 241 | }
|
---|
| 242 | else {
|
---|
| 243 | -x $ndbg . 'perl' . $exe_ext || die "${ndbg}perl$exe_ext isn't executable!\n";
|
---|
| 244 | if ($dbg) {
|
---|
| 245 | -x $dbg . 'perl' . $exe_ext || die "${dbg}perl$exe_ext isn't executable!\n";
|
---|
| 246 | }
|
---|
| 247 | }
|
---|
| 248 | -x 'suidperl' . $exe_ext|| die "suidperl isn't executable!\n" if $d_dosuid;
|
---|
| 249 |
|
---|
| 250 | -f 't/rantests' || $Is_W32
|
---|
| 251 | || warn "WARNING: You've never run 'make test' or",
|
---|
| 252 | " some tests failed! (Installing anyway.)\n";
|
---|
| 253 | } #if (!$Is_NetWare)
|
---|
| 254 |
|
---|
| 255 | # This will be used to store the packlist
|
---|
| 256 | my $packlist = ExtUtils::Packlist->new("$installarchlib/.packlist");
|
---|
| 257 |
|
---|
| 258 | if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) {
|
---|
| 259 | my $perldll;
|
---|
| 260 |
|
---|
| 261 | if ($Is_Cygwin) {
|
---|
| 262 | $perldll = $libperl;
|
---|
| 263 | my $v_e_r_s = $ver; $v_e_r_s =~ tr/./_/;
|
---|
| 264 | $perldll =~ s/(\..*)?$/$v_e_r_s.$dlext/;
|
---|
| 265 | $perldll =~ s/^lib/cyg/;
|
---|
| 266 | if ($Config{useshrplib} eq 'true') {
|
---|
| 267 | # install ld2 and perlld as well
|
---|
| 268 | foreach ('ld2', 'perlld') {
|
---|
| 269 | safe_unlink("$installbin/$_");
|
---|
| 270 | copy("$_", "$installbin/$_");
|
---|
| 271 | chmod(0755, "$installbin/$_");
|
---|
| 272 | $packlist->{"$installbin/$_"} = { type => 'file' };
|
---|
| 273 | };
|
---|
| 274 | open (LD2, ">$installbin/ld2");
|
---|
| 275 | print LD2 <<SHELL;
|
---|
| 276 | #!/bin/sh
|
---|
| 277 | #
|
---|
| 278 | # ld wrapper, passes all args to perlld;
|
---|
| 279 | #
|
---|
| 280 | for trythis in $installbin/perl
|
---|
| 281 | do
|
---|
| 282 | if [ -x \$trythis ]
|
---|
| 283 | then
|
---|
| 284 | \$trythis $installbin/perlld "\$\@"
|
---|
| 285 | exit \$?
|
---|
| 286 | fi
|
---|
| 287 | done
|
---|
| 288 | # hard luck!
|
---|
| 289 | echo I see no perl executable around there
|
---|
| 290 | echo perl is required to build dynamic libraries
|
---|
| 291 | echo look if the path to perl in /bin/ld2 is correct
|
---|
| 292 | exit 1
|
---|
| 293 | SHELL
|
---|
| 294 | close LD2;
|
---|
| 295 | chmod(0755, "$installbin/ld2");
|
---|
| 296 | };
|
---|
| 297 | } else {
|
---|
| 298 | $perldll = 'perl58.' . $dlext;
|
---|
| 299 | }
|
---|
| 300 |
|
---|
| 301 | if ($dlsrc ne "dl_none.xs") {
|
---|
| 302 | -f $perldll || die "No perl DLL built\n";
|
---|
| 303 | }
|
---|
| 304 |
|
---|
| 305 | # Install the DLL
|
---|
| 306 | safe_unlink("$installbin/$perldll");
|
---|
| 307 | copy("$perldll", "$installbin/$perldll");
|
---|
| 308 | chmod(0755, "$installbin/$perldll");
|
---|
| 309 | $packlist->{"$installbin/$perldll"} = { type => 'file' };
|
---|
| 310 | } # if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin)
|
---|
| 311 |
|
---|
| 312 | # First we install the version-numbered executables.
|
---|
| 313 |
|
---|
| 314 | if ($Is_VMS) {
|
---|
| 315 | safe_unlink("$installbin/perl_setup.com");
|
---|
| 316 | copy("perl_setup.com", "$installbin/perl_setup.com");
|
---|
| 317 | chmod(0755, "$installbin/perl_setup.com");
|
---|
| 318 | safe_unlink("$installbin/$dbg$perl$exe_ext");
|
---|
| 319 | copy("$dbg$perl$exe_ext", "$installbin/$dbg$perl$exe_ext");
|
---|
| 320 | chmod(0755, "$installbin/$dbg$perl$exe_ext");
|
---|
| 321 | safe_unlink("$installbin/$dbg${perl}shr$exe_ext");
|
---|
| 322 | copy("$dbg${perl}shr$exe_ext", "$installbin/$dbg${perl}shr$exe_ext");
|
---|
| 323 | chmod(0755, "$installbin/$dbg${perl}shr$exe_ext");
|
---|
| 324 | if ($ndbg) {
|
---|
| 325 | safe_unlink("$installbin/$ndbg$perl$exe_ext");
|
---|
| 326 | copy("$ndbg$perl$exe_ext", "$installbin/$ndbg$perl$exe_ext");
|
---|
| 327 | chmod(0755, "$installbin/$ndbg$perl$exe_ext");
|
---|
| 328 | safe_unlink("$installbin/${dbg}a2p$exe_ext");
|
---|
| 329 | copy("x2p/${dbg}a2p$exe_ext", "$installbin/${dbg}a2p$exe_ext");
|
---|
| 330 | chmod(0755, "$installbin/${dbg}a2p$exe_ext");
|
---|
| 331 | }
|
---|
| 332 | }
|
---|
| 333 | elsif ($^O eq 'mpeix') {
|
---|
| 334 | # MPE lacks hard links and requires that executables with special
|
---|
| 335 | # capabilities reside in the MPE namespace.
|
---|
| 336 | safe_unlink("$installbin/perl$ver$exe_ext", $Config{perlpath});
|
---|
| 337 | # Install the primary executable into the MPE namespace as perlpath.
|
---|
| 338 | copy("perl$exe_ext", $Config{perlpath});
|
---|
| 339 | chmod(0755, $Config{perlpath});
|
---|
| 340 | # Create a backup copy with the version number.
|
---|
| 341 | link($Config{perlpath}, "$installbin/perl$ver$exe_ext");
|
---|
| 342 | }
|
---|
| 343 | elsif ($^O ne 'dos') {
|
---|
| 344 | if (!$Is_NetWare) {
|
---|
| 345 | safe_unlink("$installbin/$perl_verbase$ver$exe_ext");
|
---|
| 346 | copy("perl$exe_ext", "$installbin/$perl_verbase$ver$exe_ext");
|
---|
| 347 | strip("$installbin/$perl_verbase$ver$exe_ext");
|
---|
| 348 | chmod(0755, "$installbin/$perl_verbase$ver$exe_ext");
|
---|
| 349 | }
|
---|
| 350 | else {
|
---|
| 351 | # If installing onto a NetWare server
|
---|
| 352 | if ($nwinstall) {
|
---|
| 353 | # Copy perl.nlm, echo.nlm, type.nlm, a2p.nlm & cgi2perl.nlm
|
---|
| 354 | mkpath($Config{installnwsystem}, 1, 0777);
|
---|
| 355 | copy("netware\\".$ENV{'MAKE_TYPE'}."\\perl.nlm", $Config{installnwsystem});
|
---|
| 356 | copy("netware\\testnlm\\echo\\echo.nlm", $Config{installnwsystem});
|
---|
| 357 | copy("netware\\testnlm\\type\\type.nlm", $Config{installnwsystem});
|
---|
| 358 | copy("x2p\\a2p.nlm", $Config{installnwsystem});
|
---|
| 359 | chmod(0755, "$Config{installnwsystem}\\perl.nlm");
|
---|
| 360 | mkpath($Config{installnwlcgi}, 1, 0777);
|
---|
| 361 | copy("lib\\auto\\cgi2perl\\cgi2perl.nlm", $Config{installnwlcgi});
|
---|
| 362 | }
|
---|
| 363 | } #if (!$Is_NetWare)
|
---|
| 364 | }
|
---|
| 365 | else {
|
---|
| 366 | safe_unlink("$installbin/$perl.exe");
|
---|
| 367 | copy("perl.exe", "$installbin/$perl.exe");
|
---|
| 368 | }
|
---|
| 369 |
|
---|
| 370 | safe_unlink("$installbin/s$perl_verbase$ver$exe_ext");
|
---|
| 371 | if ($d_dosuid) {
|
---|
| 372 | copy("suidperl$exe_ext", "$installbin/s$perl_verbase$ver$exe_ext");
|
---|
| 373 | chmod(04711, "$installbin/s$perl_verbase$ver$exe_ext");
|
---|
| 374 | }
|
---|
| 375 |
|
---|
| 376 | # Install library files.
|
---|
| 377 |
|
---|
| 378 | my ($do_installarchlib, $do_installprivlib) = (0, 0);
|
---|
| 379 |
|
---|
| 380 | mkpath($installprivlib, $verbose, 0777);
|
---|
| 381 | mkpath($installarchlib, $verbose, 0777);
|
---|
| 382 | mkpath($installsitelib, $verbose, 0777) if ($installsitelib);
|
---|
| 383 | mkpath($installsitearch, $verbose, 0777) if ($installsitearch);
|
---|
| 384 |
|
---|
| 385 | if (chdir "lib") {
|
---|
| 386 | $do_installarchlib = ! samepath($installarchlib, '.');
|
---|
| 387 | $do_installprivlib = ! samepath($installprivlib, '.');
|
---|
| 388 | $do_installprivlib = 0 if $versiononly && !($installprivlib =~ m/\Q$ver/);
|
---|
| 389 |
|
---|
| 390 | if ($do_installarchlib || $do_installprivlib) {
|
---|
| 391 | find(\&installlib, '.');
|
---|
| 392 | }
|
---|
| 393 | chdir ".." || die "Can't cd back to source directory: $!\n";
|
---|
| 394 | }
|
---|
| 395 | else {
|
---|
| 396 | warn "Can't cd to lib to install lib files: $!\n";
|
---|
| 397 | }
|
---|
| 398 |
|
---|
| 399 | # Install header files and libraries.
|
---|
| 400 | mkpath("$installarchlib/CORE", $verbose, 0777);
|
---|
| 401 | my @corefiles;
|
---|
| 402 | if ($Is_VMS) { # We did core file selection during build
|
---|
| 403 | my $coredir = "lib/$Config{archname}/$ver/CORE";
|
---|
| 404 | $coredir =~ tr/./_/;
|
---|
| 405 | map { s|^$coredir/||i; } @corefiles = <$coredir/*.*>;
|
---|
| 406 | }
|
---|
| 407 | else {
|
---|
| 408 | # [als] hard-coded 'libperl' name... not good!
|
---|
| 409 | @corefiles = <*.h *.inc libperl*.* perl*$Config{lib_ext}>;
|
---|
| 410 |
|
---|
| 411 | # AIX needs perl.exp installed as well.
|
---|
| 412 | push(@corefiles,'perl.exp') if $^O eq 'aix';
|
---|
| 413 | if ($^O eq 'mpeix') {
|
---|
| 414 | # MPE needs mpeixish.h installed as well.
|
---|
| 415 | mkpath("$installarchlib/CORE/mpeix", $verbose, 0777);
|
---|
| 416 | push(@corefiles,'mpeix/mpeixish.h');
|
---|
| 417 | }
|
---|
| 418 | # If they have built sperl.o...
|
---|
| 419 | push(@corefiles,'sperl.o') if -f 'sperl.o';
|
---|
| 420 | }
|
---|
| 421 | foreach my $file (@corefiles) {
|
---|
| 422 | # HP-UX (at least) needs to maintain execute permissions
|
---|
| 423 | # on dynamically-loadable libraries. So we do it for all.
|
---|
| 424 | if (copy_if_diff($file,"$installarchlib/CORE/$file")) {
|
---|
| 425 | if ($file =~ /\.(\Q$so\E|\Q$dlext\E)$/) {
|
---|
| 426 | strip("-S", "$installarchlib/CORE/$file") if $^O =~ /^(rhapsody|darwin)$/;
|
---|
| 427 | chmod(0555, "$installarchlib/CORE/$file");
|
---|
| 428 | } else {
|
---|
| 429 | chmod(0444, "$installarchlib/CORE/$file");
|
---|
| 430 | }
|
---|
| 431 | }
|
---|
| 432 | }
|
---|
| 433 |
|
---|
| 434 | # Switch in the 5.005-threads versions of he threadsafe queue and semaphore
|
---|
| 435 | # modules if so needed.
|
---|
| 436 | if ($Config{use5005threads}) {
|
---|
| 437 | for my $m (qw(Queue Semaphore)) {
|
---|
| 438 | my $t = "$installprivlib/Thread/$m.pm";
|
---|
| 439 | unlink $t;
|
---|
| 440 | copy("ext/Thread/$m.pmx", $t);
|
---|
| 441 | chmod(0444, $t);
|
---|
| 442 | }
|
---|
| 443 | }
|
---|
| 444 |
|
---|
| 445 | # Install main perl executables
|
---|
| 446 | # Make links to ordinary names if installbin directory isn't current directory.
|
---|
| 447 |
|
---|
| 448 | if (! $versiononly && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_VMS && ! $Is_NetWare) {
|
---|
| 449 | safe_unlink("$installbin/$perl$exe_ext", "$installbin/suid$perl$exe_ext");
|
---|
| 450 | if ($^O eq 'mpeix') {
|
---|
| 451 | # MPE doesn't support hard links, so use a symlink.
|
---|
| 452 | # We don't want another cloned copy.
|
---|
| 453 | symlink($Config{perlpath}, "$installbin/perl$exe_ext");
|
---|
| 454 | } elsif ($^O eq 'vos') {
|
---|
| 455 | # VOS doesn't support hard links, so use a symlink.
|
---|
| 456 | symlink("$installbin/$perl_verbase$ver$exe_ext",
|
---|
| 457 | "$installbin/$perl$exe_ext");
|
---|
| 458 | } else {
|
---|
| 459 | link("$installbin/$perl_verbase$ver$exe_ext",
|
---|
| 460 | "$installbin/$perl$exe_ext");
|
---|
| 461 | }
|
---|
| 462 | link("$installbin/$perl_verbase$ver$exe_ext",
|
---|
| 463 | "$installbin/suid$perl$exe_ext")
|
---|
| 464 | if $d_dosuid;
|
---|
| 465 | }
|
---|
| 466 |
|
---|
| 467 | # For development purposes it can be very useful to have multiple perls
|
---|
| 468 | # build for different "architectures" (eg threading or not) simultaneously.
|
---|
| 469 | if ($archname && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_VMS) {
|
---|
| 470 | my $archperl = "$perl_verbase$ver-$Config{archname}$exe_ext";
|
---|
| 471 | safe_unlink("$installbin/$archperl");
|
---|
| 472 | if ($^O eq 'mpeix') {
|
---|
| 473 | # MPE doesn't support hard links, so use a symlink.
|
---|
| 474 | # We don't want another cloned copy.
|
---|
| 475 | symlink($Config{perlpath}, "$installbin/$archperl");
|
---|
| 476 | } elsif ($^O eq 'vos') {
|
---|
| 477 | # VOS doesn't support hard links, so use a symlink.
|
---|
| 478 | symlink("$installbin/$perl_verbase$ver$exe_ext",
|
---|
| 479 | "$installbin/$archperl");
|
---|
| 480 | } else {
|
---|
| 481 | link("$installbin/$perl_verbase$ver$exe_ext", "$installbin/$archperl");
|
---|
| 482 | }
|
---|
| 483 | }
|
---|
| 484 |
|
---|
| 485 | # Offer to install perl in a "standard" location
|
---|
| 486 |
|
---|
| 487 | my $mainperl_is_instperl = 0;
|
---|
| 488 |
|
---|
| 489 | if ($Config{installusrbinperl} && $Config{installusrbinperl} eq 'define' &&
|
---|
| 490 | !$versiononly && !$nonono && !$Is_W32 && !$Is_NetWare && !$Is_VMS && -t STDIN && -t STDERR
|
---|
| 491 | && -w $mainperldir && ! samepath($mainperldir, $installbin)) {
|
---|
| 492 | my($usrbinperl) = "$mainperldir/$perl$exe_ext";
|
---|
| 493 | my($instperl) = "$installbin/$perl$exe_ext";
|
---|
| 494 | my($expinstperl) = "$binexp/$perl$exe_ext";
|
---|
| 495 |
|
---|
| 496 | # First make sure $usrbinperl is not already the same as the perl we
|
---|
| 497 | # just installed.
|
---|
| 498 | if (-x $usrbinperl) {
|
---|
| 499 | # Try to be clever about mainperl being a symbolic link
|
---|
| 500 | # to binexp/perl if binexp and installbin are different.
|
---|
| 501 | $mainperl_is_instperl =
|
---|
| 502 | samepath($usrbinperl, $instperl) ||
|
---|
| 503 | samepath($usrbinperl, $expinstperl) ||
|
---|
| 504 | (($binexp ne $installbin) &&
|
---|
| 505 | (-l $usrbinperl) &&
|
---|
| 506 | ((readlink $usrbinperl) eq $expinstperl));
|
---|
| 507 | }
|
---|
| 508 | if (! $mainperl_is_instperl) {
|
---|
| 509 | unlink($usrbinperl);
|
---|
| 510 | ( $Config{'d_link'} eq 'define' &&
|
---|
| 511 | eval { CORE::link $instperl, $usrbinperl } ) ||
|
---|
| 512 | eval { symlink $expinstperl, $usrbinperl } ||
|
---|
| 513 | copy($instperl, $usrbinperl);
|
---|
| 514 |
|
---|
| 515 | $mainperl_is_instperl = 1;
|
---|
| 516 | }
|
---|
| 517 | }
|
---|
| 518 |
|
---|
| 519 | # Make links to ordinary names if installbin directory isn't current directory.
|
---|
| 520 | if (!$Is_NetWare && $dbg eq '') {
|
---|
| 521 | if (! samepath($installbin, 'x2p')) {
|
---|
| 522 | my $base = 'a2p';
|
---|
| 523 | $base .= $ver if $versiononly;
|
---|
| 524 | safe_unlink("$installbin/$base$exe_ext");
|
---|
| 525 | copy("x2p/a2p$exe_ext", "$installbin/$base$exe_ext");
|
---|
| 526 | strip("$installbin/$base$exe_ext");
|
---|
| 527 | chmod(0755, "$installbin/$base$exe_ext");
|
---|
| 528 | }
|
---|
| 529 | }
|
---|
| 530 |
|
---|
| 531 | # cppstdin is just a script, but it is architecture-dependent, so
|
---|
| 532 | # it can't safely be shared. Place it in $installbin.
|
---|
| 533 | # Note that Configure doesn't build cppstin if it isn't needed, so
|
---|
| 534 | # we skip this if cppstdin doesn't exist.
|
---|
| 535 | if (! $versiononly && (-f 'cppstdin') && (! samepath($installbin, '.'))) {
|
---|
| 536 | safe_unlink("$installbin/cppstdin");
|
---|
| 537 | copy("cppstdin", "$installbin/cppstdin");
|
---|
| 538 | chmod(0755, "$installbin/cppstdin");
|
---|
| 539 | }
|
---|
| 540 |
|
---|
| 541 | sub script_alias {
|
---|
| 542 | my ($installscript, $orig, $alias, $scr_ext) = @_;
|
---|
| 543 |
|
---|
| 544 | safe_unlink("$installscript/$alias$scr_ext");
|
---|
| 545 | if ($^O eq 'dos' or $Is_VMS or $^O eq 'transit') {
|
---|
| 546 | copy("$installscript/$orig$scr_ext",
|
---|
| 547 | "$installscript/$alias$scr_ext");
|
---|
| 548 | } elsif ($^O eq 'vos') {
|
---|
| 549 | symlink("$installscript/$orig$scr_ext",
|
---|
| 550 | "$installscript/$alias$scr_ext");
|
---|
| 551 | } else {
|
---|
| 552 | link("$installscript/$orig$scr_ext",
|
---|
| 553 | "$installscript/$alias$scr_ext");
|
---|
| 554 | }
|
---|
| 555 | }
|
---|
| 556 |
|
---|
| 557 | # Install scripts.
|
---|
| 558 | mkpath($installscript, $verbose, 0777);
|
---|
| 559 | if ($versiononly) {
|
---|
| 560 | for (@scripts) {
|
---|
| 561 | (my $base = $_) =~ s#.*/##;
|
---|
| 562 | $base .= $ver;
|
---|
| 563 | copy($_, "$installscript/$base");
|
---|
| 564 | chmod(0755, "$installscript/$base");
|
---|
| 565 | }
|
---|
| 566 |
|
---|
| 567 | for (@tolink) {
|
---|
| 568 | my ($from, $to) = map { "$_$ver" } @$_;
|
---|
| 569 | (my $frbase = $from) =~ s#.*/##;
|
---|
| 570 | (my $tobase = $to) =~ s#.*/##;
|
---|
| 571 | script_alias($installscript, $frbase, $tobase, $scr_ext);
|
---|
| 572 | }
|
---|
| 573 | } else {
|
---|
| 574 | for (@scripts) {
|
---|
| 575 | (my $base = $_) =~ s#.*/##;
|
---|
| 576 | copy($_, "$installscript/$base");
|
---|
| 577 | chmod(0755, "$installscript/$base");
|
---|
| 578 | }
|
---|
| 579 |
|
---|
| 580 | for (@tolink) {
|
---|
| 581 | my ($from, $to) = @$_;
|
---|
| 582 | (my $frbase = $from) =~ s#.*/##;
|
---|
| 583 | (my $tobase = $to) =~ s#.*/##;
|
---|
| 584 | script_alias($installscript, $frbase, $tobase, $scr_ext);
|
---|
| 585 | }
|
---|
| 586 | }
|
---|
| 587 |
|
---|
| 588 | # Install pod pages. Where? I guess in $installprivlib/pod
|
---|
| 589 | # ($installprivlib/pods for cygwin).
|
---|
| 590 |
|
---|
| 591 | my $pod = ($Is_Cygwin || $Is_Darwin || $Is_VMS) ? 'pods' : 'pod';
|
---|
| 592 | if ( !$versiononly || ($installprivlib =~ m/\Q$ver/)) {
|
---|
| 593 | mkpath("${installprivlib}/$pod", $verbose, 0777);
|
---|
| 594 |
|
---|
| 595 | # If Perl 5.003's perldiag.pod is there, rename it.
|
---|
| 596 | if (open POD, "${installprivlib}/$pod/perldiag.pod") {
|
---|
| 597 | read POD, $_, 4000;
|
---|
| 598 | close POD;
|
---|
| 599 | # Some of Perl 5.003's diagnostic messages ended with periods.
|
---|
| 600 | if (/^=.*\.$/m) {
|
---|
| 601 | my ($from, $to) = ("${installprivlib}/$pod/perldiag.pod",
|
---|
| 602 | "${installprivlib}/$pod/perldiag-5.003.pod");
|
---|
| 603 | print " rename $from $to";
|
---|
| 604 | rename($from, $to)
|
---|
| 605 | or warn "Couldn't rename $from to $to: $!\n"
|
---|
| 606 | unless $nonono;
|
---|
| 607 | }
|
---|
| 608 | }
|
---|
| 609 |
|
---|
| 610 | for (@pods) {
|
---|
| 611 | # $_ is a name like pod/perl.pod
|
---|
| 612 | (my $base = $_) =~ s#.*/##;
|
---|
| 613 | copy_if_diff($_, "${installprivlib}/$pod/${base}");
|
---|
| 614 | }
|
---|
| 615 |
|
---|
| 616 | }
|
---|
| 617 |
|
---|
| 618 | # Check to make sure there aren't other perls around in installer's
|
---|
| 619 | # path. This is probably UNIX-specific. Check all absolute directories
|
---|
| 620 | # in the path except for where public executables are supposed to live.
|
---|
| 621 | # Also skip $mainperl if the user opted to have it be a link to the
|
---|
| 622 | # installed perl.
|
---|
| 623 |
|
---|
| 624 | if (!$versiononly && $otherperls) {
|
---|
| 625 | my ($path, @path);
|
---|
| 626 | my $dirsep = ($Is_OS2 || $Is_W32 || $Is_NetWare) ? ';' : ':' ;
|
---|
| 627 | ($path = $ENV{"PATH"}) =~ s:\\:/:g ;
|
---|
| 628 | @path = split(/$dirsep/, $path);
|
---|
| 629 | if ($Is_VMS) {
|
---|
| 630 | my $i = 0;
|
---|
| 631 | while (exists $ENV{'DCL$PATH' . $i}) {
|
---|
| 632 | my $dir = unixpath($ENV{'DCL$PATH' . $i}); $dir =~ s-/$--;
|
---|
| 633 | push(@path,$dir);
|
---|
| 634 | }
|
---|
| 635 | }
|
---|
| 636 | my @otherperls;
|
---|
| 637 | my %otherperls;
|
---|
| 638 | for (@path) {
|
---|
| 639 | next unless m,^/,;
|
---|
| 640 | # Use &samepath here because some systems have other dirs linked
|
---|
| 641 | # to $mainperldir (like SunOS)
|
---|
| 642 | next if samepath($_, $binexp);
|
---|
| 643 | next if ($mainperl_is_instperl && samepath($_, $mainperldir));
|
---|
| 644 | my $otherperl = "$_/$perl$exe_ext";
|
---|
| 645 | next if $otherperls{$otherperl}++;
|
---|
| 646 | push(@otherperls, $otherperl)
|
---|
| 647 | if (-x $otherperl && ! -d $otherperl);
|
---|
| 648 | }
|
---|
| 649 | if (@otherperls) {
|
---|
| 650 | warn "\nWarning: $perl appears in your path in the following " .
|
---|
| 651 | "locations beyond where\nwe just installed it:\n";
|
---|
| 652 | for (@otherperls) {
|
---|
| 653 | warn " ", $_, "\n";
|
---|
| 654 | }
|
---|
| 655 | warn "\n";
|
---|
| 656 | }
|
---|
| 657 |
|
---|
| 658 | }
|
---|
| 659 |
|
---|
| 660 | $packlist->write() unless $nonono;
|
---|
| 661 | print " Installation complete\n" if $verbose;
|
---|
| 662 |
|
---|
| 663 | exit 0;
|
---|
| 664 |
|
---|
| 665 | ###############################################################################
|
---|
| 666 |
|
---|
| 667 | sub yn {
|
---|
| 668 | my($prompt) = @_;
|
---|
| 669 | my($answer);
|
---|
| 670 | my($default) = $prompt =~ m/\[([yn])\]\s*$/i;
|
---|
| 671 | print STDERR $prompt;
|
---|
| 672 | chop($answer = <STDIN>);
|
---|
| 673 | $answer = $default if $answer =~ m/^\s*$/;
|
---|
| 674 | ($answer =~ m/^[yY]/);
|
---|
| 675 | }
|
---|
| 676 |
|
---|
| 677 | sub unlink {
|
---|
| 678 | my(@names) = @_;
|
---|
| 679 | my($cnt) = 0;
|
---|
| 680 |
|
---|
| 681 | return scalar(@names) if $Is_VMS;
|
---|
| 682 |
|
---|
| 683 | foreach my $name (@names) {
|
---|
| 684 | next unless -e $name;
|
---|
| 685 | chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_Cygwin || $Is_NetWare);
|
---|
| 686 | print " unlink $name\n" if $verbose;
|
---|
| 687 | ( CORE::unlink($name) and ++$cnt
|
---|
| 688 | or warn "Couldn't unlink $name: $!\n" ) unless $nonono;
|
---|
| 689 | }
|
---|
| 690 | return $cnt;
|
---|
| 691 | }
|
---|
| 692 |
|
---|
| 693 | sub safe_unlink {
|
---|
| 694 | return if $nonono or $Is_VMS;
|
---|
| 695 | my @names = @_;
|
---|
| 696 | foreach my $name (@names) {
|
---|
| 697 | next unless -e $name;
|
---|
| 698 | chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_NetWare);
|
---|
| 699 | print " unlink $name\n" if $verbose;
|
---|
| 700 | next if CORE::unlink($name);
|
---|
| 701 | warn "Couldn't unlink $name: $!\n";
|
---|
| 702 | if ($! =~ /busy/i) {
|
---|
| 703 | print " mv $name $name.old\n" if $verbose;
|
---|
| 704 | safe_rename($name, "$name.old")
|
---|
| 705 | or warn "Couldn't rename $name: $!\n";
|
---|
| 706 | }
|
---|
| 707 | }
|
---|
| 708 | }
|
---|
| 709 |
|
---|
| 710 | sub safe_rename {
|
---|
| 711 | my($from,$to) = @_;
|
---|
| 712 | if (-f $to and not unlink($to)) {
|
---|
| 713 | my($i);
|
---|
| 714 | for ($i = 1; $i < 50; $i++) {
|
---|
| 715 | last if rename($to, "$to.$i");
|
---|
| 716 | }
|
---|
| 717 | warn("Cannot rename to `$to.$i': $!"), return 0
|
---|
| 718 | if $i >= 50; # Give up!
|
---|
| 719 | }
|
---|
| 720 | link($from,$to) || return 0;
|
---|
| 721 | unlink($from);
|
---|
| 722 | }
|
---|
| 723 |
|
---|
| 724 | sub link {
|
---|
| 725 | my($from,$to) = @_;
|
---|
| 726 | my($success) = 0;
|
---|
| 727 |
|
---|
| 728 | my $xfrom = $from;
|
---|
| 729 | $xfrom =~ s/^\Q$destdir\E// if $destdir;
|
---|
| 730 | my $xto = $to;
|
---|
| 731 | $xto =~ s/^\Q$destdir\E// if $destdir;
|
---|
| 732 | print $verbose ? " ln $xfrom $xto\n" : " $xto\n" unless $silent;
|
---|
| 733 | eval {
|
---|
| 734 | CORE::link($from, $to)
|
---|
| 735 | ? $success++
|
---|
| 736 | : ($from =~ m#^/afs/# || $to =~ m#^/afs/#)
|
---|
| 737 | ? die "AFS" # okay inside eval {}
|
---|
| 738 | : die "Couldn't link $from to $to: $!\n"
|
---|
| 739 | unless $nonono;
|
---|
| 740 | $packlist->{$xto} = { from => $xfrom, type => 'link' };
|
---|
| 741 | };
|
---|
| 742 | if ($@) {
|
---|
| 743 | warn "Replacing link() with File::Copy::copy(): $@";
|
---|
| 744 | print $verbose ? " cp $from $xto\n" : " $xto\n" unless $silent;
|
---|
| 745 | print " creating new version of $xto\n"
|
---|
| 746 | if $Is_VMS and -e $to and !$silent;
|
---|
| 747 | unless ($nonono or File::Copy::copy($from, $to) and ++$success) {
|
---|
| 748 | # Might have been that F::C::c can't overwrite the target
|
---|
| 749 | warn "Couldn't copy $from to $to: $!\n"
|
---|
| 750 | unless -f $to and (chmod(0666, $to), unlink $to)
|
---|
| 751 | and File::Copy::copy($from, $to) and ++$success;
|
---|
| 752 | }
|
---|
| 753 | $packlist->{$xto} = { type => 'file' };
|
---|
| 754 | }
|
---|
| 755 | $success;
|
---|
| 756 | }
|
---|
| 757 |
|
---|
| 758 | sub chmod {
|
---|
| 759 | my($mode,$name) = @_;
|
---|
| 760 |
|
---|
| 761 | return if ($^O eq 'dos');
|
---|
| 762 | printf " chmod %o %s\n", $mode, $name if $verbose;
|
---|
| 763 | CORE::chmod($mode,$name)
|
---|
| 764 | || warn sprintf("Couldn't chmod %o %s: $!\n", $mode, $name)
|
---|
| 765 | unless $nonono;
|
---|
| 766 | }
|
---|
| 767 |
|
---|
| 768 | sub copy {
|
---|
| 769 | my($from,$to) = @_;
|
---|
| 770 |
|
---|
| 771 | my $xto = $to;
|
---|
| 772 | $xto =~ s/^\Q$destdir\E// if $destdir;
|
---|
| 773 | print $verbose ? " cp $from $xto\n" : " $xto\n" unless $silent;
|
---|
| 774 | print " creating new version of $xto\n" if $Is_VMS and -e $to and !$silent;
|
---|
| 775 | unless ($nonono or File::Copy::copy($from, $to)) {
|
---|
| 776 | # Might have been that F::C::c can't overwrite the target
|
---|
| 777 | warn "Couldn't copy $from to $to: $!\n"
|
---|
| 778 | unless -f $to and (chmod(0666, $to), unlink $to)
|
---|
| 779 | and File::Copy::copy($from, $to);
|
---|
| 780 | }
|
---|
| 781 | $packlist->{$xto} = { type => 'file' };
|
---|
| 782 | }
|
---|
| 783 |
|
---|
| 784 | sub samepath {
|
---|
| 785 | my($p1, $p2) = @_;
|
---|
| 786 |
|
---|
| 787 | return (lc($p1) eq lc($p2)) if ($Is_W32 || $Is_NetWare);
|
---|
| 788 |
|
---|
| 789 | if ($p1 ne $p2) {
|
---|
| 790 | my($dev1, $ino1, $dev2, $ino2);
|
---|
| 791 | ($dev1, $ino1) = stat($p1);
|
---|
| 792 | ($dev2, $ino2) = stat($p2);
|
---|
| 793 | ($dev1 == $dev2 && $ino1 == $ino2);
|
---|
| 794 | }
|
---|
| 795 | else {
|
---|
| 796 | 1;
|
---|
| 797 | }
|
---|
| 798 | }
|
---|
| 799 |
|
---|
| 800 | sub installlib {
|
---|
| 801 | my $dir = $File::Find::dir;
|
---|
| 802 | $dir =~ s#^\.(?![^/])/?##;
|
---|
| 803 | local($depth) = $dir ? "lib/$dir" : "lib";
|
---|
| 804 |
|
---|
| 805 | my $name = $_;
|
---|
| 806 |
|
---|
| 807 | # Ignore version control directories.
|
---|
| 808 | if ($name =~ /^(?:CVS|RCS|SCCS|\.svn)\z/ and -d $name) {
|
---|
| 809 | $File::Find::prune = 1;
|
---|
| 810 | return;
|
---|
| 811 | }
|
---|
| 812 |
|
---|
| 813 | # ignore patch backups, RCS files, emacs backup & temp files and the
|
---|
| 814 | # .exists files, .PL files, and test files.
|
---|
| 815 | return if $name =~ m{\.orig$|\.rej$|~$|^#.+#$|,v$|^\.exists|\.PL$|\.plc$|\.t$|^test\.pl$} ||
|
---|
| 816 | $dir =~ m{/t(?:/|$)};
|
---|
| 817 |
|
---|
| 818 | # XXX xsubpp back out of the list. prove now integrated. Out of order, so
|
---|
| 819 | # p4 will conflict on the next update to the following lines:
|
---|
| 820 |
|
---|
| 821 | # ignore the cpan script in lib/CPAN/bin, the instmodsh and xsubpp
|
---|
| 822 | # scripts in lib/ExtUtils, and the prove script in lib/Test/Harness
|
---|
| 823 | # (they're installed later with other utils)
|
---|
| 824 | return if $name =~ /^(?:cpan|instmodsh|prove)\z/;
|
---|
| 825 |
|
---|
| 826 | # ignore the Makefiles
|
---|
| 827 | return if $name =~ /^makefile$/i;
|
---|
| 828 | # ignore the test extensions
|
---|
| 829 | return if $dir =~ m{ext/XS/(?:APItest|Typemap)/};
|
---|
| 830 | # ignore the demo files
|
---|
| 831 | return if $dir =~ /\bdemos?\b/;
|
---|
| 832 |
|
---|
| 833 | # ignore READMEs, MANIFESTs, INSTALL docs, META.ymls and change logs.
|
---|
| 834 | # Changes.e2x and README.e2x are needed by enc2xs.
|
---|
| 835 | return if $name =~ m{^(?:README(?:\.\w+)?|MANIFEST|META\.yml|INSTALL)$} && $name ne 'README.e2x';
|
---|
| 836 | return if $name =~ m{^(?:TODO|BUGS|CREDITS)$}i;
|
---|
| 837 | return if $name =~ m{^change(?:s|log)(?:\.libnet)?$}i;
|
---|
| 838 |
|
---|
| 839 | $name = "$dir/$name" if $dir ne '';
|
---|
| 840 |
|
---|
| 841 | my $installlib = $installprivlib;
|
---|
| 842 | if ($dir =~ /^auto/ ||
|
---|
| 843 | ($name =~ /^(.*)\.(?:pm|pod)$/ && $archpms{$1}) ||
|
---|
| 844 | ($name =~ /^(.*)\.(?:h|lib)$/i && ($Is_W32 || $Is_NetWare)) ||
|
---|
| 845 | $name eq 'Config_heavy.pl'
|
---|
| 846 | ) {
|
---|
| 847 | $installlib = $installarchlib;
|
---|
| 848 | return unless $do_installarchlib;
|
---|
| 849 | } else {
|
---|
| 850 | return unless $do_installprivlib;
|
---|
| 851 | }
|
---|
| 852 |
|
---|
| 853 | if (-f $_) {
|
---|
| 854 | if (/\.(?:al|ix)$/ && !($dir =~ m[^auto/(.*)$] && $archpms{$1})) {
|
---|
| 855 | $installlib = $installprivlib;
|
---|
| 856 | #We're installing *.al and *.ix files into $installprivlib,
|
---|
| 857 | #but we have to delete old *.al and *.ix files from the 5.000
|
---|
| 858 | #distribution:
|
---|
| 859 | #This might not work because $archname might have changed.
|
---|
| 860 | unlink("$installarchlib/$name");
|
---|
| 861 | }
|
---|
| 862 | my $xname = "$installlib/$name";
|
---|
| 863 | $xname =~ s/^\Q$destdir\E// if $destdir;
|
---|
| 864 | $packlist->{$xname} = { type => 'file' };
|
---|
| 865 | if ($force || compare($_, "$installlib/$name") || $nonono) {
|
---|
| 866 | unlink("$installlib/$name");
|
---|
| 867 | mkpath("$installlib/$dir", $verbose, 0777);
|
---|
| 868 | # HP-UX (at least) needs to maintain execute permissions
|
---|
| 869 | # on dynamically-loaded libraries.
|
---|
| 870 | if ($Is_NetWare && !$nwinstall) {
|
---|
| 871 | # Don't copy .nlp,.nlm files, doesn't make sense on Windows and also
|
---|
| 872 | # if copied will give problems when building new extensions.
|
---|
| 873 | # Has to be copied if we are installing on a NetWare server and hence
|
---|
| 874 | # the check !$nwinstall
|
---|
| 875 | if (!(/\.(?:nlp|nlm|bs)$/)) {
|
---|
| 876 | copy_if_diff($_, "$installlib/$name")
|
---|
| 877 | and chmod($name =~ /\.(so|$dlext)$/o ? 0555 : 0444,
|
---|
| 878 | "$installlib/$name");
|
---|
| 879 | }
|
---|
| 880 | } else {
|
---|
| 881 | if (copy_if_diff($_, "$installlib/$name")) {
|
---|
| 882 | if ($name =~ /\.(so|$dlext)$/o) {
|
---|
| 883 | strip("-S", "$installlib/$name") if $^O =~ /^(rhapsody|darwin)$/;
|
---|
| 884 | chmod(0555, "$installlib/$name");
|
---|
| 885 | } else {
|
---|
| 886 | strip("-S", "$installlib/$name")
|
---|
| 887 | if ($name =~ /\.a$/o and $^O =~ /^(rhapsody|darwin)$/);
|
---|
| 888 | chmod(0444, "$installlib/$name");
|
---|
| 889 | }
|
---|
| 890 | }
|
---|
| 891 | } #if ($Is_NetWare)
|
---|
| 892 | }
|
---|
| 893 | }
|
---|
| 894 | }
|
---|
| 895 |
|
---|
| 896 | # Copy $from to $to, only if $from is different than $to.
|
---|
| 897 | # Also preserve modification times for .a libraries.
|
---|
| 898 | # On some systems, if you do
|
---|
| 899 | # ranlib libperl.a
|
---|
| 900 | # cp libperl.a /usr/local/lib/perl5/archlib/CORE/libperl.a
|
---|
| 901 | # and then try to link against the installed libperl.a, you might
|
---|
| 902 | # get an error message to the effect that the symbol table is older
|
---|
| 903 | # than the library.
|
---|
| 904 | # Return true if copying occurred.
|
---|
| 905 |
|
---|
| 906 | sub copy_if_diff {
|
---|
| 907 | my($from,$to)=@_;
|
---|
| 908 | return 1 if (($^O eq 'VMS') && (-d $from));
|
---|
| 909 | my $xto = $to;
|
---|
| 910 | $xto =~ s/^\Q$destdir\E// if $destdir;
|
---|
| 911 | my $perlpodbadsymlink;
|
---|
| 912 | if ($from =~ m!^pod/perl[\w-]+\.pod$! &&
|
---|
| 913 | -l $from &&
|
---|
| 914 | ! -e $from) {
|
---|
| 915 | # Some Linux implementations have problems traversing over
|
---|
| 916 | # multiple symlinks (when going over NFS?) and fail to read
|
---|
| 917 | # the symlink target. Combine this with the fact that some
|
---|
| 918 | # of the pod files (the perl$OS.pod) are symlinks (to ../README.$OS),
|
---|
| 919 | # and you end up with those pods not getting installed.
|
---|
| 920 | $perlpodbadsymlink = 1;
|
---|
| 921 | }
|
---|
| 922 | -f $from || $perlpodbadsymlink || warn "$0: $from not found";
|
---|
| 923 | $packlist->{$xto} = { type => 'file' };
|
---|
| 924 | if ($force || compare($from, $to) || $nonono) {
|
---|
| 925 | safe_unlink($to); # In case we don't have write permissions.
|
---|
| 926 | if ($nonono) {
|
---|
| 927 | $from = $depth . "/" . $from if $depth;
|
---|
| 928 | }
|
---|
| 929 | if ($perlpodbadsymlink && $from =~ m!^pod/perl(.+)\.pod$!) {
|
---|
| 930 | $from = "README.$1";
|
---|
| 931 | }
|
---|
| 932 | copy($from, $to);
|
---|
| 933 | # Restore timestamps if it's a .a library or for OS/2.
|
---|
| 934 | if (!$nonono && ($Is_OS2 || $to =~ /\.a$/)) {
|
---|
| 935 | my ($atime, $mtime) = (stat $from)[8,9];
|
---|
| 936 | utime $atime, $mtime, $to;
|
---|
| 937 | }
|
---|
| 938 | 1;
|
---|
| 939 | }
|
---|
| 940 | }
|
---|
| 941 |
|
---|
| 942 | sub strip
|
---|
| 943 | {
|
---|
| 944 | my(@args) = @_;
|
---|
| 945 |
|
---|
| 946 | return unless $dostrip;
|
---|
| 947 |
|
---|
| 948 | my @opts;
|
---|
| 949 | while (@args && $args[0] =~ /^(-\w+)$/) {
|
---|
| 950 | push @opts, shift @args;
|
---|
| 951 | }
|
---|
| 952 |
|
---|
| 953 | foreach my $file (@args) {
|
---|
| 954 | if (-f $file) {
|
---|
| 955 | if ($verbose) {
|
---|
| 956 | print " strip " . join(' ', @opts);
|
---|
| 957 | print " " if (@opts);
|
---|
| 958 | print "$file\n";
|
---|
| 959 | }
|
---|
| 960 | system("strip", @opts, $file);
|
---|
| 961 | } else {
|
---|
| 962 | print "# file '$file' skipped\n" if $verbose;
|
---|
| 963 | }
|
---|
| 964 | }
|
---|
| 965 | }
|
---|