diff options
Diffstat (limited to 'contrib/perl5/lib/ExtUtils')
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/Command.pm | 2 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/Embed.pm | 55 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/Install.pm | 132 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/Liblist.pm | 86 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/MM_Cygwin.pm | 2 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/MM_OS2.pm | 16 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/MM_Unix.pm | 136 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/MM_VMS.pm | 49 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/MM_Win32.pm | 4 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/MakeMaker.pm | 161 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/Manifest.pm | 91 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/Mksymlists.pm | 1 | ||||
| -rw-r--r-- | contrib/perl5/lib/ExtUtils/typemap | 6 | ||||
| -rwxr-xr-x | contrib/perl5/lib/ExtUtils/xsubpp | 96 | 
14 files changed, 579 insertions, 258 deletions
| diff --git a/contrib/perl5/lib/ExtUtils/Command.pm b/contrib/perl5/lib/ExtUtils/Command.pm index bccc76cc199d..aec4013d022a 100644 --- a/contrib/perl5/lib/ExtUtils/Command.pm +++ b/contrib/perl5/lib/ExtUtils/Command.pm @@ -177,7 +177,7 @@ Creates directory, including any parent directories.  sub mkpath  { - File::Path::mkpath([expand_wildcards()],1,0777); + File::Path::mkpath([expand_wildcards()],0,0777);  }  =item test_f file diff --git a/contrib/perl5/lib/ExtUtils/Embed.pm b/contrib/perl5/lib/ExtUtils/Embed.pm index b649b6b77b6d..98c24ac1cf25 100644 --- a/contrib/perl5/lib/ExtUtils/Embed.pm +++ b/contrib/perl5/lib/ExtUtils/Embed.pm @@ -6,6 +6,7 @@ require Exporter;  require FileHandle;  use Config;  use Getopt::Std; +use File::Spec;  #Only when we need them  #require ExtUtils::MakeMaker; @@ -86,33 +87,8 @@ sub xsinit {  sub xsi_header {      return <<EOF; -#if defined(__cplusplus) && !defined(PERL_OBJECT) -#define is_cplusplus -#endif - -#ifdef is_cplusplus -extern "C" { -#endif -  #include <EXTERN.h>  #include <perl.h> -#ifdef PERL_OBJECT -#define NO_XSLOCKS -#include <XSUB.h> -#include "win32iop.h" -#include <fcntl.h> -#include <perlhost.h> -#endif -#ifdef is_cplusplus -} -#  ifndef EXTERN_C -#    define EXTERN_C extern "C" -#  endif -#else -#  ifndef EXTERN_C -#    define EXTERN_C extern -#  endif -#endif  EOF  }     @@ -190,10 +166,14 @@ sub ldopts {         }      }      $std = 1 unless scalar @link_args; -    @path = $path ? split(/:/, $path) : @INC; +    my $sep = $Config{path_sep} || ':'; +    @path = $path ? split(/\Q$sep/, $path) : @INC;      push(@potential_libs, @link_args)    if scalar @link_args; -    push(@potential_libs, $Config{libs}) if defined $std; +    # makemaker includes std libs on windows by default +    if ($^O ne 'MSWin32' and defined($std)) { +	push(@potential_libs, $Config{perllibs}); +    }      push(@mods, static_ext()) if $std; @@ -223,12 +203,18 @@ sub ldopts {      }      #print STDERR "\@potential_libs = @potential_libs\n"; -    my $libperl = (grep(/^-l\w*perl\w*$/, @link_args))[0] || "-lperl"; +    my $libperl; +    if ($^O eq 'MSWin32') { +	$libperl = $Config{libperl}; +    } +    else { +	$libperl = (grep(/^-l\w*perl\w*$/, @link_args))[0] || "-lperl"; +    } +    my $lpath = File::Spec->catdir($Config{archlibexp}, 'CORE'); +    $lpath = qq["$lpath"] if $^O eq 'MSWin32';      my($extralibs, $bsloadlibs, $ldloadlibs, $ld_run_path) = -	$MM->ext(join ' ',  -		 $MM->catdir("-L$Config{archlibexp}", "CORE"), " $libperl",  -		 @potential_libs); +	$MM->ext(join ' ', "-L$lpath", $libperl, @potential_libs);      my $ld_or_bs = $bsloadlibs || $ldloadlibs;      print STDERR "bs: $bsloadlibs ** ld: $ldloadlibs" if $Verbose; @@ -248,7 +234,9 @@ sub ccdlflags {  }  sub perl_inc { -    my_return(" -I$Config{archlibexp}/CORE "); +    my $dir = File::Spec->catdir($Config{archlibexp}, 'CORE'); +    $dir = qq["$dir"] if $^O eq 'MSWin32'; +    my_return(" -I$dir ");  }  sub ccopts { @@ -277,6 +265,7 @@ ExtUtils::Embed - Utilities for embedding Perl in C/C++ applications   perl -MExtUtils::Embed -e xsinit  + perl -MExtUtils::Embed -e ccopts    perl -MExtUtils::Embed -e ldopts   =head1 DESCRIPTION @@ -484,7 +473,7 @@ B<xsinit()> uses the xsi_* functions to generate most of it's code.  =head1 EXAMPLES  For examples on how to use B<ExtUtils::Embed> for building C/C++ applications -with embedded perl, see the eg/ directory and L<perlembed>. +with embedded perl, see L<perlembed>.  =head1 SEE ALSO diff --git a/contrib/perl5/lib/ExtUtils/Install.pm b/contrib/perl5/lib/ExtUtils/Install.pm index 36c72219a94f..c496aa0ae500 100644 --- a/contrib/perl5/lib/ExtUtils/Install.pm +++ b/contrib/perl5/lib/ExtUtils/Install.pm @@ -16,6 +16,28 @@ my $splitchar = $^O eq 'VMS' ? '|' : ($^O eq 'os2' || $^O eq 'dos') ? ';' : ':';  my @PERL_ENV_LIB = split $splitchar, defined $ENV{'PERL5LIB'} ? $ENV{'PERL5LIB'} : $ENV{'PERLLIB'} || '';  my $Inc_uninstall_warn_handler; +# install relative to here + +my $INSTALL_ROOT = $ENV{PERL_INSTALL_ROOT}; + +use File::Spec; + +sub install_rooted_file { +    if (defined $INSTALL_ROOT) { +	MY->catfile($INSTALL_ROOT, $_[0]); +    } else { +	$_[0]; +    } +} + +sub install_rooted_dir { +    if (defined $INSTALL_ROOT) { +	MY->catdir($INSTALL_ROOT, $_[0]); +    } else { +	$_[0]; +    } +} +  #our(@EXPORT, @ISA, $Is_VMS);  #use strict; @@ -55,8 +77,9 @@ sub install {  	opendir DIR, $source_dir_or_file or next;  	for (readdir DIR) {  	    next if $_ eq "." || $_ eq ".." || $_ eq ".exists"; -	    if (-w $hash{$source_dir_or_file} || -		mkpath($hash{$source_dir_or_file})) { +		my $targetdir = install_rooted_dir($hash{$source_dir_or_file}); +	    if (-w $targetdir || +		mkpath($targetdir)) {  		last;  	    } else {  		warn "Warning: You do not have permissions to " . @@ -66,7 +89,8 @@ sub install {  	}  	closedir DIR;      } -    $packlist->read($pack{"read"}) if (-f $pack{"read"}); +    my $tmpfile = install_rooted_file($pack{"read"}); +    $packlist->read($tmpfile) if (-f $tmpfile);      my $cwd = cwd();      my($source); @@ -80,11 +104,13 @@ sub install {  	#October 1997: we want to install .pm files into archlib if  	#there are any files in arch. So we depend on having ./blib/arch  	#hardcoded here. -	my $targetroot = $hash{$source}; + +	my $targetroot = install_rooted_dir($hash{$source}); +  	if ($source eq "blib/lib" and  	    exists $hash{"blib/arch"} and  	    directory_not_empty("blib/arch")) { -	    $targetroot = $hash{"blib/arch"}; +	    $targetroot = install_rooted_dir($hash{"blib/arch"});              print "Files found in blib/arch: installing files in blib/lib into architecture dependent library tree\n";  	}  	chdir($source) or next; @@ -93,8 +119,9 @@ sub install {                           $atime,$mtime,$ctime,$blksize,$blocks) = stat;  	    return unless -f _;  	    return if $_ eq ".exists"; -	    my $targetdir = MY->catdir($targetroot,$File::Find::dir); -	    my $targetfile = MY->catfile($targetdir,$_); +	    my $targetdir  = MY->catdir($targetroot, $File::Find::dir); +	    my $origfile   = $_; +	    my $targetfile = MY->catfile($targetdir, $_);  	    my $diff = 0;  	    if ( -f $targetfile && -s _ == $size) { @@ -129,16 +156,16 @@ sub install {  	    } else {  		inc_uninstall($_,$File::Find::dir,$verbose,0); # nonono set to 0  	    } -	    $packlist->{$targetfile}++; +	    $packlist->{$origfile}++;  	}, ".");  	chdir($cwd) or Carp::croak("Couldn't chdir to $cwd: $!");      }      if ($pack{'write'}) { -	$dir = dirname($pack{'write'}); +	$dir = install_rooted_dir(dirname($pack{'write'}));  	mkpath($dir,0,0755);  	print "Writing $pack{'write'}\n"; -	$packlist->write($pack{'write'}); +	$packlist->write(install_rooted_file($pack{'write'}));      }  } @@ -235,8 +262,22 @@ sub inc_uninstall {      }  } +sub run_filter { +    my ($cmd, $src, $dest) = @_; +    local *SRC, *CMD; +    open(CMD, "|$cmd >$dest") || die "Cannot fork: $!"; +    open(SRC, $src)           || die "Cannot open $src: $!"; +    my $buf; +    my $sz = 1024; +    while (my $len = sysread(SRC, $buf, $sz)) { +	syswrite(CMD, $buf, $len); +    } +    close SRC; +    close CMD or die "Filter command '$cmd' failed for $src"; +} +  sub pm_to_blib { -    my($fromto,$autodir) = @_; +    my($fromto,$autodir,$pm_filter) = @_;      use File::Basename qw(dirname);      use File::Copy qw(copy); @@ -259,23 +300,37 @@ sub pm_to_blib {      mkpath($autodir,0,0755);      foreach (keys %$fromto) { -	next if -f $fromto->{$_} && -M $fromto->{$_} < -M $_; -	unless (compare($_,$fromto->{$_})){ -	    print "Skip $fromto->{$_} (unchanged)\n"; +	my $dest = $fromto->{$_}; +	next if -f $dest && -M $dest < -M $_; + +	# When a pm_filter is defined, we need to pre-process the source first +	# to determine whether it has changed or not.  Therefore, only perform +	# the comparison check when there's no filter to be ran. +	#    -- RAM, 03/01/2001 + +	my $need_filtering = defined $pm_filter && length $pm_filter && /\.pm$/; + +	if (!$need_filtering && 0 == compare($_,$dest)) { +	    print "Skip $dest (unchanged)\n";  	    next;  	} -	if (-f $fromto->{$_}){ -	    forceunlink($fromto->{$_}); +	if (-f $dest){ +	    forceunlink($dest);  	} else { -	    mkpath(dirname($fromto->{$_}),0,0755); +	    mkpath(dirname($dest),0,0755); +	} +	if ($need_filtering) { +	    run_filter($pm_filter, $_, $dest); +	    print "$pm_filter <$_ >$dest\n"; +	} else { +	    copy($_,$dest); +	    print "cp $_ $dest\n";  	} -	copy($_,$fromto->{$_});  	my($mode,$atime,$mtime) = (stat)[2,8,9]; -	utime($atime,$mtime+$Is_VMS,$fromto->{$_}); -	chmod(0444 | ( $mode & 0111 ? 0111 : 0 ),$fromto->{$_}); -	print "cp $_ $fromto->{$_}\n"; -	next unless /\.pm\z/; -	autosplit($fromto->{$_},$autodir); +	utime($atime,$mtime+$Is_VMS,$dest); +	chmod(0444 | ( $mode & 0111 ? 0111 : 0 ),$dest); +	next unless /\.pm$/; +	autosplit($dest,$autodir);      }  } @@ -289,18 +344,20 @@ sub add {  }  sub DESTROY { -    my $self = shift; -    my($file,$i,$plural); -    foreach $file (sort keys %$self) { -	$plural = @{$self->{$file}} > 1 ? "s" : ""; -	print "## Differing version$plural of $file found. You might like to\n"; -	for (0..$#{$self->{$file}}) { -	    print "rm ", $self->{$file}[$_], "\n"; -	    $i++; +	unless(defined $INSTALL_ROOT) { +		my $self = shift; +		my($file,$i,$plural); +		foreach $file (sort keys %$self) { +		$plural = @{$self->{$file}} > 1 ? "s" : ""; +		print "## Differing version$plural of $file found. You might like to\n"; +		for (0..$#{$self->{$file}}) { +			print "rm ", $self->{$file}[$_], "\n"; +			$i++; +		} +		} +		$plural = $i>1 ? "all those files" : "this file"; +		print "## Running 'make install UNINST=1' will unlink $plural for you.\n";  	} -    } -    $plural = $i>1 ? "all those files" : "this file"; -    print "## Running 'make install UNINST=1' will unlink $plural for you.\n";  }  1; @@ -363,6 +420,11 @@ no-don't-really-do-it-now switch.  pm_to_blib() takes a hashref as the first argument and copies all keys  of the hash to the corresponding values efficiently. Filenames with  the extension pm are autosplit. Second argument is the autosplit -directory. +directory.  If third argument is not empty, it is taken as a filter command +to be ran on each .pm file, the output of the command being what is finally +copied, and the source for auto-splitting. + +You can have an environment variable PERL_INSTALL_ROOT set which will +be prepended as a directory to each installed file (and directory).  =cut diff --git a/contrib/perl5/lib/ExtUtils/Liblist.pm b/contrib/perl5/lib/ExtUtils/Liblist.pm index 6029557f11eb..5e2f91db5cf9 100644 --- a/contrib/perl5/lib/ExtUtils/Liblist.pm +++ b/contrib/perl5/lib/ExtUtils/Liblist.pm @@ -1,9 +1,30 @@  package ExtUtils::Liblist; +@ISA = qw(ExtUtils::Liblist::Kid File::Spec); + +sub lsdir { +  shift; +  my $rex = qr/$_[1]/; +  opendir my $dir, $_[0]; +  grep /$rex/, readdir $dir; +} + +sub file_name_is_absolute { +  require File::Spec; +  shift; +  'File::Spec'->file_name_is_absolute(@_); +} + + +package ExtUtils::Liblist::Kid; + +# This kid package is to be used by MakeMaker.  It will not work if +# $self is not a Makemaker. +  use 5.005_64;  # Broken out of MakeMaker from version 4.11 -our $VERSION = substr q$Revision: 1.25 $, 10; +our $VERSION = substr q$Revision: 1.26 $, 10;  use Config;  use Cwd 'cwd'; @@ -16,19 +37,19 @@ sub ext {  }  sub _unix_os2_ext { -    my($self,$potential_libs, $verbose) = @_; -    if ($^O =~ 'os2' and $Config{libs}) {  +    my($self,$potential_libs, $verbose, $give_libs) = @_; +    if ($^O =~ 'os2' and $Config{perllibs}) {   	# Dynamic libraries are not transitive, so we may need including  	# the libraries linked against perl.dll again.  	$potential_libs .= " " if $potential_libs; -	$potential_libs .= $Config{libs}; +	$potential_libs .= $Config{perllibs};      } -    return ("", "", "", "") unless $potential_libs; +    return ("", "", "", "", ($give_libs ? [] : ())) unless $potential_libs;      warn "Potential libraries are '$potential_libs':\n" if $verbose;      my($so)   = $Config{'so'}; -    my($libs) = $Config{'libs'}; +    my($libs) = $Config{'perllibs'};      my $Config_libext = $Config{lib_ext} || ".a"; @@ -39,6 +60,7 @@ sub _unix_os2_ext {      my(@searchpath); # from "-L/path" entries in $potential_libs      my(@libpath) = split " ", $Config{'libpth'};      my(@ldloadlibs, @bsloadlibs, @extralibs, @ld_run_path, %ld_run_path_seen); +    my(@libs, %libs_seen);      my($fullname, $thislib, $thispth, @fullname);      my($pwd) = cwd(); # from Cwd.pm      my($found) = 0; @@ -132,6 +154,7 @@ sub _unix_os2_ext {  	    warn "'-l$thislib' found at $fullname\n" if $verbose;  	    my($fullnamedir) = dirname($fullname);  	    push @ld_run_path, $fullnamedir unless $ld_run_path_seen{$fullnamedir}++; +	    push @libs, $fullname unless $libs_seen{$fullname}++;  	    $found++;  	    $found_lib++; @@ -179,28 +202,29 @@ sub _unix_os2_ext {  		     ."No library found for -l$thislib\n"  	    unless $found_lib>0;      } -    return ('','','','') unless $found; -    ("@extralibs", "@bsloadlibs", "@ldloadlibs",join(":",@ld_run_path)); +    return ('','','','', ($give_libs ? \@libs : ())) unless $found; +    ("@extralibs", "@bsloadlibs", "@ldloadlibs",join(":",@ld_run_path), ($give_libs ? \@libs : ()));  }  sub _win32_ext {      require Text::ParseWords; -    my($self, $potential_libs, $verbose) = @_; +    my($self, $potential_libs, $verbose, $give_libs) = @_;      # If user did not supply a list, we punt.      # (caller should probably use the list in $Config{libs}) -    return ("", "", "", "") unless $potential_libs; +    return ("", "", "", "", ($give_libs ? [] : ())) unless $potential_libs;      my $cc		= $Config{cc};      my $VC		= 1 if $cc =~ /^cl/i;      my $BC		= 1 if $cc =~ /^bcc/i;      my $GC		= 1 if $cc =~ /^gcc/i;      my $so		= $Config{'so'}; -    my $libs		= $Config{'libs'}; +    my $libs		= $Config{'perllibs'};      my $libpth		= $Config{'libpth'};      my $libext		= $Config{'lib_ext'} || ".lib"; +    my(@libs, %libs_seen);      if ($libs and $potential_libs !~ /:nodefault/i) {   	# If Config.pm defines a set of default libs, we always @@ -230,6 +254,10 @@ sub _win32_ext {      # add "$Config{installarchlib}/CORE" to default search path      push @libpath, "$Config{installarchlib}/CORE"; +    if ($VC and exists $ENV{LIB} and $ENV{LIB}) { +        push @libpath, split /;/, $ENV{LIB}; +    } +      foreach (Text::ParseWords::quotewords('\s+', 0, $potential_libs)){  	$thislib = $_; @@ -294,6 +322,7 @@ sub _win32_ext {  	    $found++;  	    $found_lib++;  	    push(@extralibs, $fullname); +	    push @libs, $fullname unless $libs_seen{$fullname}++;  	    last;  	} @@ -315,10 +344,11 @@ sub _win32_ext {      } -    return ('','','','') unless $found; +    return ('','','','', ($give_libs ? \@libs : ())) unless $found;      # make sure paths with spaces are properly quoted      @extralibs = map { (/\s/ && !/^".*"$/) ? qq["$_"] : $_ } @extralibs; +    @libs = map { (/\s/ && !/^".*"$/) ? qq["$_"] : $_ } @libs;      $lib = join(' ',@extralibs);      # normalize back to backward slashes (to help braindead tools) @@ -327,18 +357,18 @@ sub _win32_ext {      $lib =~ s,/,\\,g;      warn "Result: $lib\n" if $verbose; -    wantarray ? ($lib, '', $lib, '') : $lib; +    wantarray ? ($lib, '', $lib, '', ($give_libs ? \@libs : ())) : $lib;  }  sub _vms_ext { -  my($self, $potential_libs,$verbose) = @_; +  my($self, $potential_libs,$verbose,$give_libs) = @_;    my(@crtls,$crtlstr);    my($dbgqual) = $self->{OPTIMIZE} || $Config{'optimize'} ||                   $self->{CCFLAS}   || $Config{'ccflags'};    @crtls = ( ($dbgqual =~ m-/Debug-i ? $Config{'dbgprefix'} : '')                . 'PerlShr/Share' ); -  push(@crtls, grep { not /\(/ } split /\s+/, $Config{'libs'}); +  push(@crtls, grep { not /\(/ } split /\s+/, $Config{'perllibs'});    push(@crtls, grep { not /\(/ } split /\s+/, $Config{'libc'});    # In general, we pass through the basic libraries from %Config unchanged.    # The one exception is that if we're building in the Perl source tree, and @@ -361,7 +391,7 @@ sub _vms_ext {    unless ($potential_libs) {      warn "Result:\n\tEXTRALIBS: \n\tLDLOADLIBS: $crtlstr\n" if $verbose; -    return ('', '', $crtlstr, ''); +    return ('', '', $crtlstr, '', ($give_libs ? [] : ()));    }    my(@dirs,@libs,$dir,$lib,%found,@fndlibs,$ldlib); @@ -370,6 +400,7 @@ sub _vms_ext {    # List of common Unix library names and there VMS equivalents    # (VMS equivalent of '' indicates that the library is automatially    # searched by the linker, and should be skipped here.) +  my(@flibs, %libs_seen);    my %libmap = ( 'm' => '', 'f77' => '', 'F77' => '', 'V77' => '', 'c' => '',                   'malloc' => '', 'crypt' => '', 'resolv' => '', 'c_s' => '',                   'socket' => '', 'X11' => 'DECW$XLIBSHR', @@ -474,6 +505,7 @@ sub _vms_ext {          if ($cand eq 'VAXCCURSE') { unshift @{$found{$ctype}}, $cand; }            else                      { push    @{$found{$ctype}}, $cand; }          warn "\tFound as $cand (really $test), type $ctype\n" if $verbose > 1; +	push @flibs, $name unless $libs_seen{$fullname}++;          next LIB;        }      } @@ -488,7 +520,7 @@ sub _vms_ext {    $ldlib = $crtlstr ? "$lib $crtlstr" : $lib;    warn "Result:\n\tEXTRALIBS: $lib\n\tLDLOADLIBS: $ldlib\n" if $verbose; -  wantarray ? ($lib, '', $ldlib, '') : $lib; +  wantarray ? ($lib, '', $ldlib, '', ($give_libs ? \@flibs : ())) : $lib;  }  1; @@ -503,20 +535,22 @@ ExtUtils::Liblist - determine libraries to use and how to use them  C<require ExtUtils::Liblist;> -C<ExtUtils::Liblist::ext($self, $potential_libs, $verbose);> +C<ExtUtils::Liblist::ext($self, $potential_libs, $verbose, $need_names);>  =head1 DESCRIPTION  This utility takes a list of libraries in the form C<-llib1 -llib2 --llib3> and prints out lines suitable for inclusion in an extension +-llib3> and returns lines suitable for inclusion in an extension  Makefile.  Extra library paths may be included with the form  C<-L/another/path> this will affect the searches for all subsequent  libraries. -It returns an array of four scalar values: EXTRALIBS, BSLOADLIBS, -LDLOADLIBS, and LD_RUN_PATH.  Some of these don't mean anything -on VMS and Win32.  See the details about those platform specifics -below. +It returns an array of four or five scalar values: EXTRALIBS, +BSLOADLIBS, LDLOADLIBS, LD_RUN_PATH, and, optionally, a reference to +the array of the filenames of actual libraries.  Some of these don't +mean anything unless on Unix.  See the details about those platform +specifics below.  The list of the filenames is returned only if +$need_names argument is true.  Dependent libraries can be linked in one of three ways: @@ -624,7 +658,7 @@ Unix-OS/2 version in several respects:  =item *  If C<$potential_libs> is empty, the return value will be empty. -Otherwise, the libraries specified by C<$Config{libs}> (see Config.pm) +Otherwise, the libraries specified by C<$Config{perllibs}> (see Config.pm)  will be appended to the list of C<$potential_libs>.  The libraries  will be searched for in the directories specified in C<$potential_libs>,  C<$Config{libpth}>, and in C<$Config{installarchlib}/CORE>. @@ -668,7 +702,7 @@ Entries in C<$potential_libs> beginning with a colon and followed by  alphanumeric characters are treated as flags.  Unknown flags will be ignored.  An entry that matches C</:nodefault/i> disables the appending of default -libraries found in C<$Config{libs}> (this should be only needed very rarely). +libraries found in C<$Config{perllibs}> (this should be only needed very rarely).  An entry that matches C</:nosearch/i> disables all searching for  the libraries specified after it.  Translation of C<-Lfoo> and @@ -678,7 +712,7 @@ valid files or directories.  An entry that matches C</:search/i> reenables searching for  the libraries specified after it.  You can put it at the end to -enable searching for default libraries specified by C<$Config{libs}>. +enable searching for default libraries specified by C<$Config{perllibs}>.  =item * diff --git a/contrib/perl5/lib/ExtUtils/MM_Cygwin.pm b/contrib/perl5/lib/ExtUtils/MM_Cygwin.pm index a5ba410fdc08..439c67ccadc5 100644 --- a/contrib/perl5/lib/ExtUtils/MM_Cygwin.pm +++ b/contrib/perl5/lib/ExtUtils/MM_Cygwin.pm @@ -71,6 +71,8 @@ q[-e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "],      push(@m,"\n");      if (%{$self->{MAN1PODS}} || %{$self->{MAN3PODS}}) { +        grep { $self->{MAN1PODS}{$_} =~ s/::/./g } keys %{$self->{MAN1PODS}}; +        grep { $self->{MAN3PODS}{$_} =~ s/::/./g } keys %{$self->{MAN3PODS}};          push @m, "\t$self->{NOECHO}\$(POD2MAN) \\\n\t";          push @m, join " \\\n\t", %{$self->{MAN1PODS}}, %{$self->{MAN3PODS}};      } diff --git a/contrib/perl5/lib/ExtUtils/MM_OS2.pm b/contrib/perl5/lib/ExtUtils/MM_OS2.pm index 430235a0aacf..cd6a1e4c49a1 100644 --- a/contrib/perl5/lib/ExtUtils/MM_OS2.pm +++ b/contrib/perl5/lib/ExtUtils/MM_OS2.pm @@ -93,6 +93,22 @@ sub perl_archive   return "\$(PERL_INC)/libperl\$(LIB_EXT)";  } +=item perl_archive_after + +This is an internal method that returns path to a library which +should be put on the linker command line I<after> the external libraries +to be linked to dynamic extensions.  This may be needed if the linker +is one-pass, and Perl includes some overrides for C RTL functions, +such as malloc(). + +=cut  + +sub perl_archive_after +{ + return "\$(PERL_INC)/libperl_override\$(LIB_EXT)" unless $OS2::is_aout; + return ""; +} +  sub export_list  {   my ($self) = @_; diff --git a/contrib/perl5/lib/ExtUtils/MM_Unix.pm b/contrib/perl5/lib/ExtUtils/MM_Unix.pm index 4c8da339b87a..c11333d780f3 100644 --- a/contrib/perl5/lib/ExtUtils/MM_Unix.pm +++ b/contrib/perl5/lib/ExtUtils/MM_Unix.pm @@ -208,6 +208,7 @@ sub ExtUtils::MM_Unix::parse_version ;  sub ExtUtils::MM_Unix::pasthru ;  sub ExtUtils::MM_Unix::path ;  sub ExtUtils::MM_Unix::perl_archive; +sub ExtUtils::MM_Unix::perl_archive_after;  sub ExtUtils::MM_Unix::perl_script ;  sub ExtUtils::MM_Unix::perldepend ;  sub ExtUtils::MM_Unix::pm_to_blib ; @@ -305,8 +306,8 @@ sub cflags {      $libperl ||= $self->{LIBPERL_A} || "libperl$self->{LIB_EXT}" ;      $libperl =~ s/\.\$\(A\)$/$self->{LIB_EXT}/; -    @cflags{qw(cc ccflags optimize large split shellflags)} -	= @Config{qw(cc ccflags optimize large split shellflags)}; +    @cflags{qw(cc ccflags optimize shellflags)} +	= @Config{qw(cc ccflags optimize shellflags)};      my($optdebug) = "";      $cflags{shellflags} ||= ''; @@ -341,16 +342,12 @@ sub cflags {  	  optimize=\"$cflags{optimize}\"  	  perltype=\"$cflags{perltype}\"  	  optdebug=\"$cflags{optdebug}\" -	  large=\"$cflags{large}\" -	  split=\"$cflags{'split'}\"  	  eval '$prog'  	  echo cc=\$cc  	  echo ccflags=\$ccflags  	  echo optimize=\$optimize  	  echo perltype=\$perltype  	  echo optdebug=\$optdebug -	  echo large=\$large -	  echo split=\$split  	  `;  	my($line);  	foreach $line (@o){ @@ -368,7 +365,7 @@ sub cflags {  	$cflags{optimize} = $optdebug;      } -    for (qw(ccflags optimize perltype large split)) { +    for (qw(ccflags optimize perltype)) {  	$cflags{$_} =~ s/^\s+//;  	$cflags{$_} =~ s/\s+/ /g;  	$cflags{$_} =~ s/\s+$//; @@ -411,8 +408,6 @@ sub cflags {  CCFLAGS = $self->{CCFLAGS}  OPTIMIZE = $self->{OPTIMIZE}  PERLTYPE = $self->{PERLTYPE} -LARGE = $self->{LARGE} -SPLIT = $self->{SPLIT}  MPOLLUTE = $pollute  }; @@ -457,7 +452,7 @@ EOT      push(@otherfiles, qw[./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all  			 perlmain.c mon.out core core.*perl.*.?  			 *perl.core so_locations pm_to_blib -			 *~ */*~ */*/*~ *$(OBJ_EXT) *$(LIB_EXT) perl.exe +			 *$(OBJ_EXT) *$(LIB_EXT) perl.exe  			 $(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def  			 $(BASEEXT).exp  			]); @@ -483,7 +478,7 @@ sub const_cccmd {      return '' unless $self->needs_linking();      return $self->{CONST_CCCMD} =  	q{CCCMD = $(CC) -c $(INC) $(CCFLAGS) $(OPTIMIZE) \\ -	$(PERLTYPE) $(LARGE) $(SPLIT) $(MPOLLUTE) $(DEFINE_VERSION) \\ +	$(PERLTYPE) $(MPOLLUTE) $(DEFINE_VERSION) \\  	$(XS_DEFINE_VERSION)};  } @@ -586,7 +581,7 @@ MM_VERSION = $ExtUtils::MakeMaker::VERSION      for $tmp (qw/  	      FULLEXT BASEEXT PARENT_NAME DLBASE VERSION_FROM INC DEFINE OBJECT -	      LDFROM LINKTYPE +	      LDFROM LINKTYPE PM_FILTER  	      /	) {  	next unless defined $self->{$tmp};  	push @m, "$tmp = $self->{$tmp}\n"; @@ -680,6 +675,10 @@ EXPORT_LIST = $tmp      push @m, "  PERL_ARCHIVE = $tmp  "; +    $tmp = $self->perl_archive_after; +    push @m, " +PERL_ARCHIVE_AFTER = $tmp +";  #    push @m, q{  #INST_PM = }.join(" \\\n\t", sort values %{$self->{PM}}).q{ @@ -812,7 +811,7 @@ DIST_DEFAULT = $dist_default  =item dist_basics (o) -Defines the targets distclean, distcheck, skipcheck, manifest. +Defines the targets distclean, distcheck, skipcheck, manifest, veryclean.  =cut @@ -840,6 +839,11 @@ manifest :  	$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=mkmanifest \\  		-e mkmanifest  }; + +    push @m, q{ +veryclean : realclean +	$(RM_F) *~ *.orig */*~ */*.orig +};      join "", @m;  } @@ -1062,7 +1066,7 @@ ARMAYBE = '.$armaybe.'  OTHERLDFLAGS = '.$otherldflags.'  INST_DYNAMIC_DEP = '.$inst_dynamic_dep.' -$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP) +$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP)  ');      if ($armaybe ne ':'){  	$ldfrom = 'tmp$(LIB_EXT)'; @@ -1071,18 +1075,20 @@ $(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists      }      $ldfrom = "-all $ldfrom -none" if ($^O eq 'dec_osf'); -    # Brain dead solaris linker does not use LD_RUN_PATH? -    # This fixes dynamic extensions which need shared libs -    my $ldrun = ''; -    $ldrun = join ' ', map "-R$_", split /:/, $self->{LD_RUN_PATH} -       if ($^O eq 'solaris'); - -    # The IRIX linker also doesn't use LD_RUN_PATH -    $ldrun = qq{-rpath "$self->{LD_RUN_PATH}"} +    # The IRIX linker doesn't use LD_RUN_PATH +    my $ldrun = qq{-rpath "$self->{LD_RUN_PATH}"}  	if ($^O eq 'irix' && $self->{LD_RUN_PATH}); -    push(@m,'	LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) -o $@ '.$ldrun.' $(LDDLFLAGS) '.$ldfrom. -		' $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) $(EXPORT_LIST)'); +    # For example in AIX the shared objects/libraries from previous builds +    # linger quite a while in the shared dynalinker cache even when nobody +    # is using them.  This is painful if one for instance tries to restart +    # a failed build because the link command will fail unnecessarily 'cos +    # the shared object/library is 'busy'. +    push(@m,'	$(RM_F) $@ +'); + +    push(@m,'	LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) '.$ldrun.' $(LDDLFLAGS) '.$ldfrom. +		' $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) $(PERL_ARCHIVE_AFTER) $(EXPORT_LIST)');      push @m, '  	$(CHMOD) $(PERM_RWX) $@  '; @@ -1147,9 +1153,9 @@ in these dirs:  @$dirs  ";      } -    foreach $dir (@$dirs){ -	next unless defined $dir; # $self->{PERL_SRC} may be undefined -	foreach $name (@$names){ +    foreach $name (@$names){ +	foreach $dir (@$dirs){ +	    next unless defined $dir; # $self->{PERL_SRC} may be undefined  	    my ($abs, $val);  	    if ($self->file_name_is_absolute($name)) { # /foo/bar  		$abs = $name; @@ -1249,11 +1255,6 @@ eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}'  	    next;  	}  	my($dev,$ino,$mode) = stat FIXIN; -	# If they override perm_rwx, we won't notice it during fixin, -	# because fixin is run through a new instance of MakeMaker. -	# That is why we must run another CHMOD later. -	$mode = oct($self->perm_rwx) unless $dev; -	chmod $mode, $file;  	# Print out the new #! line (or equivalent).  	local $\; @@ -1261,7 +1262,15 @@ eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}'  	print FIXOUT $shb, <FIXIN>;  	close FIXIN;  	close FIXOUT; -	# can't rename open files on some DOSISH platforms + +	# can't rename/chmod open files on some DOSISH platforms + +	# If they override perm_rwx, we won't notice it during fixin, +	# because fixin is run through a new instance of MakeMaker. +	# That is why we must run another CHMOD later. +	$mode = oct($self->perm_rwx) unless $dev; +	chmod $mode, $file; +  	unless ( rename($file, "$file.bak") ) {	  	    warn "Can't rename $file to $file.bak: $!";  	    next; @@ -1276,6 +1285,7 @@ eval 'exec $interpreter $arg -S \$0 \${1+"\$\@"}'  	}  	unlink "$file.bak";      } continue { +	close(FIXIN) if fileno(FIXIN);  	chmod oct($self->perm_rwx), $file or  	  die "Can't reset permissions for $file: $!\n";  	system("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';; @@ -1653,7 +1663,7 @@ sub init_main {      unless ($self->{PERL_SRC}){  	my($dir); -	foreach $dir ($self->updir(),$self->catdir($self->updir(),$self->updir()),$self->catdir($self->updir(),$self->updir(),$self->updir())){ +	foreach $dir ($self->updir(),$self->catdir($self->updir(),$self->updir()),$self->catdir($self->updir(),$self->updir(),$self->updir()),$self->catdir($self->updir(),$self->updir(),$self->updir(),$self->updir())){  	    if (  		-f $self->catfile($dir,"config.sh")  		&& @@ -2367,7 +2377,7 @@ $(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)      # The front matter of the linkcommand...      $linkcmd = join ' ', "\$(CC)", -	    grep($_, @Config{qw(large split ldflags ccdlflags)}); +	    grep($_, @Config{qw(ldflags ccdlflags)});      $linkcmd =~ s/\s+/ /g;      $linkcmd =~ s,(perl\.exp),\$(PERL_INC)/$1,; @@ -2450,7 +2460,7 @@ MAP_PERLINC   = @{$perlinc || []}  MAP_STATIC    = ",  join(" \\\n\t", reverse sort keys %static), " -MAP_PRELIBS   = $Config::Config{libs} $Config::Config{cryptlib} +MAP_PRELIBS   = $Config::Config{perllibs} $Config::Config{cryptlib}  ";      if (defined $libperl) { @@ -2458,6 +2468,7 @@ MAP_PRELIBS   = $Config::Config{libs} $Config::Config{cryptlib}      }      unless ($libperl && -f $lperl) { # Ilya's code...  	my $dir = $self->{PERL_SRC} || "$self->{PERL_ARCHLIB}/CORE"; +	$dir = "$self->{PERL_ARCHLIB}/.." if $self->{UNINSTALLED_PERL};  	$libperl ||= "libperl$self->{LIB_EXT}";  	$libperl   = "$dir/$libperl";  	$lperl   ||= "libperl$self->{LIB_EXT}"; @@ -2495,14 +2506,9 @@ MAP_LIBPERL = $libperl      # SUNOS ld does not take the full path to a shared library      my $llibperl = ($libperl)?'$(MAP_LIBPERL)':'-lperl'; -    # Brain dead solaris linker does not use LD_RUN_PATH? -    # This fixes dynamic extensions which need shared libs -    my $ldfrom = ($^O eq 'solaris')? -           join(' ', map "-R$_", split /:/, $self->{LD_RUN_PATH}):''; -  push @m, "  \$(MAP_TARGET) :: $tmp/perlmain\$(OBJ_EXT) \$(MAP_LIBPERL) \$(MAP_STATIC) \$(INST_ARCHAUTODIR)/extralibs.all -	\$(MAP_LINKCMD) -o \$\@ \$(OPTIMIZE) $tmp/perlmain\$(OBJ_EXT) $ldfrom \$(MAP_STATIC) $llibperl `cat \$(INST_ARCHAUTODIR)/extralibs.all` \$(MAP_PRELIBS) +	\$(MAP_LINKCMD) -o \$\@ \$(OPTIMIZE) $tmp/perlmain\$(OBJ_EXT) \$(LDFROM) \$(MAP_STATIC) $llibperl `cat \$(INST_ARCHAUTODIR)/extralibs.all` \$(MAP_PRELIBS)  	$self->{NOECHO}echo 'To install the new \"\$(MAP_TARGET)\" binary, call'  	$self->{NOECHO}echo '    make -f $makefilename inst_perl MAP_TARGET=\$(MAP_TARGET)'  	$self->{NOECHO}echo 'To remove the intermediate files say' @@ -3038,7 +3044,7 @@ sub pm_to_blib {  pm_to_blib: $(TO_INST_PM)  	}.$self->{NOECHO}.q{$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \  	"-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \ -        -e "pm_to_blib({qw{$(PM_TO_BLIB)}},'}.$autodir.q{')" +        -e "pm_to_blib({qw{$(PM_TO_BLIB)}},'}.$autodir.q{','$(PM_FILTER)')"  	}.$self->{NOECHO}.q{$(TOUCH) $@  };  } @@ -3110,6 +3116,7 @@ sub processPL {          my $list = ref($self->{PL_FILES}->{$plfile})  		? $self->{PL_FILES}->{$plfile}  		: [$self->{PL_FILES}->{$plfile}]; +	my $target;  	foreach $target (@$list) {  	push @m, "  all :: $target @@ -3149,8 +3156,22 @@ realclean purge ::  clean          push(@m, "	$self->{RM_F} \$(INST_DYNAMIC) \$(INST_BOOT)\n");          push(@m, "	$self->{RM_F} \$(INST_STATIC)\n");      } -    push(@m, "	$self->{RM_F} " . join(" ", values %{$self->{PM}}) . "\n") -	if keys %{$self->{PM}}; +    # Issue a several little RM_F commands rather than risk creating a +    # very long command line (useful for extensions such as Encode +    # that have many files). +    if (keys %{$self->{PM}}) { +	my $line = ""; +	foreach (values %{$self->{PM}}) { +	    if (length($line) + length($_) > 80) { +		push @m, "\t$self->{RM_F} $line\n"; +		$line = $_; +	    } +	    else { +		$line .= " $_";  +	    } +	} +    push @m, "\t$self->{RM_F} $line\n" if $line; +    }      my(@otherfiles) = ($self->{MAKEFILE},  		       "$self->{MAKEFILE}.old"); # Makefiles last      push(@otherfiles, $attribs{FILES}) if $attribs{FILES}; @@ -3169,9 +3190,11 @@ form Foo/Bar and replaces the slash with C<::>. Returns the replacement.  sub replace_manpage_separator {      my($self,$man) = @_;  	if ($^O eq 'uwin') { -		$man =~ s,/+,.,g; +	    $man =~ s,/+,.,g; +	} elsif ($Is_Dos) { +	    $man =~ s,/+,__,g;  	} else { -		$man =~ s,/+,::,g; +	    $man =~ s,/+,::,g;  	}      $man;  } @@ -3490,13 +3513,13 @@ WARN_IF_OLD_PACKLIST = $(PERL) -we 'exit unless -f $$ARGV[0];' \\  -e 'print "Please make sure the two installations are not conflicting\n";'  UNINST=0 -VERBINST=1 +VERBINST=0  MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \  -e "install({@ARGV},'$(VERBINST)',0,'$(UNINST)');"  DOC_INSTALL = $(PERL) -e '$$\="\n\n";' \ --e 'print "=head2 ", scalar(localtime), ": C<", shift, ">", " L<", shift, ">";' \ +-e 'print "=head2 ", scalar(localtime), ": C<", shift, ">", " L<", $$arg=shift, "|", $$arg, ">";' \  -e 'print "=over 4";' \  -e 'while (defined($$key = shift) and defined($$val = shift)){print "=item *";print "C<$$key: $$val>";}' \  -e 'print "=back";' @@ -3791,6 +3814,21 @@ sub perl_archive   return "";  } +=item perl_archive_after + +This is an internal method that returns path to a library which +should be put on the linker command line I<after> the external libraries +to be linked to dynamic extensions.  This may be needed if the linker +is one-pass, and Perl includes some overrides for C RTL functions, +such as malloc(). + +=cut  + +sub perl_archive_after +{ + return ""; +} +  =item export_list  This is internal method that returns name of a file that is diff --git a/contrib/perl5/lib/ExtUtils/MM_VMS.pm b/contrib/perl5/lib/ExtUtils/MM_VMS.pm index 57a8146dae75..7b75958e8937 100644 --- a/contrib/perl5/lib/ExtUtils/MM_VMS.pm +++ b/contrib/perl5/lib/ExtUtils/MM_VMS.pm @@ -151,11 +151,12 @@ sub AUTOLOAD {  # This isn't really an override.  It's just here because ExtUtils::MM_VMS -# appears in @MM::ISA before ExtUtils::Liblist, so if there isn't an ext() +# appears in @MM::ISA before ExtUtils::Liblist::Kid, so if there isn't an ext()  # in MM_VMS, then AUTOLOAD is called, and bad things happen.  So, we just -# mimic inheritance here and hand off to ExtUtils::Liblist. +# mimic inheritance here and hand off to ExtUtils::Liblist::Kid.  sub ext { -  ExtUtils::Liblist::ext(@_); +  require ExtUtils::Liblist; +  ExtUtils::Liblist::Kid::ext(@_);  }  =back @@ -231,7 +232,9 @@ invoke Perl images.  sub find_perl {      my($self, $ver, $names, $dirs, $trace) = @_;      my($name,$dir,$vmsfile,@sdirs,@snames,@cand); +    my($rslt);      my($inabs) = 0; +    local *TCF;      # Check in relative directories first, so we pick up the current      # version of Perl if we're running MakeMaker as part of the main build.      @sdirs = sort { my($absa) = $self->file_name_is_absolute($a); @@ -277,15 +280,28 @@ sub find_perl {      foreach $name (@cand) {  	print "Checking $name\n" if ($trace >= 2);  	# If it looks like a potential command, try it without the MCR -	if ($name =~ /^[\w\-\$]+$/ && -            `$name -e "require $ver; print ""VER_OK\\n"""` =~ /VER_OK/) { +        if ($name =~ /^[\w\-\$]+$/) { +            open(TCF,">temp_mmvms.com") || die('unable to open temp file'); +            print TCF "\$ set message/nofacil/nosever/noident/notext\n"; +            print TCF "\$ $name -e \"require $ver; print \"\"VER_OK\\n\"\"\"\n"; +            close TCF; +            $rslt = `\@temp_mmvms.com` ; +            unlink('temp_mmvms.com'); +            if ($rslt =~ /VER_OK/) {  	    print "Using PERL=$name\n" if $trace;  	    return $name;  	} +        }  	next unless $vmsfile = $self->maybe_command($name);  	$vmsfile =~ s/;[\d\-]*$//;  # Clip off version number; we can use a newer version as well  	print "Executing $vmsfile\n" if ($trace >= 2); -        if (`MCR $vmsfile -e "require $ver; print ""VER_OK\\n"""` =~ /VER_OK/) { +        open(TCF,">temp_mmvms.com") || die('unable to open temp file'); +        print TCF "\$ set message/nofacil/nosever/noident/notext\n"; +        print TCF "\$ mcr $vmsfile -e \"require $ver; print \"\"VER_OK\\n\"\"\" \n"; +        close TCF; +        $rslt = `\@temp_mmvms.com`; +        unlink('temp_mmvms.com'); +        if ($rslt =~ /VER_OK/) {  	    print "Using PERL=MCR $vmsfile\n" if $trace;  	    return "MCR $vmsfile";  	} @@ -611,7 +627,7 @@ INST_ARCHAUTODIR = $self->{INST_ARCHAUTODIR}      if ($self->has_link_code()) {  	push @m,'  INST_STATIC = $(INST_ARCHAUTODIR)$(BASEEXT)$(LIB_EXT) -INST_DYNAMIC = $(INST_ARCHAUTODIR)$(BASEEXT).$(DLEXT) +INST_DYNAMIC = $(INST_ARCHAUTODIR)$(DLBASE).$(DLEXT)  INST_BOOT = $(INST_ARCHAUTODIR)$(BASEEXT).bs  ';      } else { @@ -811,7 +827,7 @@ pm_to_blib.ts : $(TO_INST_PM)      }      push(@m,"\t\$(NOECHO) \$(PERL) -e \"print '$line'\" >>.MM_tmp\n") if $line; -    push(@m,q[	$(PERL) "-I$(PERL_LIB)" "-MExtUtils::Install" -e "pm_to_blib({split(' ',<STDIN>)},'].$autodir.q[')" <.MM_tmp]); +    push(@m,q[	$(PERL) "-I$(PERL_LIB)" "-MExtUtils::Install" -e "pm_to_blib({split(' ',<STDIN>)},'].$autodir.q[','$(PM_FILTER)')" <.MM_tmp]);      push(@m,qq[  	\$(NOECHO) Delete/NoLog/NoConfirm .MM_tmp;  	\$(NOECHO) \$(TOUCH) pm_to_blib.ts @@ -866,6 +882,11 @@ sub tool_xsubpp {  	unshift( @tmargs, $self->{XSOPT} );      } +    if ($Config{'ldflags'} &&  +        $Config{'ldflags'} =~ m!/Debug!i && +        (!exists($self->{XSOPT}) || $self->{XSOPT} !~ /linenumbers/)) { +        unshift(@tmargs,'-nolinenumbers'); +    }      my $xsubpp_version = $self->xsubpp_version($self->catfile($xsdir,'xsubpp'));      # What are the correct thresholds for version 1 && 2 Paul? @@ -1018,7 +1039,7 @@ sub dist {      # Sanitize these for use in $(DISTVNAME) filespec      $attribs{VERSION} =~ s/[^\w\$]/_/g; -    $attribs{NAME} =~ s/[^\w\$]/_/g; +    $attribs{NAME} =~ s/[^\w\$]/-/g;      return ExtUtils::MM_Unix::dist($self,%attribs);  } @@ -1194,8 +1215,8 @@ $(BASEEXT).opt : Makefile.PL  	                   s/.*[:>\/\]]//;       # Trim off dir spec  			   $upcase ? uc($_) : $_;  	                 } split ' ', $self->eliminate_macros($self->{OBJECT}); -	my($tmp,@lines,$elt) = ''; -	my $tmp = shift @omods; +        my($tmp,@lines,$elt) = ''; +	$tmp = shift @omods;  	foreach $elt (@omods) {  	    $tmp .= ",$elt";  		if (length($tmp) > 80) { push @lines, $tmp;  $tmp = ''; } @@ -1652,6 +1673,9 @@ dist : $(DIST_DEFAULT)  zipdist : $(DISTVNAME).zip  	$(NOECHO) $(NOOP) +tardist : $(DISTVNAME).tar$(SUFFIX) +	$(NOECHO) $(NOOP) +  $(DISTVNAME).zip : distdir  	$(PREOP)  	$(ZIP) "$(ZIPFLAGS)" $(MMS$TARGET) [.$(DISTVNAME)...]*.*; @@ -1661,7 +1685,7 @@ $(DISTVNAME).zip : distdir  $(DISTVNAME).tar$(SUFFIX) : distdir  	$(PREOP)  	$(TO_UNIX) -	$(TAR) "$(TARFLAGS)" $(DISTVNAME).tar [.$(DISTVNAME)] +        $(TAR) "$(TARFLAGS)" $(DISTVNAME).tar [.$(DISTVNAME)...]  	$(RM_RF) $(DISTVNAME)  	$(COMPRESS) $(DISTVNAME).tar  	$(POSTOP) @@ -1872,6 +1896,7 @@ $(OBJECT) : $(PERL_INC)iperlsys.h  # We do NOT just update config.h because that is not sufficient.  # An out of date config.h is not fatal but complains loudly!  $(PERL_INC)config.h : $(PERL_SRC)config.sh +	$(NOOP)  $(PERL_ARCHLIB)Config.pm : $(PERL_SRC)config.sh  	$(NOECHO) Write Sys$Error "$(PERL_ARCHLIB)Config.pm may be out of date with config.h or genconfig.pl" diff --git a/contrib/perl5/lib/ExtUtils/MM_Win32.pm b/contrib/perl5/lib/ExtUtils/MM_Win32.pm index e08c6791eee4..5361ecee9935 100644 --- a/contrib/perl5/lib/ExtUtils/MM_Win32.pm +++ b/contrib/perl5/lib/ExtUtils/MM_Win32.pm @@ -596,7 +596,7 @@ pm_to_blib: $(TO_INST_PM)  	($NMAKE ? 'qw[ <<pmfiles.dat ],'  	        : $DMAKE ? 'qw[ $(mktmp,pmfiles.dat $(PM_TO_BLIB:s,\\,\\\\,)\n) ],'  			 : '{ qw[$(PM_TO_BLIB)] },' -	 ).q{'}.$autodir.q{')" +	 ).q{'}.$autodir.q{','$(PM_FILTER)')"  	}. ($NMAKE ? q{  $(PM_TO_BLIB)  << @@ -684,7 +684,7 @@ MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \  -e "install({ @ARGV },'$(VERBINST)',0,'$(UNINST)');"  DOC_INSTALL = $(PERL) -e "$$\=\"\n\n\";" \ --e "print '=head2 ', scalar(localtime), ': C<', shift, '>', ' L<', shift, '>';" \ +-e "print '=head2 ', scalar(localtime), ': C<', shift, '>', ' L<', $$arg=shift, '|', $$arg, '>';" \  -e "print '=over 4';" \  -e "while (defined($$key = shift) and defined($$val = shift)) { print '=item *';print 'C<', \"$$key: $$val\", '>'; }" \  -e "print '=back';" diff --git a/contrib/perl5/lib/ExtUtils/MakeMaker.pm b/contrib/perl5/lib/ExtUtils/MakeMaker.pm index 38cb2169a338..8bf76c731341 100644 --- a/contrib/perl5/lib/ExtUtils/MakeMaker.pm +++ b/contrib/perl5/lib/ExtUtils/MakeMaker.pm @@ -44,7 +44,7 @@ use vars qw(  # default routine without having to know under what OS  # it's running.  # -@MM::ISA = qw[ExtUtils::MM_Unix ExtUtils::Liblist ExtUtils::MakeMaker]; +@MM::ISA = qw[ExtUtils::MM_Unix ExtUtils::Liblist::Kid ExtUtils::MakeMaker];  #  # Setup dummy package: @@ -60,7 +60,7 @@ use vars qw(  # "predeclare the package: we only load it via AUTOLOAD  # but we have already mentioned it in @ISA -package ExtUtils::Liblist; +package ExtUtils::Liblist::Kid;  package ExtUtils::MakeMaker;  # @@ -82,7 +82,7 @@ if ($Is_OS2) {      require ExtUtils::MM_OS2;  }  if ($Is_Mac) { -    require ExtUtils::MM_Mac; +    require ExtUtils::MM_MacOS;  }  if ($Is_Win32) {      require ExtUtils::MM_Win32; @@ -189,7 +189,7 @@ sub full_setup {      AUTHOR ABSTRACT ABSTRACT_FROM BINARY_LOCATION      C CAPI CCFLAGS CONFIG CONFIGURE DEFINE DIR DISTNAME DL_FUNCS DL_VARS      EXCLUDE_EXT EXE_FILES FIRST_MAKEFILE FULLPERL FUNCLIST H  -    HTMLLIBPODS HTMLSCRIPTPOD IMPORTS +    HTMLLIBPODS HTMLSCRIPTPODS IMPORTS      INC INCLUDE_EXT INSTALLARCHLIB INSTALLBIN INSTALLDIRS INSTALLHTMLPRIVLIBDIR      INSTALLHTMLSCRIPTDIR INSTALLHTMLSITELIBDIR INSTALLMAN1DIR      INSTALLMAN3DIR INSTALLPRIVLIB INSTALLSCRIPT INSTALLSITEARCH @@ -200,10 +200,14 @@ sub full_setup {      PERL_MALLOC_OK      NAME NEEDS_LINKING NOECHO NORECURS NO_VC OBJECT OPTIMIZE PERL PERLMAINCC      PERL_ARCHLIB PERL_LIB PERL_SRC PERM_RW PERM_RWX -    PL_FILES PM PMLIBDIRS POLLUTE PPM_INSTALL_EXEC PPM_INSTALL_SCRIPT PREFIX +    PL_FILES PM PM_FILTER PMLIBDIRS POLLUTE PPM_INSTALL_EXEC +	PPM_INSTALL_SCRIPT PREFIX      PREREQ_PM SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG      XS_VERSION clean depend dist dynamic_lib linkext macro realclean      tool_autosplit + +    MACPERL_SRC MACPERL_LIB MACLIBS_68K MACLIBS_PPC MACLIBS_SC MACLIBS_MRC +    MACLIBS_ALL_68K MACLIBS_ALL_PPC MACLIBS_SHARED  	/;      # IMPORTS is used under OS/2 and Win32 @@ -239,7 +243,6 @@ sub full_setup {   dir_target libscan makeaperl needs_linking perm_rw perm_rwx   subdir_x test_via_harness test_via_script -  			 ];      push @MM_Sections, qw[ @@ -982,23 +985,39 @@ be      perl Makefile.PL LIB=~/lib  This will install the module's architecture-independent files into -~/lib, the architecture-dependent files into ~/lib/$archname/auto. +~/lib, the architecture-dependent files into ~/lib/$archname.  Another way to specify many INSTALL directories with a single  parameter is PREFIX.      perl Makefile.PL PREFIX=~ -This will replace the string specified by $Config{prefix} in all -$Config{install*} values. +This will replace the string specified by C<$Config{prefix}> in all +C<$Config{install*}> values.  Note, that in both cases the tilde expansion is done by MakeMaker, not -by perl by default, nor by make. Conflicts between parameters LIB, -PREFIX and the various INSTALL* arguments are resolved so that  -XXX +by perl by default, nor by make. + +Conflicts between parameters LIB, +PREFIX and the various INSTALL* arguments are resolved so that: + +=over 4 + +=item * + +setting LIB overrides any setting of INSTALLPRIVLIB, INSTALLARCHLIB, +INSTALLSITELIB, INSTALLSITEARCH (and they are not affected by PREFIX); + +=item * + +without LIB, setting PREFIX replaces the initial C<$Config{prefix}> +part of those INSTALL* arguments, even if the latter are explicitly +set (but are set to still start with C<$Config{prefix}>). + +=back  If the user has superuser privileges, and is not working on AFS -(Andrew File System) or relatives, then the defaults for +or relatives, then the defaults for  INSTALLPRIVLIB, INSTALLARCHLIB, INSTALLSCRIPT, etc. will be appropriate,  and this incantation will be the best: @@ -1145,11 +1164,6 @@ or as NAME=VALUE pairs on the command line:  =over 2 -=item AUTHOR - -String containing name (and email address) of package author(s). Is used -in PPD (Perl Package Description) files for PPM (Perl Package Manager). -  =item ABSTRACT  One line description of the module. Will be included in PPD file. @@ -1160,6 +1174,11 @@ Name of the file that contains the package description. MakeMaker looks  for a line in the POD matching /^($package\s-\s)(.*)/. This is typically  the first line in the "=head1 NAME" section. $2 becomes the abstract. +=item AUTHOR + +String containing name (and email address) of package author(s). Is used +in PPD (Perl Package Description) files for PPM (Perl Package Manager). +  =item BINARY_LOCATION  Used when creating PPD files for binary packages.  It can be set to a @@ -1409,11 +1428,6 @@ to INSTALLBIN during 'make install'  Old name for INST_SCRIPT. Deprecated. Please use INST_SCRIPT if you  need to use it. -=item INST_LIB - -Directory where we put library files of this extension while building -it. -  =item INST_HTMLLIBDIR  Directory to hold the man pages in HTML format at 'make' time @@ -1422,6 +1436,11 @@ Directory to hold the man pages in HTML format at 'make' time  Directory to hold the man pages in HTML format at 'make' time +=item INST_LIB + +Directory where we put library files of this extension while building +it. +  =item INST_MAN1DIR  Directory to hold the man pages at 'make' time @@ -1437,34 +1456,6 @@ Directory, where executable files should be installed during  testing. make install will copy the files in INST_SCRIPT to  INSTALLSCRIPT. -=item PERL_MALLOC_OK - -defaults to 0.  Should be set to TRUE if the extension can work with -the memory allocation routines substituted by the Perl malloc() subsystem. -This should be applicable to most extensions with exceptions of those - -=over - -=item * - -with bugs in memory allocations which are caught by Perl's malloc(); - -=item * - -which interact with the memory allocator in other ways than via -malloc(), realloc(), free(), calloc(), sbrk() and brk(); - -=item * - -which rely on special alignment which is not provided by Perl's malloc(). - -=back - -B<NOTE.>  Negligence to set this flag in I<any one> of loaded extension -nullifies many advantages of Perl's malloc(), such as better usage of -system resources, error detection, memory usage reporting, catchable failure -of memory allocations, etc. -  =item LDFROM  defaults to "$(OBJECT)" and is used in the ld command to specify @@ -1473,8 +1464,12 @@ specify ld flags)  =item LIB -LIB can only be set at C<perl Makefile.PL> time. It has the effect of +LIB should only be set at C<perl Makefile.PL> time but is allowed as a +MakeMaker argument. It has the effect of  setting both INSTALLPRIVLIB and INSTALLSITELIB to that value regardless any +explicit setting of those arguments (or of PREFIX).   +INSTALLARCHLIB and INSTALLSITEARCH are set to the corresponding  +architecture subdirectory.  =item LIBPERL_A @@ -1578,6 +1573,8 @@ List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long  string containing all object files, e.g. "tkpBind.o  tkpButton.o tkpCanvas.o" +(Where BASEEXT is the last component of NAME, and OBJ_EXT is $Config{obj_ext}.) +  =item OPTIMIZE  Defaults to C<-O>. Set it to C<-g> to turn debugging on. The flag is @@ -1594,12 +1591,40 @@ to $(CC).  =item PERL_ARCHLIB -Same as above for architecture dependent files. +Same as below, but for architecture dependent files.  =item PERL_LIB  Directory containing the Perl library to use. +=item PERL_MALLOC_OK + +defaults to 0.  Should be set to TRUE if the extension can work with +the memory allocation routines substituted by the Perl malloc() subsystem. +This should be applicable to most extensions with exceptions of those + +=over 4 + +=item * + +with bugs in memory allocations which are caught by Perl's malloc(); + +=item * + +which interact with the memory allocator in other ways than via +malloc(), realloc(), free(), calloc(), sbrk() and brk(); + +=item * + +which rely on special alignment which is not provided by Perl's malloc(). + +=back + +B<NOTE.>  Negligence to set this flag in I<any one> of loaded extension +nullifies many advantages of Perl's malloc(), such as better usage of +system resources, error detection, memory usage reporting, catchable failure +of memory allocations, etc. +  =item PERL_SRC  Directory containing the Perl source code (use of this should be @@ -1648,6 +1673,31 @@ they contain will be installed in the corresponding location in the  library.  A libscan() method can be used to alter the behaviour.  Defining PM in the Makefile.PL will override PMLIBDIRS. +(Where BASEEXT is the last component of NAME.) + +=item PM_FILTER + +A filter program, in the traditional Unix sense (input from stdin, output +to stdout) that is passed on each .pm file during the build (in the +pm_to_blib() phase).  It is empty by default, meaning no filtering is done. + +Great care is necessary when defining the command if quoting needs to be +done.  For instance, you would need to say: + +  {'PM_FILTER' => 'grep -v \\"^\\#\\"'} + +to remove all the leading coments on the fly during the build.  The +extra \\ are necessary, unfortunately, because this variable is interpolated +within the context of a Perl program built on the command line, and double +quotes are what is used with the -e switch to build that command line.  The +# is escaped for the Makefile, since what is going to be generated will then +be: + +  PM_FILTER = grep -v \"^\#\" + +Without the \\ before the #, we'd have the start of a Makefile comment, +and the macro would be incorrectly defined. +  =item POLLUTE  Release 5.005 grandfathered old global symbol names by providing preprocessor @@ -1725,6 +1775,7 @@ MakeMaker object. The following lines will be parsed o.k.:      ( $VERSION ) = '$Revision: 1.222 $ ' =~ /\$Revision:\s+([^\s]+)/;      $FOO::VERSION = '1.10';      *FOO::VERSION = \'1.11'; +    our $VERSION = 1.2.3;	# new for perl5.6.0   but these will fail: @@ -1732,6 +1783,8 @@ but these will fail:      local $VERSION = '1.02';      local $FOO::VERSION = '1.30'; +(Putting C<my> or C<local> on the preceding line will work o.k.) +  The file named in VERSION_FROM is not added as a dependency to  Makefile. This is not really correct, but it would be a major pain  during development to have to rewrite the Makefile for any smallish @@ -1786,6 +1839,8 @@ part of the Makefile.    {ANY_TARGET => ANY_DEPENDECY, ...} +(ANY_TARGET must not be given a double-colon rule by MakeMaker.) +  =item dist    {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz', diff --git a/contrib/perl5/lib/ExtUtils/Manifest.pm b/contrib/perl5/lib/ExtUtils/Manifest.pm index 8bb3fc8ebd6e..50a426336122 100644 --- a/contrib/perl5/lib/ExtUtils/Manifest.pm +++ b/contrib/perl5/lib/ExtUtils/Manifest.pm @@ -8,13 +8,14 @@ use Carp;  use strict;  use vars qw($VERSION @ISA @EXPORT_OK -	    $Is_VMS $Debug $Verbose $Quiet $MANIFEST $found); +	    $Is_MacOS $Is_VMS $Debug $Verbose $Quiet $MANIFEST $found);  $VERSION = substr(q$Revision: 1.33 $, 10);  @ISA=('Exporter');  @EXPORT_OK = ('mkmanifest', 'manicheck', 'fullcheck', 'filecheck',   	      'skipcheck', 'maniread', 'manicopy'); +$Is_MacOS = $^O eq 'MacOS';  $Is_VMS = $^O eq 'VMS';  if ($Is_VMS) { require File::Basename } @@ -49,6 +50,7 @@ sub mkmanifest {  	}  	my $text = $all{$file};  	($file,$text) = split(/\s+/,$text,2) if $Is_VMS && $text; +	$file = _unmacify($file);  	my $tabs = (5 - (length($file)+1)/8);  	$tabs = 1 if $tabs < 1;  	$tabs = 0 unless $text; @@ -60,10 +62,11 @@ sub mkmanifest {  sub manifind {      local $found = {};      find(sub {return if -d $_; -	      (my $name = $File::Find::name) =~ s|./||; +	      (my $name = $File::Find::name) =~ s|^\./||; +	      $name =~ s/^:([^:]+)$/$1/ if $Is_MacOS;  	      warn "Debug: diskfile $name\n" if $Debug; -	      $name  =~ s#(.*)\.$#\L$1# if $Is_VMS; -	      $found->{$name} = "";}, "."); +	      $name =~ s#(.*)\.$#\L$1# if $Is_VMS; +	      $found->{$name} = "";}, $Is_MacOS ? ":" : ".");      $found;  } @@ -115,7 +118,8 @@ sub _manicheck {  	    }  	    warn "Debug: manicheck checking from disk $file\n" if $Debug;  	    unless ( exists $read->{$file} ) { -		warn "Not in $MANIFEST: $file\n" unless $Quiet; +		my $canon = "\t" . _unmacify($file) if $Is_MacOS; +		warn "Not in $MANIFEST: $file$canon\n" unless $Quiet;  		push @missentry, $file;  	    }  	} @@ -135,7 +139,13 @@ sub maniread {      while (<M>){  	chomp;  	next if /^#/; -	if ($Is_VMS) { +	if ($Is_MacOS) { +	    my($item,$text) = /^(\S+)\s*(.*)/; +	    $item = _macify($item); +	    $item =~ s/\\([0-3][0-7][0-7])/sprintf("%c", oct($1))/ge; +	    $read->{$item}=$text; +	} +	elsif ($Is_VMS) {  	    my($file)= /^(\S+)/;  	    next unless $file;  	    my($base,$dir) = File::Basename::fileparse($file); @@ -166,7 +176,7 @@ sub _maniskip {  	chomp;  	next if /^#/;  	next if /^\s*$/; -	push @skip, $_; +	push @skip, _macify($_);      }      close M;      my $opts = $Is_VMS ? 'oi ' : 'o '; @@ -187,15 +197,24 @@ sub manicopy {      require File::Basename;      my(%dirs,$file);      $target = VMS::Filespec::unixify($target) if $Is_VMS; -    File::Path::mkpath([ $target ],1,$Is_VMS ? undef : 0755); +    File::Path::mkpath([ $target ],! $Quiet,$Is_VMS ? undef : 0755);      foreach $file (keys %$read){ -	$file = VMS::Filespec::unixify($file) if $Is_VMS; -	if ($file =~ m!/!) { # Ilya, that hurts, I fear, or maybe not? -	    my $dir = File::Basename::dirname($file); -	    $dir = VMS::Filespec::unixify($dir) if $Is_VMS; -	    File::Path::mkpath(["$target/$dir"],1,$Is_VMS ? undef : 0755); +    	if ($Is_MacOS) { +	    if ($file =~ m!:!) {  +	   	my $dir = _maccat($target, $file); +		$dir =~ s/[^:]+$//; +	    	File::Path::mkpath($dir,1,0755); +	    } +	    cp_if_diff($file, _maccat($target, $file), $how); +	} else { +	    $file = VMS::Filespec::unixify($file) if $Is_VMS; +	    if ($file =~ m!/!) { # Ilya, that hurts, I fear, or maybe not? +		my $dir = File::Basename::dirname($file); +		$dir = VMS::Filespec::unixify($dir) if $Is_VMS; +		File::Path::mkpath(["$target/$dir"],! $Quiet,$Is_VMS ? undef : 0755); +	    } +	    cp_if_diff($file, "$target/$file", $how);  	} -	cp_if_diff($file, "$target/$file", $how);      }  } @@ -204,8 +223,8 @@ sub cp_if_diff {      -f $from or carp "$0: $from not found";      my($diff) = 0;      local(*F,*T); -    open(F,$from) or croak "Can't read $from: $!\n"; -    if (open(T,$to)) { +    open(F,"< $from\0") or croak "Can't read $from: $!\n"; +    if (open(T,"< $to\0")) {  	while (<F>) { $diff++,last if $_ ne <T>; }  	$diff++ unless eof(T);  	close T; @@ -233,12 +252,12 @@ sub cp {      copy($srcFile,$dstFile);      utime $access, $mod + ($Is_VMS ? 1 : 0), $dstFile;      # chmod a+rX-w,go-w -    chmod(  0444 | ( $perm & 0111 ? 0111 : 0 ),  $dstFile ); +    chmod(  0444 | ( $perm & 0111 ? 0111 : 0 ),  $dstFile ) unless ($^O eq 'MacOS');  }  sub ln {      my ($srcFile, $dstFile) = @_; -    return &cp if $Is_VMS; +    return &cp if $Is_VMS or ($^O eq 'MSWin32' and Win32::IsWin95());      link($srcFile, $dstFile);      local($_) = $dstFile; # chmod a+r,go-w+X (except "X" only applies to u=x)      my $mode= 0444 | (stat)[2] & 0700; @@ -258,6 +277,42 @@ sub best {      }  } +sub _macify { +    my($file) = @_; + +    return $file unless $Is_MacOS; +     +    $file =~ s|^\./||; +    if ($file =~ m|/|) { +	$file =~ s|/+|:|g; +	$file = ":$file"; +    } +     +    $file; +} + +sub _maccat { +    my($f1, $f2) = @_; +     +    return "$f1/$f2" unless $Is_MacOS; +     +    $f1 .= ":$f2"; +    $f1 =~ s/([^:]:):/$1/g; +    return $f1; +} + +sub _unmacify { +    my($file) = @_; + +    return $file unless $Is_MacOS; +     +    $file =~ s|^:||; +    $file =~ s|([/ \n])|sprintf("\\%03o", unpack("c", $1))|ge; +    $file =~ y|:|/|; +     +    $file; +} +  1;  __END__ diff --git a/contrib/perl5/lib/ExtUtils/Mksymlists.pm b/contrib/perl5/lib/ExtUtils/Mksymlists.pm index c8f41c74bcd7..c06b393be353 100644 --- a/contrib/perl5/lib/ExtUtils/Mksymlists.pm +++ b/contrib/perl5/lib/ExtUtils/Mksymlists.pm @@ -49,6 +49,7 @@ sub Mksymlists {      }      if    ($osname eq 'aix') { _write_aix(\%spec); } +    elsif ($osname eq 'MacOS'){ _write_aix(\%spec) }      elsif ($osname eq 'VMS') { _write_vms(\%spec) }      elsif ($osname eq 'os2') { _write_os2(\%spec) }      elsif ($osname eq 'MSWin32') { _write_win32(\%spec) } diff --git a/contrib/perl5/lib/ExtUtils/typemap b/contrib/perl5/lib/ExtUtils/typemap index a34cd4f9ea77..c309128fc324 100644 --- a/contrib/perl5/lib/ExtUtils/typemap +++ b/contrib/perl5/lib/ExtUtils/typemap @@ -1,4 +1,3 @@ -# $Header: /home/rmb1/misc/CVS/perl5.005_61/lib/ExtUtils/typemap,v 1.3 1999/09/13 09:46:43 rmb1 Exp $   # basic C types  int			T_IV  unsigned		T_UV @@ -30,6 +29,7 @@ CV *			T_CVREF  IV			T_IV  UV			T_UV +NV			T_NV  I32			T_IV  I16			T_IV  I8			T_IV @@ -226,13 +226,13 @@ T_U_CHAR  T_FLOAT  	sv_setnv($arg, (double)$var);  T_NV -	sv_setnv($arg, (double)$var); +	sv_setnv($arg, (NV)$var);  T_DOUBLE  	sv_setnv($arg, (double)$var);  T_PV  	sv_setpv((SV*)$arg, $var);  T_PTR -	sv_setiv($arg, (IV)$var); +	sv_setiv($arg, PTR2IV($var));  T_PTRREF  	sv_setref_pv($arg, Nullch, (void*)$var);  T_REF_IV_REF diff --git a/contrib/perl5/lib/ExtUtils/xsubpp b/contrib/perl5/lib/ExtUtils/xsubpp index 5a71e896362f..bb8f3aab0466 100755 --- a/contrib/perl5/lib/ExtUtils/xsubpp +++ b/contrib/perl5/lib/ExtUtils/xsubpp @@ -109,7 +109,7 @@ sub Q ;  # Global Constants -$XSUBPP_version = "1.9507"; +$XSUBPP_version = "1.9508";  my ($Is_VMS, $SymSet);  if ($^O eq 'VMS') { @@ -288,7 +288,7 @@ $END = "!End!\n\n";		# "impossible" keyword (multiple newline)  # Match an XS keyword  $BLOCK_re= '\s*(' . join('|', qw(  	REQUIRE BOOT CASE PREINIT INPUT INIT CODE PPCODE OUTPUT  -	CLEANUP ALIAS PROTOTYPES PROTOTYPE VERSIONCHECK INCLUDE +	CLEANUP ALIAS ATTRS PROTOTYPES PROTOTYPE VERSIONCHECK INCLUDE  	SCOPE INTERFACE INTERFACE_MACRO C_ARGS POSTCALL  	)) . "|$END)\\s*:"; @@ -418,7 +418,7 @@ sub INPUT_handler {  	$var_init =~ s/"/\\"/g;  	s/\s+/ /g; -	my ($var_type, $var_addr, $var_name) = /^(.*?[^& ]) *(\&?) *\b(\w+)$/s +	my ($var_type, $var_addr, $var_name) = /^(.*?[^&\s])\s*(\&?)\s*\b(\w+)$/s  	    or blurt("Error: invalid argument declaration '$line'"), next;  	# Check for duplicate definitions @@ -444,12 +444,9 @@ sub INPUT_handler {          $proto_arg[$var_num] = ProtoString($var_type)   	    if $var_num ; -	if ($var_addr) { -	    $var_addr{$var_name} = 1; -	    $func_args =~ s/\b($var_name)\b/&$1/; -	} +	$func_args =~ s/\b($var_name)\b/&$1/ if $var_addr;  	if ($var_init =~ /^[=;]\s*NO_INIT\s*;?\s*$/ -	    or $in_out{$var_name} and $in_out{$var_name} eq 'OUTLIST' +	    or $in_out{$var_name} and $in_out{$var_name} =~ /^OUT/  	    and $var_init !~ /\S/) {  	  if ($name_printed) {  	    print ";\n"; @@ -494,6 +491,8 @@ sub OUTPUT_handler {  	} else {  	    &generate_output($var_types{$outarg}, $var_num, $outarg, $DoSetMagic);  	} +	delete $in_out{$outarg} 	# No need to auto-OUTPUT  +	  if exists $in_out{$outarg} and $in_out{$outarg} =~ /OUT$/;      }  } @@ -573,6 +572,15 @@ sub GetAliases          if $line ;  } +sub ATTRS_handler () +{ +    for (;  !/^$BLOCK_re/o;  $_ = shift(@line)) { +	next unless /\S/; +	TrimWhitespace($_) ; +        push @Attributes, $_; +    } +} +  sub ALIAS_handler ()  {      for (;  !/^$BLOCK_re/o;  $_ = shift(@line)) { @@ -847,7 +855,25 @@ EOM  print("#line 1 \"$filename\"\n")      if $WantLineNumbers; +firstmodule:  while (<$FH>) { +    if (/^=/) { +        my $podstartline = $.; +    	do { +	    if (/^=cut\s*$/) { +		print("/* Skipped embedded POD. */\n"); +		printf("#line %d \"$filename\"\n", $. + 1) +		  if $WantLineNumbers; +		next firstmodule +	    } + +	} while (<$FH>); +	# At this point $. is at end of file so die won't state the start +	# of the problem, and as we haven't yet read any lines &death won't +	# show the correct line in the message either. +	die ("Error: Unterminated pod in $filename, line $podstartline\n") +	  unless $lastline; +    }      last if ($Module, $Package, $Prefix) =  	/^MODULE\s*=\s*([\w:]+)(?:\s+PACKAGE\s*=\s*([\w:]+))?(?:\s+PREFIX\s*=\s*(\S+))?\s*$/; @@ -886,6 +912,16 @@ sub fetch_para {      }      for(;;) { +	# Skip embedded PODs  +	while ($lastline =~ /^=/) { +    	    while ($lastline = <$FH>) { +	    	last if ($lastline =~ /^=cut\s*$/); +	    } +	    death ("Error: Unterminated pod") unless $lastline; +	    $lastline = <$FH>; +	    chomp $lastline; +	    $lastline =~ s/^\s+$//; +	}  	if ($lastline !~ /^\s*#/ ||  	    # CPP directives:  	    #	ANSI:	if ifdef ifndef elif else endif define undef @@ -966,7 +1002,6 @@ while (fetch_para()) {      # initialize info arrays      undef(%args_match);      undef(%var_types); -    undef(%var_addr);      undef(%defaults);      undef($class);      undef($static); @@ -978,7 +1013,7 @@ while (fetch_para()) {      undef(@arg_with_types) ;      undef($processing_arg_with_types) ;      undef(%arg_types) ; -    undef(@in_out) ; +    undef(@outlist) ;      undef(%in_out) ;      undef($proto_in_this_xsub) ;      undef($scope_in_this_xsub) ; @@ -1039,12 +1074,12 @@ while (fetch_para()) {  	last;      }      $XSStack[$XSS_work_idx]{functions}{$Full_func_name} ++ ; -    %XsubAliases = %XsubAliasValues = %Interfaces = (); +    %XsubAliases = %XsubAliasValues = %Interfaces = @Attributes = ();      $DoSetMagic = 1;      $orig_args =~ s/\\\s*/ /g;		# process line continuations -    my %out_vars; +    my %only_outlist;      if ($process_argtypes and $orig_args =~ /\S/) {  	my $args = "$orig_args ,";  	if ($args =~ /^( (??{ $C_arg }) , )* $ /x) { @@ -1059,10 +1094,10 @@ while (fetch_para()) {  		next unless length $pre;  		my $out_type;  		my $inout_var; -		if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST)\s+//) { +		if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\s+//) {  		    my $type = $1;  		    $out_type = $type if $type ne 'IN'; -		    $arg =~ s/^(IN|IN_OUTLIST|OUTLIST)\s+//; +		    $arg =~ s/^(IN|IN_OUTLIST|OUTLIST|OUT|IN_OUT)\s+//;  		}  		if (/\W/) {	# Has a type  		    push @arg_with_types, $arg; @@ -1070,8 +1105,8 @@ while (fetch_para()) {  		    $arg_types{$name} = $arg;  		    $_ = "$name$default";  		} -		$out_vars{$_} = 1 if $out_type eq 'OUTLIST'; -		push @in_out, $name if $out_type; +		$only_outlist{$_} = 1 if $out_type eq "OUTLIST"; +		push @outlist, $name if $out_type =~ /OUTLIST$/;  		$in_out{$name} = $out_type if $out_type;  	    }  	} else { @@ -1081,11 +1116,11 @@ while (fetch_para()) {      } else {  	@args = split(/\s*,\s*/, $orig_args);  	for (@args) { -	    if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST)\s+//) { +	    if ($process_inout and s/^(IN|IN_OUTLIST|OUTLIST|IN_OUT|OUT)\s+//) {  		my $out_type = $1;  		next if $out_type eq 'IN'; -		$out_vars{$_} = 1 if $out_type eq 'OUTLIST'; -		push @in_out, $name; +		$only_outlist{$_} = 1 if $out_type eq "OUTLIST"; +		push @outlist, $name if $out_type =~ /OUTLIST$/;  		$in_out{$_} = $out_type;  	    }  	} @@ -1109,7 +1144,7 @@ while (fetch_para()) {  			last;  		    }  	    } -	    if ($out_vars{$args[$i]}) { +	    if ($only_outlist{$args[$i]}) {  		push @args_num, undef;  	    } else {  		push @args_num, ++$num_args; @@ -1210,7 +1245,7 @@ EOF          $gotRETVAL = 0;  	INPUT_handler() ; -	process_keyword("INPUT|PREINIT|INTERFACE_MACRO|C_ARGS|ALIAS|PROTOTYPE|SCOPE") ; +	process_keyword("INPUT|PREINIT|INTERFACE_MACRO|C_ARGS|ALIAS|ATTRS|PROTOTYPE|SCOPE") ;  	print Q<<"EOF" if $ScopeThisXSUB;  #   ENTER; @@ -1252,7 +1287,7 @@ EOF  		}  		print $deferred; -        process_keyword("INIT|ALIAS|PROTOTYPE|INTERFACE_MACRO|INTERFACE|C_ARGS") ; +        process_keyword("INIT|ALIAS|ATTRS|PROTOTYPE|INTERFACE_MACRO|INTERFACE|C_ARGS") ;  		if (check_keyword("PPCODE")) {  			print_section(); @@ -1296,7 +1331,10 @@ EOF  	# $wantRETVAL set if 'RETVAL =' autogenerated  	($wantRETVAL, $ret_type) = (0, 'void') if $RETVAL_no_return;  	undef %outargs ; -	process_keyword("POSTCALL|OUTPUT|ALIAS|PROTOTYPE");  +	process_keyword("POSTCALL|OUTPUT|ALIAS|ATTRS|PROTOTYPE");  + +	&generate_output($var_types{$_}, $args_match{$_}, $_, $DoSetMagic) +	  for grep $in_out{$_} =~ /OUT$/, keys %in_out;  	# all OUTPUT done, so now push the return value on the stack  	if ($gotRETVAL && $RETVAL_code) { @@ -1334,14 +1372,14 @@ EOF  	$xsreturn = 1 if $ret_type ne "void";  	my $num = $xsreturn; -	my $c = @in_out; +	my $c = @outlist;  	print "\tXSprePUSH;" if $c and not $prepush_done;  	print "\tEXTEND(SP,$c);\n" if $c;  	$xsreturn += $c; -	generate_output($var_types{$_}, $num++, $_, 0, 1) for @in_out; +	generate_output($var_types{$_}, $num++, $_, 0, 1) for @outlist;  	# do cleanup -	process_keyword("CLEANUP|ALIAS|PROTOTYPE") ; +	process_keyword("CLEANUP|ALIAS|ATTRS|PROTOTYPE") ;  	print Q<<"EOF" if $ScopeThisXSUB;  #   ]] @@ -1431,6 +1469,12 @@ EOF  EOF          }      }  +    elsif (@Attributes) { +	    push(@InitFileCode, Q<<"EOF"); +#        cv = newXS(\"$pname\", XS_$Full_func_name, file); +#        apply_attrs_string("$Package", cv, "@Attributes", 0); +EOF +    }      elsif ($interface) {  	while ( ($name, $value) = each %Interfaces) {  	    $name = "$Package\::$name" unless $name =~ /::/; | 
