This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Split out S_refcounted_he_new_common() from
[perl5.git] / installperl
index 0123e53..b89990b 100755 (executable)
@@ -54,6 +54,7 @@ use File::Compare;
 use File::Copy ();
 use File::Path ();
 use ExtUtils::Packlist;
+use Cwd;
 use Config;
 use subs qw(unlink link chmod);
 
@@ -282,42 +283,11 @@ if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) {
 
     if ($Is_Cygwin) {
        $perldll = $libperl;
-       my $v_e_r_s = $ver; $v_e_r_s =~ tr/./_/;
+       my $v_e_r_s = substr($ver,0,-2); $v_e_r_s =~ tr/./_/;
        $perldll =~ s/(\..*)?$/$v_e_r_s.$dlext/;
        $perldll =~ s/^lib/cyg/;
-       if ($Config{useshrplib} eq 'true') {
-           # install ld2 and perlld as well
-           foreach ('ld2', 'perlld') {
-               safe_unlink("$installbin/$_");
-               copy("$_", "$installbin/$_");
-               chmod(0755, "$installbin/$_");
-               $packlist->{"$installbin/$_"} = { type => 'file' };
-           };
-           open (LD2, ">$installbin/ld2");
-           print LD2 <<SHELL;
-#!/bin/sh
-#
-# ld wrapper, passes all args to perlld;
-#
-for trythis in $installbin/perl
-do
-  if [ -x \$trythis ]
-  then
-    \$trythis $installbin/perlld "\$\@"
-    exit \$?
-  fi
-done
-# hard luck!
-echo I see no perl executable around there
-echo perl is required to build dynamic libraries
-echo look if the path to perl in /bin/ld2 is correct
-exit 1
-SHELL
-           close LD2;
-           chmod(0755, "$installbin/ld2");
-       };
     } else {
-       $perldll = 'perl59.' . $dlext;
+       $perldll = 'perl511.' . $dlext;
     }
 
     if ($dlsrc ne "dl_none.xs") {
@@ -398,6 +368,7 @@ if ($d_dosuid) {
 # Install library files.
 
 my ($do_installarchlib, $do_installprivlib) = (0, 0);
+my $vershort = $Is_Cygwin ? substr($ver,0,-2) : $ver;
 
 mkpath($installprivlib, $verbose, 0777);
 mkpath($installarchlib, $verbose, 0777);
@@ -407,7 +378,7 @@ mkpath($installsitearch, $verbose, 0777) if ($installsitearch);
 if (chdir "lib") {
     $do_installarchlib = ! samepath($installarchlib, '.');
     $do_installprivlib = ! samepath($installprivlib, '.');
-    $do_installprivlib = 0 if $versiononly && !($installprivlib =~ m/\Q$ver/);
+    $do_installprivlib = 0 if $versiononly && !($installprivlib =~ m/\Q$vershort/);
 
     if ($do_installarchlib || $do_installprivlib) {
        find(\&installlib, '.');
@@ -600,7 +571,7 @@ if ($versiononly) {
 # ($installprivlib/pods for cygwin).
 
 my $pod = ($Is_Cygwin || $Is_Darwin || $Is_VMS || $Is_W32) ? 'pods' : 'pod';
-if ( !$versiononly || ($installprivlib =~ m/\Q$ver/)) {
+if ( !$versiononly || ($installprivlib =~ m/\Q$vershort/)) {
     mkpath("${installprivlib}/$pod", $verbose, 0777);
 
     # If Perl 5.003's perldiag.pod is there, rename it.
@@ -651,6 +622,7 @@ if (!$versiononly && $otherperls) {
        # Use &samepath here because some systems have other dirs linked
        # to $mainperldir (like SunOS)
        next if samepath($_, $binexp);
+       next if samepath($_, cwd());
        next if ($mainperl_is_instperl && samepath($_, $mainperldir));
        my $otherperl = "$_/$perl$exe_ext";
        next if $otherperls{$otherperl}++;
@@ -830,20 +802,30 @@ sub installlib {
     # the corelist script from lib/Module/CoreList/bin and ptar* in
     # lib/Archive/Tar/bin, the config_data script in lib/Module/Build/scripts
     # (they're installed later with other utils)
-    return if $name =~ /^(?:cpan|instmodsh|prove|corelist|ptar|ptardiff|config_data)\z/;
+    return if $name =~ /^(?:cpan|instmodsh|prove|corelist|ptar|cpan2dist|cpanp|cpanp-run-perl|ptardiff|config_data)\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 demo files
-    return if $dir =~ /\bdemos?\b/;
+    return if $dir =~ /\b(?:demos?|eg)\b/;
 
     # ignore READMEs, MANIFESTs, INSTALL docs, META.ymls and change logs.
     # Changes.e2x and README.e2x are needed by enc2xs.
-    return if $name =~ m{^(?:README(?:\.\w+)?|MANIFEST|META\.yml|INSTALL)$} && $name ne 'README.e2x';
-    return if $name =~ m{^(?:TODO|BUGS|CREDITS)$}i;
+    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)$}; # CPAN files
+    return if $name =~ m{^(?:NOTES|PATCHING)$}; # ExtUtils files
+
+    # if using a shared perl library then ignore:
+    # - static library files [of statically linked extensions];
+    # - import library files and export library files (only present on Win32
+    #   anyway?) and empty bootstrap files [of dynamically linked extensions].
+    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 '';