From a72dd588bfe3d0dcc9e2d8d4f4a775615893e35c Mon Sep 17 00:00:00 2001 From: Peter Martini Date: Wed, 15 Apr 2015 22:12:36 -0400 Subject: [PATCH] Regenerated Dockerfiles/patches --- 5.008.009-64bit,threaded/DevelPatchPerl.patch | 451 +++++++++++++++ 5.008.009-64bit,threaded/Dockerfile | 29 + 5.008.009-64bit/DevelPatchPerl.patch | 451 +++++++++++++++ 5.008.009-64bit/Dockerfile | 29 + 5.010.001-64bit,threaded/DevelPatchPerl.patch | 539 ++++++++++++++++++ 5.010.001-64bit,threaded/Dockerfile | 29 + 5.010.001-64bit/DevelPatchPerl.patch | 539 ++++++++++++++++++ 5.010.001-64bit/Dockerfile | 29 + 5.012.005-64bit,threaded/DevelPatchPerl.patch | 511 +++++++++++++++++ 5.012.005-64bit,threaded/Dockerfile | 29 + 5.012.005-64bit/DevelPatchPerl.patch | 511 +++++++++++++++++ 5.012.005-64bit/Dockerfile | 29 + ...-Cppsym-warnings-for-extra-tokens-pe.patch | 43 -- .../0002-UpdatePatchLevel.patch | 10 - 5.014.004-64bit,threaded/DevelPatchPerl.patch | 296 ++++++++++ 5.014.004-64bit,threaded/Dockerfile | 4 +- ...-Cppsym-warnings-for-extra-tokens-pe.patch | 43 -- 5.014.004-64bit/0002-UpdatePatchLevel.patch | 10 - 5.014.004-64bit/DevelPatchPerl.patch | 296 ++++++++++ 5.014.004-64bit/Dockerfile | 4 +- ...-Cppsym-warnings-for-extra-tokens-pe.patch | 43 -- .../0002-UpdatePatchLevel.patch | 10 - 5.016.003-64bit,threaded/DevelPatchPerl.patch | 266 +++++++++ 5.016.003-64bit,threaded/Dockerfile | 4 +- ...-Cppsym-warnings-for-extra-tokens-pe.patch | 43 -- 5.016.003-64bit/0002-UpdatePatchLevel.patch | 10 - 5.016.003-64bit/DevelPatchPerl.patch | 266 +++++++++ 5.016.003-64bit/Dockerfile | 4 +- 5.018.004-64bit,threaded/DevelPatchPerl.patch | 249 ++++++++ 5.018.004-64bit,threaded/Dockerfile | 2 + 5.018.004-64bit/DevelPatchPerl.patch | 249 ++++++++ 5.018.004-64bit/Dockerfile | 2 + 5.020.002-64bit,threaded/DevelPatchPerl.patch | 62 ++ 5.020.002-64bit,threaded/Dockerfile | 2 + 5.020.002-64bit/DevelPatchPerl.patch | 62 ++ 5.020.002-64bit/Dockerfile | 2 + 36 files changed, 4938 insertions(+), 220 deletions(-) create mode 100644 5.008.009-64bit,threaded/DevelPatchPerl.patch create mode 100644 5.008.009-64bit,threaded/Dockerfile create mode 100644 5.008.009-64bit/DevelPatchPerl.patch create mode 100644 5.008.009-64bit/Dockerfile create mode 100644 5.010.001-64bit,threaded/DevelPatchPerl.patch create mode 100644 5.010.001-64bit,threaded/Dockerfile create mode 100644 5.010.001-64bit/DevelPatchPerl.patch create mode 100644 5.010.001-64bit/Dockerfile create mode 100644 5.012.005-64bit,threaded/DevelPatchPerl.patch create mode 100644 5.012.005-64bit,threaded/Dockerfile create mode 100644 5.012.005-64bit/DevelPatchPerl.patch create mode 100644 5.012.005-64bit/Dockerfile delete mode 100644 5.014.004-64bit,threaded/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch delete mode 100644 5.014.004-64bit,threaded/0002-UpdatePatchLevel.patch create mode 100644 5.014.004-64bit,threaded/DevelPatchPerl.patch delete mode 100644 5.014.004-64bit/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch delete mode 100644 5.014.004-64bit/0002-UpdatePatchLevel.patch create mode 100644 5.014.004-64bit/DevelPatchPerl.patch delete mode 100644 5.016.003-64bit,threaded/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch delete mode 100644 5.016.003-64bit,threaded/0002-UpdatePatchLevel.patch create mode 100644 5.016.003-64bit,threaded/DevelPatchPerl.patch delete mode 100644 5.016.003-64bit/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch delete mode 100644 5.016.003-64bit/0002-UpdatePatchLevel.patch create mode 100644 5.016.003-64bit/DevelPatchPerl.patch create mode 100644 5.018.004-64bit,threaded/DevelPatchPerl.patch create mode 100644 5.018.004-64bit/DevelPatchPerl.patch create mode 100644 5.020.002-64bit,threaded/DevelPatchPerl.patch create mode 100644 5.020.002-64bit/DevelPatchPerl.patch diff --git a/5.008.009-64bit,threaded/DevelPatchPerl.patch b/5.008.009-64bit,threaded/DevelPatchPerl.patch new file mode 100644 index 0000000..2286c62 --- /dev/null +++ b/5.008.009-64bit,threaded/DevelPatchPerl.patch @@ -0,0 +1,451 @@ +From 20ce1131f29bd2cffe77596e79cd3797ba9b14ce Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:07:49 -0400 +Subject: [PATCH] tmp + +--- + hints/linux.sh | 182 +++++++++++++++++++++++++++++++++++++++++++++------------ + hv.c | 26 ++------- + patchlevel.h | 1 + + perl.c | 2 +- + perlio.c | 6 ++ + t/op/hash.t | 20 ++++++- + 6 files changed, 175 insertions(+), 62 deletions(-) + +diff --git a/hints/linux.sh b/hints/linux.sh +index ac264c3..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -13,11 +13,14 @@ + # Updated Thu May 30 10:50:22 EDT 1996 by + + # Updated Fri Jun 21 11:07:54 EDT 1996 +-# NDBM support for ELF renabled by ++# NDBM support for ELF re-enabled by + + # No version of Linux supports setuid scripts. + d_suidsafe='undef' + ++# No version of Linux needs libutil for perl. ++i_libutil='undef' ++ + # Debian and Red Hat, and perhaps other vendors, provide both runtime and + # development packages for some libraries. The runtime packages contain shared + # libraries with version information in their names (e.g., libgdbm.so.1.7.3); +@@ -36,7 +39,7 @@ d_suidsafe='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -54,15 +57,11 @@ set `echo X "$libswanted "| sed -e 's/ bsd / /' -e 's/ net / /' -e 's/ bind / /' + shift + libswanted="$*" + +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++# Debian 4.0 puts ndbm in the -lgdbm_compat library. ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -81,15 +80,23 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++ # record the version, formats: ++ # icc (ICC) 10.1 20080801 ++ # icpc (ICC) 10.1 20080801 ++ # followed by a copyright on the second line ++ ccversion=`${cc:-cc} --version | sed -n -e 's/^icp\?c \((ICC) \)\?//p'` + # This is needed for Configure's prototype checks to work correctly + # The -mp flag is needed to pass various floating point related tests + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -123,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -143,6 +150,77 @@ case "$optimize" in + ;; + esac + ++# Ubuntu 11.04 (and later, presumably) doesn't keep most libraries ++# (such as -lm) in /lib or /usr/lib. So we have to ask gcc to tell us ++# where to look. We don't want gcc's own libraries, however, so we ++# filter those out. ++# This could be conditional on Unbuntu, but other distributions may ++# follow suit, and this scheme seems to work even on rather old gcc's. ++# This unconditionally uses gcc because even if the user is using another ++# compiler, we still need to find the math library and friends, and I don't ++# know how other compilers will cope with that situation. ++# Morever, if the user has their own gcc earlier in $PATH than the system gcc, ++# we don't want its libraries. So we try to prefer the system gcc ++# Still, as an escape hatch, allow Configure command line overrides to ++# plibpth to bypass this check. ++if [ -x /usr/bin/gcc ] ; then ++ gcc=/usr/bin/gcc ++else ++ gcc=gcc ++fi ++ ++case "$plibpth" in ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | ++ cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` ++ set X $plibpth # Collapse all entries on one line ++ shift ++ plibpth="$*" ++ ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -163,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -229,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -296,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -311,24 +389,62 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. + cat > UU/usethreads.cbu <<'EOCBU' + case "$usethreads" in + $define|true|[yY]*) +- ccflags="-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS $ccflags" ++ ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags" + if echo $libswanted | grep -v pthread >/dev/null + then + set `echo X "$libswanted "| sed -e 's/ c / pthread c /'` +@@ -375,16 +491,6 @@ $define|true|[yY]*) + ;; + esac + +-# If we are using g++ we must use nm and force ourselves to use +-# the /usr/lib/libc.a (resetting the libc below to an empty string +-# makes Configure to look for the right one) because the symbol +-# scanning tricks of Configure will crash and burn horribly. +-case "$cc" in +-*g++*) usenm=true +- libc='' +- ;; +-esac +- + # If using g++, the Configure scan for dlopen() and (especially) + # dlerror() might fail, easier just to forcibly hint them in. + case "$cc" in +@@ -408,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/hv.c b/hv.c +index 030db74..0d15a40 100644 +--- a/hv.c ++++ b/hv.c +@@ -31,7 +31,8 @@ holds the key and hash value. + #define PERL_HASH_INTERNAL_ACCESS + #include "perl.h" + +-#define HV_MAX_LENGTH_BEFORE_SPLIT 14 ++#define HV_MAX_LENGTH_BEFORE_REHASH 14 ++#define SHOULD_DO_HSPLIT(xhv) ((xhv)->xhv_keys > (xhv)->xhv_max) /* HvTOTALKEYS(hv) > HvMAX(hv) */ + + STATIC void + S_more_he(pTHX) +@@ -705,23 +706,8 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!counter) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max) { ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { + hsplit(hv); +- } else if(!HvREHASH(hv)) { +- U32 n_links = 1; +- +- while ((counter = HeNEXT(counter))) +- n_links++; +- +- if (n_links > HV_MAX_LENGTH_BEFORE_SPLIT) { +- /* Use only the old HvKEYS(hv) > HvMAX(hv) condition to limit +- bucket splits on a rehashed hash, as we're not going to +- split it again, and if someone is lucky (evil) enough to +- get all the keys in one list they could exhaust our memory +- as we repeatedly double the number of buckets on every +- entry. Linear search feels a less worse thing to do. */ +- hsplit(hv); +- } + } + } + +@@ -1048,7 +1034,7 @@ S_hsplit(pTHX_ HV *hv) + + + /* Pick your policy for "hashing isn't working" here: */ +- if (longest_chain <= HV_MAX_LENGTH_BEFORE_SPLIT /* split worked? */ ++ if (longest_chain <= HV_MAX_LENGTH_BEFORE_REHASH /* split worked? */ + || HvREHASH(hv)) { + return; + } +@@ -1966,8 +1952,8 @@ S_share_hek_flags(pTHX_ const char *str, I32 len, register U32 hash, int flags) + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!next) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max /* HvKEYS(hv) > HvMAX(hv) */) { +- hsplit(PL_strtab); ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { ++ hsplit(PL_strtab); + } + } + +diff --git a/patchlevel.h b/patchlevel.h +index 82f11ed..9d98556 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -121,6 +121,7 @@ hunk. + #if !defined(PERL_PATCHLEVEL_H_IMPLICIT) && !defined(LOCAL_PATCH_COUNT) + static const char *local_patches[] = { + NULL ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +diff --git a/perl.c b/perl.c +index 82e5538..b9e02fe 100644 +--- a/perl.c ++++ b/perl.c +@@ -3758,7 +3758,7 @@ S_open_script(pTHX_ const char *scriptname, bool dosearch, SV *sv, + # ifdef VMS + cpp_discard_flag = ""; + # else +- cpp_discard_flag = "-C"; ++ cpp_discard_flag = "-C -ffreestanding"; + # endif + + # ifdef OS2 +diff --git a/perlio.c b/perlio.c +index 7c5b76a..b54b9b1 100644 +--- a/perlio.c ++++ b/perlio.c +@@ -2323,6 +2323,12 @@ PerlIO_init(pTHX) + { + /* MUTEX_INIT(&PL_perlio_mutex) is done in PERL_SYS_INIT3(). */ + PERL_UNUSED_CONTEXT; ++ /* ++ * No, for backwards compatibility (before PERL_SYS_INIT3 changed to be ++ * defined as a separate function call), we need to call ++ * MUTEX_INIT(&PL_perlio_mutex) (via the PERLIO_INIT macro). ++ */ ++ PERLIO_INIT; + } + + void +diff --git a/t/op/hash.t b/t/op/hash.t +index 9bde518..45eb782 100755 +--- a/t/op/hash.t ++++ b/t/op/hash.t +@@ -39,22 +39,36 @@ use constant THRESHOLD => 14; + use constant START => "a"; + + # some initial hash data +-my %h2 = map {$_ => 1} 'a'..'cc'; ++my %h2; ++my $counter= "a"; ++$h2{$counter++}++ while $counter ne 'cd'; + + ok (!Internals::HvREHASH(%h2), + "starting with pre-populated non-pathological hash (rehash flag if off)"); + + my @keys = get_keys(\%h2); ++my $buckets= buckets(\%h2); + $h2{$_}++ for @keys; ++$h2{$counter++}++ while buckets(\%h2) == $buckets; # force a split + ok (Internals::HvREHASH(%h2), +- scalar(@keys) . " colliding into the same bucket keys are triggering rehash"); ++ scalar(@keys) . " colliding into the same bucket keys are triggering rehash after split"); ++ ++# returns the number of buckets in a hash ++sub buckets { ++ my $hr = shift; ++ my $keys_buckets= scalar(%$hr); ++ if ($keys_buckets=~m!/([0-9]+)\z!) { ++ return 0+$1; ++ } else { ++ return 8; ++ } ++} + + sub get_keys { + my $hr = shift; + + # the minimum of bits required to mount the attack on a hash + my $min_bits = log(THRESHOLD)/log(2); +- + # if the hash has already been populated with a significant amount + # of entries the number of mask bits can be higher + my $keys = scalar keys %$hr; +-- +1.9.1 + diff --git a/5.008.009-64bit,threaded/Dockerfile b/5.008.009-64bit,threaded/Dockerfile new file mode 100644 index 0000000..9154808 --- /dev/null +++ b/5.008.009-64bit,threaded/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps +MAINTAINER Peter Martini + +RUN apt-get update \ + && apt-get install -y curl procps \ + && rm -fr /var/lib/apt/lists/* + +RUN mkdir /usr/src/perl +COPY DevelPatchPerl.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN curl -SL https://cpan.metacpan.org/authors/id/N/NW/NWCLARK/perl-5.8.9.tar.bz2 -o perl-5.8.9.tar.bz2 \ + && echo '19843b5a7585cf35d96c07dbcd419bbdd5813617 *perl-5.8.9.tar.bz2' | sha1sum -c - \ + && tar --strip-components=1 -xjf perl-5.8.9.tar.bz2 -C /usr/src/perl \ + && rm perl-5.8.9.tar.bz2 \ + && cat DevelPatchPerl.patch | patch -p1 + && ./Configure -Dusethreads -Duse64bitall -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO https://raw.githubusercontent.com/miyagawa/cpanminus/master/cpanm \ + && chmod +x cpanm \ + && ./cpanm App::cpanminus \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl + +WORKDIR /root + +CMD ["perl5.8.9","-de0"] diff --git a/5.008.009-64bit/DevelPatchPerl.patch b/5.008.009-64bit/DevelPatchPerl.patch new file mode 100644 index 0000000..2286c62 --- /dev/null +++ b/5.008.009-64bit/DevelPatchPerl.patch @@ -0,0 +1,451 @@ +From 20ce1131f29bd2cffe77596e79cd3797ba9b14ce Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:07:49 -0400 +Subject: [PATCH] tmp + +--- + hints/linux.sh | 182 +++++++++++++++++++++++++++++++++++++++++++++------------ + hv.c | 26 ++------- + patchlevel.h | 1 + + perl.c | 2 +- + perlio.c | 6 ++ + t/op/hash.t | 20 ++++++- + 6 files changed, 175 insertions(+), 62 deletions(-) + +diff --git a/hints/linux.sh b/hints/linux.sh +index ac264c3..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -13,11 +13,14 @@ + # Updated Thu May 30 10:50:22 EDT 1996 by + + # Updated Fri Jun 21 11:07:54 EDT 1996 +-# NDBM support for ELF renabled by ++# NDBM support for ELF re-enabled by + + # No version of Linux supports setuid scripts. + d_suidsafe='undef' + ++# No version of Linux needs libutil for perl. ++i_libutil='undef' ++ + # Debian and Red Hat, and perhaps other vendors, provide both runtime and + # development packages for some libraries. The runtime packages contain shared + # libraries with version information in their names (e.g., libgdbm.so.1.7.3); +@@ -36,7 +39,7 @@ d_suidsafe='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -54,15 +57,11 @@ set `echo X "$libswanted "| sed -e 's/ bsd / /' -e 's/ net / /' -e 's/ bind / /' + shift + libswanted="$*" + +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++# Debian 4.0 puts ndbm in the -lgdbm_compat library. ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -81,15 +80,23 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++ # record the version, formats: ++ # icc (ICC) 10.1 20080801 ++ # icpc (ICC) 10.1 20080801 ++ # followed by a copyright on the second line ++ ccversion=`${cc:-cc} --version | sed -n -e 's/^icp\?c \((ICC) \)\?//p'` + # This is needed for Configure's prototype checks to work correctly + # The -mp flag is needed to pass various floating point related tests + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -123,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -143,6 +150,77 @@ case "$optimize" in + ;; + esac + ++# Ubuntu 11.04 (and later, presumably) doesn't keep most libraries ++# (such as -lm) in /lib or /usr/lib. So we have to ask gcc to tell us ++# where to look. We don't want gcc's own libraries, however, so we ++# filter those out. ++# This could be conditional on Unbuntu, but other distributions may ++# follow suit, and this scheme seems to work even on rather old gcc's. ++# This unconditionally uses gcc because even if the user is using another ++# compiler, we still need to find the math library and friends, and I don't ++# know how other compilers will cope with that situation. ++# Morever, if the user has their own gcc earlier in $PATH than the system gcc, ++# we don't want its libraries. So we try to prefer the system gcc ++# Still, as an escape hatch, allow Configure command line overrides to ++# plibpth to bypass this check. ++if [ -x /usr/bin/gcc ] ; then ++ gcc=/usr/bin/gcc ++else ++ gcc=gcc ++fi ++ ++case "$plibpth" in ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | ++ cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` ++ set X $plibpth # Collapse all entries on one line ++ shift ++ plibpth="$*" ++ ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -163,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -229,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -296,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -311,24 +389,62 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. + cat > UU/usethreads.cbu <<'EOCBU' + case "$usethreads" in + $define|true|[yY]*) +- ccflags="-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS $ccflags" ++ ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags" + if echo $libswanted | grep -v pthread >/dev/null + then + set `echo X "$libswanted "| sed -e 's/ c / pthread c /'` +@@ -375,16 +491,6 @@ $define|true|[yY]*) + ;; + esac + +-# If we are using g++ we must use nm and force ourselves to use +-# the /usr/lib/libc.a (resetting the libc below to an empty string +-# makes Configure to look for the right one) because the symbol +-# scanning tricks of Configure will crash and burn horribly. +-case "$cc" in +-*g++*) usenm=true +- libc='' +- ;; +-esac +- + # If using g++, the Configure scan for dlopen() and (especially) + # dlerror() might fail, easier just to forcibly hint them in. + case "$cc" in +@@ -408,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/hv.c b/hv.c +index 030db74..0d15a40 100644 +--- a/hv.c ++++ b/hv.c +@@ -31,7 +31,8 @@ holds the key and hash value. + #define PERL_HASH_INTERNAL_ACCESS + #include "perl.h" + +-#define HV_MAX_LENGTH_BEFORE_SPLIT 14 ++#define HV_MAX_LENGTH_BEFORE_REHASH 14 ++#define SHOULD_DO_HSPLIT(xhv) ((xhv)->xhv_keys > (xhv)->xhv_max) /* HvTOTALKEYS(hv) > HvMAX(hv) */ + + STATIC void + S_more_he(pTHX) +@@ -705,23 +706,8 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!counter) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max) { ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { + hsplit(hv); +- } else if(!HvREHASH(hv)) { +- U32 n_links = 1; +- +- while ((counter = HeNEXT(counter))) +- n_links++; +- +- if (n_links > HV_MAX_LENGTH_BEFORE_SPLIT) { +- /* Use only the old HvKEYS(hv) > HvMAX(hv) condition to limit +- bucket splits on a rehashed hash, as we're not going to +- split it again, and if someone is lucky (evil) enough to +- get all the keys in one list they could exhaust our memory +- as we repeatedly double the number of buckets on every +- entry. Linear search feels a less worse thing to do. */ +- hsplit(hv); +- } + } + } + +@@ -1048,7 +1034,7 @@ S_hsplit(pTHX_ HV *hv) + + + /* Pick your policy for "hashing isn't working" here: */ +- if (longest_chain <= HV_MAX_LENGTH_BEFORE_SPLIT /* split worked? */ ++ if (longest_chain <= HV_MAX_LENGTH_BEFORE_REHASH /* split worked? */ + || HvREHASH(hv)) { + return; + } +@@ -1966,8 +1952,8 @@ S_share_hek_flags(pTHX_ const char *str, I32 len, register U32 hash, int flags) + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!next) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max /* HvKEYS(hv) > HvMAX(hv) */) { +- hsplit(PL_strtab); ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { ++ hsplit(PL_strtab); + } + } + +diff --git a/patchlevel.h b/patchlevel.h +index 82f11ed..9d98556 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -121,6 +121,7 @@ hunk. + #if !defined(PERL_PATCHLEVEL_H_IMPLICIT) && !defined(LOCAL_PATCH_COUNT) + static const char *local_patches[] = { + NULL ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +diff --git a/perl.c b/perl.c +index 82e5538..b9e02fe 100644 +--- a/perl.c ++++ b/perl.c +@@ -3758,7 +3758,7 @@ S_open_script(pTHX_ const char *scriptname, bool dosearch, SV *sv, + # ifdef VMS + cpp_discard_flag = ""; + # else +- cpp_discard_flag = "-C"; ++ cpp_discard_flag = "-C -ffreestanding"; + # endif + + # ifdef OS2 +diff --git a/perlio.c b/perlio.c +index 7c5b76a..b54b9b1 100644 +--- a/perlio.c ++++ b/perlio.c +@@ -2323,6 +2323,12 @@ PerlIO_init(pTHX) + { + /* MUTEX_INIT(&PL_perlio_mutex) is done in PERL_SYS_INIT3(). */ + PERL_UNUSED_CONTEXT; ++ /* ++ * No, for backwards compatibility (before PERL_SYS_INIT3 changed to be ++ * defined as a separate function call), we need to call ++ * MUTEX_INIT(&PL_perlio_mutex) (via the PERLIO_INIT macro). ++ */ ++ PERLIO_INIT; + } + + void +diff --git a/t/op/hash.t b/t/op/hash.t +index 9bde518..45eb782 100755 +--- a/t/op/hash.t ++++ b/t/op/hash.t +@@ -39,22 +39,36 @@ use constant THRESHOLD => 14; + use constant START => "a"; + + # some initial hash data +-my %h2 = map {$_ => 1} 'a'..'cc'; ++my %h2; ++my $counter= "a"; ++$h2{$counter++}++ while $counter ne 'cd'; + + ok (!Internals::HvREHASH(%h2), + "starting with pre-populated non-pathological hash (rehash flag if off)"); + + my @keys = get_keys(\%h2); ++my $buckets= buckets(\%h2); + $h2{$_}++ for @keys; ++$h2{$counter++}++ while buckets(\%h2) == $buckets; # force a split + ok (Internals::HvREHASH(%h2), +- scalar(@keys) . " colliding into the same bucket keys are triggering rehash"); ++ scalar(@keys) . " colliding into the same bucket keys are triggering rehash after split"); ++ ++# returns the number of buckets in a hash ++sub buckets { ++ my $hr = shift; ++ my $keys_buckets= scalar(%$hr); ++ if ($keys_buckets=~m!/([0-9]+)\z!) { ++ return 0+$1; ++ } else { ++ return 8; ++ } ++} + + sub get_keys { + my $hr = shift; + + # the minimum of bits required to mount the attack on a hash + my $min_bits = log(THRESHOLD)/log(2); +- + # if the hash has already been populated with a significant amount + # of entries the number of mask bits can be higher + my $keys = scalar keys %$hr; +-- +1.9.1 + diff --git a/5.008.009-64bit/Dockerfile b/5.008.009-64bit/Dockerfile new file mode 100644 index 0000000..cc0e95f --- /dev/null +++ b/5.008.009-64bit/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps +MAINTAINER Peter Martini + +RUN apt-get update \ + && apt-get install -y curl procps \ + && rm -fr /var/lib/apt/lists/* + +RUN mkdir /usr/src/perl +COPY DevelPatchPerl.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN curl -SL https://cpan.metacpan.org/authors/id/N/NW/NWCLARK/perl-5.8.9.tar.bz2 -o perl-5.8.9.tar.bz2 \ + && echo '19843b5a7585cf35d96c07dbcd419bbdd5813617 *perl-5.8.9.tar.bz2' | sha1sum -c - \ + && tar --strip-components=1 -xjf perl-5.8.9.tar.bz2 -C /usr/src/perl \ + && rm perl-5.8.9.tar.bz2 \ + && cat DevelPatchPerl.patch | patch -p1 + && ./Configure -Duse64bitall -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO https://raw.githubusercontent.com/miyagawa/cpanminus/master/cpanm \ + && chmod +x cpanm \ + && ./cpanm App::cpanminus \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl + +WORKDIR /root + +CMD ["perl5.8.9","-de0"] diff --git a/5.010.001-64bit,threaded/DevelPatchPerl.patch b/5.010.001-64bit,threaded/DevelPatchPerl.patch new file mode 100644 index 0000000..b05cfd0 --- /dev/null +++ b/5.010.001-64bit,threaded/DevelPatchPerl.patch @@ -0,0 +1,539 @@ +From eb70eb56c3e93627fb7b26f83e3b8e691a50aea9 Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:07:53 -0400 +Subject: [PATCH] tmp + +--- + ext/Hash-Util-FieldHash/t/10_hash.t | 18 +++- + ext/ODBM_File/hints/linux.pl | 6 +- + hints/linux.sh | 189 +++++++++++++++++++++++++++--------- + hv.c | 26 ++--- + lib/Archive/Tar/t/02_methods.t | 14 +++ + make_ext.pl | 4 + + patchlevel.h | 1 + + perl.c | 2 +- + t/op/hash.t | 20 +++- + 9 files changed, 205 insertions(+), 75 deletions(-) + mode change 100755 => 100644 t/op/hash.t + +diff --git a/ext/Hash-Util-FieldHash/t/10_hash.t b/ext/Hash-Util-FieldHash/t/10_hash.t +index 29c2f4d..c266b6a 100755 +--- a/ext/Hash-Util-FieldHash/t/10_hash.t ++++ b/ext/Hash-Util-FieldHash/t/10_hash.t +@@ -46,15 +46,29 @@ use constant START => "a"; + + # some initial hash data + fieldhash my %h2; +-%h2 = map {$_ => 1} 'a'..'cc'; ++my $counter= "a"; ++$h2{$counter++}++ while $counter ne 'cd'; + + ok (!Internals::HvREHASH(%h2), + "starting with pre-populated non-pathological hash (rehash flag if off)"); + + my @keys = get_keys(\%h2); ++my $buckets= buckets(\%h2); + $h2{$_}++ for @keys; ++$h2{$counter++}++ while buckets(\%h2) == $buckets; # force a split + ok (Internals::HvREHASH(%h2), +- scalar(@keys) . " colliding into the same bucket keys are triggering rehash"); ++ scalar(@keys) . " colliding into the same bucket keys are triggering rehash after split"); ++ ++# returns the number of buckets in a hash ++sub buckets { ++ my $hr = shift; ++ my $keys_buckets= scalar(%$hr); ++ if ($keys_buckets=~m!/([0-9]+)\z!) { ++ return 0+$1; ++ } else { ++ return 8; ++ } ++} + + sub get_keys { + my $hr = shift; +diff --git a/ext/ODBM_File/hints/linux.pl b/ext/ODBM_File/hints/linux.pl +index f8ca492..204bba0 100644 +--- a/ext/ODBM_File/hints/linux.pl ++++ b/ext/ODBM_File/hints/linux.pl +@@ -1,8 +1,8 @@ + # uses GDBM dbm compatibility feature - at least on SuSE 8.0 + $self->{LIBS} = ['-lgdbm']; + +-# Debian/Ubuntu have /usr/lib/libgdbm_compat.so.3* but not this file, ++# Debian/Ubuntu have libgdbm_compat.so but not this file, + # so linking may fail +-if (-e '/usr/lib/libgdbm_compat.so' or -e '/usr/lib64/libgdbm_compat.so') { +- $self->{LIBS}->[0] .= ' -lgdbm_compat'; ++foreach (split / /, $Config{libpth}) { ++ $self->{LIBS}->[0] .= ' -lgdbm_compat' if -e $_.'/libgdbm_compat.so'; + } +diff --git a/hints/linux.sh b/hints/linux.sh +index c88f157..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -13,11 +13,14 @@ + # Updated Thu May 30 10:50:22 EDT 1996 by + + # Updated Fri Jun 21 11:07:54 EDT 1996 +-# NDBM support for ELF renabled by ++# NDBM support for ELF re-enabled by + + # No version of Linux supports setuid scripts. + d_suidsafe='undef' + ++# No version of Linux needs libutil for perl. ++i_libutil='undef' ++ + # Debian and Red Hat, and perhaps other vendors, provide both runtime and + # development packages for some libraries. The runtime packages contain shared + # libraries with version information in their names (e.g., libgdbm.so.1.7.3); +@@ -36,7 +39,7 @@ d_suidsafe='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -55,17 +58,10 @@ shift + libswanted="$*" + + # Debian 4.0 puts ndbm in the -lgdbm_compat library. +-libswanted="$libswanted gdbm_compat" +- +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -84,15 +80,23 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++ # record the version, formats: ++ # icc (ICC) 10.1 20080801 ++ # icpc (ICC) 10.1 20080801 ++ # followed by a copyright on the second line ++ ccversion=`${cc:-cc} --version | sed -n -e 's/^icp\?c \((ICC) \)\?//p'` + # This is needed for Configure's prototype checks to work correctly + # The -mp flag is needed to pass various floating point related tests + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -126,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -146,6 +150,77 @@ case "$optimize" in + ;; + esac + ++# Ubuntu 11.04 (and later, presumably) doesn't keep most libraries ++# (such as -lm) in /lib or /usr/lib. So we have to ask gcc to tell us ++# where to look. We don't want gcc's own libraries, however, so we ++# filter those out. ++# This could be conditional on Unbuntu, but other distributions may ++# follow suit, and this scheme seems to work even on rather old gcc's. ++# This unconditionally uses gcc because even if the user is using another ++# compiler, we still need to find the math library and friends, and I don't ++# know how other compilers will cope with that situation. ++# Morever, if the user has their own gcc earlier in $PATH than the system gcc, ++# we don't want its libraries. So we try to prefer the system gcc ++# Still, as an escape hatch, allow Configure command line overrides to ++# plibpth to bypass this check. ++if [ -x /usr/bin/gcc ] ; then ++ gcc=/usr/bin/gcc ++else ++ gcc=gcc ++fi ++ ++case "$plibpth" in ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | ++ cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` ++ set X $plibpth # Collapse all entries on one line ++ shift ++ plibpth="$*" ++ ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -166,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -232,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -299,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -314,30 +389,62 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. + cat > UU/usethreads.cbu <<'EOCBU' +-if getconf GNU_LIBPTHREAD_VERSION | grep NPTL >/dev/null 2>/dev/null +-then +- threadshavepids="" +-else +- threadshavepids="-DTHREADS_HAVE_PIDS" +-fi + case "$usethreads" in + $define|true|[yY]*) +- ccflags="-D_REENTRANT -D_GNU_SOURCE $threadshavepids $ccflags" ++ ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags" + if echo $libswanted | grep -v pthread >/dev/null + then + set `echo X "$libswanted "| sed -e 's/ c / pthread c /'` +@@ -384,16 +491,6 @@ $define|true|[yY]*) + ;; + esac + +-# If we are using g++ we must use nm and force ourselves to use +-# the /usr/lib/libc.a (resetting the libc below to an empty string +-# makes Configure to look for the right one) because the symbol +-# scanning tricks of Configure will crash and burn horribly. +-case "$cc" in +-*g++*) usenm=true +- libc='' +- ;; +-esac +- + # If using g++, the Configure scan for dlopen() and (especially) + # dlerror() might fail, easier just to forcibly hint them in. + case "$cc" in +@@ -417,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/hv.c b/hv.c +index 5d0f2f8..6bfedd5 100644 +--- a/hv.c ++++ b/hv.c +@@ -35,7 +35,8 @@ holds the key and hash value. + #define PERL_HASH_INTERNAL_ACCESS + #include "perl.h" + +-#define HV_MAX_LENGTH_BEFORE_SPLIT 14 ++#define HV_MAX_LENGTH_BEFORE_REHASH 14 ++#define SHOULD_DO_HSPLIT(xhv) ((xhv)->xhv_keys > (xhv)->xhv_max) /* HvTOTALKEYS(hv) > HvMAX(hv) */ + + static const char S_strtab_error[] + = "Cannot modify shared string table in hv_%s"; +@@ -818,23 +819,8 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!counter) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max) { ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { + hsplit(hv); +- } else if(!HvREHASH(hv)) { +- U32 n_links = 1; +- +- while ((counter = HeNEXT(counter))) +- n_links++; +- +- if (n_links > HV_MAX_LENGTH_BEFORE_SPLIT) { +- /* Use only the old HvKEYS(hv) > HvMAX(hv) condition to limit +- bucket splits on a rehashed hash, as we're not going to +- split it again, and if someone is lucky (evil) enough to +- get all the keys in one list they could exhaust our memory +- as we repeatedly double the number of buckets on every +- entry. Linear search feels a less worse thing to do. */ +- hsplit(hv); +- } + } + } + +@@ -1180,7 +1166,7 @@ S_hsplit(pTHX_ HV *hv) + + + /* Pick your policy for "hashing isn't working" here: */ +- if (longest_chain <= HV_MAX_LENGTH_BEFORE_SPLIT /* split worked? */ ++ if (longest_chain <= HV_MAX_LENGTH_BEFORE_REHASH /* split worked? */ + || HvREHASH(hv)) { + return; + } +@@ -2506,8 +2492,8 @@ S_share_hek_flags(pTHX_ const char *str, I32 len, register U32 hash, int flags) + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!next) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max /* HvKEYS(hv) > HvMAX(hv) */) { +- hsplit(PL_strtab); ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { ++ hsplit(PL_strtab); + } + } + +diff --git a/lib/Archive/Tar/t/02_methods.t b/lib/Archive/Tar/t/02_methods.t +index e400dda..e25e31a 100755 +--- a/lib/Archive/Tar/t/02_methods.t ++++ b/lib/Archive/Tar/t/02_methods.t +@@ -70,6 +70,20 @@ my $LONG_FILE = qq[directory/really-really-really-really-really-really-really-re + my $TOO_LONG = ($^O eq 'MSWin32' or $^O eq 'cygwin' or $^O eq 'VMS') + && length( cwd(). $LONG_FILE ) > 247; + ++if(!$TOO_LONG) { ++ my $alt = File::Spec->catfile( cwd(), $LONG_FILE); ++ eval 'mkpath([$alt]);'; ++ if($@) ++ { ++ $TOO_LONG = 1; ++ } ++ else ++ { ++ $@ = ''; ++ my $base = File::Spec->catfile( cwd(), 'directory'); ++ rmtree $base; ++ } ++} + ### warn if we are going to skip long file names + if ($TOO_LONG) { + diag("No long filename support - long filename extraction disabled") if ! $ENV{PERL_CORE}; +diff --git a/make_ext.pl b/make_ext.pl +index 22a97eb..6eac035 100644 +--- a/make_ext.pl ++++ b/make_ext.pl +@@ -274,6 +274,10 @@ WriteMakefile( + EOM + close $fh or die "Can't close Makefile.PL: $!"; + } ++ eval { ++ my $ftime = time - 4; ++ utime $ftime, $ftime, 'Makefile.PL'; ++ }; + print "\nRunning Makefile.PL in $ext_dir\n"; + + # Presumably this can be simplified +diff --git a/patchlevel.h b/patchlevel.h +index 4442407..5169551 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -131,6 +131,7 @@ static const char * const local_patches[] = { + NULL + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ + PERL_GIT_UNCOMMITTED_CHANGES /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +diff --git a/perl.c b/perl.c +index 94f2b13..5f30040 100644 +--- a/perl.c ++++ b/perl.c +@@ -3745,7 +3745,7 @@ S_open_script(pTHX_ const char *scriptname, bool dosearch, SV *sv, + # ifdef VMS + cpp_discard_flag = ""; + # else +- cpp_discard_flag = "-C"; ++ cpp_discard_flag = "-C -ffreestanding"; + # endif + + # ifdef OS2 +diff --git a/t/op/hash.t b/t/op/hash.t +old mode 100755 +new mode 100644 +index 9bde518..45eb782 +--- a/t/op/hash.t ++++ b/t/op/hash.t +@@ -39,22 +39,36 @@ use constant THRESHOLD => 14; + use constant START => "a"; + + # some initial hash data +-my %h2 = map {$_ => 1} 'a'..'cc'; ++my %h2; ++my $counter= "a"; ++$h2{$counter++}++ while $counter ne 'cd'; + + ok (!Internals::HvREHASH(%h2), + "starting with pre-populated non-pathological hash (rehash flag if off)"); + + my @keys = get_keys(\%h2); ++my $buckets= buckets(\%h2); + $h2{$_}++ for @keys; ++$h2{$counter++}++ while buckets(\%h2) == $buckets; # force a split + ok (Internals::HvREHASH(%h2), +- scalar(@keys) . " colliding into the same bucket keys are triggering rehash"); ++ scalar(@keys) . " colliding into the same bucket keys are triggering rehash after split"); ++ ++# returns the number of buckets in a hash ++sub buckets { ++ my $hr = shift; ++ my $keys_buckets= scalar(%$hr); ++ if ($keys_buckets=~m!/([0-9]+)\z!) { ++ return 0+$1; ++ } else { ++ return 8; ++ } ++} + + sub get_keys { + my $hr = shift; + + # the minimum of bits required to mount the attack on a hash + my $min_bits = log(THRESHOLD)/log(2); +- + # if the hash has already been populated with a significant amount + # of entries the number of mask bits can be higher + my $keys = scalar keys %$hr; +-- +1.9.1 + diff --git a/5.010.001-64bit,threaded/Dockerfile b/5.010.001-64bit,threaded/Dockerfile new file mode 100644 index 0000000..d97a525 --- /dev/null +++ b/5.010.001-64bit,threaded/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps +MAINTAINER Peter Martini + +RUN apt-get update \ + && apt-get install -y curl procps \ + && rm -fr /var/lib/apt/lists/* + +RUN mkdir /usr/src/perl +COPY DevelPatchPerl.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN curl -SL https://cpan.metacpan.org/authors/id/D/DA/DAPM/perl-5.10.1.tar.bz2 -o perl-5.10.1.tar.bz2 \ + && echo '98b762b5cd4fb76dd354dfa5ba0d21bc2acacaf2 *perl-5.10.1.tar.bz2' | sha1sum -c - \ + && tar --strip-components=1 -xjf perl-5.10.1.tar.bz2 -C /usr/src/perl \ + && rm perl-5.10.1.tar.bz2 \ + && cat DevelPatchPerl.patch | patch -p1 + && ./Configure -Dusethreads -Duse64bitall -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO https://raw.githubusercontent.com/miyagawa/cpanminus/master/cpanm \ + && chmod +x cpanm \ + && ./cpanm App::cpanminus \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl + +WORKDIR /root + +CMD ["perl5.10.1","-de0"] diff --git a/5.010.001-64bit/DevelPatchPerl.patch b/5.010.001-64bit/DevelPatchPerl.patch new file mode 100644 index 0000000..b05cfd0 --- /dev/null +++ b/5.010.001-64bit/DevelPatchPerl.patch @@ -0,0 +1,539 @@ +From eb70eb56c3e93627fb7b26f83e3b8e691a50aea9 Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:07:53 -0400 +Subject: [PATCH] tmp + +--- + ext/Hash-Util-FieldHash/t/10_hash.t | 18 +++- + ext/ODBM_File/hints/linux.pl | 6 +- + hints/linux.sh | 189 +++++++++++++++++++++++++++--------- + hv.c | 26 ++--- + lib/Archive/Tar/t/02_methods.t | 14 +++ + make_ext.pl | 4 + + patchlevel.h | 1 + + perl.c | 2 +- + t/op/hash.t | 20 +++- + 9 files changed, 205 insertions(+), 75 deletions(-) + mode change 100755 => 100644 t/op/hash.t + +diff --git a/ext/Hash-Util-FieldHash/t/10_hash.t b/ext/Hash-Util-FieldHash/t/10_hash.t +index 29c2f4d..c266b6a 100755 +--- a/ext/Hash-Util-FieldHash/t/10_hash.t ++++ b/ext/Hash-Util-FieldHash/t/10_hash.t +@@ -46,15 +46,29 @@ use constant START => "a"; + + # some initial hash data + fieldhash my %h2; +-%h2 = map {$_ => 1} 'a'..'cc'; ++my $counter= "a"; ++$h2{$counter++}++ while $counter ne 'cd'; + + ok (!Internals::HvREHASH(%h2), + "starting with pre-populated non-pathological hash (rehash flag if off)"); + + my @keys = get_keys(\%h2); ++my $buckets= buckets(\%h2); + $h2{$_}++ for @keys; ++$h2{$counter++}++ while buckets(\%h2) == $buckets; # force a split + ok (Internals::HvREHASH(%h2), +- scalar(@keys) . " colliding into the same bucket keys are triggering rehash"); ++ scalar(@keys) . " colliding into the same bucket keys are triggering rehash after split"); ++ ++# returns the number of buckets in a hash ++sub buckets { ++ my $hr = shift; ++ my $keys_buckets= scalar(%$hr); ++ if ($keys_buckets=~m!/([0-9]+)\z!) { ++ return 0+$1; ++ } else { ++ return 8; ++ } ++} + + sub get_keys { + my $hr = shift; +diff --git a/ext/ODBM_File/hints/linux.pl b/ext/ODBM_File/hints/linux.pl +index f8ca492..204bba0 100644 +--- a/ext/ODBM_File/hints/linux.pl ++++ b/ext/ODBM_File/hints/linux.pl +@@ -1,8 +1,8 @@ + # uses GDBM dbm compatibility feature - at least on SuSE 8.0 + $self->{LIBS} = ['-lgdbm']; + +-# Debian/Ubuntu have /usr/lib/libgdbm_compat.so.3* but not this file, ++# Debian/Ubuntu have libgdbm_compat.so but not this file, + # so linking may fail +-if (-e '/usr/lib/libgdbm_compat.so' or -e '/usr/lib64/libgdbm_compat.so') { +- $self->{LIBS}->[0] .= ' -lgdbm_compat'; ++foreach (split / /, $Config{libpth}) { ++ $self->{LIBS}->[0] .= ' -lgdbm_compat' if -e $_.'/libgdbm_compat.so'; + } +diff --git a/hints/linux.sh b/hints/linux.sh +index c88f157..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -13,11 +13,14 @@ + # Updated Thu May 30 10:50:22 EDT 1996 by + + # Updated Fri Jun 21 11:07:54 EDT 1996 +-# NDBM support for ELF renabled by ++# NDBM support for ELF re-enabled by + + # No version of Linux supports setuid scripts. + d_suidsafe='undef' + ++# No version of Linux needs libutil for perl. ++i_libutil='undef' ++ + # Debian and Red Hat, and perhaps other vendors, provide both runtime and + # development packages for some libraries. The runtime packages contain shared + # libraries with version information in their names (e.g., libgdbm.so.1.7.3); +@@ -36,7 +39,7 @@ d_suidsafe='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -55,17 +58,10 @@ shift + libswanted="$*" + + # Debian 4.0 puts ndbm in the -lgdbm_compat library. +-libswanted="$libswanted gdbm_compat" +- +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -84,15 +80,23 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++ # record the version, formats: ++ # icc (ICC) 10.1 20080801 ++ # icpc (ICC) 10.1 20080801 ++ # followed by a copyright on the second line ++ ccversion=`${cc:-cc} --version | sed -n -e 's/^icp\?c \((ICC) \)\?//p'` + # This is needed for Configure's prototype checks to work correctly + # The -mp flag is needed to pass various floating point related tests + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -126,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -146,6 +150,77 @@ case "$optimize" in + ;; + esac + ++# Ubuntu 11.04 (and later, presumably) doesn't keep most libraries ++# (such as -lm) in /lib or /usr/lib. So we have to ask gcc to tell us ++# where to look. We don't want gcc's own libraries, however, so we ++# filter those out. ++# This could be conditional on Unbuntu, but other distributions may ++# follow suit, and this scheme seems to work even on rather old gcc's. ++# This unconditionally uses gcc because even if the user is using another ++# compiler, we still need to find the math library and friends, and I don't ++# know how other compilers will cope with that situation. ++# Morever, if the user has their own gcc earlier in $PATH than the system gcc, ++# we don't want its libraries. So we try to prefer the system gcc ++# Still, as an escape hatch, allow Configure command line overrides to ++# plibpth to bypass this check. ++if [ -x /usr/bin/gcc ] ; then ++ gcc=/usr/bin/gcc ++else ++ gcc=gcc ++fi ++ ++case "$plibpth" in ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | ++ cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` ++ set X $plibpth # Collapse all entries on one line ++ shift ++ plibpth="$*" ++ ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -166,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -232,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -299,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -314,30 +389,62 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. + cat > UU/usethreads.cbu <<'EOCBU' +-if getconf GNU_LIBPTHREAD_VERSION | grep NPTL >/dev/null 2>/dev/null +-then +- threadshavepids="" +-else +- threadshavepids="-DTHREADS_HAVE_PIDS" +-fi + case "$usethreads" in + $define|true|[yY]*) +- ccflags="-D_REENTRANT -D_GNU_SOURCE $threadshavepids $ccflags" ++ ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags" + if echo $libswanted | grep -v pthread >/dev/null + then + set `echo X "$libswanted "| sed -e 's/ c / pthread c /'` +@@ -384,16 +491,6 @@ $define|true|[yY]*) + ;; + esac + +-# If we are using g++ we must use nm and force ourselves to use +-# the /usr/lib/libc.a (resetting the libc below to an empty string +-# makes Configure to look for the right one) because the symbol +-# scanning tricks of Configure will crash and burn horribly. +-case "$cc" in +-*g++*) usenm=true +- libc='' +- ;; +-esac +- + # If using g++, the Configure scan for dlopen() and (especially) + # dlerror() might fail, easier just to forcibly hint them in. + case "$cc" in +@@ -417,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/hv.c b/hv.c +index 5d0f2f8..6bfedd5 100644 +--- a/hv.c ++++ b/hv.c +@@ -35,7 +35,8 @@ holds the key and hash value. + #define PERL_HASH_INTERNAL_ACCESS + #include "perl.h" + +-#define HV_MAX_LENGTH_BEFORE_SPLIT 14 ++#define HV_MAX_LENGTH_BEFORE_REHASH 14 ++#define SHOULD_DO_HSPLIT(xhv) ((xhv)->xhv_keys > (xhv)->xhv_max) /* HvTOTALKEYS(hv) > HvMAX(hv) */ + + static const char S_strtab_error[] + = "Cannot modify shared string table in hv_%s"; +@@ -818,23 +819,8 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!counter) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max) { ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { + hsplit(hv); +- } else if(!HvREHASH(hv)) { +- U32 n_links = 1; +- +- while ((counter = HeNEXT(counter))) +- n_links++; +- +- if (n_links > HV_MAX_LENGTH_BEFORE_SPLIT) { +- /* Use only the old HvKEYS(hv) > HvMAX(hv) condition to limit +- bucket splits on a rehashed hash, as we're not going to +- split it again, and if someone is lucky (evil) enough to +- get all the keys in one list they could exhaust our memory +- as we repeatedly double the number of buckets on every +- entry. Linear search feels a less worse thing to do. */ +- hsplit(hv); +- } + } + } + +@@ -1180,7 +1166,7 @@ S_hsplit(pTHX_ HV *hv) + + + /* Pick your policy for "hashing isn't working" here: */ +- if (longest_chain <= HV_MAX_LENGTH_BEFORE_SPLIT /* split worked? */ ++ if (longest_chain <= HV_MAX_LENGTH_BEFORE_REHASH /* split worked? */ + || HvREHASH(hv)) { + return; + } +@@ -2506,8 +2492,8 @@ S_share_hek_flags(pTHX_ const char *str, I32 len, register U32 hash, int flags) + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!next) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max /* HvKEYS(hv) > HvMAX(hv) */) { +- hsplit(PL_strtab); ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { ++ hsplit(PL_strtab); + } + } + +diff --git a/lib/Archive/Tar/t/02_methods.t b/lib/Archive/Tar/t/02_methods.t +index e400dda..e25e31a 100755 +--- a/lib/Archive/Tar/t/02_methods.t ++++ b/lib/Archive/Tar/t/02_methods.t +@@ -70,6 +70,20 @@ my $LONG_FILE = qq[directory/really-really-really-really-really-really-really-re + my $TOO_LONG = ($^O eq 'MSWin32' or $^O eq 'cygwin' or $^O eq 'VMS') + && length( cwd(). $LONG_FILE ) > 247; + ++if(!$TOO_LONG) { ++ my $alt = File::Spec->catfile( cwd(), $LONG_FILE); ++ eval 'mkpath([$alt]);'; ++ if($@) ++ { ++ $TOO_LONG = 1; ++ } ++ else ++ { ++ $@ = ''; ++ my $base = File::Spec->catfile( cwd(), 'directory'); ++ rmtree $base; ++ } ++} + ### warn if we are going to skip long file names + if ($TOO_LONG) { + diag("No long filename support - long filename extraction disabled") if ! $ENV{PERL_CORE}; +diff --git a/make_ext.pl b/make_ext.pl +index 22a97eb..6eac035 100644 +--- a/make_ext.pl ++++ b/make_ext.pl +@@ -274,6 +274,10 @@ WriteMakefile( + EOM + close $fh or die "Can't close Makefile.PL: $!"; + } ++ eval { ++ my $ftime = time - 4; ++ utime $ftime, $ftime, 'Makefile.PL'; ++ }; + print "\nRunning Makefile.PL in $ext_dir\n"; + + # Presumably this can be simplified +diff --git a/patchlevel.h b/patchlevel.h +index 4442407..5169551 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -131,6 +131,7 @@ static const char * const local_patches[] = { + NULL + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ + PERL_GIT_UNCOMMITTED_CHANGES /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +diff --git a/perl.c b/perl.c +index 94f2b13..5f30040 100644 +--- a/perl.c ++++ b/perl.c +@@ -3745,7 +3745,7 @@ S_open_script(pTHX_ const char *scriptname, bool dosearch, SV *sv, + # ifdef VMS + cpp_discard_flag = ""; + # else +- cpp_discard_flag = "-C"; ++ cpp_discard_flag = "-C -ffreestanding"; + # endif + + # ifdef OS2 +diff --git a/t/op/hash.t b/t/op/hash.t +old mode 100755 +new mode 100644 +index 9bde518..45eb782 +--- a/t/op/hash.t ++++ b/t/op/hash.t +@@ -39,22 +39,36 @@ use constant THRESHOLD => 14; + use constant START => "a"; + + # some initial hash data +-my %h2 = map {$_ => 1} 'a'..'cc'; ++my %h2; ++my $counter= "a"; ++$h2{$counter++}++ while $counter ne 'cd'; + + ok (!Internals::HvREHASH(%h2), + "starting with pre-populated non-pathological hash (rehash flag if off)"); + + my @keys = get_keys(\%h2); ++my $buckets= buckets(\%h2); + $h2{$_}++ for @keys; ++$h2{$counter++}++ while buckets(\%h2) == $buckets; # force a split + ok (Internals::HvREHASH(%h2), +- scalar(@keys) . " colliding into the same bucket keys are triggering rehash"); ++ scalar(@keys) . " colliding into the same bucket keys are triggering rehash after split"); ++ ++# returns the number of buckets in a hash ++sub buckets { ++ my $hr = shift; ++ my $keys_buckets= scalar(%$hr); ++ if ($keys_buckets=~m!/([0-9]+)\z!) { ++ return 0+$1; ++ } else { ++ return 8; ++ } ++} + + sub get_keys { + my $hr = shift; + + # the minimum of bits required to mount the attack on a hash + my $min_bits = log(THRESHOLD)/log(2); +- + # if the hash has already been populated with a significant amount + # of entries the number of mask bits can be higher + my $keys = scalar keys %$hr; +-- +1.9.1 + diff --git a/5.010.001-64bit/Dockerfile b/5.010.001-64bit/Dockerfile new file mode 100644 index 0000000..d971e09 --- /dev/null +++ b/5.010.001-64bit/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps +MAINTAINER Peter Martini + +RUN apt-get update \ + && apt-get install -y curl procps \ + && rm -fr /var/lib/apt/lists/* + +RUN mkdir /usr/src/perl +COPY DevelPatchPerl.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN curl -SL https://cpan.metacpan.org/authors/id/D/DA/DAPM/perl-5.10.1.tar.bz2 -o perl-5.10.1.tar.bz2 \ + && echo '98b762b5cd4fb76dd354dfa5ba0d21bc2acacaf2 *perl-5.10.1.tar.bz2' | sha1sum -c - \ + && tar --strip-components=1 -xjf perl-5.10.1.tar.bz2 -C /usr/src/perl \ + && rm perl-5.10.1.tar.bz2 \ + && cat DevelPatchPerl.patch | patch -p1 + && ./Configure -Duse64bitall -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO https://raw.githubusercontent.com/miyagawa/cpanminus/master/cpanm \ + && chmod +x cpanm \ + && ./cpanm App::cpanminus \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl + +WORKDIR /root + +CMD ["perl5.10.1","-de0"] diff --git a/5.012.005-64bit,threaded/DevelPatchPerl.patch b/5.012.005-64bit,threaded/DevelPatchPerl.patch new file mode 100644 index 0000000..c888e0b --- /dev/null +++ b/5.012.005-64bit,threaded/DevelPatchPerl.patch @@ -0,0 +1,511 @@ +From 92b5bc1f2943d9852276898f9881f43272396a2d Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:07:58 -0400 +Subject: [PATCH] tmp + +--- + cpan/Archive-Tar/t/02_methods.t | 14 +++ + ext/Hash-Util-FieldHash/t/10_hash.t | 18 +++- + ext/ODBM_File/hints/linux.pl | 6 +- + hints/linux.sh | 166 ++++++++++++++++++++++++++---------- + hv.c | 26 ++---- + make_ext.pl | 4 + + patchlevel.h | 1 + + t/op/hash.t | 20 ++++- + 8 files changed, 180 insertions(+), 75 deletions(-) + mode change 100755 => 100644 t/op/hash.t + +diff --git a/cpan/Archive-Tar/t/02_methods.t b/cpan/Archive-Tar/t/02_methods.t +index e400dda..e25e31a 100755 +--- a/cpan/Archive-Tar/t/02_methods.t ++++ b/cpan/Archive-Tar/t/02_methods.t +@@ -70,6 +70,20 @@ my $LONG_FILE = qq[directory/really-really-really-really-really-really-really-re + my $TOO_LONG = ($^O eq 'MSWin32' or $^O eq 'cygwin' or $^O eq 'VMS') + && length( cwd(). $LONG_FILE ) > 247; + ++if(!$TOO_LONG) { ++ my $alt = File::Spec->catfile( cwd(), $LONG_FILE); ++ eval 'mkpath([$alt]);'; ++ if($@) ++ { ++ $TOO_LONG = 1; ++ } ++ else ++ { ++ $@ = ''; ++ my $base = File::Spec->catfile( cwd(), 'directory'); ++ rmtree $base; ++ } ++} + ### warn if we are going to skip long file names + if ($TOO_LONG) { + diag("No long filename support - long filename extraction disabled") if ! $ENV{PERL_CORE}; +diff --git a/ext/Hash-Util-FieldHash/t/10_hash.t b/ext/Hash-Util-FieldHash/t/10_hash.t +index 2cfb4e8..d58f053 100755 +--- a/ext/Hash-Util-FieldHash/t/10_hash.t ++++ b/ext/Hash-Util-FieldHash/t/10_hash.t +@@ -38,15 +38,29 @@ use constant START => "a"; + + # some initial hash data + fieldhash my %h2; +-%h2 = map {$_ => 1} 'a'..'cc'; ++my $counter= "a"; ++$h2{$counter++}++ while $counter ne 'cd'; + + ok (!Internals::HvREHASH(%h2), + "starting with pre-populated non-pathological hash (rehash flag if off)"); + + my @keys = get_keys(\%h2); ++my $buckets= buckets(\%h2); + $h2{$_}++ for @keys; ++$h2{$counter++}++ while buckets(\%h2) == $buckets; # force a split + ok (Internals::HvREHASH(%h2), +- scalar(@keys) . " colliding into the same bucket keys are triggering rehash"); ++ scalar(@keys) . " colliding into the same bucket keys are triggering rehash after split"); ++ ++# returns the number of buckets in a hash ++sub buckets { ++ my $hr = shift; ++ my $keys_buckets= scalar(%$hr); ++ if ($keys_buckets=~m!/([0-9]+)\z!) { ++ return 0+$1; ++ } else { ++ return 8; ++ } ++} + + sub get_keys { + my $hr = shift; +diff --git a/ext/ODBM_File/hints/linux.pl b/ext/ODBM_File/hints/linux.pl +index f8ca492..204bba0 100644 +--- a/ext/ODBM_File/hints/linux.pl ++++ b/ext/ODBM_File/hints/linux.pl +@@ -1,8 +1,8 @@ + # uses GDBM dbm compatibility feature - at least on SuSE 8.0 + $self->{LIBS} = ['-lgdbm']; + +-# Debian/Ubuntu have /usr/lib/libgdbm_compat.so.3* but not this file, ++# Debian/Ubuntu have libgdbm_compat.so but not this file, + # so linking may fail +-if (-e '/usr/lib/libgdbm_compat.so' or -e '/usr/lib64/libgdbm_compat.so') { +- $self->{LIBS}->[0] .= ' -lgdbm_compat'; ++foreach (split / /, $Config{libpth}) { ++ $self->{LIBS}->[0] .= ' -lgdbm_compat' if -e $_.'/libgdbm_compat.so'; + } +diff --git a/hints/linux.sh b/hints/linux.sh +index 0519eca..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -13,11 +13,14 @@ + # Updated Thu May 30 10:50:22 EDT 1996 by + + # Updated Fri Jun 21 11:07:54 EDT 1996 +-# NDBM support for ELF renabled by ++# NDBM support for ELF re-enabled by + + # No version of Linux supports setuid scripts. + d_suidsafe='undef' + ++# No version of Linux needs libutil for perl. ++i_libutil='undef' ++ + # Debian and Red Hat, and perhaps other vendors, provide both runtime and + # development packages for some libraries. The runtime packages contain shared + # libraries with version information in their names (e.g., libgdbm.so.1.7.3); +@@ -36,7 +39,7 @@ d_suidsafe='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -55,17 +58,10 @@ shift + libswanted="$*" + + # Debian 4.0 puts ndbm in the -lgdbm_compat library. +-libswanted="$libswanted gdbm_compat" +- +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -84,6 +80,9 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) +@@ -97,7 +96,7 @@ case "`${cc:-cc} -V 2>&1`" in + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -131,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -160,10 +159,18 @@ esac + # This unconditionally uses gcc because even if the user is using another + # compiler, we still need to find the math library and friends, and I don't + # know how other compilers will cope with that situation. ++# Morever, if the user has their own gcc earlier in $PATH than the system gcc, ++# we don't want its libraries. So we try to prefer the system gcc + # Still, as an escape hatch, allow Configure command line overrides to + # plibpth to bypass this check. ++if [ -x /usr/bin/gcc ] ; then ++ gcc=/usr/bin/gcc ++else ++ gcc=gcc ++fi ++ + case "$plibpth" in +-'') plibpth=`gcc -print-search-dirs | grep libraries | ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | + cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` + set X $plibpth # Collapse all entries on one line + shift +@@ -171,6 +178,49 @@ case "$plibpth" in + ;; + esac + ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -191,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -257,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -324,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -339,30 +389,62 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. + cat > UU/usethreads.cbu <<'EOCBU' +-if getconf GNU_LIBPTHREAD_VERSION | grep NPTL >/dev/null 2>/dev/null +-then +- threadshavepids="" +-else +- threadshavepids="-DTHREADS_HAVE_PIDS" +-fi + case "$usethreads" in + $define|true|[yY]*) +- ccflags="-D_REENTRANT -D_GNU_SOURCE $threadshavepids $ccflags" ++ ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags" + if echo $libswanted | grep -v pthread >/dev/null + then + set `echo X "$libswanted "| sed -e 's/ c / pthread c /'` +@@ -409,16 +491,6 @@ $define|true|[yY]*) + ;; + esac + +-# If we are using g++ we must use nm and force ourselves to use +-# the /usr/lib/libc.a (resetting the libc below to an empty string +-# makes Configure to look for the right one) because the symbol +-# scanning tricks of Configure will crash and burn horribly. +-case "$cc" in +-*g++*) usenm=true +- libc='' +- ;; +-esac +- + # If using g++, the Configure scan for dlopen() and (especially) + # dlerror() might fail, easier just to forcibly hint them in. + case "$cc" in +@@ -442,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/hv.c b/hv.c +index 89c6456..8659678 100644 +--- a/hv.c ++++ b/hv.c +@@ -35,7 +35,8 @@ holds the key and hash value. + #define PERL_HASH_INTERNAL_ACCESS + #include "perl.h" + +-#define HV_MAX_LENGTH_BEFORE_SPLIT 14 ++#define HV_MAX_LENGTH_BEFORE_REHASH 14 ++#define SHOULD_DO_HSPLIT(xhv) ((xhv)->xhv_keys > (xhv)->xhv_max) /* HvTOTALKEYS(hv) > HvMAX(hv) */ + + static const char S_strtab_error[] + = "Cannot modify shared string table in hv_%s"; +@@ -818,23 +819,8 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!counter) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max) { ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { + hsplit(hv); +- } else if(!HvREHASH(hv)) { +- U32 n_links = 1; +- +- while ((counter = HeNEXT(counter))) +- n_links++; +- +- if (n_links > HV_MAX_LENGTH_BEFORE_SPLIT) { +- /* Use only the old HvKEYS(hv) > HvMAX(hv) condition to limit +- bucket splits on a rehashed hash, as we're not going to +- split it again, and if someone is lucky (evil) enough to +- get all the keys in one list they could exhaust our memory +- as we repeatedly double the number of buckets on every +- entry. Linear search feels a less worse thing to do. */ +- hsplit(hv); +- } + } + } + +@@ -1180,7 +1166,7 @@ S_hsplit(pTHX_ HV *hv) + + + /* Pick your policy for "hashing isn't working" here: */ +- if (longest_chain <= HV_MAX_LENGTH_BEFORE_SPLIT /* split worked? */ ++ if (longest_chain <= HV_MAX_LENGTH_BEFORE_REHASH /* split worked? */ + || HvREHASH(hv)) { + return; + } +@@ -2551,8 +2537,8 @@ S_share_hek_flags(pTHX_ const char *str, I32 len, register U32 hash, int flags) + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!next) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max /* HvKEYS(hv) > HvMAX(hv) */) { +- hsplit(PL_strtab); ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { ++ hsplit(PL_strtab); + } + } + +diff --git a/make_ext.pl b/make_ext.pl +index de26d84..52b0492 100644 +--- a/make_ext.pl ++++ b/make_ext.pl +@@ -363,6 +363,10 @@ WriteMakefile( + EOM + close $fh or die "Can't close Makefile.PL: $!"; + } ++ eval { ++ my $ftime = time - 4; ++ utime $ftime, $ftime, 'Makefile.PL'; ++ }; + print "\nRunning Makefile.PL in $ext_dir\n"; + + # Presumably this can be simplified +diff --git a/patchlevel.h b/patchlevel.h +index f1a12bd..61bf49d 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -131,6 +131,7 @@ static const char * const local_patches[] = { + ,"uncommitted-changes" + #endif + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +diff --git a/t/op/hash.t b/t/op/hash.t +old mode 100755 +new mode 100644 +index 9bde518..45eb782 +--- a/t/op/hash.t ++++ b/t/op/hash.t +@@ -39,22 +39,36 @@ use constant THRESHOLD => 14; + use constant START => "a"; + + # some initial hash data +-my %h2 = map {$_ => 1} 'a'..'cc'; ++my %h2; ++my $counter= "a"; ++$h2{$counter++}++ while $counter ne 'cd'; + + ok (!Internals::HvREHASH(%h2), + "starting with pre-populated non-pathological hash (rehash flag if off)"); + + my @keys = get_keys(\%h2); ++my $buckets= buckets(\%h2); + $h2{$_}++ for @keys; ++$h2{$counter++}++ while buckets(\%h2) == $buckets; # force a split + ok (Internals::HvREHASH(%h2), +- scalar(@keys) . " colliding into the same bucket keys are triggering rehash"); ++ scalar(@keys) . " colliding into the same bucket keys are triggering rehash after split"); ++ ++# returns the number of buckets in a hash ++sub buckets { ++ my $hr = shift; ++ my $keys_buckets= scalar(%$hr); ++ if ($keys_buckets=~m!/([0-9]+)\z!) { ++ return 0+$1; ++ } else { ++ return 8; ++ } ++} + + sub get_keys { + my $hr = shift; + + # the minimum of bits required to mount the attack on a hash + my $min_bits = log(THRESHOLD)/log(2); +- + # if the hash has already been populated with a significant amount + # of entries the number of mask bits can be higher + my $keys = scalar keys %$hr; +-- +1.9.1 + diff --git a/5.012.005-64bit,threaded/Dockerfile b/5.012.005-64bit,threaded/Dockerfile new file mode 100644 index 0000000..77c58a9 --- /dev/null +++ b/5.012.005-64bit,threaded/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps +MAINTAINER Peter Martini + +RUN apt-get update \ + && apt-get install -y curl procps \ + && rm -fr /var/lib/apt/lists/* + +RUN mkdir /usr/src/perl +COPY DevelPatchPerl.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN curl -SL https://cpan.metacpan.org/authors/id/D/DO/DOM/perl-5.12.5.tar.bz2 -o perl-5.12.5.tar.bz2 \ + && echo '812139ceef512eb8458af29ffbf46d78ef26c12a *perl-5.12.5.tar.bz2' | sha1sum -c - \ + && tar --strip-components=1 -xjf perl-5.12.5.tar.bz2 -C /usr/src/perl \ + && rm perl-5.12.5.tar.bz2 \ + && cat DevelPatchPerl.patch | patch -p1 + && ./Configure -Dusethreads -Duse64bitall -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO https://raw.githubusercontent.com/miyagawa/cpanminus/master/cpanm \ + && chmod +x cpanm \ + && ./cpanm App::cpanminus \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl + +WORKDIR /root + +CMD ["perl5.12.5","-de0"] diff --git a/5.012.005-64bit/DevelPatchPerl.patch b/5.012.005-64bit/DevelPatchPerl.patch new file mode 100644 index 0000000..c888e0b --- /dev/null +++ b/5.012.005-64bit/DevelPatchPerl.patch @@ -0,0 +1,511 @@ +From 92b5bc1f2943d9852276898f9881f43272396a2d Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:07:58 -0400 +Subject: [PATCH] tmp + +--- + cpan/Archive-Tar/t/02_methods.t | 14 +++ + ext/Hash-Util-FieldHash/t/10_hash.t | 18 +++- + ext/ODBM_File/hints/linux.pl | 6 +- + hints/linux.sh | 166 ++++++++++++++++++++++++++---------- + hv.c | 26 ++---- + make_ext.pl | 4 + + patchlevel.h | 1 + + t/op/hash.t | 20 ++++- + 8 files changed, 180 insertions(+), 75 deletions(-) + mode change 100755 => 100644 t/op/hash.t + +diff --git a/cpan/Archive-Tar/t/02_methods.t b/cpan/Archive-Tar/t/02_methods.t +index e400dda..e25e31a 100755 +--- a/cpan/Archive-Tar/t/02_methods.t ++++ b/cpan/Archive-Tar/t/02_methods.t +@@ -70,6 +70,20 @@ my $LONG_FILE = qq[directory/really-really-really-really-really-really-really-re + my $TOO_LONG = ($^O eq 'MSWin32' or $^O eq 'cygwin' or $^O eq 'VMS') + && length( cwd(). $LONG_FILE ) > 247; + ++if(!$TOO_LONG) { ++ my $alt = File::Spec->catfile( cwd(), $LONG_FILE); ++ eval 'mkpath([$alt]);'; ++ if($@) ++ { ++ $TOO_LONG = 1; ++ } ++ else ++ { ++ $@ = ''; ++ my $base = File::Spec->catfile( cwd(), 'directory'); ++ rmtree $base; ++ } ++} + ### warn if we are going to skip long file names + if ($TOO_LONG) { + diag("No long filename support - long filename extraction disabled") if ! $ENV{PERL_CORE}; +diff --git a/ext/Hash-Util-FieldHash/t/10_hash.t b/ext/Hash-Util-FieldHash/t/10_hash.t +index 2cfb4e8..d58f053 100755 +--- a/ext/Hash-Util-FieldHash/t/10_hash.t ++++ b/ext/Hash-Util-FieldHash/t/10_hash.t +@@ -38,15 +38,29 @@ use constant START => "a"; + + # some initial hash data + fieldhash my %h2; +-%h2 = map {$_ => 1} 'a'..'cc'; ++my $counter= "a"; ++$h2{$counter++}++ while $counter ne 'cd'; + + ok (!Internals::HvREHASH(%h2), + "starting with pre-populated non-pathological hash (rehash flag if off)"); + + my @keys = get_keys(\%h2); ++my $buckets= buckets(\%h2); + $h2{$_}++ for @keys; ++$h2{$counter++}++ while buckets(\%h2) == $buckets; # force a split + ok (Internals::HvREHASH(%h2), +- scalar(@keys) . " colliding into the same bucket keys are triggering rehash"); ++ scalar(@keys) . " colliding into the same bucket keys are triggering rehash after split"); ++ ++# returns the number of buckets in a hash ++sub buckets { ++ my $hr = shift; ++ my $keys_buckets= scalar(%$hr); ++ if ($keys_buckets=~m!/([0-9]+)\z!) { ++ return 0+$1; ++ } else { ++ return 8; ++ } ++} + + sub get_keys { + my $hr = shift; +diff --git a/ext/ODBM_File/hints/linux.pl b/ext/ODBM_File/hints/linux.pl +index f8ca492..204bba0 100644 +--- a/ext/ODBM_File/hints/linux.pl ++++ b/ext/ODBM_File/hints/linux.pl +@@ -1,8 +1,8 @@ + # uses GDBM dbm compatibility feature - at least on SuSE 8.0 + $self->{LIBS} = ['-lgdbm']; + +-# Debian/Ubuntu have /usr/lib/libgdbm_compat.so.3* but not this file, ++# Debian/Ubuntu have libgdbm_compat.so but not this file, + # so linking may fail +-if (-e '/usr/lib/libgdbm_compat.so' or -e '/usr/lib64/libgdbm_compat.so') { +- $self->{LIBS}->[0] .= ' -lgdbm_compat'; ++foreach (split / /, $Config{libpth}) { ++ $self->{LIBS}->[0] .= ' -lgdbm_compat' if -e $_.'/libgdbm_compat.so'; + } +diff --git a/hints/linux.sh b/hints/linux.sh +index 0519eca..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -13,11 +13,14 @@ + # Updated Thu May 30 10:50:22 EDT 1996 by + + # Updated Fri Jun 21 11:07:54 EDT 1996 +-# NDBM support for ELF renabled by ++# NDBM support for ELF re-enabled by + + # No version of Linux supports setuid scripts. + d_suidsafe='undef' + ++# No version of Linux needs libutil for perl. ++i_libutil='undef' ++ + # Debian and Red Hat, and perhaps other vendors, provide both runtime and + # development packages for some libraries. The runtime packages contain shared + # libraries with version information in their names (e.g., libgdbm.so.1.7.3); +@@ -36,7 +39,7 @@ d_suidsafe='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -55,17 +58,10 @@ shift + libswanted="$*" + + # Debian 4.0 puts ndbm in the -lgdbm_compat library. +-libswanted="$libswanted gdbm_compat" +- +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -84,6 +80,9 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) +@@ -97,7 +96,7 @@ case "`${cc:-cc} -V 2>&1`" in + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -131,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -160,10 +159,18 @@ esac + # This unconditionally uses gcc because even if the user is using another + # compiler, we still need to find the math library and friends, and I don't + # know how other compilers will cope with that situation. ++# Morever, if the user has their own gcc earlier in $PATH than the system gcc, ++# we don't want its libraries. So we try to prefer the system gcc + # Still, as an escape hatch, allow Configure command line overrides to + # plibpth to bypass this check. ++if [ -x /usr/bin/gcc ] ; then ++ gcc=/usr/bin/gcc ++else ++ gcc=gcc ++fi ++ + case "$plibpth" in +-'') plibpth=`gcc -print-search-dirs | grep libraries | ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | + cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` + set X $plibpth # Collapse all entries on one line + shift +@@ -171,6 +178,49 @@ case "$plibpth" in + ;; + esac + ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -191,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -257,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -324,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -339,30 +389,62 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. + cat > UU/usethreads.cbu <<'EOCBU' +-if getconf GNU_LIBPTHREAD_VERSION | grep NPTL >/dev/null 2>/dev/null +-then +- threadshavepids="" +-else +- threadshavepids="-DTHREADS_HAVE_PIDS" +-fi + case "$usethreads" in + $define|true|[yY]*) +- ccflags="-D_REENTRANT -D_GNU_SOURCE $threadshavepids $ccflags" ++ ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags" + if echo $libswanted | grep -v pthread >/dev/null + then + set `echo X "$libswanted "| sed -e 's/ c / pthread c /'` +@@ -409,16 +491,6 @@ $define|true|[yY]*) + ;; + esac + +-# If we are using g++ we must use nm and force ourselves to use +-# the /usr/lib/libc.a (resetting the libc below to an empty string +-# makes Configure to look for the right one) because the symbol +-# scanning tricks of Configure will crash and burn horribly. +-case "$cc" in +-*g++*) usenm=true +- libc='' +- ;; +-esac +- + # If using g++, the Configure scan for dlopen() and (especially) + # dlerror() might fail, easier just to forcibly hint them in. + case "$cc" in +@@ -442,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/hv.c b/hv.c +index 89c6456..8659678 100644 +--- a/hv.c ++++ b/hv.c +@@ -35,7 +35,8 @@ holds the key and hash value. + #define PERL_HASH_INTERNAL_ACCESS + #include "perl.h" + +-#define HV_MAX_LENGTH_BEFORE_SPLIT 14 ++#define HV_MAX_LENGTH_BEFORE_REHASH 14 ++#define SHOULD_DO_HSPLIT(xhv) ((xhv)->xhv_keys > (xhv)->xhv_max) /* HvTOTALKEYS(hv) > HvMAX(hv) */ + + static const char S_strtab_error[] + = "Cannot modify shared string table in hv_%s"; +@@ -818,23 +819,8 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!counter) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max) { ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { + hsplit(hv); +- } else if(!HvREHASH(hv)) { +- U32 n_links = 1; +- +- while ((counter = HeNEXT(counter))) +- n_links++; +- +- if (n_links > HV_MAX_LENGTH_BEFORE_SPLIT) { +- /* Use only the old HvKEYS(hv) > HvMAX(hv) condition to limit +- bucket splits on a rehashed hash, as we're not going to +- split it again, and if someone is lucky (evil) enough to +- get all the keys in one list they could exhaust our memory +- as we repeatedly double the number of buckets on every +- entry. Linear search feels a less worse thing to do. */ +- hsplit(hv); +- } + } + } + +@@ -1180,7 +1166,7 @@ S_hsplit(pTHX_ HV *hv) + + + /* Pick your policy for "hashing isn't working" here: */ +- if (longest_chain <= HV_MAX_LENGTH_BEFORE_SPLIT /* split worked? */ ++ if (longest_chain <= HV_MAX_LENGTH_BEFORE_REHASH /* split worked? */ + || HvREHASH(hv)) { + return; + } +@@ -2551,8 +2537,8 @@ S_share_hek_flags(pTHX_ const char *str, I32 len, register U32 hash, int flags) + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!next) { /* initial entry? */ + xhv->xhv_fill++; /* HvFILL(hv)++ */ +- } else if (xhv->xhv_keys > (IV)xhv->xhv_max /* HvKEYS(hv) > HvMAX(hv) */) { +- hsplit(PL_strtab); ++ } else if ( SHOULD_DO_HSPLIT(xhv) ) { ++ hsplit(PL_strtab); + } + } + +diff --git a/make_ext.pl b/make_ext.pl +index de26d84..52b0492 100644 +--- a/make_ext.pl ++++ b/make_ext.pl +@@ -363,6 +363,10 @@ WriteMakefile( + EOM + close $fh or die "Can't close Makefile.PL: $!"; + } ++ eval { ++ my $ftime = time - 4; ++ utime $ftime, $ftime, 'Makefile.PL'; ++ }; + print "\nRunning Makefile.PL in $ext_dir\n"; + + # Presumably this can be simplified +diff --git a/patchlevel.h b/patchlevel.h +index f1a12bd..61bf49d 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -131,6 +131,7 @@ static const char * const local_patches[] = { + ,"uncommitted-changes" + #endif + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +diff --git a/t/op/hash.t b/t/op/hash.t +old mode 100755 +new mode 100644 +index 9bde518..45eb782 +--- a/t/op/hash.t ++++ b/t/op/hash.t +@@ -39,22 +39,36 @@ use constant THRESHOLD => 14; + use constant START => "a"; + + # some initial hash data +-my %h2 = map {$_ => 1} 'a'..'cc'; ++my %h2; ++my $counter= "a"; ++$h2{$counter++}++ while $counter ne 'cd'; + + ok (!Internals::HvREHASH(%h2), + "starting with pre-populated non-pathological hash (rehash flag if off)"); + + my @keys = get_keys(\%h2); ++my $buckets= buckets(\%h2); + $h2{$_}++ for @keys; ++$h2{$counter++}++ while buckets(\%h2) == $buckets; # force a split + ok (Internals::HvREHASH(%h2), +- scalar(@keys) . " colliding into the same bucket keys are triggering rehash"); ++ scalar(@keys) . " colliding into the same bucket keys are triggering rehash after split"); ++ ++# returns the number of buckets in a hash ++sub buckets { ++ my $hr = shift; ++ my $keys_buckets= scalar(%$hr); ++ if ($keys_buckets=~m!/([0-9]+)\z!) { ++ return 0+$1; ++ } else { ++ return 8; ++ } ++} + + sub get_keys { + my $hr = shift; + + # the minimum of bits required to mount the attack on a hash + my $min_bits = log(THRESHOLD)/log(2); +- + # if the hash has already been populated with a significant amount + # of entries the number of mask bits can be higher + my $keys = scalar keys %$hr; +-- +1.9.1 + diff --git a/5.012.005-64bit/Dockerfile b/5.012.005-64bit/Dockerfile new file mode 100644 index 0000000..f486e3a --- /dev/null +++ b/5.012.005-64bit/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps +MAINTAINER Peter Martini + +RUN apt-get update \ + && apt-get install -y curl procps \ + && rm -fr /var/lib/apt/lists/* + +RUN mkdir /usr/src/perl +COPY DevelPatchPerl.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN curl -SL https://cpan.metacpan.org/authors/id/D/DO/DOM/perl-5.12.5.tar.bz2 -o perl-5.12.5.tar.bz2 \ + && echo '812139ceef512eb8458af29ffbf46d78ef26c12a *perl-5.12.5.tar.bz2' | sha1sum -c - \ + && tar --strip-components=1 -xjf perl-5.12.5.tar.bz2 -C /usr/src/perl \ + && rm perl-5.12.5.tar.bz2 \ + && cat DevelPatchPerl.patch | patch -p1 + && ./Configure -Duse64bitall -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO https://raw.githubusercontent.com/miyagawa/cpanminus/master/cpanm \ + && chmod +x cpanm \ + && ./cpanm App::cpanminus \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl + +WORKDIR /root + +CMD ["perl5.12.5","-de0"] diff --git a/5.014.004-64bit,threaded/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch b/5.014.004-64bit,threaded/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch deleted file mode 100644 index d036f14..0000000 --- a/5.014.004-64bit,threaded/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 6f87f404fa51739971a4068da1f11443024f3fc4 Mon Sep 17 00:00:00 2001 -From: Andy Dougherty -Date: Wed, 6 Jun 2012 11:12:58 -0400 -Subject: [perl #113024] Configure: Avoid Cppsym warnings for extra tokens - [perl #113024] - -The cppsymbols can include macros such as __INT16_C(c), which can't -be tested with a simple #ifdef. This patch strips off the opening -parenthesis and everything following it. These macros were generated -by cpp -dM. - -Also ensure Cppsym.true list is sorted for later input to comm. -(I noticed this while testing this change on Solaris.) ---- - Configure | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/Configure b/Configure -index a780b81..3ae16ca 100755 ---- a/Configure -+++ b/Configure -@@ -21633,15 +21633,16 @@ $cc -o try -Dcpp_stuff=$cpp_stuff $optimize \$ccflags $ldflags try.c $libs && $r - EOSH - chmod +x Cppsym.try - $eunicefix Cppsym.try --./Cppsym < Cppsym.know > Cppsym.true -+./Cppsym < Cppsym.know | $sort | $uniq > Cppsym.true - : Add in any linux cpp "predefined macros": - case "$osname::$gccversion" in - *linux*::*.*|*gnukfreebsd*::*.*|gnu::*.*) - tHdrH=_tmpHdr - rm -f $tHdrH'.h' $tHdrH - touch $tHdrH'.h' -+ # Filter out macro arguments, such as Linux's __INT8_C(c) - if $cpp -dM $tHdrH'.h' > $tHdrH'_cppsym.h' && [ -s $tHdrH'_cppsym.h' ]; then -- sed 's/#define[\ \ ]*//;s/[\ \ ].*$//' <$tHdrH'_cppsym.h' >$tHdrH'_cppsym.real' -+ sed -e 's/#define[\ \ ]*//;s/[\ \ ].*$//' -e 's/(.*//' <$tHdrH'_cppsym.h' >$tHdrH'_cppsym.real' - if [ -s $tHdrH'_cppsym.real' ]; then - cat $tHdrH'_cppsym.real' Cppsym.know | sort | uniq | ./Cppsym | sort | uniq > Cppsym.true - fi --- -2.1.4 - diff --git a/5.014.004-64bit,threaded/0002-UpdatePatchLevel.patch b/5.014.004-64bit,threaded/0002-UpdatePatchLevel.patch deleted file mode 100644 index b6d45c4..0000000 --- a/5.014.004-64bit,threaded/0002-UpdatePatchLevel.patch +++ /dev/null @@ -1,10 +0,0 @@ -# This should be auto-generated; for now, it's not, -# simply because it should be generated before the build, -# which means having the appropriate version's patchlevel.h -# available, which I don't want to bake into the fetch just -# yet. - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -135,0 +136 @@ -+ ,"Backport of perl5 git 6f87f404fa51739971a4068da1f11443024f3fc4" diff --git a/5.014.004-64bit,threaded/DevelPatchPerl.patch b/5.014.004-64bit,threaded/DevelPatchPerl.patch new file mode 100644 index 0000000..ffc9d49 --- /dev/null +++ b/5.014.004-64bit,threaded/DevelPatchPerl.patch @@ -0,0 +1,296 @@ +From 7f9962ac7c768f93e4186eabd1291851658a5d74 Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:08:02 -0400 +Subject: [PATCH] tmp + +--- + hints/linux.sh | 153 ++++++++++++++++++++++++++++++++++++++++----------------- + make_ext.pl | 4 ++ + patchlevel.h | 1 + + 3 files changed, 112 insertions(+), 46 deletions(-) + +diff --git a/hints/linux.sh b/hints/linux.sh +index d0ac9fa..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -39,7 +39,7 @@ i_libutil='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -58,17 +58,10 @@ shift + libswanted="$*" + + # Debian 4.0 puts ndbm in the -lgdbm_compat library. +-libswanted="$libswanted gdbm_compat" +- +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -87,6 +80,9 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) +@@ -100,7 +96,7 @@ case "`${cc:-cc} -V 2>&1`" in + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -134,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -174,7 +170,7 @@ else + fi + + case "$plibpth" in +-'') plibpth=`$gcc -print-search-dirs | grep libraries | ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | + cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` + set X $plibpth # Collapse all entries on one line + shift +@@ -182,6 +178,49 @@ case "$plibpth" in + ;; + esac + ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -202,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -268,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -335,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -350,30 +389,62 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. + cat > UU/usethreads.cbu <<'EOCBU' +-if getconf GNU_LIBPTHREAD_VERSION | grep NPTL >/dev/null 2>/dev/null +-then +- threadshavepids="" +-else +- threadshavepids="-DTHREADS_HAVE_PIDS" +-fi + case "$usethreads" in + $define|true|[yY]*) +- ccflags="-D_REENTRANT -D_GNU_SOURCE $threadshavepids $ccflags" ++ ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags" + if echo $libswanted | grep -v pthread >/dev/null + then + set `echo X "$libswanted "| sed -e 's/ c / pthread c /'` +@@ -420,16 +491,6 @@ $define|true|[yY]*) + ;; + esac + +-# If we are using g++ we must use nm and force ourselves to use +-# the /usr/lib/libc.a (resetting the libc below to an empty string +-# makes Configure to look for the right one) because the symbol +-# scanning tricks of Configure will crash and burn horribly. +-case "$cc" in +-*g++*) usenm=true +- libc='' +- ;; +-esac +- + # If using g++, the Configure scan for dlopen() and (especially) + # dlerror() might fail, easier just to forcibly hint them in. + case "$cc" in +@@ -453,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/make_ext.pl b/make_ext.pl +index 13a15b4..a564bb3 100644 +--- a/make_ext.pl ++++ b/make_ext.pl +@@ -377,6 +377,10 @@ WriteMakefile( + EOM + close $fh or die "Can't close Makefile.PL: $!"; + } ++ eval { ++ my $ftime = time - 4; ++ utime $ftime, $ftime, 'Makefile.PL'; ++ }; + print "\nRunning Makefile.PL in $ext_dir\n"; + + # Presumably this can be simplified +diff --git a/patchlevel.h b/patchlevel.h +index 4d9cd6d..c5ac24a 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -137,6 +137,7 @@ static const char * const local_patches[] = { + ,"uncommitted-changes" + #endif + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +-- +1.9.1 + diff --git a/5.014.004-64bit,threaded/Dockerfile b/5.014.004-64bit,threaded/Dockerfile index 4633d0b..ef67b9b 100644 --- a/5.014.004-64bit,threaded/Dockerfile +++ b/5.014.004-64bit,threaded/Dockerfile @@ -6,14 +6,14 @@ RUN apt-get update \ && rm -fr /var/lib/apt/lists/* RUN mkdir /usr/src/perl -COPY *.patch /usr/src/perl/ +COPY DevelPatchPerl.patch /usr/src/perl/ WORKDIR /usr/src/perl RUN curl -SL https://cpan.metacpan.org/authors/id/D/DA/DAPM/perl-5.14.4.tar.bz2 -o perl-5.14.4.tar.bz2 \ && echo '3527c9e26f985cba98796439bf555fde8be73cdf *perl-5.14.4.tar.bz2' | sha1sum -c - \ && tar --strip-components=1 -xjf perl-5.14.4.tar.bz2 -C /usr/src/perl \ && rm perl-5.14.4.tar.bz2 \ - && cat *.patch | patch -p1 \ + && cat DevelPatchPerl.patch | patch -p1 && ./Configure -Dusethreads -Duse64bitall -A ccflags=-fwrapv -des \ && make -j$(nproc) \ && make test_harness \ diff --git a/5.014.004-64bit/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch b/5.014.004-64bit/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch deleted file mode 100644 index d036f14..0000000 --- a/5.014.004-64bit/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 6f87f404fa51739971a4068da1f11443024f3fc4 Mon Sep 17 00:00:00 2001 -From: Andy Dougherty -Date: Wed, 6 Jun 2012 11:12:58 -0400 -Subject: [perl #113024] Configure: Avoid Cppsym warnings for extra tokens - [perl #113024] - -The cppsymbols can include macros such as __INT16_C(c), which can't -be tested with a simple #ifdef. This patch strips off the opening -parenthesis and everything following it. These macros were generated -by cpp -dM. - -Also ensure Cppsym.true list is sorted for later input to comm. -(I noticed this while testing this change on Solaris.) ---- - Configure | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/Configure b/Configure -index a780b81..3ae16ca 100755 ---- a/Configure -+++ b/Configure -@@ -21633,15 +21633,16 @@ $cc -o try -Dcpp_stuff=$cpp_stuff $optimize \$ccflags $ldflags try.c $libs && $r - EOSH - chmod +x Cppsym.try - $eunicefix Cppsym.try --./Cppsym < Cppsym.know > Cppsym.true -+./Cppsym < Cppsym.know | $sort | $uniq > Cppsym.true - : Add in any linux cpp "predefined macros": - case "$osname::$gccversion" in - *linux*::*.*|*gnukfreebsd*::*.*|gnu::*.*) - tHdrH=_tmpHdr - rm -f $tHdrH'.h' $tHdrH - touch $tHdrH'.h' -+ # Filter out macro arguments, such as Linux's __INT8_C(c) - if $cpp -dM $tHdrH'.h' > $tHdrH'_cppsym.h' && [ -s $tHdrH'_cppsym.h' ]; then -- sed 's/#define[\ \ ]*//;s/[\ \ ].*$//' <$tHdrH'_cppsym.h' >$tHdrH'_cppsym.real' -+ sed -e 's/#define[\ \ ]*//;s/[\ \ ].*$//' -e 's/(.*//' <$tHdrH'_cppsym.h' >$tHdrH'_cppsym.real' - if [ -s $tHdrH'_cppsym.real' ]; then - cat $tHdrH'_cppsym.real' Cppsym.know | sort | uniq | ./Cppsym | sort | uniq > Cppsym.true - fi --- -2.1.4 - diff --git a/5.014.004-64bit/0002-UpdatePatchLevel.patch b/5.014.004-64bit/0002-UpdatePatchLevel.patch deleted file mode 100644 index b6d45c4..0000000 --- a/5.014.004-64bit/0002-UpdatePatchLevel.patch +++ /dev/null @@ -1,10 +0,0 @@ -# This should be auto-generated; for now, it's not, -# simply because it should be generated before the build, -# which means having the appropriate version's patchlevel.h -# available, which I don't want to bake into the fetch just -# yet. - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -135,0 +136 @@ -+ ,"Backport of perl5 git 6f87f404fa51739971a4068da1f11443024f3fc4" diff --git a/5.014.004-64bit/DevelPatchPerl.patch b/5.014.004-64bit/DevelPatchPerl.patch new file mode 100644 index 0000000..ffc9d49 --- /dev/null +++ b/5.014.004-64bit/DevelPatchPerl.patch @@ -0,0 +1,296 @@ +From 7f9962ac7c768f93e4186eabd1291851658a5d74 Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:08:02 -0400 +Subject: [PATCH] tmp + +--- + hints/linux.sh | 153 ++++++++++++++++++++++++++++++++++++++++----------------- + make_ext.pl | 4 ++ + patchlevel.h | 1 + + 3 files changed, 112 insertions(+), 46 deletions(-) + +diff --git a/hints/linux.sh b/hints/linux.sh +index d0ac9fa..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -39,7 +39,7 @@ i_libutil='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -58,17 +58,10 @@ shift + libswanted="$*" + + # Debian 4.0 puts ndbm in the -lgdbm_compat library. +-libswanted="$libswanted gdbm_compat" +- +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -87,6 +80,9 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) +@@ -100,7 +96,7 @@ case "`${cc:-cc} -V 2>&1`" in + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -134,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -174,7 +170,7 @@ else + fi + + case "$plibpth" in +-'') plibpth=`$gcc -print-search-dirs | grep libraries | ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | + cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` + set X $plibpth # Collapse all entries on one line + shift +@@ -182,6 +178,49 @@ case "$plibpth" in + ;; + esac + ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -202,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -268,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -335,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -350,30 +389,62 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. + cat > UU/usethreads.cbu <<'EOCBU' +-if getconf GNU_LIBPTHREAD_VERSION | grep NPTL >/dev/null 2>/dev/null +-then +- threadshavepids="" +-else +- threadshavepids="-DTHREADS_HAVE_PIDS" +-fi + case "$usethreads" in + $define|true|[yY]*) +- ccflags="-D_REENTRANT -D_GNU_SOURCE $threadshavepids $ccflags" ++ ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags" + if echo $libswanted | grep -v pthread >/dev/null + then + set `echo X "$libswanted "| sed -e 's/ c / pthread c /'` +@@ -420,16 +491,6 @@ $define|true|[yY]*) + ;; + esac + +-# If we are using g++ we must use nm and force ourselves to use +-# the /usr/lib/libc.a (resetting the libc below to an empty string +-# makes Configure to look for the right one) because the symbol +-# scanning tricks of Configure will crash and burn horribly. +-case "$cc" in +-*g++*) usenm=true +- libc='' +- ;; +-esac +- + # If using g++, the Configure scan for dlopen() and (especially) + # dlerror() might fail, easier just to forcibly hint them in. + case "$cc" in +@@ -453,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/make_ext.pl b/make_ext.pl +index 13a15b4..a564bb3 100644 +--- a/make_ext.pl ++++ b/make_ext.pl +@@ -377,6 +377,10 @@ WriteMakefile( + EOM + close $fh or die "Can't close Makefile.PL: $!"; + } ++ eval { ++ my $ftime = time - 4; ++ utime $ftime, $ftime, 'Makefile.PL'; ++ }; + print "\nRunning Makefile.PL in $ext_dir\n"; + + # Presumably this can be simplified +diff --git a/patchlevel.h b/patchlevel.h +index 4d9cd6d..c5ac24a 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -137,6 +137,7 @@ static const char * const local_patches[] = { + ,"uncommitted-changes" + #endif + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +-- +1.9.1 + diff --git a/5.014.004-64bit/Dockerfile b/5.014.004-64bit/Dockerfile index 4330256..7993f6f 100644 --- a/5.014.004-64bit/Dockerfile +++ b/5.014.004-64bit/Dockerfile @@ -6,14 +6,14 @@ RUN apt-get update \ && rm -fr /var/lib/apt/lists/* RUN mkdir /usr/src/perl -COPY *.patch /usr/src/perl/ +COPY DevelPatchPerl.patch /usr/src/perl/ WORKDIR /usr/src/perl RUN curl -SL https://cpan.metacpan.org/authors/id/D/DA/DAPM/perl-5.14.4.tar.bz2 -o perl-5.14.4.tar.bz2 \ && echo '3527c9e26f985cba98796439bf555fde8be73cdf *perl-5.14.4.tar.bz2' | sha1sum -c - \ && tar --strip-components=1 -xjf perl-5.14.4.tar.bz2 -C /usr/src/perl \ && rm perl-5.14.4.tar.bz2 \ - && cat *.patch | patch -p1 \ + && cat DevelPatchPerl.patch | patch -p1 && ./Configure -Duse64bitall -A ccflags=-fwrapv -des \ && make -j$(nproc) \ && make test_harness \ diff --git a/5.016.003-64bit,threaded/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch b/5.016.003-64bit,threaded/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch deleted file mode 100644 index 082887b..0000000 --- a/5.016.003-64bit,threaded/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 6f87f404fa51739971a4068da1f11443024f3fc4 Mon Sep 17 00:00:00 2001 -From: Andy Dougherty -Date: Wed, 6 Jun 2012 11:12:58 -0400 -Subject: [perl #113024] Configure: Avoid Cppsym warnings for extra tokens - [perl #113024] - -The cppsymbols can include macros such as __INT16_C(c), which can't -be tested with a simple #ifdef. This patch strips off the opening -parenthesis and everything following it. These macros were generated -by cpp -dM. - -Also ensure Cppsym.true list is sorted for later input to comm. -(I noticed this while testing this change on Solaris.) ---- - Configure | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/Configure b/Configure -index a780b81..3ae16ca 100755 ---- a/Configure -+++ b/Configure -@@ -21936,15 +21936,16 @@ $cc -o try -Dcpp_stuff=$cpp_stuff $optimize \$ccflags $ldflags try.c $libs && $r - EOSH - chmod +x Cppsym.try - $eunicefix Cppsym.try --./Cppsym < Cppsym.know > Cppsym.true -+./Cppsym < Cppsym.know | $sort | $uniq > Cppsym.true - : Add in any linux cpp "predefined macros": - case "$osname::$gccversion" in - *linux*::*.*|*gnukfreebsd*::*.*|gnu::*.*) - tHdrH=_tmpHdr - rm -f $tHdrH'.h' $tHdrH - touch $tHdrH'.h' -+ # Filter out macro arguments, such as Linux's __INT8_C(c) - if $cpp -dM $tHdrH'.h' > $tHdrH'_cppsym.h' && [ -s $tHdrH'_cppsym.h' ]; then -- sed 's/#define[\ \ ]*//;s/[\ \ ].*$//' <$tHdrH'_cppsym.h' >$tHdrH'_cppsym.real' -+ sed -e 's/#define[\ \ ]*//;s/[\ \ ].*$//' -e 's/(.*//' <$tHdrH'_cppsym.h' >$tHdrH'_cppsym.real' - if [ -s $tHdrH'_cppsym.real' ]; then - cat $tHdrH'_cppsym.real' Cppsym.know | sort | uniq | ./Cppsym | sort | uniq > Cppsym.true - fi --- -2.1.4 - diff --git a/5.016.003-64bit,threaded/0002-UpdatePatchLevel.patch b/5.016.003-64bit,threaded/0002-UpdatePatchLevel.patch deleted file mode 100644 index b6d45c4..0000000 --- a/5.016.003-64bit,threaded/0002-UpdatePatchLevel.patch +++ /dev/null @@ -1,10 +0,0 @@ -# This should be auto-generated; for now, it's not, -# simply because it should be generated before the build, -# which means having the appropriate version's patchlevel.h -# available, which I don't want to bake into the fetch just -# yet. - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -135,0 +136 @@ -+ ,"Backport of perl5 git 6f87f404fa51739971a4068da1f11443024f3fc4" diff --git a/5.016.003-64bit,threaded/DevelPatchPerl.patch b/5.016.003-64bit,threaded/DevelPatchPerl.patch new file mode 100644 index 0000000..07ff18c --- /dev/null +++ b/5.016.003-64bit,threaded/DevelPatchPerl.patch @@ -0,0 +1,266 @@ +From 317366f4927caa53c7a8f848d49deea4bf30ed62 Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:08:07 -0400 +Subject: [PATCH] tmp + +--- + hints/linux.sh | 145 +++++++++++++++++++++++++++++++++++++++++---------------- + patchlevel.h | 1 + + 2 files changed, 107 insertions(+), 39 deletions(-) + +diff --git a/hints/linux.sh b/hints/linux.sh +index 688c68d..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -39,7 +39,7 @@ i_libutil='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -58,17 +58,10 @@ shift + libswanted="$*" + + # Debian 4.0 puts ndbm in the -lgdbm_compat library. +-libswanted="$libswanted gdbm_compat" +- +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -87,6 +80,9 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) +@@ -100,7 +96,7 @@ case "`${cc:-cc} -V 2>&1`" in + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -134,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -174,7 +170,7 @@ else + fi + + case "$plibpth" in +-'') plibpth=`LANG=C LC_ALL=C $gcc -print-search-dirs | grep libraries | ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | + cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` + set X $plibpth # Collapse all entries on one line + shift +@@ -182,6 +178,49 @@ case "$plibpth" in + ;; + esac + ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -202,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -268,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -335,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -350,17 +389,55 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. +@@ -414,16 +491,6 @@ $define|true|[yY]*) + ;; + esac + +-# If we are using g++ we must use nm and force ourselves to use +-# the /usr/lib/libc.a (resetting the libc below to an empty string +-# makes Configure to look for the right one) because the symbol +-# scanning tricks of Configure will crash and burn horribly. +-case "$cc" in +-*g++*) usenm=true +- libc='' +- ;; +-esac +- + # If using g++, the Configure scan for dlopen() and (especially) + # dlerror() might fail, easier just to forcibly hint them in. + case "$cc" in +@@ -447,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/patchlevel.h b/patchlevel.h +index be508d1..11ae2e8 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -137,6 +137,7 @@ static const char * const local_patches[] = { + ,"uncommitted-changes" + #endif + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +-- +1.9.1 + diff --git a/5.016.003-64bit,threaded/Dockerfile b/5.016.003-64bit,threaded/Dockerfile index 25cfa0e..a9158d2 100644 --- a/5.016.003-64bit,threaded/Dockerfile +++ b/5.016.003-64bit,threaded/Dockerfile @@ -6,14 +6,14 @@ RUN apt-get update \ && rm -fr /var/lib/apt/lists/* RUN mkdir /usr/src/perl -COPY *.patch /usr/src/perl/ +COPY DevelPatchPerl.patch /usr/src/perl/ WORKDIR /usr/src/perl RUN curl -SL https://cpan.metacpan.org/authors/id/R/RJ/RJBS/perl-5.16.3.tar.bz2 -o perl-5.16.3.tar.bz2 \ && echo '060bc17cf9f142d043f9bf7b861422ec624875ea *perl-5.16.3.tar.bz2' | sha1sum -c - \ && tar --strip-components=1 -xjf perl-5.16.3.tar.bz2 -C /usr/src/perl \ && rm perl-5.16.3.tar.bz2 \ - && cat *.patch | patch -p1 \ + && cat DevelPatchPerl.patch | patch -p1 && ./Configure -Dusethreads -Duse64bitall -A ccflags=-fwrapv -des \ && make -j$(nproc) \ && make test_harness \ diff --git a/5.016.003-64bit/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch b/5.016.003-64bit/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch deleted file mode 100644 index 082887b..0000000 --- a/5.016.003-64bit/0001-Configure-Avoid-Cppsym-warnings-for-extra-tokens-pe.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 6f87f404fa51739971a4068da1f11443024f3fc4 Mon Sep 17 00:00:00 2001 -From: Andy Dougherty -Date: Wed, 6 Jun 2012 11:12:58 -0400 -Subject: [perl #113024] Configure: Avoid Cppsym warnings for extra tokens - [perl #113024] - -The cppsymbols can include macros such as __INT16_C(c), which can't -be tested with a simple #ifdef. This patch strips off the opening -parenthesis and everything following it. These macros were generated -by cpp -dM. - -Also ensure Cppsym.true list is sorted for later input to comm. -(I noticed this while testing this change on Solaris.) ---- - Configure | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/Configure b/Configure -index a780b81..3ae16ca 100755 ---- a/Configure -+++ b/Configure -@@ -21936,15 +21936,16 @@ $cc -o try -Dcpp_stuff=$cpp_stuff $optimize \$ccflags $ldflags try.c $libs && $r - EOSH - chmod +x Cppsym.try - $eunicefix Cppsym.try --./Cppsym < Cppsym.know > Cppsym.true -+./Cppsym < Cppsym.know | $sort | $uniq > Cppsym.true - : Add in any linux cpp "predefined macros": - case "$osname::$gccversion" in - *linux*::*.*|*gnukfreebsd*::*.*|gnu::*.*) - tHdrH=_tmpHdr - rm -f $tHdrH'.h' $tHdrH - touch $tHdrH'.h' -+ # Filter out macro arguments, such as Linux's __INT8_C(c) - if $cpp -dM $tHdrH'.h' > $tHdrH'_cppsym.h' && [ -s $tHdrH'_cppsym.h' ]; then -- sed 's/#define[\ \ ]*//;s/[\ \ ].*$//' <$tHdrH'_cppsym.h' >$tHdrH'_cppsym.real' -+ sed -e 's/#define[\ \ ]*//;s/[\ \ ].*$//' -e 's/(.*//' <$tHdrH'_cppsym.h' >$tHdrH'_cppsym.real' - if [ -s $tHdrH'_cppsym.real' ]; then - cat $tHdrH'_cppsym.real' Cppsym.know | sort | uniq | ./Cppsym | sort | uniq > Cppsym.true - fi --- -2.1.4 - diff --git a/5.016.003-64bit/0002-UpdatePatchLevel.patch b/5.016.003-64bit/0002-UpdatePatchLevel.patch deleted file mode 100644 index b6d45c4..0000000 --- a/5.016.003-64bit/0002-UpdatePatchLevel.patch +++ /dev/null @@ -1,10 +0,0 @@ -# This should be auto-generated; for now, it's not, -# simply because it should be generated before the build, -# which means having the appropriate version's patchlevel.h -# available, which I don't want to bake into the fetch just -# yet. - ---- a/patchlevel.h -+++ b/patchlevel.h -@@ -135,0 +136 @@ -+ ,"Backport of perl5 git 6f87f404fa51739971a4068da1f11443024f3fc4" diff --git a/5.016.003-64bit/DevelPatchPerl.patch b/5.016.003-64bit/DevelPatchPerl.patch new file mode 100644 index 0000000..07ff18c --- /dev/null +++ b/5.016.003-64bit/DevelPatchPerl.patch @@ -0,0 +1,266 @@ +From 317366f4927caa53c7a8f848d49deea4bf30ed62 Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:08:07 -0400 +Subject: [PATCH] tmp + +--- + hints/linux.sh | 145 +++++++++++++++++++++++++++++++++++++++++---------------- + patchlevel.h | 1 + + 2 files changed, 107 insertions(+), 39 deletions(-) + +diff --git a/hints/linux.sh b/hints/linux.sh +index 688c68d..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -39,7 +39,7 @@ i_libutil='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -58,17 +58,10 @@ shift + libswanted="$*" + + # Debian 4.0 puts ndbm in the -lgdbm_compat library. +-libswanted="$libswanted gdbm_compat" +- +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -87,6 +80,9 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) +@@ -100,7 +96,7 @@ case "`${cc:-cc} -V 2>&1`" in + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -134,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -174,7 +170,7 @@ else + fi + + case "$plibpth" in +-'') plibpth=`LANG=C LC_ALL=C $gcc -print-search-dirs | grep libraries | ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | + cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` + set X $plibpth # Collapse all entries on one line + shift +@@ -182,6 +178,49 @@ case "$plibpth" in + ;; + esac + ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -202,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -268,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -335,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -350,17 +389,55 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. +@@ -414,16 +491,6 @@ $define|true|[yY]*) + ;; + esac + +-# If we are using g++ we must use nm and force ourselves to use +-# the /usr/lib/libc.a (resetting the libc below to an empty string +-# makes Configure to look for the right one) because the symbol +-# scanning tricks of Configure will crash and burn horribly. +-case "$cc" in +-*g++*) usenm=true +- libc='' +- ;; +-esac +- + # If using g++, the Configure scan for dlopen() and (especially) + # dlerror() might fail, easier just to forcibly hint them in. + case "$cc" in +@@ -447,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/patchlevel.h b/patchlevel.h +index be508d1..11ae2e8 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -137,6 +137,7 @@ static const char * const local_patches[] = { + ,"uncommitted-changes" + #endif + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +-- +1.9.1 + diff --git a/5.016.003-64bit/Dockerfile b/5.016.003-64bit/Dockerfile index 9b41573..b200643 100644 --- a/5.016.003-64bit/Dockerfile +++ b/5.016.003-64bit/Dockerfile @@ -6,14 +6,14 @@ RUN apt-get update \ && rm -fr /var/lib/apt/lists/* RUN mkdir /usr/src/perl -COPY *.patch /usr/src/perl/ +COPY DevelPatchPerl.patch /usr/src/perl/ WORKDIR /usr/src/perl RUN curl -SL https://cpan.metacpan.org/authors/id/R/RJ/RJBS/perl-5.16.3.tar.bz2 -o perl-5.16.3.tar.bz2 \ && echo '060bc17cf9f142d043f9bf7b861422ec624875ea *perl-5.16.3.tar.bz2' | sha1sum -c - \ && tar --strip-components=1 -xjf perl-5.16.3.tar.bz2 -C /usr/src/perl \ && rm perl-5.16.3.tar.bz2 \ - && cat *.patch | patch -p1 \ + && cat DevelPatchPerl.patch | patch -p1 && ./Configure -Duse64bitall -A ccflags=-fwrapv -des \ && make -j$(nproc) \ && make test_harness \ diff --git a/5.018.004-64bit,threaded/DevelPatchPerl.patch b/5.018.004-64bit,threaded/DevelPatchPerl.patch new file mode 100644 index 0000000..bf81ffc --- /dev/null +++ b/5.018.004-64bit,threaded/DevelPatchPerl.patch @@ -0,0 +1,249 @@ +From b411047d4feb53c3bdaf07d6d9fff639f21094e1 Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:08:12 -0400 +Subject: [PATCH] tmp + +--- + hints/linux.sh | 135 ++++++++++++++++++++++++++++++++++++++++++++------------- + patchlevel.h | 1 + + 2 files changed, 107 insertions(+), 29 deletions(-) + +diff --git a/hints/linux.sh b/hints/linux.sh +index a148248..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -39,7 +39,7 @@ i_libutil='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -58,17 +58,10 @@ shift + libswanted="$*" + + # Debian 4.0 puts ndbm in the -lgdbm_compat library. +-libswanted="$libswanted gdbm_compat" +- +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -87,6 +80,9 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) +@@ -100,7 +96,7 @@ case "`${cc:-cc} -V 2>&1`" in + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -134,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -174,7 +170,7 @@ else + fi + + case "$plibpth" in +-'') plibpth=`LANG=C LC_ALL=C $gcc -print-search-dirs | grep libraries | ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | + cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` + set X $plibpth # Collapse all entries on one line + shift +@@ -182,6 +178,49 @@ case "$plibpth" in + ;; + esac + ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -202,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -268,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -335,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -350,17 +389,55 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. +@@ -437,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/patchlevel.h b/patchlevel.h +index cb033ea..1318325 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -137,6 +137,7 @@ static const char * const local_patches[] = { + ,"uncommitted-changes" + #endif + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +-- +1.9.1 + diff --git a/5.018.004-64bit,threaded/Dockerfile b/5.018.004-64bit,threaded/Dockerfile index bab717b..3efc77a 100644 --- a/5.018.004-64bit,threaded/Dockerfile +++ b/5.018.004-64bit,threaded/Dockerfile @@ -6,12 +6,14 @@ RUN apt-get update \ && rm -fr /var/lib/apt/lists/* RUN mkdir /usr/src/perl +COPY DevelPatchPerl.patch /usr/src/perl/ WORKDIR /usr/src/perl RUN curl -SL https://cpan.metacpan.org/authors/id/R/RJ/RJBS/perl-5.18.4.tar.bz2 -o perl-5.18.4.tar.bz2 \ && echo '69c34558a0a939a7adbbc1de48c06ea418d81e27 *perl-5.18.4.tar.bz2' | sha1sum -c - \ && tar --strip-components=1 -xjf perl-5.18.4.tar.bz2 -C /usr/src/perl \ && rm perl-5.18.4.tar.bz2 \ + && cat DevelPatchPerl.patch | patch -p1 && ./Configure -Dusethreads -Duse64bitall -A ccflags=-fwrapv -des \ && make -j$(nproc) \ && make test_harness \ diff --git a/5.018.004-64bit/DevelPatchPerl.patch b/5.018.004-64bit/DevelPatchPerl.patch new file mode 100644 index 0000000..bf81ffc --- /dev/null +++ b/5.018.004-64bit/DevelPatchPerl.patch @@ -0,0 +1,249 @@ +From b411047d4feb53c3bdaf07d6d9fff639f21094e1 Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:08:12 -0400 +Subject: [PATCH] tmp + +--- + hints/linux.sh | 135 ++++++++++++++++++++++++++++++++++++++++++++------------- + patchlevel.h | 1 + + 2 files changed, 107 insertions(+), 29 deletions(-) + +diff --git a/hints/linux.sh b/hints/linux.sh +index a148248..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -39,7 +39,7 @@ i_libutil='undef' + # SuSE Linux can be used as cross-compilation host for Cray XT4 Catamount/Qk. + if test -d /opt/xt-pe + then +- case "`cc -V 2>&1`" in ++ case "`${cc:-cc} -V 2>&1`" in + *catamount*) . hints/catamount.sh; return ;; + esac + fi +@@ -58,17 +58,10 @@ shift + libswanted="$*" + + # Debian 4.0 puts ndbm in the -lgdbm_compat library. +-libswanted="$libswanted gdbm_compat" +- +-# If you have glibc, then report the version for ./myconfig bug reporting. +-# (Configure doesn't need to know the specific version since it just uses +-# gcc to load the library for all tests.) +-# We don't use __GLIBC__ and __GLIBC_MINOR__ because they +-# are insufficiently precise to distinguish things like +-# libc-2.0.6 and libc-2.0.7. +-if test -L /lib/libc.so.6; then +- libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'` +- libc=/lib/$libc ++echo $libs ++if echo " $libswanted " | grep -q ' gdbm '; then ++ # Only add if gdbm is in libswanted. ++ libswanted="$libswanted gdbm_compat" + fi + + # Configure may fail to find lstat() since it's a static/inline +@@ -87,6 +80,9 @@ case "$usemymalloc" in + '') usemymalloc='n' ;; + esac + ++uname_minus_m="`$run uname -m 2>/dev/null`" ++uname_minus_m="${uname_minus_m:-"$targetarch"}" ++ + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in + *"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) +@@ -100,7 +96,7 @@ case "`${cc:-cc} -V 2>&1`" in + # The -no-gcc flag is needed otherwise, icc pretends (poorly) to be gcc + ccflags="-we147 -mp -no-gcc $ccflags" + # Prevent relocation errors on 64bits arch +- case "`uname -m`" in ++ case "$uname_minus_m" in + *ia64*|*x86_64*) + cccdlflags='-fPIC' + ;; +@@ -134,7 +130,7 @@ case "$optimize" in + # use -O2 by default ; -O3 doesn't seem to bring significant benefits with gcc + '') + optimize='-O2' +- case "`uname -m`" in ++ case "$uname_minus_m" in + ppc*) + # on ppc, it seems that gcc (at least gcc 3.3.2) isn't happy + # with -O2 ; so downgrade to -O1. +@@ -174,7 +170,7 @@ else + fi + + case "$plibpth" in +-'') plibpth=`LANG=C LC_ALL=C $gcc -print-search-dirs | grep libraries | ++'') plibpth=`LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | + cut -f2- -d= | tr ':' $trnl | grep -v 'gcc' | sed -e 's:/$::'` + set X $plibpth # Collapse all entries on one line + shift +@@ -182,6 +178,49 @@ case "$plibpth" in + ;; + esac + ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ ++case "$libc" in ++'') ++# If you have glibc, then report the version for ./myconfig bug reporting. ++# (Configure doesn't need to know the specific version since it just uses ++# gcc to load the library for all tests.) ++# We don't use __GLIBC__ and __GLIBC_MINOR__ because they ++# are insufficiently precise to distinguish things like ++# libc-2.0.6 and libc-2.0.7. ++ for p in $plibpth ++ do ++ for trylib in libc.so.6 libc.so ++ do ++ if $test -e $p/$trylib; then ++ libc=`ls -l $p/$trylib | awk '{print $NF}'` ++ if $test "X$libc" != X; then ++ break ++ fi ++ fi ++ done ++ if $test "X$libc" != X; then ++ break ++ fi ++ done ++ ;; ++esac ++ + # Are we using ELF? Thanks to Kenneth Albanowski + # for this test. + cat >try.c <<'EOM' +@@ -202,7 +241,7 @@ main() { + exit(0); /* succeed (yes, it's ELF) */ + } + EOM +-if ${cc:-gcc} try.c >/dev/null 2>&1 && $run ./a.out; then ++if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then + cat <<'EOM' >&4 + + You appear to have ELF support. I'll try to use it for dynamic loading. +@@ -268,7 +307,7 @@ fi + + rm -f try.c a.out + +-if /bin/sh -c exit; then ++if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -335,7 +374,7 @@ fi + #'osfmach3ppc') ccdlflags='-Wl,-E' ;; + #esac + +-case "`uname -m`" in ++case "$uname_minus_m" in + sparc*) + case "$cccdlflags" in + *-fpic*) cccdlflags="`echo $cccdlflags|sed 's/-fpic/-fPIC/'`" ;; +@@ -350,17 +389,55 @@ esac + # version of -lgdbm which is a bad idea. So if we have 'nm' + # make sure it can read the file + # NI-S 2003/08/07 +-if [ -r /usr/lib/libndbm.so -a -x /usr/bin/nm ] ; then +- if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then +- echo 'Your shared -lndbm seems to be a real library.' +- else +- echo 'Your shared -lndbm is not a real library.' +- set `echo X "$libswanted "| sed -e 's/ ndbm / /'` +- shift +- libswanted="$*" +- fi +-fi ++case "$nm" in ++ '') ;; ++ *) ++ for p in $plibpth ++ do ++ if $test -r $p/libndbm.so; then ++ if $nm $p/libndbm.so >/dev/null 2>&1 ; then ++ echo 'Your shared -lndbm seems to be a real library.' ++ _libndbm_real=1 ++ break ++ fi ++ fi ++ done ++ if $test "X$_libndbm_real" = X; then ++ echo 'Your shared -lndbm is not a real library.' ++ set `echo X "$libswanted "| sed -e 's/ ndbm / /'` ++ shift ++ libswanted="$*" ++ fi ++ ;; ++esac + ++# Linux on Synology. ++if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then ++ # Tested on Synology DS213 and DS413 ++ # OS version info in /etc.defaults/VERSION ++ # http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have ++ # Synology DS213 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Marvell Kirkwood mv6282 ARMv5te ++ # Linux 2.6.32.12 #3810 Wed Nov 6 05:13:41 CST 2013 armv5tel GNU/Linux ++ # Synology DS413 running DSM 4.3-3810-0 (2013-11-06) ++ # CPU model Freescale QorIQ P1022 ppc (e500v2) ++ # linux 2.6.32.12 #3810 ppc GNU/Linux ++ # All development stuff installed with ipkg is in /opt ++ if [ "$LANG" = "" -o "$LANG" = "C" ]; then ++ echo 'Your LANG is safe' ++ else ++ echo 'Please set $LANG to "C". All other $LANG settings will cause havoc' >&4 ++ LANG=C ++ fi ++ echo 'Setting up to use /opt/*' >&4 ++ locincpth="/opt/include $locincpth" ++ libpth="/opt/lib $libpth" ++ libspth="/opt/lib $libspth" ++ loclibpth="/opt/lib $loclibpth" ++ # POSIX will not link without the pthread lib ++ libswanted="$libswanted pthread" ++ echo "$libswanted" >&4 ++fi + + # This script UU/usethreads.cbu will get 'called-back' by Configure + # after it has prompted the user for whether to use threads. +@@ -437,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if nm -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/patchlevel.h b/patchlevel.h +index cb033ea..1318325 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -137,6 +137,7 @@ static const char * const local_patches[] = { + ,"uncommitted-changes" + #endif + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +-- +1.9.1 + diff --git a/5.018.004-64bit/Dockerfile b/5.018.004-64bit/Dockerfile index 46af98a..15bcb1f 100644 --- a/5.018.004-64bit/Dockerfile +++ b/5.018.004-64bit/Dockerfile @@ -6,12 +6,14 @@ RUN apt-get update \ && rm -fr /var/lib/apt/lists/* RUN mkdir /usr/src/perl +COPY DevelPatchPerl.patch /usr/src/perl/ WORKDIR /usr/src/perl RUN curl -SL https://cpan.metacpan.org/authors/id/R/RJ/RJBS/perl-5.18.4.tar.bz2 -o perl-5.18.4.tar.bz2 \ && echo '69c34558a0a939a7adbbc1de48c06ea418d81e27 *perl-5.18.4.tar.bz2' | sha1sum -c - \ && tar --strip-components=1 -xjf perl-5.18.4.tar.bz2 -C /usr/src/perl \ && rm perl-5.18.4.tar.bz2 \ + && cat DevelPatchPerl.patch | patch -p1 && ./Configure -Duse64bitall -A ccflags=-fwrapv -des \ && make -j$(nproc) \ && make test_harness \ diff --git a/5.020.002-64bit,threaded/DevelPatchPerl.patch b/5.020.002-64bit,threaded/DevelPatchPerl.patch new file mode 100644 index 0000000..816b2e3 --- /dev/null +++ b/5.020.002-64bit,threaded/DevelPatchPerl.patch @@ -0,0 +1,62 @@ +From ccf3691580f13054799caa66d9165b0c98178918 Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:08:17 -0400 +Subject: [PATCH] tmp + +--- + hints/linux.sh | 19 ++++++++++++++++++- + patchlevel.h | 1 + + 2 files changed, 19 insertions(+), 1 deletion(-) + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -178,6 +178,23 @@ case "$plibpth" in + ;; + esac + ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -497,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/patchlevel.h b/patchlevel.h +index 07e1217..8016ec8 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -137,6 +137,7 @@ static const char * const local_patches[] = { + ,"uncommitted-changes" + #endif + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +-- +1.9.1 + diff --git a/5.020.002-64bit,threaded/Dockerfile b/5.020.002-64bit,threaded/Dockerfile index 0db14bd..ac3e712 100644 --- a/5.020.002-64bit,threaded/Dockerfile +++ b/5.020.002-64bit,threaded/Dockerfile @@ -6,12 +6,14 @@ RUN apt-get update \ && rm -fr /var/lib/apt/lists/* RUN mkdir /usr/src/perl +COPY DevelPatchPerl.patch /usr/src/perl/ WORKDIR /usr/src/perl RUN curl -SL https://cpan.metacpan.org/authors/id/S/SH/SHAY/perl-5.20.2.tar.bz2 -o perl-5.20.2.tar.bz2 \ && echo '63126c683b4c79c35008a47d56f7beae876c569f *perl-5.20.2.tar.bz2' | sha1sum -c - \ && tar --strip-components=1 -xjf perl-5.20.2.tar.bz2 -C /usr/src/perl \ && rm perl-5.20.2.tar.bz2 \ + && cat DevelPatchPerl.patch | patch -p1 && ./Configure -Dusethreads -Duse64bitall -des \ && make -j$(nproc) \ && make test_harness \ diff --git a/5.020.002-64bit/DevelPatchPerl.patch b/5.020.002-64bit/DevelPatchPerl.patch new file mode 100644 index 0000000..816b2e3 --- /dev/null +++ b/5.020.002-64bit/DevelPatchPerl.patch @@ -0,0 +1,62 @@ +From ccf3691580f13054799caa66d9165b0c98178918 Mon Sep 17 00:00:00 2001 +From: Peter Martini +Date: Wed, 15 Apr 2015 22:08:17 -0400 +Subject: [PATCH] tmp + +--- + hints/linux.sh | 19 ++++++++++++++++++- + patchlevel.h | 1 + + 2 files changed, 19 insertions(+), 1 deletion(-) + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..fb5a46e 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -178,6 +178,23 @@ case "$plibpth" in + ;; + esac + ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -497,7 +514,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/patchlevel.h b/patchlevel.h +index 07e1217..8016ec8 100644 +--- a/patchlevel.h ++++ b/patchlevel.h +@@ -137,6 +137,7 @@ static const char * const local_patches[] = { + ,"uncommitted-changes" + #endif + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ ++ ,"Devel::PatchPerl 1.32" + ,NULL + }; + +-- +1.9.1 + diff --git a/5.020.002-64bit/Dockerfile b/5.020.002-64bit/Dockerfile index 1d153b4..2e096f0 100644 --- a/5.020.002-64bit/Dockerfile +++ b/5.020.002-64bit/Dockerfile @@ -6,12 +6,14 @@ RUN apt-get update \ && rm -fr /var/lib/apt/lists/* RUN mkdir /usr/src/perl +COPY DevelPatchPerl.patch /usr/src/perl/ WORKDIR /usr/src/perl RUN curl -SL https://cpan.metacpan.org/authors/id/S/SH/SHAY/perl-5.20.2.tar.bz2 -o perl-5.20.2.tar.bz2 \ && echo '63126c683b4c79c35008a47d56f7beae876c569f *perl-5.20.2.tar.bz2' | sha1sum -c - \ && tar --strip-components=1 -xjf perl-5.20.2.tar.bz2 -C /usr/src/perl \ && rm perl-5.20.2.tar.bz2 \ + && cat DevelPatchPerl.patch | patch -p1 && ./Configure -Duse64bitall -des \ && make -j$(nproc) \ && make test_harness \