This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
In installperl, initialise $do_install{arch,priv}lib at their declarations.
[perl5.git] / installperl
index 59c9c52..a6bd023 100755 (executable)
@@ -116,7 +116,6 @@ my (@scripts, @tolink);
 open SCRIPTS, "utils.lst" or die "Can't open utils.lst: $!";
 while (<SCRIPTS>) {
     next if /^#/;
-    s/\s*#\s*pod\s*=.*//; # install script regardless of pod location
     next if /a2p/; # a2p is binary, to be installed separately
     chomp;
     if (/(\S*)\s*#\s*link\s*=\s*(\S*)/) {
@@ -156,26 +155,33 @@ if ((-e "testcompile") && (defined($ENV{'COMPILE'}))) {
 # Exclude nonxs extensions that are not architecture dependent
 my @nonxs = grep(!/^Errno$/, split(' ', $Config{'nonxs_ext'}));
 
-find(sub {
-    if (($File::Find::name =~ m{^ext\b(.*)/([^/]+)\.pm$}) &&
-        ! grep { (my $dir = $_) =~ s/\//-/g;
-                 $File::Find::name =~ /^ext\/$dir/ } @nonxs)
-    {
-       my($path, $modname) = ($1,$2);
+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);
 
-       # strip to optional "/lib", or remove trailing component
-       $path =~ s{.*/lib\b}{} or $path =~ s{/[^/]*$}{};
+           # Change hyphenated name like Filter-Util-Call to nested
+           # directory name Filter/Util/Call
+           $path =~ s{-}{/}g;
 
-       # strip any leading /
-       $path =~ s{^/}{};
+           # strip to optional "/lib", or remove trailing component
+           $path =~ s{.*/lib\b}{} or $path =~ s{/[^/]*$}{};
 
-       # reconstitute canonical module name
-       $modname = "$path/$modname" if length $path;
+           # strip any leading /
+           $path =~ s{^/}{};
 
-       # remember it
-       $archpms{$modname} = 1;
-    }
-}, 'ext');
+           # reconstitute canonical module name
+           $modname = "$path/$modname" if length $path;
+
+           # remember it
+           $archpms{$modname} = 1;
+       }
+    }, $ext_dir);
+}
 
 # print "[$_]\n" for sort keys %archpms;
 
@@ -317,13 +323,13 @@ elsif ($^O ne 'dos') {
        # If installing onto a NetWare server
        if ($nwinstall) {
            # Copy perl.nlm, echo.nlm, type.nlm, a2p.nlm & cgi2perl.nlm
-           mkpath($Config{installnwsystem}, 1, 0777);
+            mkpath($Config{installnwsystem}, $opts{verbose}, 0777);
            copy("netware\\".$ENV{'MAKE_TYPE'}."\\perl.nlm", $Config{installnwsystem});
            copy("netware\\testnlm\\echo\\echo.nlm", $Config{installnwsystem});
            copy("netware\\testnlm\\type\\type.nlm", $Config{installnwsystem});
            copy("x2p\\a2p.nlm", $Config{installnwsystem});
            chmod(0755, "$Config{installnwsystem}\\perl.nlm");
-           mkpath($Config{installnwlcgi}, 1, 0777);
+            mkpath($Config{installnwlcgi}, $opts{verbose}, 0777);
            copy("lib\\auto\\cgi2perl\\cgi2perl.nlm", $Config{installnwlcgi});
        }
     } #if (!$Is_NetWare)
@@ -335,8 +341,10 @@ else {
 
 # Install library files.
 
-my ($do_installarchlib, $do_installprivlib) = (0, 0);
+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, $opts{verbose}, 0777);
 mkpath($installarchlib, $opts{verbose}, 0777);
@@ -344,10 +352,6 @@ mkpath($installsitelib, $opts{verbose}, 0777) if ($installsitelib);
 mkpath($installsitearch, $opts{verbose}, 0777) if ($installsitearch);
 
 if (chdir "lib") {
-    $do_installarchlib = ! samepath($installarchlib, '.');
-    $do_installprivlib = ! samepath($installprivlib, '.');
-    $do_installprivlib = 0 if $versiononly && !($installprivlib =~ m/\Q$vershort/);
-
     if ($do_installarchlib || $do_installprivlib) {
        find(\&installlib, '.');
     }
@@ -395,8 +399,6 @@ elsif ($Is_Cygwin) { # On Cygwin symlink it to CORE to make Makefile happy
        mkpath("$installarchlib/CORE/mpeix", $opts{verbose}, 0777);
        push(@corefiles,'mpeix/mpeixish.h');
     }
-    # If they have built sperl.o...
-    push(@corefiles,'sperl.o') if -f 'sperl.o';
 }
 foreach my $file (@corefiles) {
     # HP-UX (at least) needs to maintain execute permissions
@@ -558,21 +560,6 @@ my $pod = ($Is_Cygwin || $Is_Darwin || $Is_VMS || $Is_W32) ? 'pods' : 'pod';
 if ( !$versiononly || ($installprivlib =~ m/\Q$vershort/)) {
     mkpath("${installprivlib}/$pod", $opts{verbose}, 0777);
 
-    # If Perl 5.003's perldiag.pod is there, rename it.
-    if (open POD, "${installprivlib}/$pod/perldiag.pod") {
-       read POD, $_, 4000;
-       close POD;
-       # Some of Perl 5.003's diagnostic messages ended with periods.
-       if (/^=.*\.$/m) {
-           my ($from, $to) = ("${installprivlib}/$pod/perldiag.pod",
-                              "${installprivlib}/$pod/perldiag-5.003.pod");
-           print "  rename $from $to";
-           rename($from, $to)
-               or warn "Couldn't rename $from to $to: $!\n"
-               unless $opts{notify};
-       }
-    }
-
     for (@pods) {
        # $_ is a name like  pod/perl.pod
        (my $base = $_) =~ s#.*/##;
@@ -669,7 +656,7 @@ sub safe_rename {
        for ($i = 1; $i < 50; $i++) {
            last if rename($to, "$to.$i");
        }
-       warn("Cannot rename to `$to.$i': $!"), return 0
+       warn("Cannot rename to '$to.$i': $!"), return 0
           if $i >= 50; # Give up!
     }
     link($from,$to) || return 0;
@@ -709,21 +696,37 @@ sub installlib {
 
     # ignore patch backups, RCS files, emacs backup & temp files and the
     # .exists files, .PL files, and test files.
-    return if $name =~ m{\.orig$|\.rej$|~$|^#.+#$|,v$|^\.exists|\.PL$|\.plc$|\.t$|^test\.pl$|^dbm_filter_util.pl$} ||
+    return if $name =~ m{\.orig$|\.rej$|~$|^#.+#$|,v$|^\.exists|\.PL$|\.plc$|\.t$|^test\.pl$|^dbm_filter_util\.pl$|^filter-util\.pl$|^uupacktool\.pl$|^\.gitignore$} ||
              $dir  =~ m{/t(?:/|$)};
     # ignore the cpan script in lib/CPAN/bin, the instmodsh and xsubpp
     # scripts in lib/ExtUtils, the prove script in lib/Test/Harness,
     # the corelist script from lib/Module/CoreList/bin and ptar* in
     # lib/Archive/Tar/bin, the config_data script in lib/Module/Build/scripts
+    # and zipdetails in cpan/IO-Compress/bin
     # (they're installed later with other utils)
-    return if $name =~ /^(?:cpan|instmodsh|prove|corelist|ptar|cpan2dist|cpanp|cpanp-run-perl|ptardiff|config_data)\z/;
+    return if $name =~ /^(?:cpan|instmodsh|prove|corelist|ptar|cpan2dist|cpanp|cpanp-run-perl|ptardiff|ptargrep|config_data|zipdetails)\z/;
     # ignore the Makefiles
     return if $name =~ /^makefile$/i;
     # ignore the test extensions
     return if $dir =~ m{\bXS/(?:APItest|Typemap)\b};
     return if $name =~ m{\b(?:APItest|Typemap)\.pm$};
+    # ignore the build support code
+    return if $name =~ /\bbuildcustomize\.pl$/;
     # ignore the demo files
     return if $dir =~ /\b(?:demos?|eg)\b/;
+    # ignore unneeded unicore files
+    if ( $dir =~ /^unicore/ ) {
+      if ( $name =~ /\.txt\z/ ) {
+        # We can ignore most, but not all .txt files
+        return unless $name =~ /\A(?:Blocks|CaseFolding|SpecialCasing|NamedSequences)\.txt\z/;
+      }
+      else {
+        # TestProp only needed during testing
+        return if $name =~ /\ATestProp.pl\z/;
+        # we need version and *.pl files and can skip the rest
+        return unless $name =~ /\A(?:version|\w+\.p[lm])\z/;
+      }
+    }
 
     # ignore READMEs, MANIFESTs, INSTALL docs, META.ymls and change logs.
     # Changes.e2x and README.e2x are needed by enc2xs.
@@ -757,6 +760,14 @@ sub installlib {
        return unless $do_installprivlib;
     }
 
+    if ($Is_NetWare && !$nwinstall && /\.(?:nlp|nlm|bs)$/) {
+        # Don't copy .nlp,.nlm files, doesn't make sense on Windows and also
+        # if copied will give problems when building new extensions.
+        # Has to be copied if we are installing on a NetWare server and
+        # hence the check !$nwinstall
+        return;
+    }
+
     if (-f $_) {
        if (/\.(?:al|ix)$/ && !($dir =~ m[^auto/(.*)$])) {
            $installlib = $installprivlib;
@@ -774,28 +785,11 @@ sub installlib {
            mkpath("$installlib/$dir", $opts{verbose}, 0777);
            # HP-UX (at least) needs to maintain execute permissions
            # on dynamically-loaded libraries.
-           if ($Is_NetWare && !$nwinstall) {
-               # Don't copy .nlp,.nlm files, doesn't make sense on Windows and also
-               # if copied will give problems when building new extensions.
-               # Has to be copied if we are installing on a NetWare server and hence
-               # the check !$nwinstall
-               if (!(/\.(?:nlp|nlm|bs)$/)) {
-                   copy_if_diff($_, "$installlib/$name")
-                       and chmod($name =~ /\.(so|$dlext)$/o ? 0555 : 0444,
-                                 "$installlib/$name");
-               }
-          } else {
-               if (copy_if_diff($_, "$installlib/$name")) {
-                   if ($name =~ /\.(so|$dlext)$/o) {
-                       strip("-S", "$installlib/$name") if $^O =~ /^(rhapsody|darwin)$/;
-                       chmod(0555, "$installlib/$name");
-                   } else {
-                       strip("-S", "$installlib/$name")
-                           if ($name =~ /\.a$/o and $^O =~ /^(rhapsody|darwin)$/);
-                       chmod(0444, "$installlib/$name");
-                   }
-               }
-           } #if ($Is_NetWare)
+            if (copy_if_diff($_, "$installlib/$name")) {
+                strip("-S", "$installlib/$name")
+                    if $^O =~ /^(rhapsody|darwin)$/ and /\.(?:so|$dlext|a)$/;
+                chmod(/\.(so|$dlext)$/ ? 0555 : 0444, "$installlib/$name");
+            }
        }
     }
 }
@@ -870,3 +864,10 @@ sub strip
        }
     }
 }
+
+# Local variables:
+# cperl-indent-level: 4
+# indent-tabs-mode: nil
+# End:
+#
+# ex: set ts=8 sts=4 sw=4 et: