diff --git a/5.008.009-64bit,threaded/DevelPatchPerl.patch b/5.008.009-main,threaded/DevelPatchPerl.patch similarity index 100% rename from 5.008.009-64bit,threaded/DevelPatchPerl.patch rename to 5.008.009-main,threaded/DevelPatchPerl.patch diff --git a/5.008.009-64bit,threaded/Dockerfile b/5.008.009-main,threaded/Dockerfile similarity index 92% rename from 5.008.009-64bit,threaded/Dockerfile rename to 5.008.009-main,threaded/Dockerfile index b7e154e..a54fbeb 100644 --- a/5.008.009-64bit,threaded/Dockerfile +++ b/5.008.009-main,threaded/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep + + # 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,93 +150,78 @@ case "$optimize" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- ++# 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 +- cat <<'EOM' >&4 ++ gcc=gcc ++fi + +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. ++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 + +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +405,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 +428,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/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; diff --git a/5.008.009-slim,threaded/Dockerfile b/5.008.009-slim,threaded/Dockerfile new file mode 100644 index 0000000..74457d5 --- /dev/null +++ b/5.008.009-slim,threaded/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.8.9.tar.bz2 -o perl-5.8.9.tar.bz2 \ + && echo '1097fbcd48ceccb2bc735d119c9db399a02a8ab9f7dc53e29e47e6a8d0d72e79 *perl-5.8.9.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.8.9.tar.bz2 -C /usr/src/perl \ + && rm perl-5.8.9.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.8.9","-de0"] diff --git a/5.008.009-slim/DevelPatchPerl.patch b/5.008.009-slim/DevelPatchPerl.patch new file mode 100644 index 0000000..584b870 --- /dev/null +++ b/5.008.009-slim/DevelPatchPerl.patch @@ -0,0 +1,528 @@ +diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL +index 6f20c5e..684f369 100644 +--- a/ext/Errno/Errno_pm.PL ++++ b/ext/Errno/Errno_pm.PL +@@ -253,20 +253,31 @@ sub write_errno_pm { + unless ($^O eq 'MacOS' || $^O eq 'beos') { # trust what we have / get later + # invoke CPP and read the output + ++ my $inhibit_linemarkers = ''; ++ if ($Config{gccversion} =~ /\A(\d+)\./ and $1 >= 5) { ++ # GCC 5.0 interleaves expanded macros with line numbers breaking ++ # each line into multiple lines. RT#123784 ++ $inhibit_linemarkers = ' -P'; ++ } ++ + if ($^O eq 'VMS') { +- my $cpp = "$Config{cppstdin} $Config{cppflags} $Config{cppminus}"; ++ my $cpp = "$Config{cppstdin} $Config{cppflags}" . ++ $inhibit_linemarkers . " $Config{cppminus}"; + $cpp =~ s/sys\$input//i; + open(CPPO,"$cpp errno.c |") or + die "Cannot exec $Config{cppstdin}"; + } elsif ($IsMSWin32 || $^O eq 'NetWare') { +- open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or +- die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; ++ my $cpp = "$Config{cpprun} $Config{cppflags}" . ++ $inhibit_linemarkers; ++ open(CPPO,"$cpp errno.c |") or ++ die "Cannot run '$cpp errno.c'"; + } elsif ($IsSymbian) { +- my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc -"; ++ my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc" . ++ $inhibit_linemarkers ." -"; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } else { +- my $cpp = default_cpp(); ++ my $cpp = default_cpp() . $inhibit_linemarkers; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } +diff --git a/hints/linux.sh b/hints/linux.sh +index ac264c3..3f38ea0 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,93 +150,78 @@ case "$optimize" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- ++# 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 +- cat <<'EOM' >&4 ++ gcc=gcc ++fi + +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. ++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 + +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +405,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 +428,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/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; diff --git a/5.008.009-slim/Dockerfile b/5.008.009-slim/Dockerfile new file mode 100644 index 0000000..4b71204 --- /dev/null +++ b/5.008.009-slim/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.8.9.tar.bz2 -o perl-5.8.9.tar.bz2 \ + && echo '1097fbcd48ceccb2bc735d119c9db399a02a8ab9f7dc53e29e47e6a8d0d72e79 *perl-5.8.9.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.8.9.tar.bz2 -C /usr/src/perl \ + && rm perl-5.8.9.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.8.9","-de0"] diff --git a/5.010.001-64bit,threaded/DevelPatchPerl.patch b/5.010.001-main,threaded/DevelPatchPerl.patch similarity index 100% rename from 5.010.001-64bit,threaded/DevelPatchPerl.patch rename to 5.010.001-main,threaded/DevelPatchPerl.patch diff --git a/5.010.001-64bit,threaded/Dockerfile b/5.010.001-main,threaded/Dockerfile similarity index 92% rename from 5.010.001-64bit,threaded/Dockerfile rename to 5.010.001-main,threaded/Dockerfile index b1b4daa..0aeba92 100644 --- a/5.010.001-64bit,threaded/Dockerfile +++ b/5.010.001-main,threaded/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep "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..3f38ea0 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,93 +150,78 @@ case "$optimize" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- ++# 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 +- cat <<'EOM' >&4 ++ gcc=gcc ++fi + +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. ++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 + +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +405,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 +428,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/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 +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; diff --git a/5.010.001-slim,threaded/Dockerfile b/5.010.001-slim,threaded/Dockerfile new file mode 100644 index 0000000..210a665 --- /dev/null +++ b/5.010.001-slim,threaded/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.10.1.tar.bz2 -o perl-5.10.1.tar.bz2 \ + && echo '9385f2c8c2ca8b1dc4a7c31903f1f8dc8f2ba867dc2a9e5c93012ed6b564e826 *perl-5.10.1.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.10.1.tar.bz2 -C /usr/src/perl \ + && rm perl-5.10.1.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.10.1","-de0"] diff --git a/5.010.001-slim/DevelPatchPerl.patch b/5.010.001-slim/DevelPatchPerl.patch new file mode 100644 index 0000000..f83adf0 --- /dev/null +++ b/5.010.001-slim/DevelPatchPerl.patch @@ -0,0 +1,610 @@ +diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL +index 124b8fc..670fabc 100644 +--- a/ext/Errno/Errno_pm.PL ++++ b/ext/Errno/Errno_pm.PL +@@ -257,20 +257,31 @@ sub write_errno_pm { + unless ($^O eq 'MacOS' || $^O eq 'beos') { # trust what we have / get later + # invoke CPP and read the output + ++ my $inhibit_linemarkers = ''; ++ if ($Config{gccversion} =~ /\A(\d+)\./ and $1 >= 5) { ++ # GCC 5.0 interleaves expanded macros with line numbers breaking ++ # each line into multiple lines. RT#123784 ++ $inhibit_linemarkers = ' -P'; ++ } ++ + if ($^O eq 'VMS') { +- my $cpp = "$Config{cppstdin} $Config{cppflags} $Config{cppminus}"; ++ my $cpp = "$Config{cppstdin} $Config{cppflags}" . ++ $inhibit_linemarkers . " $Config{cppminus}"; + $cpp =~ s/sys\$input//i; + open(CPPO,"$cpp errno.c |") or + die "Cannot exec $Config{cppstdin}"; + } elsif ($IsMSWin32 || $^O eq 'NetWare') { +- open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or +- die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; ++ my $cpp = "$Config{cpprun} $Config{cppflags}" . ++ $inhibit_linemarkers; ++ open(CPPO,"$cpp errno.c |") or ++ die "Cannot run '$cpp errno.c'"; + } elsif ($IsSymbian) { +- my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc -"; ++ my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc" . ++ $inhibit_linemarkers ." -"; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } else { +- my $cpp = default_cpp(); ++ my $cpp = default_cpp() . $inhibit_linemarkers; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } +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..3f38ea0 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,93 +150,78 @@ case "$optimize" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- ++# 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 +- cat <<'EOM' >&4 ++ gcc=gcc ++fi + +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. ++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 + +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +405,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 +428,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/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 +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; diff --git a/5.010.001-slim/Dockerfile b/5.010.001-slim/Dockerfile new file mode 100644 index 0000000..46cd0d6 --- /dev/null +++ b/5.010.001-slim/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.10.1.tar.bz2 -o perl-5.10.1.tar.bz2 \ + && echo '9385f2c8c2ca8b1dc4a7c31903f1f8dc8f2ba867dc2a9e5c93012ed6b564e826 *perl-5.10.1.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.10.1.tar.bz2 -C /usr/src/perl \ + && rm perl-5.10.1.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.10.1","-de0"] diff --git a/5.012.005-64bit,threaded/DevelPatchPerl.patch b/5.012.005-main,threaded/DevelPatchPerl.patch similarity index 100% rename from 5.012.005-64bit,threaded/DevelPatchPerl.patch rename to 5.012.005-main,threaded/DevelPatchPerl.patch diff --git a/5.012.005-64bit,threaded/Dockerfile b/5.012.005-main,threaded/Dockerfile similarity index 92% rename from 5.012.005-64bit,threaded/Dockerfile rename to 5.012.005-main,threaded/Dockerfile index 9059d83..d2f8987 100644 --- a/5.012.005-64bit,threaded/Dockerfile +++ b/5.012.005-main,threaded/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep = 5) { ++ # GCC 5.0 interleaves expanded macros with line numbers breaking ++ # each line into multiple lines. RT#123784 ++ $inhibit_linemarkers = ' -P'; ++ } ++ + if ($^O eq 'VMS') { +- my $cpp = "$Config{cppstdin} $Config{cppflags} $Config{cppminus}"; ++ my $cpp = "$Config{cppstdin} $Config{cppflags}" . ++ $inhibit_linemarkers . " $Config{cppminus}"; + $cpp =~ s/sys\$input//i; + open(CPPO,"$cpp errno.c |") or + die "Cannot exec $Config{cppstdin}"; + } elsif ($IsMSWin32 || $^O eq 'NetWare') { +- open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or +- die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; ++ my $cpp = "$Config{cpprun} $Config{cppflags}" . ++ $inhibit_linemarkers; ++ open(CPPO,"$cpp errno.c |") or ++ die "Cannot run '$cpp errno.c'"; + } elsif ($IsSymbian) { +- my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc -"; ++ my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc" . ++ $inhibit_linemarkers ." -"; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } else { +- my $cpp = default_cpp(); ++ my $cpp = default_cpp() . $inhibit_linemarkers; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } +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..3f38ea0 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,93 +178,50 @@ case "$plibpth" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +405,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 +428,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/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; diff --git a/5.012.005-slim,threaded/Dockerfile b/5.012.005-slim,threaded/Dockerfile new file mode 100644 index 0000000..a540c6c --- /dev/null +++ b/5.012.005-slim,threaded/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.12.5.tar.bz2 -o perl-5.12.5.tar.bz2 \ + && echo '10749417fd3010aae320a34181ad4cd6a4855c1fc63403b87fa4d630b18e966c *perl-5.12.5.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.12.5.tar.bz2 -C /usr/src/perl \ + && rm perl-5.12.5.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.12.5","-de0"] diff --git a/5.012.005-slim/DevelPatchPerl.patch b/5.012.005-slim/DevelPatchPerl.patch new file mode 100644 index 0000000..d2a8373 --- /dev/null +++ b/5.012.005-slim/DevelPatchPerl.patch @@ -0,0 +1,586 @@ +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/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL +index 124b8fc..670fabc 100644 +--- a/ext/Errno/Errno_pm.PL ++++ b/ext/Errno/Errno_pm.PL +@@ -257,20 +257,31 @@ sub write_errno_pm { + unless ($^O eq 'MacOS' || $^O eq 'beos') { # trust what we have / get later + # invoke CPP and read the output + ++ my $inhibit_linemarkers = ''; ++ if ($Config{gccversion} =~ /\A(\d+)\./ and $1 >= 5) { ++ # GCC 5.0 interleaves expanded macros with line numbers breaking ++ # each line into multiple lines. RT#123784 ++ $inhibit_linemarkers = ' -P'; ++ } ++ + if ($^O eq 'VMS') { +- my $cpp = "$Config{cppstdin} $Config{cppflags} $Config{cppminus}"; ++ my $cpp = "$Config{cppstdin} $Config{cppflags}" . ++ $inhibit_linemarkers . " $Config{cppminus}"; + $cpp =~ s/sys\$input//i; + open(CPPO,"$cpp errno.c |") or + die "Cannot exec $Config{cppstdin}"; + } elsif ($IsMSWin32 || $^O eq 'NetWare') { +- open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or +- die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; ++ my $cpp = "$Config{cpprun} $Config{cppflags}" . ++ $inhibit_linemarkers; ++ open(CPPO,"$cpp errno.c |") or ++ die "Cannot run '$cpp errno.c'"; + } elsif ($IsSymbian) { +- my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc -"; ++ my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc" . ++ $inhibit_linemarkers ." -"; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } else { +- my $cpp = default_cpp(); ++ my $cpp = default_cpp() . $inhibit_linemarkers; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } +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..3f38ea0 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,93 +178,50 @@ case "$plibpth" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +405,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 +428,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/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; diff --git a/5.012.005-slim/Dockerfile b/5.012.005-slim/Dockerfile new file mode 100644 index 0000000..d78e6ca --- /dev/null +++ b/5.012.005-slim/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.12.5.tar.bz2 -o perl-5.12.5.tar.bz2 \ + && echo '10749417fd3010aae320a34181ad4cd6a4855c1fc63403b87fa4d630b18e966c *perl-5.12.5.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.12.5.tar.bz2 -C /usr/src/perl \ + && rm perl-5.12.5.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.12.5","-de0"] diff --git a/5.014.004-64bit,threaded/fix-h2ph-test-failure.patch b/5.014.004-64bit,threaded/fix-h2ph-test-failure.patch deleted file mode 100644 index d26732a..0000000 --- a/5.014.004-64bit,threaded/fix-h2ph-test-failure.patch +++ /dev/null @@ -1,24 +0,0 @@ -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 - diff --git a/5.014.004-64bit/fix-h2ph-test-failure.patch b/5.014.004-64bit/fix-h2ph-test-failure.patch deleted file mode 100644 index d26732a..0000000 --- a/5.014.004-64bit/fix-h2ph-test-failure.patch +++ /dev/null @@ -1,24 +0,0 @@ -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 - diff --git a/5.014.004-64bit,threaded/DevelPatchPerl.patch b/5.014.004-main,threaded/DevelPatchPerl.patch similarity index 100% rename from 5.014.004-64bit,threaded/DevelPatchPerl.patch rename to 5.014.004-main,threaded/DevelPatchPerl.patch diff --git a/5.014.004-64bit,threaded/Dockerfile b/5.014.004-main,threaded/Dockerfile similarity index 92% rename from 5.014.004-64bit,threaded/Dockerfile rename to 5.014.004-main,threaded/Dockerfile index 3e413f0..b02e290 100644 --- a/5.014.004-64bit,threaded/Dockerfile +++ b/5.014.004-main,threaded/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep &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,93 +178,50 @@ case "$plibpth" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +405,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 +428,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/5.014.004-slim,threaded/Dockerfile b/5.014.004-slim,threaded/Dockerfile new file mode 100644 index 0000000..a96e1af --- /dev/null +++ b/5.014.004-slim,threaded/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.14.4.tar.bz2 -o perl-5.14.4.tar.bz2 \ + && echo 'eece8c2b0d491bf6f746bd1f4f1bb7ce26f6b98e91c54690c617d7af38964745 *perl-5.14.4.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.14.4.tar.bz2 -C /usr/src/perl \ + && rm perl-5.14.4.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.14.4","-de0"] diff --git a/5.014.004-slim/DevelPatchPerl.patch b/5.014.004-slim/DevelPatchPerl.patch new file mode 100644 index 0000000..6b87690 --- /dev/null +++ b/5.014.004-slim/DevelPatchPerl.patch @@ -0,0 +1,379 @@ +diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL +index 56bc815..cf688be 100644 +--- a/ext/Errno/Errno_pm.PL ++++ b/ext/Errno/Errno_pm.PL +@@ -248,20 +248,31 @@ sub write_errno_pm { + unless ($^O eq 'beos') { # trust what we have / get later + # invoke CPP and read the output + ++ my $inhibit_linemarkers = ''; ++ if ($Config{gccversion} =~ /\A(\d+)\./ and $1 >= 5) { ++ # GCC 5.0 interleaves expanded macros with line numbers breaking ++ # each line into multiple lines. RT#123784 ++ $inhibit_linemarkers = ' -P'; ++ } ++ + if ($^O eq 'VMS') { +- my $cpp = "$Config{cppstdin} $Config{cppflags} $Config{cppminus}"; ++ my $cpp = "$Config{cppstdin} $Config{cppflags}" . ++ $inhibit_linemarkers . " $Config{cppminus}"; + $cpp =~ s/sys\$input//i; + open(CPPO,"$cpp errno.c |") or + die "Cannot exec $Config{cppstdin}"; + } elsif ($IsMSWin32 || $^O eq 'NetWare') { +- open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or +- die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; ++ my $cpp = "$Config{cpprun} $Config{cppflags}" . ++ $inhibit_linemarkers; ++ open(CPPO,"$cpp errno.c |") or ++ die "Cannot run '$cpp errno.c'"; + } elsif ($IsSymbian) { +- my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc -"; ++ my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc" . ++ $inhibit_linemarkers ." -"; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } else { +- my $cpp = default_cpp(); ++ my $cpp = default_cpp() . $inhibit_linemarkers; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } +diff --git a/hints/linux.sh b/hints/linux.sh +index d0ac9fa..3f38ea0 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,93 +178,50 @@ case "$plibpth" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +405,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 +428,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/5.014.004-slim/Dockerfile b/5.014.004-slim/Dockerfile new file mode 100644 index 0000000..cacdd79 --- /dev/null +++ b/5.014.004-slim/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.14.4.tar.bz2 -o perl-5.14.4.tar.bz2 \ + && echo 'eece8c2b0d491bf6f746bd1f4f1bb7ce26f6b98e91c54690c617d7af38964745 *perl-5.14.4.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.14.4.tar.bz2 -C /usr/src/perl \ + && rm perl-5.14.4.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.14.4","-de0"] 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/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,threaded/DevelPatchPerl.patch b/5.016.003-main,threaded/DevelPatchPerl.patch similarity index 100% rename from 5.016.003-64bit,threaded/DevelPatchPerl.patch rename to 5.016.003-main,threaded/DevelPatchPerl.patch diff --git a/5.016.003-64bit,threaded/Dockerfile b/5.016.003-main,threaded/Dockerfile similarity index 92% rename from 5.016.003-64bit,threaded/Dockerfile rename to 5.016.003-main,threaded/Dockerfile index 1d9fc43..82f086b 100644 --- a/5.016.003-64bit,threaded/Dockerfile +++ b/5.016.003-main,threaded/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep &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,93 +178,50 @@ case "$plibpth" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +405,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 +428,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/5.016.003-slim,threaded/Dockerfile b/5.016.003-slim,threaded/Dockerfile new file mode 100644 index 0000000..824a4f6 --- /dev/null +++ b/5.016.003-slim,threaded/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.16.3.tar.bz2 -o perl-5.16.3.tar.bz2 \ + && echo 'bb7bc735e6813b177dcfccd480defcde7eddefa173b5967eac11babd1bfa98e8 *perl-5.16.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.16.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.16.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.16.3","-de0"] diff --git a/5.016.003-slim/DevelPatchPerl.patch b/5.016.003-slim/DevelPatchPerl.patch new file mode 100644 index 0000000..0c1c567 --- /dev/null +++ b/5.016.003-slim/DevelPatchPerl.patch @@ -0,0 +1,350 @@ +diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL +index 439f254..a324604 100644 +--- a/ext/Errno/Errno_pm.PL ++++ b/ext/Errno/Errno_pm.PL +@@ -242,20 +242,31 @@ sub write_errno_pm { + unless ($^O eq 'beos') { # trust what we have / get later + # invoke CPP and read the output + ++ my $inhibit_linemarkers = ''; ++ if ($Config{gccversion} =~ /\A(\d+)\./ and $1 >= 5) { ++ # GCC 5.0 interleaves expanded macros with line numbers breaking ++ # each line into multiple lines. RT#123784 ++ $inhibit_linemarkers = ' -P'; ++ } ++ + if ($^O eq 'VMS') { +- my $cpp = "$Config{cppstdin} $Config{cppflags} $Config{cppminus}"; ++ my $cpp = "$Config{cppstdin} $Config{cppflags}" . ++ $inhibit_linemarkers . " $Config{cppminus}"; + $cpp =~ s/sys\$input//i; + open(CPPO,"$cpp errno.c |") or + die "Cannot exec $Config{cppstdin}"; + } elsif ($IsMSWin32 || $^O eq 'NetWare') { +- open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or +- die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; ++ my $cpp = "$Config{cpprun} $Config{cppflags}" . ++ $inhibit_linemarkers; ++ open(CPPO,"$cpp errno.c |") or ++ die "Cannot run '$cpp errno.c'"; + } elsif ($IsSymbian) { +- my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc -"; ++ my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc" . ++ $inhibit_linemarkers ." -"; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } else { +- my $cpp = default_cpp(); ++ my $cpp = default_cpp() . $inhibit_linemarkers; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } +diff --git a/hints/linux.sh b/hints/linux.sh +index 688c68d..3f38ea0 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,93 +178,50 @@ case "$plibpth" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +405,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 +428,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/5.016.003-slim/Dockerfile b/5.016.003-slim/Dockerfile new file mode 100644 index 0000000..76c8d90 --- /dev/null +++ b/5.016.003-slim/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.16.3.tar.bz2 -o perl-5.16.3.tar.bz2 \ + && echo 'bb7bc735e6813b177dcfccd480defcde7eddefa173b5967eac11babd1bfa98e8 *perl-5.16.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.16.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.16.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.16.3","-de0"] diff --git a/5.018.004-64bit,threaded/DevelPatchPerl.patch b/5.018.004-main,threaded/DevelPatchPerl.patch similarity index 100% rename from 5.018.004-64bit,threaded/DevelPatchPerl.patch rename to 5.018.004-main,threaded/DevelPatchPerl.patch diff --git a/5.018.004-64bit,threaded/Dockerfile b/5.018.004-main,threaded/Dockerfile similarity index 92% rename from 5.018.004-64bit,threaded/Dockerfile rename to 5.018.004-main,threaded/Dockerfile index 368cec4..1798b4f 100644 --- a/5.018.004-64bit,threaded/Dockerfile +++ b/5.018.004-main,threaded/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep &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,93 +178,50 @@ case "$plibpth" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +428,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/5.018.004-slim,threaded/Dockerfile b/5.018.004-slim,threaded/Dockerfile new file mode 100644 index 0000000..16817e6 --- /dev/null +++ b/5.018.004-slim,threaded/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.18.4.tar.bz2 -o perl-5.18.4.tar.bz2 \ + && echo '1fb4d27b75cd244e849f253320260efe1750641aaff4a18ce0d67556ff1b96a5 *perl-5.18.4.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.18.4.tar.bz2 -C /usr/src/perl \ + && rm perl-5.18.4.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.18.4","-de0"] diff --git a/5.018.004-slim/DevelPatchPerl.patch b/5.018.004-slim/DevelPatchPerl.patch new file mode 100644 index 0000000..6381f99 --- /dev/null +++ b/5.018.004-slim/DevelPatchPerl.patch @@ -0,0 +1,333 @@ +diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL +index b707911..2588f0b 100644 +--- a/ext/Errno/Errno_pm.PL ++++ b/ext/Errno/Errno_pm.PL +@@ -236,20 +236,31 @@ sub write_errno_pm { + { # BeOS (support now removed) did not enter this block + # invoke CPP and read the output + ++ my $inhibit_linemarkers = ''; ++ if ($Config{gccversion} =~ /\A(\d+)\./ and $1 >= 5) { ++ # GCC 5.0 interleaves expanded macros with line numbers breaking ++ # each line into multiple lines. RT#123784 ++ $inhibit_linemarkers = ' -P'; ++ } ++ + if ($^O eq 'VMS') { +- my $cpp = "$Config{cppstdin} $Config{cppflags} $Config{cppminus}"; ++ my $cpp = "$Config{cppstdin} $Config{cppflags}" . ++ $inhibit_linemarkers . " $Config{cppminus}"; + $cpp =~ s/sys\$input//i; + open(CPPO,"$cpp errno.c |") or + die "Cannot exec $Config{cppstdin}"; + } elsif ($IsMSWin32 || $^O eq 'NetWare') { +- open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or +- die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; ++ my $cpp = "$Config{cpprun} $Config{cppflags}" . ++ $inhibit_linemarkers; ++ open(CPPO,"$cpp errno.c |") or ++ die "Cannot run '$cpp errno.c'"; + } elsif ($IsSymbian) { +- my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc -"; ++ my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc" . ++ $inhibit_linemarkers ." -"; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } else { +- my $cpp = default_cpp(); ++ my $cpp = default_cpp() . $inhibit_linemarkers; + open(CPPO,"$cpp < errno.c |") + or die "Cannot exec $cpp"; + } +diff --git a/hints/linux.sh b/hints/linux.sh +index a148248..3f38ea0 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,93 +178,50 @@ case "$plibpth" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} 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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi ++# 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 + +-rm -f try.c a.out ++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 + +-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 +288,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 +303,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 +428,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/5.018.004-slim/Dockerfile b/5.018.004-slim/Dockerfile new file mode 100644 index 0000000..c0ff24f --- /dev/null +++ b/5.018.004-slim/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:jessie-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.18.4.tar.bz2 -o perl-5.18.4.tar.bz2 \ + && echo '1fb4d27b75cd244e849f253320260efe1750641aaff4a18ce0d67556ff1b96a5 *perl-5.18.4.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.18.4.tar.bz2 -C /usr/src/perl \ + && rm perl-5.18.4.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Duseshrplib -Dvendorprefix=/usr/local -A ccflags=-fwrapv -des \ + && make -j$(nproc) \ + && make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.18.4","-de0"] diff --git a/5.020.003-64bit,threaded/DevelPatchPerl.patch b/5.020.003-main,threaded/DevelPatchPerl.patch similarity index 100% rename from 5.020.003-64bit,threaded/DevelPatchPerl.patch rename to 5.020.003-main,threaded/DevelPatchPerl.patch diff --git a/5.020.003-64bit,threaded/Dockerfile b/5.020.003-main,threaded/Dockerfile similarity index 92% rename from 5.020.003-64bit,threaded/Dockerfile rename to 5.020.003-main,threaded/Dockerfile index f21aa71..f777a46 100644 --- a/5.020.003-64bit,threaded/Dockerfile +++ b/5.020.003-main,threaded/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep /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. +@@ -204,92 +221,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +428,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/5.020.003-slim,threaded/Dockerfile b/5.020.003-slim,threaded/Dockerfile new file mode 100644 index 0000000..73ab6c1 --- /dev/null +++ b/5.020.003-slim,threaded/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:stretch-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(nproc) make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.20.3","-de0"] diff --git a/5.020.003-slim/DevelPatchPerl.patch b/5.020.003-slim/DevelPatchPerl.patch new file mode 100644 index 0000000..363cf79 --- /dev/null +++ b/5.020.003-slim/DevelPatchPerl.patch @@ -0,0 +1,130 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..3f38ea0 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. +@@ -204,92 +221,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +428,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/5.020.003-slim/Dockerfile b/5.020.003-slim/Dockerfile new file mode 100644 index 0000000..5f55230 --- /dev/null +++ b/5.020.003-slim/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:stretch-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Duseshrplib -Dvendorprefix=/usr/local -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(nproc) make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.20.3","-de0"] diff --git a/5.022.004-64bit,threaded/DevelPatchPerl.patch b/5.022.004-main,threaded/DevelPatchPerl.patch similarity index 100% rename from 5.022.004-64bit,threaded/DevelPatchPerl.patch rename to 5.022.004-main,threaded/DevelPatchPerl.patch diff --git a/5.022.004-64bit,threaded/Dockerfile b/5.022.004-main,threaded/Dockerfile similarity index 92% rename from 5.022.004-64bit,threaded/Dockerfile rename to 5.022.004-main,threaded/Dockerfile index 6de07fc..00e077a 100644 --- a/5.022.004-64bit,threaded/Dockerfile +++ b/5.022.004-main,threaded/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.bz2 -o perl-5.22.4.tar.bz2 \ + && echo '8b3122046d1186598082d0e6da53193b045e85e3505e7d37ee0bdd0bdb539b71 *perl-5.22.4.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.bz2 -C /usr/src/perl \ + && rm perl-5.22.4.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(nproc) make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.22.4","-de0"] diff --git a/5.024.004-64bit/DevelPatchPerl.patch b/5.022.004-slim/DevelPatchPerl.patch similarity index 100% rename from 5.024.004-64bit/DevelPatchPerl.patch rename to 5.022.004-slim/DevelPatchPerl.patch diff --git a/5.022.004-slim/Dockerfile b/5.022.004-slim/Dockerfile new file mode 100644 index 0000000..9fe8784 --- /dev/null +++ b/5.022.004-slim/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:stretch-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.bz2 -o perl-5.22.4.tar.bz2 \ + && echo '8b3122046d1186598082d0e6da53193b045e85e3505e7d37ee0bdd0bdb539b71 *perl-5.22.4.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.bz2 -C /usr/src/perl \ + && rm perl-5.22.4.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Duseshrplib -Dvendorprefix=/usr/local -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(nproc) make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.22.4","-de0"] diff --git a/5.024.004-main,threaded/DevelPatchPerl.patch b/5.024.004-main,threaded/DevelPatchPerl.patch new file mode 100644 index 0000000..4c69d78 --- /dev/null +++ b/5.024.004-main,threaded/DevelPatchPerl.patch @@ -0,0 +1,97 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..3f38ea0 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -221,92 +221,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' diff --git a/5.024.004-64bit,threaded/Dockerfile b/5.024.004-main,threaded/Dockerfile similarity index 92% rename from 5.024.004-64bit,threaded/Dockerfile rename to 5.024.004-main,threaded/Dockerfile index 604d4a1..e08f0f8 100644 --- a/5.024.004-64bit,threaded/Dockerfile +++ b/5.024.004-main,threaded/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' diff --git a/5.024.004-64bit/Dockerfile b/5.024.004-main/Dockerfile similarity index 92% rename from 5.024.004-64bit/Dockerfile rename to 5.024.004-main/Dockerfile index 70137f8..4039976 100644 --- a/5.024.004-64bit/Dockerfile +++ b/5.024.004-main/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' diff --git a/5.024.004-slim,threaded/Dockerfile b/5.024.004-slim,threaded/Dockerfile new file mode 100644 index 0000000..ff26b5b --- /dev/null +++ b/5.024.004-slim,threaded/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:stretch-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.bz2 -o perl-5.24.4.tar.bz2 \ + && echo 'e34ff38c54857f431f37403b757267c9998152bf46b5c750b462f62461279b10 *perl-5.24.4.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.bz2 -C /usr/src/perl \ + && rm perl-5.24.4.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(nproc) make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.24.4","-de0"] diff --git a/5.024.004-slim/DevelPatchPerl.patch b/5.024.004-slim/DevelPatchPerl.patch new file mode 100644 index 0000000..4c69d78 --- /dev/null +++ b/5.024.004-slim/DevelPatchPerl.patch @@ -0,0 +1,97 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..3f38ea0 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -221,92 +221,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-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. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' diff --git a/5.024.004-slim/Dockerfile b/5.024.004-slim/Dockerfile new file mode 100644 index 0000000..9893afa --- /dev/null +++ b/5.024.004-slim/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:stretch-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.bz2 -o perl-5.24.4.tar.bz2 \ + && echo 'e34ff38c54857f431f37403b757267c9998152bf46b5c750b462f62461279b10 *perl-5.24.4.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.bz2 -C /usr/src/perl \ + && rm perl-5.24.4.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Duseshrplib -Dvendorprefix=/usr/local -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(nproc) make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.24.4","-de0"] diff --git a/5.026.002-64bit,threaded/DevelPatchPerl.patch b/5.026.002-main,threaded/DevelPatchPerl.patch similarity index 100% rename from 5.026.002-64bit,threaded/DevelPatchPerl.patch rename to 5.026.002-main,threaded/DevelPatchPerl.patch diff --git a/5.026.002-64bit,threaded/Dockerfile b/5.026.002-main,threaded/Dockerfile similarity index 92% rename from 5.026.002-64bit,threaded/Dockerfile rename to 5.026.002-main,threaded/Dockerfile index a78507b..0319e95 100644 --- a/5.026.002-64bit,threaded/Dockerfile +++ b/5.026.002-main,threaded/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.2.tar.bz2 -o perl-5.26.2.tar.bz2 \ + && echo '3f6a6b5bbd43016e5211e24b6631ea84216dd300216a2293b41c9195032f3e81 *perl-5.26.2.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.2.tar.bz2 -C /usr/src/perl \ + && rm perl-5.26.2.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(nproc) make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.26.2","-de0"] diff --git a/5.028.000-64bit/DevelPatchPerl.patch b/5.026.002-slim/DevelPatchPerl.patch similarity index 100% rename from 5.028.000-64bit/DevelPatchPerl.patch rename to 5.026.002-slim/DevelPatchPerl.patch diff --git a/5.026.002-slim/Dockerfile b/5.026.002-slim/Dockerfile new file mode 100644 index 0000000..23cc86c --- /dev/null +++ b/5.026.002-slim/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:stretch-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.2.tar.bz2 -o perl-5.26.2.tar.bz2 \ + && echo '3f6a6b5bbd43016e5211e24b6631ea84216dd300216a2293b41c9195032f3e81 *perl-5.26.2.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.2.tar.bz2 -C /usr/src/perl \ + && rm perl-5.26.2.tar.bz2 \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Duseshrplib -Dvendorprefix=/usr/local -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(nproc) make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.26.2","-de0"] diff --git a/5.028.000-main,threaded/DevelPatchPerl.patch b/5.028.000-main,threaded/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.028.000-64bit,threaded/Dockerfile b/5.028.000-main,threaded/Dockerfile similarity index 92% rename from 5.028.000-64bit,threaded/Dockerfile rename to 5.028.000-main,threaded/Dockerfile index c264dcc..53a733c 100644 --- a/5.028.000-64bit,threaded/Dockerfile +++ b/5.028.000-main,threaded/Dockerfile @@ -4,7 +4,8 @@ LABEL maintainer="Peter Martini , Zak B. Elep , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.0.tar.xz -o perl-5.28.0.tar.xz \ + && echo '059b3cb69970d8c8c5964caced0335b4af34ac990c8e61f7e3f90cd1c2d11e49 *perl-5.28.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.0.tar.xz -C /usr/src/perl \ + && rm perl-5.28.0.tar.xz \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(nproc) make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.28.0","-de0"] diff --git a/5.028.000-slim/DevelPatchPerl.patch b/5.028.000-slim/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.028.000-slim/Dockerfile b/5.028.000-slim/Dockerfile new file mode 100644 index 0000000..67fb448 --- /dev/null +++ b/5.028.000-slim/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:stretch-slim +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + # libbz2-dev \ + # libdb-dev \ + libc6-dev \ + # libgdbm-dev \ + # liblzma-dev \ + make \ + netbase \ + patch \ + # procps \ + # zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.0.tar.xz -o perl-5.28.0.tar.xz \ + && echo '059b3cb69970d8c8c5964caced0335b4af34ac990c8e61f7e3f90cd1c2d11e49 *perl-5.28.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.0.tar.xz -C /usr/src/perl \ + && rm perl-5.28.0.tar.xz \ + && cat *.patch | patch -p1 \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" \ + && archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" \ + && ./Configure -Darchname="$gnuArch" "$archFlag" -Duseshrplib -Dvendorprefix=/usr/local -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(nproc) make test_harness \ + && make install \ + && cd /usr/src \ + && curl -LO http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ + && echo '9b60767fe40752ef7a9d3f13f19060a63389a5c23acc3e9827e19b75500f81f3 *App-cpanminus-1.7044.tar.gz' | sha256sum -c - \ + && tar -xzf App-cpanminus-1.7044.tar.gz && cd App-cpanminus-1.7044 && perl bin/cpanm . && cd /root \ + && savedPackages="make netbase" \ + && apt-mark auto '.*' > /dev/null \ + && apt-mark manual $savedPackages \ + && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \ + && rm -fr /var/cache/apt/* /var/lib/apt/lists/* \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR /root + +CMD ["perl5.28.0","-de0"]