Devel-PatchPerl

 view release on metacpan or  search on metacpan

lib/Devel/PatchPerl.pm  view on Meta::CPAN

    }

    require File::Spec;
    require ExtUtils::MakeMaker;

    my @possibles;

    if( File::Spec->file_name_is_absolute($command) ) {
        return MM->maybe_command($command);

    } else {
        for my $dir (
            File::Spec->path,
            File::Spec->curdir
        ) {
            next if ! $dir || ! -d $dir;
            my $abs = File::Spec->catfile( $^O eq 'MSWin32' ? Win32::GetShortPathName( $dir ) : $dir, $command);
            push @possibles, $abs if $abs = MM->maybe_command($abs);
        }
    }
    return @possibles if wantarray;
    return shift @possibles;
}

sub _is
{
  my($s1, $s2) = @_;

  defined $s1 != defined $s2 and return 0;

  ref $s2 and ($s1, $s2) = ($s2, $s1);

  if (ref $s1) {
    if (ref $s1 eq 'ARRAY') {
      _is($_, $s2) and return 1 for @$s1;
      return 0;
    }
    return $s2 =~ $s1;
  }

  return $s1 eq $s2;
}

sub _patch_b64 {
  my($base64) = @_;
  my $patch = decode_base64( $base64 );
  _patch( $patch );
}

sub _patch
{
  my($patch) = @_;
  my %mode;
  for my $file ($patch =~ /^\+{3}\s+(\S+)/gm) {
    print "patching $file\n";
    # some filesystems (e.g., Lustre) will kill this process if there
    # is an attempt to write to a file that is 0444, so make these
    # files writable for the duration of the patch
    if (-r $file and not -w _) {
      my $mode = (stat $file)[2];
      $mode{$file} = $mode; # save for chmod back
      chmod $mode | 0200, $file;
    }
  }
  my $diff = 'tmp.diff';
  _write_or_die($diff, $patch);
  die "No patch utility found\n" unless $patch_exe;
  local $ENV{PATCH_GET} = 0; # I can't reproduce this at all, but meh.
  _run_or_die("$patch_exe -f -s -p0 <$diff");
  unlink $diff or die "unlink $diff: $!\n";
  # put back ro to 0444
  for my $file (sort keys %mode) {
    chmod $mode{$file}, $file;
  }
}

sub _write_b64_or_die {
  my($file, $base64) = @_;
  my $data = decode_base64($base64);
  _write_or_die($file, $data);
}

sub _write_or_die
{
  my($file, $data) = @_;
  my $fh = IO::File->new($file,'>') or die "$file: $!\n";
  $fh->print($data);
}

sub _run_or_die
{
  # print "[running @_]\n";
  die unless system( @_ ) == 0;
}

sub determine_version {
  my $src = shift;
  $src = shift if eval { $src->isa(__PACKAGE__) };
  $src = '.' unless $src;
  _determine_version($src);
}

sub _determine_version {
  my ($source) = @_;
  my $patchlevel_h = File::Spec->catfile($source, 'patchlevel.h');
  return unless -e $patchlevel_h;
  my $version;
  {
    my %defines;
    open my $fh, '<', $patchlevel_h;
    my @vers;
    while (<$fh>) {
      chomp;
      next unless /^#define/;
      my ($foo,$bar) = ( split /\s+/ )[1,2];
      $defines{$foo} = $bar;
    }
    if ( my @wotsits = grep { defined $defines{$_} } qw(PERL_REVISION PERL_VERSION PERL_SUBVERSION) ) {
      $version = join '.', map { $defines{$_} } @wotsits;
    }
    elsif ( my @watsits = grep { defined $defines{$_} } qw(PATCHLEVEL SUBVERSION) ) {
      $version = sprintf '5.%03d_%02d', map { $defines{$_} } @watsits;
    }
    else {
      return;
    }
  }
  return $version;
}

sub _patchperl_version {
  return $Devel::PatchPerl::VERSION || "(unreleased)";
}

# adapted from patchlevel.h for use with perls that predate it
sub _patch_patchlevel {
  return if -d '.git' and !$ENV{PERL5_PATCHPERL_PATCHLEVEL};
  my $dpv = $Devel::PatchPerl::VERSION || "(unreleased)";
  open my $plin, "patchlevel.h" or die "Couldn't open patchlevel.h : $!";
  open my $plout, ">patchlevel.new" or die "Couldn't write on patchlevel.new : $!";
  my $seen=0;
  while (<$plin>) {
      if (/\t,NULL/ and $seen) {
        print {$plout} qq{\t,"Devel::PatchPerl $dpv"\n};
      }
      $seen++ if /local_patches\[\]/;
      print {$plout} $_;
  }
  close $plout or die "Couldn't close filehandle writing to patchlevel.new : $!";
  close $plin or die "Couldn't close filehandle reading from patchlevel.h : $!";
  unlink "patchlevel.bak" or warn "Couldn't unlink patchlevel.bak : $!"
    if -e "patchlevel.bak";
  rename "patchlevel.h", "patchlevel.bak" or
    die "Couldn't rename patchlevel.h to patchlevel.bak : $!";
  rename "patchlevel.new", "patchlevel.h" or
    die "Couldn't rename patchlevel.new to patchlevel.h : $!";
}

sub _patch_hints {
  my @os;
  push @os, $^O;
  push @os, 'linux' if $^O eq 'gnukfreebsd'; # kfreebsd uses linux hints
  foreach my $os ( @os ) {
    return unless my ($file,$data) = hint_file( $os );
    my $path = File::Spec->catfile( 'hints', $file );
    warn "Patching '$path'\n";
    if ( -e $path ) {
      chmod 0644, $path or die "$!\n";
    }
    open my $fh, '>', $path or die "$!\n";
    print $fh $data;
    close $fh;
  }
  return 1;
}

sub _patch_db
{
  my $ver = shift;
  for my $file ('ext/DB_File/DB_File.xs', 'Configure') {
    print "patching $file\n";
    _run_or_die($^X, '-pi.bak', '-e', "s/<db.h>/<db$ver\\/db.h>/", $file);
    unlink "$file.bak" if -e "$file.bak";
  }
}

sub _patch_doio
{
  _patch(<<'END');
--- doio.c.org  2004-06-07 23:14:45.000000000 +0200
+++ doio.c  2003-11-04 08:03:03.000000000 +0100
@@ -75,6 +75,16 @@
 #  endif
 #endif

+#if _SEM_SEMUN_UNDEFINED
+union semun
+{
+  int val;
+  struct semid_ds *buf;
+  unsigned short int *array;
+  struct seminfo *__buf;
+};
+#endif
+
 bool
 do_open(gv,name,len,as_raw,rawmode,rawperm,supplied_fp)
 GV *gv;
END
}

sub _patch_sysv
{
  my %opt = @_;

  # check if patching is required
  return if $^O ne 'linux' or -f '/usr/include/asm/page.h';

  if ($opt{old_format}) {
    _patch(<<'END');
--- ext/IPC/SysV/SysV.xs.org  1998-07-20 10:20:07.000000000 +0200
+++ ext/IPC/SysV/SysV.xs  2007-08-12 10:51:06.000000000 +0200
@@ -3,9 +3,6 @@
 #include "XSUB.h"
 
 #include <sys/types.h>
-#ifdef __linux__
-#include <asm/page.h>

lib/Devel/PatchPerl.pm  view on Meta::CPAN

            -e '/^#.*<command line>/d' \
            -e '/^#.*<command-line>/d' \
	    -e '/^#.*"-"/d' \
	    -e '/^#.*"\/.*\/"/d' \
	    -e '/: file path prefix .* never used$/d' \
	    -e '/^#.*git_version\.h/d' \
	    -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \
	    -e 's/^[	 ]*#[	 ]*line/#/' \
	    -e '/^# *[0-9][0-9]* *[".\/]/!d' \
	    -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \
	    -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \
	    -e 's|: \./|: |' \
           -e 's|\.c\.c|.c|' $uwinfix .cout .cerr| \
        $uniq | $sort | $uniq >> .deptmp
    fi
    echo "$filebase\$(OBJ_EXT): $@" >> .deptmp
done

$sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d'

if $test -s .deptmp; then
    $echo "Updating $mf..."
    $echo "# If this runs make out of memory, delete /usr/include lines." \
	>> $mf.new
    if [ "$osname" = vos ]; then
        $sed 's|\.incl\.c|.h|' .deptmp >.deptmp.vos
        mv -f .deptmp.vos .deptmp
    fi
    $sed 's|^\(.*\$(OBJ_EXT):\) *\(.*/.*\.c\) *$|\1 \2; '"$defrule \2|" .deptmp \
       >>$mf.new
else
    $MAKE hlist || ($echo "Searching for .h files..."; \
	$echo *.h | $tr ' ' $trnl | $egrep -v '\*' >.hlist)
    $echo "You don't seem to have a proper C preprocessor.  Using grep instead."
    $egrep '^#include ' `cat .clist` `cat .hlist`  >.deptmp
    $echo "Updating $mf..."
    <.clist $sed -n							\
	-e '/\//{'							\
	-e   's|^\(.*\)/\(.*\)\.c|\2\$(OBJ_EXT): \1/\2.c; '"$defrule \1/\2.c|p"	\
	-e   d								\
	-e '}'								\
	-e 's|^\(.*\)\.c|\1\$(OBJ_EXT): \1.c|p' >> $mf.new
    <.hlist $sed -n 's|\(.*/\)\(.*\)|s= \2= \1\2=|p' >.hsed
    <.deptmp $sed -n 's|c:#include "\(.*\)".*$|o: \1|p' | \
       $sed 's|^[^;]*/||' | \
       $sed -f .hsed >> $mf.new
    <.deptmp $sed -n 's|h:#include "\(.*\)".*$|h: \1|p' | \
       $sed -f .hsed >> $mf.new
fi
$rm -f $mf.old
$cp $mf $mf.old
$rm -f $mf
$cp $mf.new $mf
$rm $mf.new
$echo "# WARNING: Put nothing here or make depend will gobble it up!" >> $mf
$rm -rf .deptmp UU .clist .hlist .hsed .cout .cerr
rmdir .depending

!NO!SUBS!
$eunicefix makedepend
chmod +x makedepend
END
}  

sub _patch_5_005_02 {
  _patch(<<'END');
--- Configure
+++ Configure
@@ -21,7 +21,7 @@
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
 # Generated on Tue Jul  7 10:10:21 EDT 1998 [metaconfig 3.0 PL70]
-# (with additional metaconfig patches by doughera@lafayette.edu)
+# (with additional metaconfig patches by jhi@iki.fi)
 
 cat >/tmp/c1$$ <<EOF
 ARGGGHHHH!!!!!
@@ -56,33 +56,6 @@ case "$0" in
 	;;
 esac
 
-: the newline for tr
-if test X"$trnl" = X; then
-	case "`echo foo|tr '\n' x 2>/dev/null`" in
-	foox)
-		trnl='\n'
-		;;
-	esac
-fi
-if test X"$trnl" = X; then
-	case "`echo foo|tr '\012' x 2>/dev/null`" in
-	foox)
-		trnl='\012'
-		;;
-	esac
-fi
-if test -n "$DJGPP"; then
-	trnl='\012'
-fi
-if test X"$trnl" = X; then
-	cat <<EOM >&2
-
-$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
-
-EOM
-	exit 1
-fi
-
 : Proper separator for the PATH environment variable
 p_=:
 : On OS/2 this directory should exist if this is not floppy only system :-]
@@ -391,7 +364,6 @@ d_getservprotos=''
 d_getsbyname=''
 d_getsbyport=''
 d_gnulibc=''
-i_arpainet=''
 d_htonl=''
 d_inetaton=''
 d_isascii=''
@@ -540,6 +512,7 @@ dlsrc=''
 ld=''

lib/Devel/PatchPerl.pm  view on Meta::CPAN

+EOM
+	exit 1
+fi
+
 : compute the number of columns on the terminal for proper question formatting
 case "$COLUMNS" in
 '') COLUMNS='80';;
@@ -1574,7 +1577,7 @@ Much effort has been expended to ensure that this shell script will run on any
 Unix system.  If despite that it blows up on yours, your best bet is to edit
 Configure and run it again.  If you can't run Configure for some reason,
 you'll have to generate a config.sh file by hand.  Whatever problems you
-have, let me (doughera@lafayette.edu) know how I blew it.
+have, let me (jhi@iki.fi) know how I blew it.
 
 This installation script affects things in two ways:
 
@@ -1841,14 +1844,14 @@ ABYZ)
 	    *C9D1*|*c9d1*)
 		echo "Hey, this might be EBCDIC." >&4
 		if test "X$up" = X -o "X$low" = X; then
-		    case "`echo IJ | tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
+		    case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
 		    ij) up='[A-IJ-RS-Z]'
 		        low='[a-ij-rs-z]'
 			;;
 		    esac
 		fi
 		if test "X$up" = X -o "X$low" = X; then
-		    case "`echo IJ | tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
+		    case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
 		    ij) up='A-IJ-RS-Z'
 		        low='a-ij-rs-z'
 			;;
@@ -1941,7 +1944,7 @@ EOM
 	(cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
 	dflt=''
 	: Half the following guesses are probably wrong... If you have better
-	: tests or hints, please send them to doughera@lafayette.edu
+	: tests or hints, please send them to jhi@iki.fi
 	: The metaconfig authors would also appreciate a copy...
 	$test -f /irix && osname=irix
 	$test -f /xenix && osname=sco_xenix
@@ -2025,7 +2028,7 @@ EOM
 			osvers="$3"
 			;;
 		dynixptx*) osname=dynixptx
-			osvers="$3"
+			osvers=`echo "$4" | $sed 's/^v//'`
 			;;
 		freebsd) osname=freebsd 
 			osvers="$3" ;;
@@ -3442,7 +3445,11 @@ cat <<'EOT' >testcpp.c
 ABC.XYZ
 EOT
 cd ..
+if test ! -f cppstdin; then
 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
+else
+	echo "Keeping your $hint cppstdin wrapper."
+fi
 chmod 755 cppstdin
 wrapper=`pwd`/cppstdin
 ok='false'
@@ -3693,7 +3700,8 @@ case "$libswanted" in
 esac
 for thislib in $libswanted; do
 	
-	if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
+	if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
+		$test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
 		echo "Found -l$thislib (shared)."
 		case " $dflt " in
 		*"-l$thislib "*);;
@@ -3980,10 +3988,21 @@ rmlist="$rmlist pdp11"
 : coherency check
 echo " "
 echo "Checking your choice of C compiler and flags for coherency..." >&4
+$cat > try.c <<'EOF'
+#include <stdio.h>
+main() { printf("Ok\n"); exit(0); }
+EOF
 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
 shift
-$cat >try.msg <<EOM
-I've tried to compile and run a simple program with:
+$cat >try.msg <<'EOM'
+I've tried to compile and run the following simple program:
+
+EOM
+$cat try.c
+
+$cat >> try.msg <<EOM
+
+I used the command:
 
 	$*
 	./try
@@ -3991,10 +4010,6 @@ I've tried to compile and run a simple program with:
 and I got the following output:
 
 EOM
-$cat > try.c <<'EOF'
-#include <stdio.h>
-main() { printf("Ok\n"); exit(0); }
-EOF
 dflt=y
 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
 	if sh -c './try' >>try.msg 2>&1; then
@@ -4031,7 +4046,7 @@ y)
 	$cat try.msg >&4
 	case "$knowitall" in
 	'')
-		echo "(The supplied flags might be incorrect with this C compiler.)"
+		echo "(The supplied flags or libraries might be incorrect.)"
 		;;
 	*) dflt=n;;
 	esac
@@ -4149,9 +4164,8 @@ eval $inhdr
 : determine which malloc to compile in
 echo " "
 case "$usemymalloc" in

lib/Devel/PatchPerl.pm  view on Meta::CPAN

+Cannot figure out on how many bits at a time your select() operates.
+I'll play safe and guess it is 32 bits.
+EOM
+				selectminbits=32
+				bits="32 bits"
+				;;
+			1)	bits="1 bit" ;;
+			*)	bits="$selectminbits bits" ;;
+			esac
+			echo "Your select() operates on $bits at a time." >&4
+		else
+			rp='What is the minimum number of bits your select() operates on?'
+			case "$byteorder" in
+			1234|12345678)	dflt=32 ;;
+			*)		dflt=1	;;
+			esac
+			. ./myread
+			val=$ans
+			selectminbits="$val"
+		fi
+		$rm -f try.* try
+		;;
+	*)	: no select, so pick a harmless default
+		selectminbits='32'
+		;;
+	esac
+	;;
+esac
+
 : Trace out the files included by signal.h, then look for SIGxxx names.
 : Remove SIGARRAYSIZE used by HPUX.
 : Remove SIGTYP void lines used by OS2.
@@ -10458,7 +10603,13 @@ $eunicefix signal_cmd
 : generate list of signal names
 echo " "
 case "$sig_name_init" in
-'')
+'') doinit=yes ;;
+*)  case "$sig_num_init" in
+    ''|*,*) doinit=yes ;;
+    esac ;;
+esac
+case "$doinit" in
+yes)
 	echo "Generating a list of signal names and numbers..." >&4
 	. ./signal_cmd
 	sig_name=`$awk '{printf "%s ", $1}' signal.lst`
@@ -10466,7 +10617,9 @@ case "$sig_name_init" in
 	sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
 						{ printf "\"%s\", ", $1 }
 						END { printf "0\n" }' signal.lst`
-	sig_num=`$awk 'BEGIN { printf "0, " }
+	sig_num=`$awk '{printf "%d ", $2}' signal.lst`
+	sig_num="0 $sig_num"
+	sig_num_init=`$awk 'BEGIN { printf "0, " }
 					{ printf "%d, ", $2}
 					END { printf "0\n"}' signal.lst`
 	;;
@@ -10830,7 +10983,13 @@ $rm -f try.c
 EOS
 chmod +x ccsym
 $eunicefix ccsym
-./ccsym | $sort | $uniq >ccsym.raw
+./ccsym > ccsym1.raw
+if $test -s ccsym1.raw; then
+       $sort ccsym1.raw | $uniq >ccsym.raw
+else
+       mv ccsym1.raw ccsym.raw
+fi
+
 $awk '/\=/ { print $0; next }
 	{ print $0"=1" }' ccsym.raw >ccsym.list
 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
@@ -11055,10 +11214,6 @@ eval $inhdr
 set sys/resource.h i_sysresrc
 eval $inhdr
 
-: see if sys/stat.h is available
-set sys/stat.h i_sysstat
-eval $inhdr
-
 : see if this is a sys/un.h system
 set sys/un.h i_sysun
 eval $inhdr
@@ -11195,6 +11350,7 @@ for xxx in $known_extensions ; do
 		esac
 		;;
 	IPC/SysV|ipc/sysv)
+		: XXX Do we need a useipcsysv variable here
 		case "${d_msg}${d_sem}${d_shm}" in 
 		*"${define}"*) avail_ext="$avail_ext $xxx" ;;
 		esac
@@ -11774,6 +11930,7 @@ i_values='$i_values'
 i_varargs='$i_varargs'
 i_varhdr='$i_varhdr'
 i_vfork='$i_vfork'
+ignore_versioned_solibs='$ignore_versioned_solibs'
 incpath='$incpath'
 inews='$inews'
 installarchlib='$installarchlib'
@@ -11882,6 +12039,7 @@ runnm='$runnm'
 scriptdir='$scriptdir'
 scriptdirexp='$scriptdirexp'
 sed='$sed'
+selectminbits='$selectminbits'
 selecttype='$selecttype'
 sendmail='$sendmail'
 sh='$sh'
@@ -11894,6 +12052,7 @@ shsharp='$shsharp'
 sig_name='$sig_name'
 sig_name_init='$sig_name_init'
 sig_num='$sig_num'
+sig_num_init='$sig_num_init'
 signal_t='$signal_t'
 sitearch='$sitearch'
 sitearchexp='$sitearchexp'
@@ -12023,51 +12182,6 @@ esac
 : if this fails, just run all the .SH files by hand
 . ./config.sh
 
-case "$ebcdic" in
-$define)
-    xxx=''
-    echo "This is an EBCDIC system, checking if any parser files need regenerating." >&4
-    rm -f y.tab.c y.tab.h
-    yacc -d perly.y >/dev/null 2>&1
-    if cmp -s y.tab.c perly.c; then
-        rm -f y.tab.c
-    else
-        echo "perly.y -> perly.c" >&4
-        mv -f y.tab.c perly.c
-        chmod u+w perly.c
-        sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
-            -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp perly.c
-        xxx="$xxx perly.c"
-    fi
-    if cmp -s y.tab.h perly.h; then
-        rm -f y.tab.h
-    else
-        echo "perly.y -> perly.h" >&4
-        mv -f y.tab.h perly.h
-        xxx="$xxx perly.h"
-    fi
-    echo "x2p/a2p.y" >&4
-    cd x2p
-    rm -f y.tab.c
-    yacc a2p.y >/dev/null 2>&1
-    if cmp -s y.tab.c a2p.c
-    then
-        rm -f y.tab.c
-    else
-        echo "a2p.y -> a2p.c" >&4
-        mv -f y.tab.c a2p.c
-        chmod u+w a2p.c
-        sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
-            -e 's/y\.tab/a2p/g' a2p.c >a2p.tmp && mv a2p.tmp a2p.c
-        xxx="$xxx a2p.c"
-    fi
-    cd ..
-    case "$xxx" in
-    '') echo "No parser files were regenerated.  That's okay." >&4 ;;
-    esac
-    ;;
-esac
-
 echo " "
 exec 1>&4
 . ./UU/extract
--- Makefile.SH
+++ Makefile.SH
@@ -644,3 +644,83 @@ case `pwd` in
     ;;
 esac
 $rm -f $firstmakefile
+
+# Now do any special processing required before building.
+
+case "$ebcdic" in
+$define)
+    xxx=''
+    echo "This is an EBCDIC system, checking if any parser files need regenerating." >&4
+case "$osname" in
+os390)
+    rm -f y.tab.c y.tab.h
+    yacc -d perly.y >/dev/null 2>&1
+    if cmp -s y.tab.c perly.c; then
+        rm -f y.tab.c
+    else
+        echo "perly.y -> perly.c" >&2
+        mv -f y.tab.c perly.c
+        chmod u+w perly.c
+        sed -e '/^#include "perl\.h"/a\
+\
+#define yydebug    PL_yydebug\
+#define yynerrs    PL_yynerrs\
+#define yyerrflag  PL_yyerrflag\
+#define yychar     PL_yychar\
+#define yyval      PL_yyval\
+#define yylval     PL_yylval'				\
+            -e '/YYSTYPE *yyval;/D'			\
+            -e '/YYSTYPE *yylval;/D'			\
+            -e '/int  yychar,/,/yynerrs;/D'		\
+            -e 's/int yydebug = 0;/yydebug = 0;/'	\
+            -e 's/[^_]realloc(/PerlMem_realloc(/g'	\
+            -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
+            -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp perly.c
+        xxx="$xxx perly.c"
+    fi
+    if cmp -s y.tab.h perly.h; then
+        rm -f y.tab.h
+    else
+        echo "perly.y -> perly.h" >&2
+        mv -f y.tab.h perly.h
+        xxx="$xxx perly.h"
+    fi
+    if cd x2p
+    then
+        rm -f y.tab.c y.tab.h
+        yacc a2p.y >/dev/null 2>&1
+        if cmp -s y.tab.c a2p.c
+        then
+            rm -f y.tab.c
+        else
+            echo "a2p.y -> a2p.c" >&2
+            mv -f y.tab.c a2p.c
+            chmod u+w a2p.c
+            sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
+                -e 's/y\.tab/a2p/g' a2p.c >a2p.tmp && mv a2p.tmp a2p.c
+            xxx="$xxx a2p.c"
+        fi
+        # In case somebody yacc -d:ed the a2p.y.
+        if test -f y.tab.h
+        then
+            if cmp -s y.tab.h a2p.h
+            then
+                rm -f y.tab.h
+            else
+                echo "a2p.h -> a2p.h" >&2
+                mv -f y.tab.h a2p.h
+                xxx="$xxx a2p.h"
+            fi
+        fi
+        cd ..
+    fi
+    ;;
+*)
+    echo "'$osname' is an EBCDIC system I don't know that well." >&4
+    ;;
+esac
+    case "$xxx" in
+    '') echo "No parser files were regenerated.  That's okay." >&2 ;;
+    esac
+    ;;
+esac
--- config_h.SH
+++ config_h.SH
@@ -1813,7 +1813,7 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  *	the sig_name list.
  */
 #define SIG_NAME $sig_name_init		/**/
-#define SIG_NUM  $sig_num			/**/
+#define SIG_NUM  $sig_num_init		/**/
 
 /* VOIDFLAGS:
  *	This symbol indicates how much support of the void type is given by this
@@ -1902,6 +1902,15 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
 #define PRIVLIB "$privlib"		/**/
 #define PRIVLIB_EXP "$privlibexp"		/**/
 
+/* SELECT_MIN_BITS:
+ *	This symbol holds the minimum number of bits operated by select.
+ *	That is, if you do select(n, ...), how many bits at least will be
+ *	cleared in the masks if some activity is detected.  Usually this
+ *	is either n or 32*ceil(n/32), especially many little-endians do
+ *	the latter.  This is only useful if you have select(), naturally.
+ */
+#define SELECT_MIN_BITS 	$selectminbits	/**/
+
 /* SITEARCH:
  *	This symbol contains the name of the private library for this package.
  *	The library is private in the sense that it needn't be in anyone's
--- pp_sys.c
+++ pp_sys.c
@@ -56,7 +56,10 @@ extern "C" int syscall(unsigned long,...);
 
 /* XXX Configure test needed.

lib/Devel/PatchPerl.pm  view on Meta::CPAN

+EOM
+	exit 1
+fi
+
 : compute the number of columns on the terminal for proper question formatting
 case "$COLUMNS" in
 '') COLUMNS='80';;
@@ -1574,7 +1577,7 @@ Much effort has been expended to ensure that this shell script will run on any
 Unix system.  If despite that it blows up on yours, your best bet is to edit
 Configure and run it again.  If you can't run Configure for some reason,
 you'll have to generate a config.sh file by hand.  Whatever problems you
-have, let me (doughera@lafayette.edu) know how I blew it.
+have, let me (jhi@iki.fi) know how I blew it.
 
 This installation script affects things in two ways:
 
@@ -1841,14 +1844,14 @@ ABYZ)
 	    *C9D1*|*c9d1*)
 		echo "Hey, this might be EBCDIC." >&4
 		if test "X$up" = X -o "X$low" = X; then
-		    case "`echo IJ | tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
+		    case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
 		    ij) up='[A-IJ-RS-Z]'
 		        low='[a-ij-rs-z]'
 			;;
 		    esac
 		fi
 		if test "X$up" = X -o "X$low" = X; then
-		    case "`echo IJ | tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
+		    case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
 		    ij) up='A-IJ-RS-Z'
 		        low='a-ij-rs-z'
 			;;
@@ -1941,7 +1944,7 @@ EOM
 	(cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
 	dflt=''
 	: Half the following guesses are probably wrong... If you have better
-	: tests or hints, please send them to doughera@lafayette.edu
+	: tests or hints, please send them to jhi@iki.fi
 	: The metaconfig authors would also appreciate a copy...
 	$test -f /irix && osname=irix
 	$test -f /xenix && osname=sco_xenix
@@ -2025,7 +2028,7 @@ EOM
 			osvers="$3"
 			;;
 		dynixptx*) osname=dynixptx
-			osvers="$3"
+			osvers=`echo "$4" | $sed 's/^v//'`
 			;;
 		freebsd) osname=freebsd 
 			osvers="$3" ;;
@@ -3454,7 +3457,11 @@ cat <<'EOT' >testcpp.c
 ABC.XYZ
 EOT
 cd ..
+if test ! -f cppstdin; then
 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
+else
+	echo "Keeping your $hint cppstdin wrapper."
+fi
 chmod 755 cppstdin
 wrapper=`pwd`/cppstdin
 ok='false'
@@ -3705,7 +3712,8 @@ case "$libswanted" in
 esac
 for thislib in $libswanted; do
 	
-	if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
+	if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
+		$test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
 		echo "Found -l$thislib (shared)."
 		case " $dflt " in
 		*"-l$thislib "*);;
@@ -3992,10 +4000,21 @@ rmlist="$rmlist pdp11"
 : coherency check
 echo " "
 echo "Checking your choice of C compiler and flags for coherency..." >&4
+$cat > try.c <<'EOF'
+#include <stdio.h>
+main() { printf("Ok\n"); exit(0); }
+EOF
 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
 shift
-$cat >try.msg <<EOM
-I've tried to compile and run a simple program with:
+$cat >try.msg <<'EOM'
+I've tried to compile and run the following simple program:
+
+EOM
+$cat try.c
+
+$cat >> try.msg <<EOM
+
+I used the command:
 
 	$*
 	./try
@@ -4003,10 +4022,6 @@ I've tried to compile and run a simple program with:
 and I got the following output:
 
 EOM
-$cat > try.c <<'EOF'
-#include <stdio.h>
-main() { printf("Ok\n"); exit(0); }
-EOF
 dflt=y
 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
 	if sh -c './try' >>try.msg 2>&1; then
@@ -4043,7 +4058,7 @@ y)
 	$cat try.msg >&4
 	case "$knowitall" in
 	'')
-		echo "(The supplied flags might be incorrect with this C compiler.)"
+		echo "(The supplied flags or libraries might be incorrect.)"
 		;;
 	*) dflt=n;;
 	esac
@@ -4161,9 +4176,8 @@ eval $inhdr
 : determine which malloc to compile in
 echo " "
 case "$usemymalloc" in

lib/Devel/PatchPerl.pm  view on Meta::CPAN

+Cannot figure out on how many bits at a time your select() operates.
+I'll play safe and guess it is 32 bits.
+EOM
+				selectminbits=32
+				bits="32 bits"
+				;;
+			1)	bits="1 bit" ;;
+			*)	bits="$selectminbits bits" ;;
+			esac
+			echo "Your select() operates on $bits at a time." >&4
+		else
+			rp='What is the minimum number of bits your select() operates on?'
+			case "$byteorder" in
+			1234|12345678)	dflt=32 ;;
+			*)		dflt=1	;;
+			esac
+			. ./myread
+			val=$ans
+			selectminbits="$val"
+		fi
+		$rm -f try.* try
+		;;
+	*)	: no select, so pick a harmless default
+		selectminbits='32'
+		;;
+	esac
+	;;
+esac
+
 : Trace out the files included by signal.h, then look for SIGxxx names.
 : Remove SIGARRAYSIZE used by HPUX.
 : Remove SIGTYP void lines used by OS2.
@@ -10415,7 +10621,13 @@ $eunicefix signal_cmd
 : generate list of signal names
 echo " "
 case "$sig_name_init" in
-'')
+'') doinit=yes ;;
+*)  case "$sig_num_init" in
+    ''|*,*) doinit=yes ;;
+    esac ;;
+esac
+case "$doinit" in
+yes)
 	echo "Generating a list of signal names and numbers..." >&4
 	. ./signal_cmd
 	sig_name=`$awk '{printf "%s ", $1}' signal.lst`
@@ -10423,7 +10635,9 @@ case "$sig_name_init" in
 	sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
 						{ printf "\"%s\", ", $1 }
 						END { printf "0\n" }' signal.lst`
-	sig_num=`$awk 'BEGIN { printf "0, " }
+	sig_num=`$awk '{printf "%d ", $2}' signal.lst`
+	sig_num="0 $sig_num"
+	sig_num_init=`$awk 'BEGIN { printf "0, " }
 					{ printf "%d, ", $2}
 					END { printf "0\n"}' signal.lst`
 	;;
@@ -10787,7 +11001,13 @@ $rm -f try.c
 EOS
 chmod +x ccsym
 $eunicefix ccsym
-./ccsym | $sort | $uniq >ccsym.raw
+./ccsym > ccsym1.raw
+if $test -s ccsym1.raw; then
+       $sort ccsym1.raw | $uniq >ccsym.raw
+else
+       mv ccsym1.raw ccsym.raw
+fi
+
 $awk '/\=/ { print $0; next }
 	{ print $0"=1" }' ccsym.raw >ccsym.list
 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
@@ -11012,10 +11232,6 @@ eval $inhdr
 set sys/resource.h i_sysresrc
 eval $inhdr
 
-: see if sys/stat.h is available
-set sys/stat.h i_sysstat
-eval $inhdr
-
 : see if this is a sys/un.h system
 set sys/un.h i_sysun
 eval $inhdr
@@ -11152,6 +11368,7 @@ for xxx in $known_extensions ; do
 		esac
 		;;
 	IPC/SysV|ipc/sysv)
+		: XXX Do we need a useipcsysv variable here
 		case "${d_msg}${d_sem}${d_shm}" in 
 		*"${define}"*) avail_ext="$avail_ext $xxx" ;;
 		esac
@@ -11731,6 +11948,7 @@ i_values='$i_values'
 i_varargs='$i_varargs'
 i_varhdr='$i_varhdr'
 i_vfork='$i_vfork'
+ignore_versioned_solibs='$ignore_versioned_solibs'
 incpath='$incpath'
 inews='$inews'
 installarchlib='$installarchlib'
@@ -11839,6 +12057,7 @@ runnm='$runnm'
 scriptdir='$scriptdir'
 scriptdirexp='$scriptdirexp'
 sed='$sed'
+selectminbits='$selectminbits'
 selecttype='$selecttype'
 sendmail='$sendmail'
 sh='$sh'
@@ -11851,6 +12070,7 @@ shsharp='$shsharp'
 sig_name='$sig_name'
 sig_name_init='$sig_name_init'
 sig_num='$sig_num'
+sig_num_init='$sig_num_init'
 signal_t='$signal_t'
 sitearch='$sitearch'
 sitearchexp='$sitearchexp'
--- Makefile.SH
+++ Makefile.SH
@@ -644,3 +644,83 @@ case `pwd` in
     ;;
 esac
 $rm -f $firstmakefile
+
+# Now do any special processing required before building.
+
+case "$ebcdic" in
+$define)
+    xxx=''
+    echo "This is an EBCDIC system, checking if any parser files need regenerating." >&4
+case "$osname" in
+os390)
+    rm -f y.tab.c y.tab.h
+    yacc -d perly.y >/dev/null 2>&1
+    if cmp -s y.tab.c perly.c; then
+        rm -f y.tab.c
+    else
+        echo "perly.y -> perly.c" >&2
+        mv -f y.tab.c perly.c
+        chmod u+w perly.c
+        sed -e '/^#include "perl\.h"/a\
+\
+#define yydebug    PL_yydebug\
+#define yynerrs    PL_yynerrs\
+#define yyerrflag  PL_yyerrflag\
+#define yychar     PL_yychar\
+#define yyval      PL_yyval\
+#define yylval     PL_yylval'				\
+            -e '/YYSTYPE *yyval;/D'			\
+            -e '/YYSTYPE *yylval;/D'			\
+            -e '/int  yychar,/,/yynerrs;/D'		\
+            -e 's/int yydebug = 0;/yydebug = 0;/'	\
+            -e 's/[^_]realloc(/PerlMem_realloc(/g'	\
+            -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
+            -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp perly.c
+        xxx="$xxx perly.c"
+    fi
+    if cmp -s y.tab.h perly.h; then
+        rm -f y.tab.h
+    else
+        echo "perly.y -> perly.h" >&2
+        mv -f y.tab.h perly.h
+        xxx="$xxx perly.h"
+    fi
+    if cd x2p
+    then
+        rm -f y.tab.c y.tab.h
+        yacc a2p.y >/dev/null 2>&1
+        if cmp -s y.tab.c a2p.c
+        then
+            rm -f y.tab.c
+        else
+            echo "a2p.y -> a2p.c" >&2
+            mv -f y.tab.c a2p.c
+            chmod u+w a2p.c
+            sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
+                -e 's/y\.tab/a2p/g' a2p.c >a2p.tmp && mv a2p.tmp a2p.c
+            xxx="$xxx a2p.c"
+        fi
+        # In case somebody yacc -d:ed the a2p.y.
+        if test -f y.tab.h
+        then
+            if cmp -s y.tab.h a2p.h
+            then
+                rm -f y.tab.h
+            else
+                echo "a2p.h -> a2p.h" >&2
+                mv -f y.tab.h a2p.h
+                xxx="$xxx a2p.h"
+            fi
+        fi
+        cd ..
+    fi
+    ;;
+*)
+    echo "'$osname' is an EBCDIC system I don't know that well." >&4
+    ;;
+esac
+    case "$xxx" in
+    '') echo "No parser files were regenerated.  That's okay." >&2 ;;
+    esac
+    ;;
+esac
--- config_h.SH
+++ config_h.SH
@@ -1813,7 +1813,7 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  *	the sig_name list.
  */
 #define SIG_NAME $sig_name_init		/**/
-#define SIG_NUM  $sig_num			/**/
+#define SIG_NUM  $sig_num_init		/**/
 
 /* VOIDFLAGS:
  *	This symbol indicates how much support of the void type is given by this
@@ -1902,6 +1902,15 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
 #define PRIVLIB "$privlib"		/**/
 #define PRIVLIB_EXP "$privlibexp"		/**/
 
+/* SELECT_MIN_BITS:
+ *	This symbol holds the minimum number of bits operated by select.
+ *	That is, if you do select(n, ...), how many bits at least will be
+ *	cleared in the masks if some activity is detected.  Usually this
+ *	is either n or 32*ceil(n/32), especially many little-endians do
+ *	the latter.  This is only useful if you have select(), naturally.
+ */
+#define SELECT_MIN_BITS 	$selectminbits	/**/
+
 /* SITEARCH:
  *	This symbol contains the name of the private library for this package.
  *	The library is private in the sense that it needn't be in anyone's
--- pp_sys.c
+++ pp_sys.c
@@ -56,7 +56,10 @@ extern "C" int syscall(unsigned long,...);
 
 /* XXX Configure test needed.

lib/Devel/PatchPerl.pm  view on Meta::CPAN

+EOM
+	exit 1
+fi
+
 : compute the number of columns on the terminal for proper question formatting
 case "$COLUMNS" in
 '') COLUMNS='80';;
@@ -1574,7 +1577,7 @@ Much effort has been expended to ensure that this shell script will run on any
 Unix system.  If despite that it blows up on yours, your best bet is to edit
 Configure and run it again.  If you can't run Configure for some reason,
 you'll have to generate a config.sh file by hand.  Whatever problems you
-have, let me (doughera@lafayette.edu) know how I blew it.
+have, let me (jhi@iki.fi) know how I blew it.
 
 This installation script affects things in two ways:
 
@@ -1841,14 +1844,14 @@ ABYZ)
 	    *C9D1*|*c9d1*)
 		echo "Hey, this might be EBCDIC." >&4
 		if test "X$up" = X -o "X$low" = X; then
-		    case "`echo IJ | tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
+		    case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
 		    ij) up='[A-IJ-RS-Z]'
 		        low='[a-ij-rs-z]'
 			;;
 		    esac
 		fi
 		if test "X$up" = X -o "X$low" = X; then
-		    case "`echo IJ | tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
+		    case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
 		    ij) up='A-IJ-RS-Z'
 		        low='a-ij-rs-z'
 			;;
@@ -1941,7 +1944,7 @@ EOM
 	(cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
 	dflt=''
 	: Half the following guesses are probably wrong... If you have better
-	: tests or hints, please send them to doughera@lafayette.edu
+	: tests or hints, please send them to jhi@iki.fi
 	: The metaconfig authors would also appreciate a copy...
 	$test -f /irix && osname=irix
 	$test -f /xenix && osname=sco_xenix
@@ -2025,7 +2028,7 @@ EOM
 			osvers="$3"
 			;;
 		dynixptx*) osname=dynixptx
-			osvers="$3"
+			osvers=`echo "$4" | $sed 's/^v//'`
 			;;
 		freebsd) osname=freebsd 
 			osvers="$3" ;;
@@ -3454,7 +3457,11 @@ cat <<'EOT' >testcpp.c
 ABC.XYZ
 EOT
 cd ..
+if test ! -f cppstdin; then
 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
+else
+	echo "Keeping your $hint cppstdin wrapper."
+fi
 chmod 755 cppstdin
 wrapper=`pwd`/cppstdin
 ok='false'
@@ -3705,7 +3712,8 @@ case "$libswanted" in
 esac
 for thislib in $libswanted; do
 	
-	if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then
+	if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
+		$test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
 		echo "Found -l$thislib (shared)."
 		case " $dflt " in
 		*"-l$thislib "*);;
@@ -3992,10 +4000,21 @@ rmlist="$rmlist pdp11"
 : coherency check
 echo " "
 echo "Checking your choice of C compiler and flags for coherency..." >&4
+$cat > try.c <<'EOF'
+#include <stdio.h>
+main() { printf("Ok\n"); exit(0); }
+EOF
 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
 shift
-$cat >try.msg <<EOM
-I've tried to compile and run a simple program with:
+$cat >try.msg <<'EOM'
+I've tried to compile and run the following simple program:
+
+EOM
+$cat try.c
+
+$cat >> try.msg <<EOM
+
+I used the command:
 
 	$*
 	./try
@@ -4003,10 +4022,6 @@ I've tried to compile and run a simple program with:
 and I got the following output:
 
 EOM
-$cat > try.c <<'EOF'
-#include <stdio.h>
-main() { printf("Ok\n"); exit(0); }
-EOF
 dflt=y
 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
 	if sh -c './try' >>try.msg 2>&1; then
@@ -4043,7 +4058,7 @@ y)
 	$cat try.msg >&4
 	case "$knowitall" in
 	'')
-		echo "(The supplied flags might be incorrect with this C compiler.)"
+		echo "(The supplied flags or libraries might be incorrect.)"
 		;;
 	*) dflt=n;;
 	esac
@@ -4161,9 +4176,8 @@ eval $inhdr
 : determine which malloc to compile in
 echo " "
 case "$usemymalloc" in

lib/Devel/PatchPerl.pm  view on Meta::CPAN

+Cannot figure out on how many bits at a time your select() operates.
+I'll play safe and guess it is 32 bits.
+EOM
+				selectminbits=32
+				bits="32 bits"
+				;;
+			1)	bits="1 bit" ;;
+			*)	bits="$selectminbits bits" ;;
+			esac
+			echo "Your select() operates on $bits at a time." >&4
+		else
+			rp='What is the minimum number of bits your select() operates on?'
+			case "$byteorder" in
+			1234|12345678)	dflt=32 ;;
+			*)		dflt=1	;;
+			esac
+			. ./myread
+			val=$ans
+			selectminbits="$val"
+		fi
+		$rm -f try.* try
+		;;
+	*)	: no select, so pick a harmless default
+		selectminbits='32'
+		;;
+	esac
+	;;
+esac
+
 : Trace out the files included by signal.h, then look for SIGxxx names.
 : Remove SIGARRAYSIZE used by HPUX.
 : Remove SIGTYP void lines used by OS2.
@@ -10415,7 +10621,13 @@ $eunicefix signal_cmd
 : generate list of signal names
 echo " "
 case "$sig_name_init" in
-'')
+'') doinit=yes ;;
+*)  case "$sig_num_init" in
+    ''|*,*) doinit=yes ;;
+    esac ;;
+esac
+case "$doinit" in
+yes)
 	echo "Generating a list of signal names and numbers..." >&4
 	. ./signal_cmd
 	sig_name=`$awk '{printf "%s ", $1}' signal.lst`
@@ -10423,7 +10635,9 @@ case "$sig_name_init" in
 	sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
 						{ printf "\"%s\", ", $1 }
 						END { printf "0\n" }' signal.lst`
-	sig_num=`$awk 'BEGIN { printf "0, " }
+	sig_num=`$awk '{printf "%d ", $2}' signal.lst`
+	sig_num="0 $sig_num"
+	sig_num_init=`$awk 'BEGIN { printf "0, " }
 					{ printf "%d, ", $2}
 					END { printf "0\n"}' signal.lst`
 	;;
@@ -10787,7 +11001,13 @@ $rm -f try.c
 EOS
 chmod +x ccsym
 $eunicefix ccsym
-./ccsym | $sort | $uniq >ccsym.raw
+./ccsym > ccsym1.raw
+if $test -s ccsym1.raw; then
+       $sort ccsym1.raw | $uniq >ccsym.raw
+else
+       mv ccsym1.raw ccsym.raw
+fi
+
 $awk '/\=/ { print $0; next }
 	{ print $0"=1" }' ccsym.raw >ccsym.list
 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
@@ -11012,10 +11232,6 @@ eval $inhdr
 set sys/resource.h i_sysresrc
 eval $inhdr
 
-: see if sys/stat.h is available
-set sys/stat.h i_sysstat
-eval $inhdr
-
 : see if this is a sys/un.h system
 set sys/un.h i_sysun
 eval $inhdr
@@ -11152,6 +11368,7 @@ for xxx in $known_extensions ; do
 		esac
 		;;
 	IPC/SysV|ipc/sysv)
+		: XXX Do we need a useipcsysv variable here
 		case "${d_msg}${d_sem}${d_shm}" in 
 		*"${define}"*) avail_ext="$avail_ext $xxx" ;;
 		esac
@@ -11731,6 +11948,7 @@ i_values='$i_values'
 i_varargs='$i_varargs'
 i_varhdr='$i_varhdr'
 i_vfork='$i_vfork'
+ignore_versioned_solibs='$ignore_versioned_solibs'
 incpath='$incpath'
 inews='$inews'
 installarchlib='$installarchlib'
@@ -11839,6 +12057,7 @@ runnm='$runnm'
 scriptdir='$scriptdir'
 scriptdirexp='$scriptdirexp'
 sed='$sed'
+selectminbits='$selectminbits'
 selecttype='$selecttype'
 sendmail='$sendmail'
 sh='$sh'
@@ -11851,6 +12070,7 @@ shsharp='$shsharp'
 sig_name='$sig_name'
 sig_name_init='$sig_name_init'
 sig_num='$sig_num'
+sig_num_init='$sig_num_init'
 signal_t='$signal_t'
 sitearch='$sitearch'
 sitearchexp='$sitearchexp'
--- Makefile.SH
+++ Makefile.SH
@@ -644,3 +644,83 @@ case `pwd` in
     ;;
 esac
 $rm -f $firstmakefile
+
+# Now do any special processing required before building.
+
+case "$ebcdic" in
+$define)
+    xxx=''
+    echo "This is an EBCDIC system, checking if any parser files need regenerating." >&4
+case "$osname" in
+os390)
+    rm -f y.tab.c y.tab.h
+    yacc -d perly.y >/dev/null 2>&1
+    if cmp -s y.tab.c perly.c; then
+        rm -f y.tab.c
+    else
+        echo "perly.y -> perly.c" >&2
+        mv -f y.tab.c perly.c
+        chmod u+w perly.c
+        sed -e '/^#include "perl\.h"/a\
+\
+#define yydebug    PL_yydebug\
+#define yynerrs    PL_yynerrs\
+#define yyerrflag  PL_yyerrflag\
+#define yychar     PL_yychar\
+#define yyval      PL_yyval\
+#define yylval     PL_yylval'				\
+            -e '/YYSTYPE *yyval;/D'			\
+            -e '/YYSTYPE *yylval;/D'			\
+            -e '/int  yychar,/,/yynerrs;/D'		\
+            -e 's/int yydebug = 0;/yydebug = 0;/'	\
+            -e 's/[^_]realloc(/PerlMem_realloc(/g'	\
+            -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
+            -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp perly.c
+        xxx="$xxx perly.c"
+    fi
+    if cmp -s y.tab.h perly.h; then
+        rm -f y.tab.h
+    else
+        echo "perly.y -> perly.h" >&2
+        mv -f y.tab.h perly.h
+        xxx="$xxx perly.h"
+    fi
+    if cd x2p
+    then
+        rm -f y.tab.c y.tab.h
+        yacc a2p.y >/dev/null 2>&1
+        if cmp -s y.tab.c a2p.c
+        then
+            rm -f y.tab.c
+        else
+            echo "a2p.y -> a2p.c" >&2
+            mv -f y.tab.c a2p.c
+            chmod u+w a2p.c
+            sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \
+                -e 's/y\.tab/a2p/g' a2p.c >a2p.tmp && mv a2p.tmp a2p.c
+            xxx="$xxx a2p.c"
+        fi
+        # In case somebody yacc -d:ed the a2p.y.
+        if test -f y.tab.h
+        then
+            if cmp -s y.tab.h a2p.h
+            then
+                rm -f y.tab.h
+            else
+                echo "a2p.h -> a2p.h" >&2
+                mv -f y.tab.h a2p.h
+                xxx="$xxx a2p.h"
+            fi
+        fi
+        cd ..
+    fi
+    ;;
+*)
+    echo "'$osname' is an EBCDIC system I don't know that well." >&4
+    ;;
+esac
+    case "$xxx" in
+    '') echo "No parser files were regenerated.  That's okay." >&2 ;;
+    esac
+    ;;
+esac
--- config_h.SH
+++ config_h.SH
@@ -1813,7 +1813,7 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
  *	the sig_name list.
  */
 #define SIG_NAME $sig_name_init		/**/
-#define SIG_NUM  $sig_num			/**/
+#define SIG_NUM  $sig_num_init		/**/
 
 /* VOIDFLAGS:
  *	This symbol indicates how much support of the void type is given by this
@@ -1902,6 +1902,15 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
 #define PRIVLIB "$privlib"		/**/
 #define PRIVLIB_EXP "$privlibexp"		/**/
 
+/* SELECT_MIN_BITS:
+ *	This symbol holds the minimum number of bits operated by select.
+ *	That is, if you do select(n, ...), how many bits at least will be
+ *	cleared in the masks if some activity is detected.  Usually this
+ *	is either n or 32*ceil(n/32), especially many little-endians do
+ *	the latter.  This is only useful if you have select(), naturally.
+ */
+#define SELECT_MIN_BITS 	$selectminbits	/**/
+
 /* SITEARCH:
  *	This symbol contains the name of the private library for this package.
  *	The library is private in the sense that it needn't be in anyone's
--- pp_sys.c
+++ pp_sys.c
@@ -56,7 +56,10 @@ extern "C" int syscall(unsigned long,...);
 
 /* XXX Configure test needed.

lib/Devel/PatchPerl.pm  view on Meta::CPAN

JGZ1bGxuYW1lPSIkdGhpc3B0aC9saWIkdGhpc2xpYiRDb25maWdfbGliZXh0IikpewogCSAgICB9
IGVsc2lmIChkZWZpbmVkKCRDb25maWdfZGxleHQpCiAgICAgICAgICAgICAgICAgICYmIC1mICgk
ZnVsbG5hbWU9IiR0aGlzcHRoL2xpYiR0aGlzbGliLiRDb25maWdfZGxleHQiKSl7CisgICAgICB9
IGVsc2lmICgkXk8gZXEgJ2RhcndpbicgJiYgcmVxdWlyZSBEeW5hTG9hZGVyICYmIGRlZmluZWQg
JkR5bmFMb2FkZXI6OmRsX2xvYWRfZmlsZQorICAgICAgICAgICAgICAgICAmJiBEeW5hTG9hZGVy
OjpkbF9sb2FkX2ZpbGUoICRmdWxsbmFtZSA9ICIkdGhpc3B0aC9saWIkdGhpc2xpYi4kc28iLCAw
ICkpewogCSAgICB9IGVsc2lmICgtZiAoJGZ1bGxuYW1lPSIkdGhpc3B0aC8kdGhpc2xpYiRDb25m
aWdfbGliZXh0IikpewogCSAgICB9IGVsc2lmICgtZiAoJGZ1bGxuYW1lPSIkdGhpc3B0aC9saWIk
dGhpc2xpYi5kbGwkQ29uZmlnX2xpYmV4dCIpKXsKIAkgICAgfSBlbHNpZiAoLWYgKCRmdWxsbmFt
ZT0iJHRoaXNwdGgvU2xpYiR0aGlzbGliJENvbmZpZ19saWJleHQiKSl7Cg==
EUMMBIGSUR515
  }
  _patch_b64(<<'EUMMBIGSUR');
LS0tIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQor
KysgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCkBA
IC0xNzQsNiArMTc0LDEwIEBAIHN1YiBfdW5peF9vczJfZXh0IHsKICAgICAgICAgICAgICAgICAm
JiAtZiAoICRmdWxsbmFtZSA9ICIkdGhpc3B0aC9saWIkdGhpc2xpYi4kQ29uZmlnX2RsZXh0IiAp
ICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2lmICggJF5P
IGVxICdkYXJ3aW4nICYmIHJlcXVpcmUgRHluYUxvYWRlciAmJiBkZWZpbmVkICZEeW5hTG9hZGVy
OjpkbF9sb2FkX2ZpbGUKKyAgICAgICAgICAgICAgICAmJiBEeW5hTG9hZGVyOjpkbF9sb2FkX2Zp
bGUoICRmdWxsbmFtZSA9ICIkdGhpc3B0aC9saWIkdGhpc2xpYi4kc28iLCAwICkgKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzaWYgKCAtZiAoICRmdWxsbmFt
ZSA9ICIkdGhpc3B0aC8kdGhpc2xpYiRDb25maWdfbGliZXh0IiApICkgewogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzaWYgKCAtZiAoICRmdWxsbmFtZSA9ICIkdGhpc3B0aC9saWIkdGhp
c2xpYi5kbGwkQ29uZmlnX2xpYmV4dCIgKSApIHsK
EUMMBIGSUR
}

sub _patch_dbfile_clang {
  return unless $^O eq 'freebsd' or $^O eq 'darwin';
  my $perlver = shift;
  my $num = _norm_ver( $perlver );
  # I've only tested against v5.8.9 and v5.10.0
  # It might work for intervening v5.9.*, but at this point
  # it's not my circus, nor my monkeys
  return unless $num > 5.008008;
  return unless $num < 5.010001;
  # Patch mkpport.lst
  _patch_b64(<<'DBFILE001');
LS0tIG1rcHBwb3J0LmxzdC5vcmcJMjAyMy0xMS0yNyAyMjo0NzoyOS41ODM5NjEwMDAgKzAwMDAK
KysrIG1rcHBwb3J0LmxzdAkyMDIzLTExLTI3IDIyOjQ3OjU3LjU3OTk3MTAwMCArMDAwMApAQCAt
OCwzICs4LDQgQEAKIGV4dC9JUEMvU3lzVgogZXh0L1RpbWUvSGlSZXMKIGV4dC9XaW4zMkFQSS9G
aWxlCitleHQvREJfRmlsZQo=
DBFILE001
  # Patch ext/DB_File/DB_File.xs
  _patch_b64(<<'DBFILE002');
LS0tIGV4dC9EQl9GaWxlL0RCX0ZpbGUueHMub3JnCTIwMjMtMTEtMjcgMjI6NTg6NTcuNDcwNDM2
MDAwICswMDAwCisrKyBleHQvREJfRmlsZS9EQl9GaWxlLnhzCTIwMjMtMTEtMjcgMjI6NTk6MTgu
Njk1ODI4MDAwICswMDAwCkBAIC0xMjMsOSArMTIzLDcgQEAKICNpbmNsdWRlICJwZXJsLmgiCiAj
aW5jbHVkZSAiWFNVQi5oIgogCi0jaWZkZWYgX05PVF9DT1JFCi0jICBpbmNsdWRlICJwcHBvcnQu
aCIKLSNlbmRpZgorI2luY2x1ZGUgInBwcG9ydC5oIgogCiAvKiBNZW50aW9uIERCX1ZFUlNJT05f
TUFKT1JfQ0ZHLCBEQl9WRVJTSU9OX01JTk9SX0NGRywgYW5kCiAgICBEQl9WRVJTSU9OX1BBVENI
X0NGRyBoZXJlIHNvIHRoYXQgQ29uZmlndXJlIHB1bGxzIHRoZW0gYWxsIGluLiAqLwo=
DBFILE002
  # Overwrite ext/DB_File/Makefile.PL
  {
    my $file = File::Spec->catfile('ext','DB_File','Makefile.PL');
    my $mode;
    if (-r $file and not -w _) {
      $mode = (stat $file)[2];
      chmod $mode | 0200, $file;
    }
    _write_b64_or_die($file,<<'DBFILE003');
IyEgcGVybCAtdwoKdXNlIHN0cmljdCA7CnVzZSBFeHRVdGlsczo6TWFrZU1ha2VyIDUuMTYgOwp1
c2UgQ29uZmlnIDsKCmRpZSAiREJfRmlsZSBuZWVkcyBQZXJsIDUuMDA0XzA1IG9yIGJldHRlci4g
VGhpcyBpcyAkXVxuIiAKICAgIGlmICRdIDw9IDUuMDA0MDQ7IAoKbXkgJFZFUl9JTkZPIDsKbXkg
JExJQl9ESVIgOwpteSAkSU5DX0RJUiA7Cm15ICREQl9OQU1FIDsKbXkgJExJQlMgOwpteSAkQ09N
UEFUMTg1ID0gIiIgOwoKUGFyc2VDT05GSUcoKSA7CgpteSBAZmlsZXMgPSAoJ0RCX0ZpbGUucG0n
LCBnbG9iICJ0LyoudCIpIDsKVXBEb3duZ3JhZGUoQGZpbGVzKTsKCmlmIChkZWZpbmVkICREQl9O
QU1FKQogIHsgJExJQlMgPSAkREJfTkFNRSB9CmVsc2UgewogICAgaWYgKCReTyBlcSAnTVNXaW4z
MicpCiAgICAgIHsgJExJQlMgPSAkQ29uZmlne2NjfSA9fiAvZ2NjLyA/ICctbGRiJyA6ICctbGxp
YmRiJyB9CiAgICBlbHNlCiAgICAgIHsgJExJQlMgPSAnLWxkYicgfQp9CgojIFNvbGFyaXMgaXMg
c3BlY2lhbC4KIyRMSUJTIC49ICIgLWx0aHJlYWQiIGlmICReTyBlcSAnc29sYXJpcycgOwoKIyBB
SVggaXMgc3BlY2lhbC4KJExJQlMgLj0gIiAtbHB0aHJlYWQiIGlmICReTyBlcSAnYWl4JyA7Cgoj
IE9TMiBpcyBhIHNwZWNpYWwgY2FzZSwgc28gY2hlY2sgZm9yIGl0IG5vdy4KbXkgJE9TMiA9ICIi
IDsKJE9TMiA9ICItRE9TMiIgaWYgJENvbmZpZ3snb3NuYW1lJ30gZXEgJ29zMicgOwoKbXkgJFdB
TEwgPSAnJyA7CiMkV0FMTCA9ICcgLVdhbGwgJzsKCldyaXRlTWFrZWZpbGUoCglOQU1FIAkJPT4g
J0RCX0ZpbGUnLAoJTElCUyAJCT0+IFsiLUwke0xJQl9ESVJ9ICRMSUJTIl0sCglJTkMJCT0+ICIt
SSRJTkNfRElSIiwKICAgIFZFUlNJT05fRlJPTQk9PiAnREJfRmlsZS5wbScsCglYU19WRVJTSU9O
ICAgICAgPT4gZXZhbCBNTS0+cGFyc2VfdmVyc2lvbignREJfRmlsZS5wbScpLAoJWFNQUk9UT0FS
Rwk9PiAnLW5vcHJvdG90eXBlcycsCglERUZJTkUJCT0+ICItRF9OT1RfQ09SRSAkT1MyICRWRVJf
SU5GTyAkQ09NUEFUMTg1ICRXQUxMIiwKCU9CSkVDVAkJPT4gJ3ZlcnNpb24kKE9CSl9FWFQpIERC
X0ZpbGUkKE9CSl9FWFQpJywKICAgICgoRXh0VXRpbHM6Ok1ha2VNYWtlci0+VkVSU0lPTigpIGd0
ICc2LjMwJykgCiAgICAgICAgPyAgKCdMSUNFTlNFJyAgPT4gJ3BlcmwnKSAgICAgICAgIAogICAg
ICAgIDogKCkKICAgICksCiAgICAoCiAgICAkXSA+PSA1LjAwNQogICAgICAgID8gKEFCU1RSQUNU
X0ZST00gPT4gJ0RCX0ZpbGUucG0nLAogICAgICAgICAgICBBVVRIT1IgICAgICAgPT4gJ1BhdWwg
TWFycXVlc3MgPHBtcXNAY3Bhbi5vcmc+JykKICAgICAgICA6ICgpCiAgICApLAogICAgCgoJI09Q
VElNSVpFCT0+ICctZycsCgknZGVwZW5kJwk9PiB7ICdNYWtlZmlsZScgICAgICAgICAgPT4gJ2Nv
bmZpZy5pbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24kKE9CSl9FWFQp
JyA9PiAndmVyc2lvbi5jJ30sCgknY2xlYW4nCQk9PiB7IEZJTEVTID0+ICdjb25zdGFudHMuaCBj
b25zdGFudHMueHMnIH0sCgknbWFjcm8nCQk9PiB7IElOU1RBTExESVJTID0+ICdwZXJsJywgbXlf
ZmlsZXMgPT4gIkBmaWxlcyIgfSwKICAgICAgICAnZGlzdCcgICAgICAgICAgPT4geyBDT01QUkVT
UyA9PiAnZ3ppcCcsIFNVRkZJWCA9PiAnZ3onLAoJCQkgICAgIERJU1RfREVGQVVMVCA9PiAnTXlE
b3VibGVDaGVjayB0YXJkaXN0J30sICAgIAoJKTsKCgpteSBAbmFtZXMgPSBxdygKCUJUUkVFTUFH
SUMKCUJUUkVFVkVSU0lPTgoJREJfTE9DSwoJREJfU0hNRU0KCURCX1RYTgoJSEFTSE1BR0lDCglI
QVNIVkVSU0lPTgoJTUFYX1BBR0VfTlVNQkVSCglNQVhfUEFHRV9PRkZTRVQKCU1BWF9SRUNfTlVN
QkVSCglSRVRfRVJST1IKCVJFVF9TUEVDSUFMCglSRVRfU1VDQ0VTUwoJUl9DVVJTT1IKCVJfRFVQ
CglSX0ZJUlNUCglSX0ZJWEVETEVOCglSX0lBRlRFUgoJUl9JQkVGT1JFCglSX0xBU1QKCVJfTkVY
VAoJUl9OT0tFWQoJUl9OT09WRVJXUklURQoJUl9QUkVWCglSX1JFQ05PU1lOQwoJUl9TRVRDVVJT
T1IKCVJfU05BUFNIT1QKCV9fUl9VTlVTRUQKCSk7CgppZiAoZXZhbCB7cmVxdWlyZSBFeHRVdGls
czo6Q29uc3RhbnQ7IDF9KSB7CiAgICAjIENoZWNrIHRoZSBjb25zdGFudHMgYWJvdmUgYWxsIGFw
cGVhciBpbiBARVhQT1JUIGluIERCX0ZpbGUucG0KICAgIG15ICVuYW1lcyA9IG1hcCB7ICRfLCAx
fSBAbmFtZXM7CiAgICBvcGVuIEYsICI8REJfRmlsZS5wbSIgb3IgZGllICJDYW5ub3Qgb3BlbiBE
Ql9GaWxlLnBtOiAkIVxuIjsKICAgIHdoaWxlICg8Rj4pCiAgICB7CiAgICAgICAgbGFzdCBpZiAv
XlxzKlxARVhQT1JUXHMrPVxzK3F3XCgvIDsKICAgIH0KCiAgICB3aGlsZSAoPEY+KQogICAgewog
ICAgICAgIGxhc3QgaWYgL15ccypcKS8gOwogICAgICAgIC8oXFMrKS8gOwogICAgICAgIGRlbGV0
ZSAkbmFtZXN7JDF9IGlmIGRlZmluZWQgJDEgOwogICAgfQogICAgY2xvc2UgRiA7CgogICAgaWYg
KCBrZXlzICVuYW1lcyApCiAgICB7CiAgICAgICAgbXkgJG1pc3NpbmcgPSBqb2luICgiXG5cdCIs
IHNvcnQga2V5cyAlbmFtZXMpIDsKICAgICAgICBkaWUgIlRoZSBmb2xsb3dpbmcgbmFtZXMgYXJl
IG1pc3NpbmcgZnJvbSBcQEVYUE9SVCBpbiBEQl9GaWxlLnBtXG4iIC4KICAgICAgICAgICAgIlx0
JG1pc3NpbmdcbiIgOwogICAgfQogICAgCgogICAgRXh0VXRpbHM6OkNvbnN0YW50OjpXcml0ZUNv
bnN0YW50cygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUUgPT4gJ0RC
X0ZpbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRVMgPT4gXEBu
YW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENfRklMRSAgPT4gJ2Nv
bnN0YW50cy5oJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhTX0ZJTEUg
ID0+ICdjb25zdGFudHMueHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOwp9IAplbHNlIHsKICAgIHVzZSBGaWxlOjpDb3B5OwogICAgY29weSAo
J2ZhbGxiYWNrLmgnLCAnY29uc3RhbnRzLmgnKQogICAgICBvciBkaWUgIkNhbid0IGNvcHkgZmFs
bGJhY2suaCB0byBjb25zdGFudHMuaDogJCEiOwogICAgY29weSAoJ2ZhbGxiYWNrLnhzJywgJ2Nv
bnN0YW50cy54cycpCiAgICAgIG9yIGRpZSAiQ2FuJ3QgY29weSBmYWxsYmFjay54cyB0byBjb25z

lib/Devel/PatchPerl.pm  view on Meta::CPAN

SUc6ICQhXG4iIDsKICAgIHdoaWxlICg8Rj4pIHsKCXMvXlxzKnxccyokLy9nIDsKCW5leHQgaWYg
L15ccyokLyBvciAvXlxzKiMvIDsKCXMvXHMqI1xzKiQvLyA7CgoJKCRrLCAkdikgPSBzcGxpdCgv
XHMrPVxzKy8sICRfLCAyKSA7CgkkayA9IHVjICRrIDsKCWlmICgkVmFsaWRPcHRpb257JGt9KSB7
CgkgICAgZGVsZXRlICRQYXJzZWR7JGt9IDsKCSAgICAkSW5mb3ska30gPSAkdiA7Cgl9CgllbHNl
IHsKCSAgICBwdXNoKEBiYWRrZXksICRrKSA7Cgl9CiAgICB9CiAgICBjbG9zZSBGIDsKCiAgICBw
cmludCAiVW5rbm93biBrZXlzIGluICRDT05GSUcgaWdub3JlZCBbQGJhZGtleV1cbiIKCWlmIEBi
YWRrZXkgOwoKICAgICMgY2hlY2sgcGFyc2VkIHZhbHVlcwogICAgbXkgQG1pc3NpbmcgPSAoKSA7
CiAgICBkaWUgIlRoZSBmb2xsb3dpbmcga2V5cyBhcmUgbWlzc2luZyBmcm9tICRDT05GSUcgZmls
ZTogW0BtaXNzaW5nXVxuIiAKICAgICAgICBpZiBAbWlzc2luZyA9IGtleXMgJVBhcnNlZCA7Cgog
ICAgJElOQ19ESVIgPSAkRU5WeydEQl9GSUxFX0lOQ0xVREUnfSB8fCAkSW5mb3snSU5DTFVERSd9
IDsKICAgICRMSUJfRElSID0gJEVOVnsnREJfRklMRV9MSUInfSB8fCAkSW5mb3snTElCJ30gOwog
ICAgJERCX05BTUUgPSAkRU5WeydEQl9GSUxFX05BTUUnfSB8fCAkSW5mb3snREJOQU1FJ30gOwog
ICAgJENPTVBBVDE4NSA9ICItRENPTVBBVDE4NSAtRERCX0xJQlJBUllfQ09NUEFUSUJJTElUWV9B
UEkiIAogICAgICAgIGlmIChkZWZpbmVkICRFTlZ7J0RCX0ZJTEVfQ09NUEFUMTg1J30gJiYgCgkJ
JEVOVnsnREJfRklMRV9DT01QQVQxODUnfSA9fiAvXlxzKihvbnx0cnVlfDEpXHMqJC9pKSB8fAoJ
CSRJbmZveydDT01QQVQxODUnfSA9fiAvXlxzKihvbnx0cnVlfDEpXHMqJC9pIDsgCiAgICBteSAk
UFJFRklYICA9ICRJbmZveydQUkVGSVgnfSA7CiAgICBteSAkSEFTSCAgICA9ICRJbmZveydIQVNI
J30gOwoKICAgICRWRVJfSU5GTyA9ICItRG1EQl9QcmVmaXhfdD0ke1BSRUZJWH0gLURtREJfSGFz
aF90PSR7SEFTSH0iIDsKCiAgICBwcmludCA8PEVPTSBpZiAwIDsKICAgIElOQ0xVREUJWyRJTkNf
RElSXQogICAgTElCCQlbJExJQl9ESVJdCiAgICBIQVNICVskSEFTSF0KICAgIFBSRUZJWAlbJFBS
RUZJWF0KICAgIERCTkFNRSAgICAgIFskREJfTkFNRV0KCkVPTQoKICAgIHByaW50ICJMb29rcyBH
b29kLlxuIiA7Cgp9CgpzdWIgVXBEb3duZ3JhZGUKewogICAgbXkgQGZpbGVzID0gQF8gOwoKICAg
ICMgb3VyICAgICAgaXMgc3RhYmxlIGZyb20gNS42LjAgb253YXJkCiAgICAjIHdhcm5pbmdzIGlz
IHN0YWJsZSBmcm9tIDUuNi4xIG9ud2FyZAoKICAgICMgTm90ZTogdGhpcyBjb2RlIGFzc3VtZXMg
dGhhdCBlYWNoIHN0YXRlbWVudCBpdCBtb2RpZmllcyBpcyBub3QKICAgICMgICAgICAgc3BsaXQg
YWNyb3NzIG11bHRpcGxlIGxpbmVzLgoKCiAgICBteSAkd2Fybl9zdWIgOwogICAgbXkgJG91cl9z
dWIgOwoKICAgIGlmICgkXSA8IDUuMDA2MDAxKSB7CiAgICAgICAgIyBGcm9tOiB1c2V8bm8gd2Fy
bmluZ3MgImJsYWgiCiAgICAgICAgIyBUbzogICBsb2NhbCAoJF5XKSA9IDE7ICMgdXNlfG5vIHdh
cm5pbmdzICJibGFoIgogICAgICAgICMKICAgICAgICAjIGFuZAogICAgICAgICMKICAgICAgICAj
IEZyb206IHdhcm5pbmdzOjp3YXJuaWYoeCx5KTsKICAgICAgICAjIFRvOiAgICReVyAmJiBjYXJw
KHkpOyAjIHdhcm5pZiAtLSB4CiAgICAgICAgJHdhcm5fc3ViID0gc3ViIHsKCSAgICBzL14oXHMq
KShub1xzK3dhcm5pbmdzKS8kezF9bG9jYWwgKFwkXlcpID0gMDsgIyQyLyA7CgkgICAgcy9eKFxz
KikodXNlXHMrd2FybmluZ3MpLyR7MX1sb2NhbCAoXCReVykgPSAxOyAjJDIvIDsKCgkgICAgcy9e
KFxzKil3YXJuaW5nczo6d2FybmlmXHMqXCgoLio/KVxzKixccyooLio/KVwpXHMqOy8kezF9XCRe
VyAmJiBjYXJwKCQzKTsgIyB3YXJuaWYgLSAkMi8gOwogICAgICAgICAgfTsKICAgIH0KICAgIGVs
c2UgewogICAgICAgICMgRnJvbTogbG9jYWwgKCReVykgPSAxOyAjIHVzZXxubyB3YXJuaW5ncyAi
YmxhaCIKICAgICAgICAjIFRvOiAgIHVzZXxubyB3YXJuaW5ncyAiYmxhaCIKICAgICAgICAjCiAg
ICAgICAgIyBhbmQKICAgICAgICAjCiAgICAgICAgIyBGcm9tOiAkXlcgJiYgY2FycCh5KTsgIyB3
YXJuaWYgLS0geAogICAgICAgICMgVG86ICAgd2FybmluZ3M6Ondhcm5pZih4LHkpOwogICAgICAg
ICR3YXJuX3N1YiA9IHN1YiB7CgkgICAgcy9eKFxzKilsb2NhbFxzKlwoXCRcXldcKVxzKj1ccypc
ZCtccyo7XHMqI1xzKigobm98dXNlKVxzK3dhcm5pbmdzLiopLyQxJDIvIDsKCSAgICBzL14oXHMq
KVwkXF5XXHMrXCZcJlxzKmNhcnBccypcKCguKj8pXClccyo7XHMqI1xzKndhcm5pZlxzKi1ccyoo
LiopLyR7MX13YXJuaW5nczo6d2FybmlmKCQzLCAkMik7LyA7CiAgICAgICAgICB9OwogICAgfQoK
ICAgIGlmICgkXSA8IDUuMDA2MDAwKSB7CiAgICAgICAgJG91cl9zdWIgPSBzdWIgewoJICAgIGlm
ICggL14oXHMqKW91clxzK1woXHMqKFteKV0rXHMqKVwpLyApIHsKICAgICAgICAgICAgICAgIG15
ICRpbmRlbnQgPSAkMTsKICAgICAgICAgICAgICAgIG15ICR2YXJzID0gam9pbiAnICcsIHNwbGl0
IC9ccyosXHMqLywgJDI7CiAgICAgICAgICAgICAgICAkXyA9ICIke2luZGVudH11c2UgdmFycyBx
dygkdmFycyk7XG4iOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgfQogICAgZWxzZSB7
CiAgICAgICAgJG91cl9zdWIgPSBzdWIgewoJICAgIGlmICggL14oXHMqKXVzZVxzK3ZhcnNccytx
d1woKC4qPylcKS8gKSB7CiAgICAgICAgICAgICAgICBteSAkaW5kZW50ID0gJDE7CiAgICAgICAg
ICAgICAgICBteSAkdmFycyA9IGpvaW4gJywgJywgc3BsaXQgJyAnLCAkMjsKICAgICAgICAgICAg
ICAgICRfID0gIiR7aW5kZW50fW91ciAoJHZhcnMpO1xuIjsKICAgICAgICAgICAgfQogICAgICAg
ICAgfTsKICAgIH0KCiAgICBmb3JlYWNoIChAZmlsZXMpCiAgICAgIHsgZG9VcERvd24oJG91cl9z
dWIsICR3YXJuX3N1YiwgJF8pIH0KfQoKCnN1YiBkb1VwRG93bgp7CiAgICBteSAkb3VyX3N1YiA9
IHNoaWZ0OwogICAgbXkgJHdhcm5fc3ViID0gc2hpZnQ7CgogICAgbG9jYWwgKCReSSkgPSAiLmJh
ayIgOwogICAgbG9jYWwgKEBBUkdWKSA9IHNoaWZ0OwoKICAgIHdoaWxlICg8PikKICAgIHsKCXBy
aW50LCBsYXN0IGlmIC9eX18oRU5EfERBVEEpX18vIDsKCgkmeyAkb3VyX3N1YiB9KCk7CgkmeyAk
d2Fybl9zdWIgfSgpOwoJcHJpbnQgOwogICAgfQoKICAgIHJldHVybiBpZiBlb2YgOwoKICAgIHdo
aWxlICg8PikKICAgICAgeyBwcmludCB9Cn0KCiMgZW5kIG9mIGZpbGUgTWFrZWZpbGUuUEwK
DBFILE003
    chmod $mode, $file if $mode;
  }
  # Create ext/DB_File/config.in
  {
    my $file = File::Spec->catfile('ext','DB_File','config.in');
    _write_b64_or_die($file,<<'DBFILE004');
IyBGaWxlbmFtZToJY29uZmlnLmluCiMKIyB3cml0dGVuIGJ5IFBhdWwgTWFycXVlc3MgPFBhdWwu
TWFycXVlc3NAYnRpbnRlcm5ldC5jb20+CiMgbGFzdCBtb2RpZmllZCA5dGggU2VwdCAxOTk3CiMg
dmVyc2lvbiAxLjU1CgojIDEuIFdoZXJlIGlzIHRoZSBmaWxlIGRiLmg/CiMKIyAgICBDaGFuZ2Ug
dGhlIHBhdGggYmVsb3cgdG8gcG9pbnQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBkYi5oIGlzCiMg
ICAgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLgoKSU5DTFVERQk9IC91c3IvbG9jYWwvQmVya2Vs
ZXlEQi9pbmNsdWRlCiNJTkNMVURFCT0gL3Vzci9sb2NhbC9pbmNsdWRlCiNJTkNMVURFCT0gL3Vz
ci9pbmNsdWRlCgojIDIuIFdoZXJlIGlzIGxpYmRiPwojCiMgICAgQ2hhbmdlIHRoZSBwYXRoIGJl
bG93IHRvIHBvaW50IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgbGliZGIgaXMKIyAgICBpbnN0YWxs
ZWQgb24geW91ciBzeXN0ZW0uCgpMSUIJPSAvdXNyL2xvY2FsL0JlcmtlbGV5REIvbGliCiNMSUIJ
PSAvdXNyL2xvY2FsL2xpYgojTElCCT0gL3Vzci9saWIKCiMgMy4gV2hhdCB2ZXJzaW9uIG9mIEJl
cmtlbHkgREIgaGF2ZSB5b3UgZ290PwojCiMgICAgSWYgeW91IGhhdmUgdmVyc2lvbiAyLjAgb3Ig
Z3JlYXRlciwgeW91IGNhbiBza2lwIHRoaXMgcXVlc3Rpb24uCiMKIyAgICBJZiB5b3UgaGF2ZSBC
ZXJrZWxleSBEQiAxLjc4IG9yIGdyZWF0ZXIgeW91IHNob3VsZG4ndCBoYXZlIHRvCiMgICAgY2hh
bmdlIHRoZSBkZWZpbml0aW9ucyBmb3IgUFJFRklYIGFuZCBIQVNIIGJlbG93LgojCiMgICAgRm9y
IG9sZGVyIHZlcnNpb25zIG9mIEJlcmtlbGV5IERCIGNoYW5nZSBib3RoIFBSRUZJWCBhbmQgSEFT
SCB0byBpbnQuCiMgICAgVmVyc2lvbiAxLjcxLCAxLjcyIGFuZCAxLjczIGFyZSBrbm93biB0byBu
ZWVkIHRoaXMgY2hhbmdlLgojCiMgICAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB2ZXJzaW9uIHlv
dSBoYXZlIGhhdmUgYSBsb29rIGluIHRoZSBmaWxlIGRiLmguIAojCiMgICAgU2VhcmNoIGZvciB0
aGUgc3RyaW5nICJEQl9WRVJTSU9OX01BSk9SIi4gSWYgaXQgaXMgcHJlc2VudCwgeW91CiMgICAg
aGF2ZSBCZXJrZWxleSBEQiB2ZXJzaW9uIDIgKG9yIGdyZWF0ZXIpLgojCiMgICAgSWYgdGhhdCBk
aWRuJ3Qgd29yaywgZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgQlRSRUVJTkZPIHR5cGVkZWYu
CiMgICAgQ2hlY2sgdGhlIHJldHVybiB0eXBlIGZyb20gdGhlIHByZWZpeCBlbGVtZW50LiBJdCBz
aG91bGQgbG9vayBsaWtlCiMgICAgdGhpcyBpbiBhbiBvbGRlciBjb3B5IG9mIGRiLmg6CiMKIyAg
ICAgICAgaW50ICAgICAgKCpwcmVmaXgpICAgICAgX19QKChjb25zdCBEQlQgKiwgY29uc3QgREJU
ICopKTsgIAojCiMgICAgYW5kIGxpa2UgdGhpcyBpbiBhIG1vcmUgcmVjZW50IGNvcHk6CiMKIyAg
ICAgICAgc2l6ZV90ICAoKnByZWZpeCkgICAgICAgLyogcHJlZml4IGZ1bmN0aW9uICovCiMgICAg
ICAgICAgICBfX1AoKGNvbnN0IERCVCAqLCBjb25zdCBEQlQgKikpOwojCiMgICAgQ2hhbmdlIHRo
ZSBkZWZpbml0aW9uIG9mIFBSRUZJWCwgYmVsb3csIHRvIHJlZmxlY3QgdGhlIHJldHVybiB0eXBl
CiMgICAgb2YgdGhlIHByZWZpeCBmdW5jdGlvbiBpbiB5b3VyIGRiLmguCiMKIyAgICBOb3cgZmlu
ZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgSEFTSElORk8gdHlwZWRlZi4gQ2hlY2sgdGhlIHJldHVy
bgojICAgIHR5cGUgb2YgdGhlIGhhc2ggZWxlbWVudC4gT2xkZXIgdmVyc2lvbnMgbG9vayBsaWtl
IHRoaXM6CiMKIyAgICAgICAgaW50ICAgICAgKCpoYXNoKSBfX1AoKGNvbnN0IHZvaWQgKiwgc2l6
ZV90KSk7ICAgICAgCiMKIyAgICBuZXdlciBsaWtlIHRoaXM6CiMKIyAgICAgICAgdV9pbnQzMl90
ICAgICAgICAgICAgICAgLyogaGFzaCBmdW5jdGlvbiAqLwojICAgICAgICAgICAgICAgICgqaGFz
aCkgX19QKChjb25zdCB2b2lkICosIHNpemVfdCkpOwojCiMgICAgQ2hhbmdlIHRoZSBkZWZpbml0
aW9uIG9mIEhBU0gsIGJlbG93LCB0byByZWZsZWN0IHRoZSByZXR1cm4gdHlwZSBvZgojICAgIHRo
ZSBoYXNoIGZ1bmN0aW9uIGluIHlvdXIgZGIuaC4KIwoKUFJFRklYCT0Jc2l6ZV90CkhBU0gJPQl1
X2ludDMyX3QKCiMgNC4gSXMgdGhlIGxpYnJhcnkgY2FsbGVkIGxpYmRiPwojCiMgICAgSWYgeW91
IGhhdmUgY29waWVzIG9mIGJvdGggMS54IGFuZCAyLnggQmVya2VsZXkgREIgaW5zdGFsbGVkIG9u
CiMgICAgeW91ciBzeXN0ZW0gaXQgY2FuIHNvbWV0aW1lcyBiZSB0cmlja3kgdG8gbWFrZSBzdXJl
IHlvdSBhcmUgdXNpbmcKIyAgICB0aGUgY29ycmVjdCBvbmUuIFJlbmFtaW5nIG9uZSAob3IgY3Jl
YXRpbmcgYSBzeW1ib2xpYyBsaW5rKSB0bwojICAgIGluY2x1ZGUgdGhlIHZlcnNpb24gbnVtYmVy
IG9mIHRoZSBsaWJyYXJ5IGNhbiBoZWxwLgojCiMgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZl
IGJvdGggQmVya2VsZXkgREIgMi4zLjEyIGFuZCAxLjg1IG9uIHlvdXIKIyAgICBzeXN0ZW0gYW5k
IHlvdSB3YW50IHRvIHVzZSB0aGUgQmVya2VsZXkgREIgdmVyc2lvbiAyIGxpYnJhcnkgeW91CiMg
ICAgY291bGQgcmVuYW1lIHRoZSB2ZXJzaW9uIDIgbGlicmFyeSBmcm9tIGxpYmRiLmEgdG8gbGli
ZGItMi4zLjEyLmEgYW5kCiMgICAgY2hhbmdlIHRoZSBEQk5BTUUgbGluZSBiZWxvdyB0byBsb29r
IGxpa2UgdGhpczoKIwojICAgICAgICBEQk5BTUUgPSAtbGRiLTIuMy4xMgojCiMgICAgVGhhdCB3
aWxsIGVuc3VyZSB5b3UgYXJlIGxpbmtpbmcgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiB0aGUgREIK
IyAgICBsaWJyYXJ5LgojCiMgICAgTm90ZTogSWYgeW91IGFyZSBidWlsZGluZyB0aGlzIG1vZHVs
ZSB3aXRoIFdpbjMyLCAtbGxpYmRiIHdpbGwgYmUKIyAgICB1c2VkIGJ5IGRlZmF1bHQuCiMKIyAg
ICBJZiB5b3UgaGF2ZSBjaGFuZ2VkIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5LCB1bmNvbW1lbnQg
dGhlIGxpbmUKIyAgICBiZWxvdyAoYnkgcmVtb3ZpbmcgdGhlIGxlYWRpbmcgIykgYW5kIGVkaXQg
dGhlIGxpbmUgdG8gdXNlIHRoZSBuYW1lCiMgICAgeW91IGhhdmUgcGlja2VkLgogCiNEQk5BTUUg
PSAtbGRiLTIuNC4xMAoKIyBlbmQgb2YgZmlsZSBjb25maWcuaW4K

lib/Devel/PatchPerl.pm  view on Meta::CPAN

-				${revision}.${patchlevel}.${subversion} \
-			     -install_name \$(shrpdir)/\$@"
+				${revision}.${patchlevel}.${subversion}"
+		case "$osvers" in
+	        1[5-9]*|[2-9]*)
+			shrpldflags="$shrpldflags -install_name `pwd`/\$@ -Xlinker -headerpad_max_install_names"
+			exeldflags="-Xlinker -headerpad_max_install_names"
+			;;
+		*)
+			shrpldflags="$shrpldflags -install_name \$(shrpdir)/\$@"
+			;;
+		esac
 		;;
 	cygwin*)
 		shrpldflags="$shrpldflags -Wl,--out-implib=libperl.dll.a -Wl,--image-base,0x52000000"
@@ -339,6 +347,14 @@ MANIFEST_SRT = MANIFEST.srt
 
 !GROK!THIS!
 
+case "$useshrplib$osname" in
+truedarwin)
+	$spitshell >>$Makefile <<!GROK!THIS!
+PERL_EXE_LDFLAGS=$exeldflags
+!GROK!THIS!
+	;;
+esac
+
 case "$usecrosscompile$perl" in
 define?*)
 	$spitshell >>$Makefile <<!GROK!THIS!
@@ -1050,6 +1066,20 @@ $(PERL_EXE): $& $(perlmain_dep) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT)
 	$(SHRPENV) $(CC) -o perl $(CLDFLAGS) $(CCDLFLAGS) $(perlmain_objs) $(LLIBPERL) $(static_ext) `cat ext.libs` $(libs)
 !NO!SUBS!
         ;;
+
+	darwin)
+	    case "$useshrplib$osvers" in
+	    true1[5-9]*|true[2-9]*) $spitshell >>$Makefile <<'!NO!SUBS!'
+	$(SHRPENV) $(CC) -o perl $(PERL_EXE_LDFLAGS) $(CLDFLAGS) $(CCDLFLAGS) $(perlmain_objs) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
+!NO!SUBS!
+	       ;;
+	    *) $spitshell >>$Makefile <<'!NO!SUBS!'
+	$(SHRPENV) $(CC) -o perl $(CLDFLAGS) $(CCDLFLAGS) $(perlmain_objs) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
+!NO!SUBS!
+	       ;;
+	    esac
+        ;;
+
         *) $spitshell >>$Makefile <<'!NO!SUBS!'
 	$(SHRPENV) $(CC) -o perl $(CLDFLAGS) $(CCDLFLAGS) $(perlmain_objs) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs)
 !NO!SUBS!
diff --git a/installperl b/installperl
index 3bf79d2d6fc..6cd65a09238 100755
--- installperl
+++ installperl
@@ -304,6 +304,7 @@ elsif ($^O ne 'dos') {
 	safe_unlink("$installbin/$perl_verbase$ver$exe_ext");
 	copy("perl$exe_ext", "$installbin/$perl_verbase$ver$exe_ext");
 	strip("$installbin/$perl_verbase$ver$exe_ext");
+	fix_dep_names("$installbin/$perl_verbase$ver$exe_ext");
 	chmod(0755, "$installbin/$perl_verbase$ver$exe_ext");
     }
     else {
@@ -388,6 +389,7 @@ foreach my $file (@corefiles) {
     if (copy_if_diff($file,"$installarchlib/CORE/$file")) {
 	if ($file =~ /\.(\Q$so\E|\Q$dlext\E)$/) {
 	    strip("-S", "$installarchlib/CORE/$file") if $^O eq 'darwin';
+	    fix_dep_names("$installarchlib/CORE/$file");
 	    chmod($SO_MODE, "$installarchlib/CORE/$file");
 	} else {
 	    chmod($NON_SO_MODE, "$installarchlib/CORE/$file");
@@ -791,4 +793,27 @@ sub strip
     }
 }
 
+sub fix_dep_names {
+    my $file = shift;
+
+    $^O eq "darwin" && $Config{osvers} =~ /^(1[5-9]|[2-9])/
+      && $Config{useshrplib}
+      or return;
+
+    my @opts;
+    my $so = $Config{so};
+    my $libperl = "$Config{archlibexp}/CORE/libperl.$Config{so}";
+    if ($file =~ /\blibperl.\Q$Config{so}\E$/a) {
+        push @opts, -id => $libperl;
+    }
+    else {
+        push @opts, -change => getcwd . "/libperl.$so", $libperl;
+    }
+    push @opts, $file;
+
+    $opts{verbose} and print "  install_name_tool @opts\n";
+    system "install_name_tool", @opts
+      and die "Cannot update $file dependency paths\n";
+}
+
 # ex: set ts=8 sts=4 sw=4 et:
END
}

sub _patch_skip_using_gcc_brace_groups {
  return;
  my $perlver = shift;
  my $num = _norm_ver( $perlver );
  my $name;
  if ($num >= 5.035002) {
    return 1; # OK
  } elsif ($num >= 5.019005) {
    return _patch(<<'EOF');
diff --git perl.h perl.h
index 17a21a1..bd575fe 100644
--- perl.h
+++ perl.h
@@ -733,13 +733,8 @@ Example usage:
  Trying to select a version that gives no warnings...
 */
 #if !(defined(STMT_START) && defined(STMT_END))
-# ifdef PERL_USE_GCC_BRACE_GROUPS
-#   define STMT_START	(void)(	/* gcc supports "({ STATEMENTS; })" */
-#   define STMT_END	)
-# else
 #   define STMT_START	do
 #   define STMT_END	while (0)
-# endif
 #endif
 
 #ifndef BYTEORDER  /* Should never happen -- byteorder is in config.h */
EOF
  } elsif ($num >= 5.019004) {



( run in 1.766 second using v1.01-cache-2.11-cpan-99c4e6809bf )