diff --git a/.github/workflows/build-image-eol.yml b/.github/workflows/build-image-eol.yml new file mode 100644 index 0000000..b174c4d --- /dev/null +++ b/.github/workflows/build-image-eol.yml @@ -0,0 +1,60 @@ +name: Build and Test (EOL) + +on: + push: + branches: + - '**' + tags-ignore: + - '*' + paths: + - 'eol/**' + pull_request: + paths: + - 'eol/**' + +defaults: + run: + shell: 'bash -Eeuo pipefail -x {0}' + working-directory: eol + +jobs: + generate-matrix: + name: Generate Matrix + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.generate.outputs.matrix }} + steps: + - uses: actions/checkout@master + - id: generate + name: Enumerate Dockerfiles + run: | + matrix="$(dirname */Dockerfile | sort -rn | jq -csR 'rtrimstr("\n") | split("\n") | { directory: . }')" + echo "::set-output name=matrix::$matrix" + build-image: + needs: generate-matrix + runs-on: ubuntu-latest + strategy: + matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} + name: ${{ matrix.directory }} + steps: + - uses: actions/checkout@master + - name: Clone docker-library/official-images (for testing) + run: | + git clone --depth 1 --single-branch https://github.com/docker-library/official-images.git + - name: Build image + run: | + docker version + dir='${{ matrix.directory }}' + img="perl:${dir//,/-}" + docker build -t "$img" "$dir" + - name: Inspect image creation and tag time + run: | + dir='${{ matrix.directory }}' + img="perl:${dir//,/-}" + docker image inspect --format '{{.Created}}' "$img" + docker image inspect --format '{{.Metadata.LastTagTime}}' "$img" + - name: Run tests + run: | + dir='${{ matrix.directory }}' + img="perl:${dir//,/-}" + ./official-images/test/run.sh "$img" diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index 63dac73..77a5ba4 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -1,4 +1,4 @@ -name: Build and test latest supported Perls +name: Build and Test on: push: @@ -8,13 +8,29 @@ on: - '*' pull_request: +defaults: + run: + shell: 'bash -Eeuo pipefail -x {0}' + jobs: + generate-matrix: + name: Generate Matrix + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.generate.outputs.matrix }} + steps: + - uses: actions/checkout@master + - id: generate + name: Enumerate Dockerfiles + run: | + matrix="$(dirname */Dockerfile | sort -rn | jq -csR 'rtrimstr("\n") | split("\n") | { directory: . }')" + echo "::set-output name=matrix::$matrix" build-image: + needs: generate-matrix runs-on: ubuntu-latest strategy: - matrix: - variant: [ 'main', 'slim', 'main,threaded', 'slim,threaded' ] - perl-version: [ '5.032.001', '5.030.003' ] + matrix: ${{ fromJson(needs.generate-matrix.outputs.matrix) }} + name: ${{ matrix.directory }} steps: - uses: actions/checkout@master - name: Clone docker-library/official-images (for testing) @@ -23,11 +39,17 @@ jobs: - name: Build image run: | docker version - docker build --no-cache -t perl:${{ matrix.perl-version }} ${{ matrix.perl-version }}-${{ matrix.variant }}-buster + dir='${{ matrix.directory }}' + img="perl:${dir//,/-}" + docker build -t "$img" "$dir" - name: Inspect image creation and tag time run: | - docker image inspect --format \'{{.Created}}\' perl:${{ matrix.perl-version }} - docker image inspect --format \'{{.Metadata.LastTagTime}}\' perl:${{ matrix.perl-version }} + dir='${{ matrix.directory }}' + img="perl:${dir//,/-}" + docker image inspect --format '{{.Created}}' "$img" + docker image inspect --format '{{.Metadata.LastTagTime}}' "$img" - name: Run tests run: | - ./official-images/test/run.sh perl:${{ matrix.perl-version }} + dir='${{ matrix.directory }}' + img="perl:${dir//,/-}" + ./official-images/test/run.sh "$img" diff --git a/.github/workflows/generate-dockerfiles-patches.yml b/.github/workflows/generate-dockerfiles-patches.yml index ba956e2..6739401 100644 --- a/.github/workflows/generate-dockerfiles-patches.yml +++ b/.github/workflows/generate-dockerfiles-patches.yml @@ -29,3 +29,10 @@ jobs: - name: Show diffstat (if any) run: | git --no-pager diff --stat HEAD + - name: Generate EOL Dockerfiles/patches + run: | + cd eol + perl -I../local/lib/perl5 ../generate.pl + - name: Show diffstat (if any) + run: | + git --no-pager diff --stat HEAD diff --git a/config.yml b/config.yml index f61e559..1643569 100644 --- a/config.yml +++ b/config.yml @@ -8,60 +8,6 @@ options: threaded: "-Dusethreads" releases: - - version: 5.8.9 - sha256: 1097fbcd48ceccb2bc735d119c9db399a02a8ab9f7dc53e29e47e6a8d0d72e79 - extra_flags: "-A ccflags=-fwrapv" - test_parallel: no - debian_release: jessie - - - version: 5.10.1 - sha256: 9385f2c8c2ca8b1dc4a7c31903f1f8dc8f2ba867dc2a9e5c93012ed6b564e826 - extra_flags: "-A ccflags=-fwrapv" - test_parallel: no - debian_release: jessie - - - version: 5.12.5 - sha256: 10749417fd3010aae320a34181ad4cd6a4855c1fc63403b87fa4d630b18e966c - extra_flags: "-A ccflags=-fwrapv" - test_parallel: no - debian_release: jessie - - - version: 5.14.4 - sha256: eece8c2b0d491bf6f746bd1f4f1bb7ce26f6b98e91c54690c617d7af38964745 - extra_flags: "-A ccflags=-fwrapv" - test_parallel: no - debian_release: jessie - - - version: 5.16.3 - sha256: bb7bc735e6813b177dcfccd480defcde7eddefa173b5967eac11babd1bfa98e8 - extra_flags: "-A ccflags=-fwrapv" - test_parallel: no - debian_release: jessie - - - version: 5.18.4 - sha256: 1fb4d27b75cd244e849f253320260efe1750641aaff4a18ce0d67556ff1b96a5 - extra_flags: "-A ccflags=-fwrapv" - test_parallel: no - debian_release: jessie - - - version: 5.20.3 - sha256: 1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b - debian_release: stretch - - - version: 5.22.4 - sha256: 8b3122046d1186598082d0e6da53193b045e85e3505e7d37ee0bdd0bdb539b71 - debian_release: stretch - - - version: 5.24.4 - sha256: e34ff38c54857f431f37403b757267c9998152bf46b5c750b462f62461279b10 - debian_release: stretch - - - version: 5.26.3 - sha256: 9ff35a613213f29ab53975141af6825ae7d4408895538cac0922e47ab92a1477 - debian_release: - - stretch - - buster - - version: 5.28.3 sha256: 77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 type: xz diff --git a/downloads/.keep b/downloads/.keep new file mode 100644 index 0000000..e69de29 diff --git a/5.008.009-main,threaded-jessie/DevelPatchPerl.patch b/eol/5.008.009-main,threaded-buster/DevelPatchPerl.patch similarity index 100% rename from 5.008.009-main,threaded-jessie/DevelPatchPerl.patch rename to eol/5.008.009-main,threaded-buster/DevelPatchPerl.patch diff --git a/5.008.009-main,threaded-jessie/Dockerfile b/eol/5.008.009-main,threaded-buster/Dockerfile similarity index 98% rename from 5.008.009-main,threaded-jessie/Dockerfile rename to eol/5.008.009-main,threaded-buster/Dockerfile index 296fc7c..29cc2be 100644 --- a/5.008.009-main,threaded-jessie/Dockerfile +++ b/eol/5.008.009-main,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ diff --git a/5.008.009-main-jessie/DevelPatchPerl.patch b/eol/5.008.009-main,threaded-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.008.009-main-jessie/DevelPatchPerl.patch rename to eol/5.008.009-main,threaded-stretch/DevelPatchPerl.patch diff --git a/eol/5.008.009-main,threaded-stretch/Dockerfile b/eol/5.008.009-main,threaded-stretch/Dockerfile new file mode 100644 index 0000000..6ffd3b1 --- /dev/null +++ b/eol/5.008.009-main,threaded-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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 https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.8.9","-de0"] diff --git a/5.008.009-slim,threaded-jessie/DevelPatchPerl.patch b/eol/5.008.009-main-buster/DevelPatchPerl.patch similarity index 100% rename from 5.008.009-slim,threaded-jessie/DevelPatchPerl.patch rename to eol/5.008.009-main-buster/DevelPatchPerl.patch diff --git a/5.008.009-main-jessie/Dockerfile b/eol/5.008.009-main-buster/Dockerfile similarity index 98% rename from 5.008.009-main-jessie/Dockerfile rename to eol/5.008.009-main-buster/Dockerfile index 9c387cb..6291145 100644 --- a/5.008.009-main-jessie/Dockerfile +++ b/eol/5.008.009-main-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ diff --git a/5.008.009-slim-jessie/DevelPatchPerl.patch b/eol/5.008.009-main-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.008.009-slim-jessie/DevelPatchPerl.patch rename to eol/5.008.009-main-stretch/DevelPatchPerl.patch diff --git a/eol/5.008.009-main-stretch/Dockerfile b/eol/5.008.009-main-stretch/Dockerfile new file mode 100644 index 0000000..d64654a --- /dev/null +++ b/eol/5.008.009-main-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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 https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.8.9","-de0"] diff --git a/eol/5.008.009-slim,threaded-buster/DevelPatchPerl.patch b/eol/5.008.009-slim,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..202f994 --- /dev/null +++ b/eol/5.008.009-slim,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,722 @@ +diff --git a/Configure b/Configure +index e746fe3..0bbd632 100755 +--- a/Configure ++++ b/Configure +@@ -4495,7 +4495,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4535,7 +4535,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4547,6 +4547,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5060,13 +5076,13 @@ esac + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if test -d /etc/conf/kconfig.d && ++ 2.*) if test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5075,7 +5091,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) echo " " + echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1 +@@ -5189,7 +5205,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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..c749f0f 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"*) ++*"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,91 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac + +-rm -f try.c a.out ++# 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 + +-if /bin/sh -c exit; then ++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 ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -296,7 +301,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 +316,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 +418,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 +441,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/lib/Time/Local.t b/lib/Time/Local.t +index 4f8674f..5fff350 100755 +--- a/lib/Time/Local.t ++++ b/lib/Time/Local.t +@@ -96,7 +96,7 @@ for (@time, @neg_time) { + if $year < 70 && ! $neg_epoch_ok; + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -110,7 +110,7 @@ for (@time, @neg_time) { + } + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -127,7 +127,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -136,14 +135,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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/pp.c b/pp.c +index 14f6e16..6d2cb29 100644 +--- a/pp.c ++++ b/pp.c +@@ -3486,8 +3486,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index a3ff285..4b54598 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -783,6 +783,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -800,6 +805,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/5.008.009-slim,threaded-jessie/Dockerfile b/eol/5.008.009-slim,threaded-buster/Dockerfile similarity index 98% rename from 5.008.009-slim,threaded-jessie/Dockerfile rename to eol/5.008.009-slim,threaded-buster/Dockerfile index 9c080a5..48a048f 100644 --- a/5.008.009-slim,threaded-jessie/Dockerfile +++ b/eol/5.008.009-slim,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ diff --git a/eol/5.008.009-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.008.009-slim,threaded-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..202f994 --- /dev/null +++ b/eol/5.008.009-slim,threaded-stretch/DevelPatchPerl.patch @@ -0,0 +1,722 @@ +diff --git a/Configure b/Configure +index e746fe3..0bbd632 100755 +--- a/Configure ++++ b/Configure +@@ -4495,7 +4495,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4535,7 +4535,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4547,6 +4547,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5060,13 +5076,13 @@ esac + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if test -d /etc/conf/kconfig.d && ++ 2.*) if test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5075,7 +5091,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) echo " " + echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1 +@@ -5189,7 +5205,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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..c749f0f 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"*) ++*"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,91 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac + +-rm -f try.c a.out ++# 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 + +-if /bin/sh -c exit; then ++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 ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -296,7 +301,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 +316,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 +418,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 +441,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/lib/Time/Local.t b/lib/Time/Local.t +index 4f8674f..5fff350 100755 +--- a/lib/Time/Local.t ++++ b/lib/Time/Local.t +@@ -96,7 +96,7 @@ for (@time, @neg_time) { + if $year < 70 && ! $neg_epoch_ok; + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -110,7 +110,7 @@ for (@time, @neg_time) { + } + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -127,7 +127,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -136,14 +135,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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/pp.c b/pp.c +index 14f6e16..6d2cb29 100644 +--- a/pp.c ++++ b/pp.c +@@ -3486,8 +3486,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index a3ff285..4b54598 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -783,6 +783,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -800,6 +805,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/eol/5.008.009-slim,threaded-stretch/Dockerfile b/eol/5.008.009-slim,threaded-stretch/Dockerfile new file mode 100644 index 0000000..35a66ea --- /dev/null +++ b/eol/5.008.009-slim,threaded-stretch/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.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 https://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 / + +CMD ["perl5.8.9","-de0"] diff --git a/eol/5.008.009-slim-buster/DevelPatchPerl.patch b/eol/5.008.009-slim-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..202f994 --- /dev/null +++ b/eol/5.008.009-slim-buster/DevelPatchPerl.patch @@ -0,0 +1,722 @@ +diff --git a/Configure b/Configure +index e746fe3..0bbd632 100755 +--- a/Configure ++++ b/Configure +@@ -4495,7 +4495,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4535,7 +4535,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4547,6 +4547,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5060,13 +5076,13 @@ esac + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if test -d /etc/conf/kconfig.d && ++ 2.*) if test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5075,7 +5091,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) echo " " + echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1 +@@ -5189,7 +5205,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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..c749f0f 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"*) ++*"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,91 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac + +-rm -f try.c a.out ++# 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 + +-if /bin/sh -c exit; then ++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 ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -296,7 +301,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 +316,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 +418,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 +441,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/lib/Time/Local.t b/lib/Time/Local.t +index 4f8674f..5fff350 100755 +--- a/lib/Time/Local.t ++++ b/lib/Time/Local.t +@@ -96,7 +96,7 @@ for (@time, @neg_time) { + if $year < 70 && ! $neg_epoch_ok; + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -110,7 +110,7 @@ for (@time, @neg_time) { + } + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -127,7 +127,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -136,14 +135,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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/pp.c b/pp.c +index 14f6e16..6d2cb29 100644 +--- a/pp.c ++++ b/pp.c +@@ -3486,8 +3486,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index a3ff285..4b54598 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -783,6 +783,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -800,6 +805,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/5.008.009-slim-jessie/Dockerfile b/eol/5.008.009-slim-buster/Dockerfile similarity index 98% rename from 5.008.009-slim-jessie/Dockerfile rename to eol/5.008.009-slim-buster/Dockerfile index abf5b3e..d6bc044 100644 --- a/5.008.009-slim-jessie/Dockerfile +++ b/eol/5.008.009-slim-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ diff --git a/eol/5.008.009-slim-stretch/DevelPatchPerl.patch b/eol/5.008.009-slim-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..202f994 --- /dev/null +++ b/eol/5.008.009-slim-stretch/DevelPatchPerl.patch @@ -0,0 +1,722 @@ +diff --git a/Configure b/Configure +index e746fe3..0bbd632 100755 +--- a/Configure ++++ b/Configure +@@ -4495,7 +4495,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4535,7 +4535,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4547,6 +4547,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5060,13 +5076,13 @@ esac + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if test -d /etc/conf/kconfig.d && ++ 2.*) if test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5075,7 +5091,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) echo " " + echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1 +@@ -5189,7 +5205,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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..c749f0f 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"*) ++*"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,91 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac + +-rm -f try.c a.out ++# 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 + +-if /bin/sh -c exit; then ++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 ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -296,7 +301,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 +316,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 +418,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 +441,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/lib/Time/Local.t b/lib/Time/Local.t +index 4f8674f..5fff350 100755 +--- a/lib/Time/Local.t ++++ b/lib/Time/Local.t +@@ -96,7 +96,7 @@ for (@time, @neg_time) { + if $year < 70 && ! $neg_epoch_ok; + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -110,7 +110,7 @@ for (@time, @neg_time) { + } + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -127,7 +127,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -136,14 +135,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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/pp.c b/pp.c +index 14f6e16..6d2cb29 100644 +--- a/pp.c ++++ b/pp.c +@@ -3486,8 +3486,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index a3ff285..4b54598 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -783,6 +783,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -800,6 +805,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/eol/5.008.009-slim-stretch/Dockerfile b/eol/5.008.009-slim-stretch/Dockerfile new file mode 100644 index 0000000..5b667b8 --- /dev/null +++ b/eol/5.008.009-slim-stretch/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.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 https://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 / + +CMD ["perl5.8.9","-de0"] diff --git a/5.010.001-main,threaded-jessie/DevelPatchPerl.patch b/eol/5.010.001-main,threaded-buster/DevelPatchPerl.patch similarity index 100% rename from 5.010.001-main,threaded-jessie/DevelPatchPerl.patch rename to eol/5.010.001-main,threaded-buster/DevelPatchPerl.patch diff --git a/5.010.001-main,threaded-jessie/Dockerfile b/eol/5.010.001-main,threaded-buster/Dockerfile similarity index 95% rename from 5.010.001-main,threaded-jessie/Dockerfile rename to eol/5.010.001-main,threaded-buster/Dockerfile index 7b24b6d..c6ffbe7 100644 --- a/5.010.001-main,threaded-jessie/Dockerfile +++ b/eol/5.010.001-main,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.010.001-main-jessie/DevelPatchPerl.patch b/eol/5.010.001-main,threaded-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.010.001-main-jessie/DevelPatchPerl.patch rename to eol/5.010.001-main,threaded-stretch/DevelPatchPerl.patch diff --git a/eol/5.010.001-main,threaded-stretch/Dockerfile b/eol/5.010.001-main,threaded-stretch/Dockerfile new file mode 100644 index 0000000..bf53205 --- /dev/null +++ b/eol/5.010.001-main,threaded-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.10.1","-de0"] diff --git a/5.010.001-slim,threaded-jessie/DevelPatchPerl.patch b/eol/5.010.001-main-buster/DevelPatchPerl.patch similarity index 100% rename from 5.010.001-slim,threaded-jessie/DevelPatchPerl.patch rename to eol/5.010.001-main-buster/DevelPatchPerl.patch diff --git a/5.010.001-main-jessie/Dockerfile b/eol/5.010.001-main-buster/Dockerfile similarity index 95% rename from 5.010.001-main-jessie/Dockerfile rename to eol/5.010.001-main-buster/Dockerfile index 4d1217d..82d9d55 100644 --- a/5.010.001-main-jessie/Dockerfile +++ b/eol/5.010.001-main-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.010.001-slim-jessie/DevelPatchPerl.patch b/eol/5.010.001-main-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.010.001-slim-jessie/DevelPatchPerl.patch rename to eol/5.010.001-main-stretch/DevelPatchPerl.patch diff --git a/eol/5.010.001-main-stretch/Dockerfile b/eol/5.010.001-main-stretch/Dockerfile new file mode 100644 index 0000000..949d22b --- /dev/null +++ b/eol/5.010.001-main-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.10.1","-de0"] diff --git a/eol/5.010.001-slim,threaded-buster/DevelPatchPerl.patch b/eol/5.010.001-slim,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..11cd099 --- /dev/null +++ b/eol/5.010.001-slim,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,855 @@ +diff --git a/Configure b/Configure +index 01fa3c0..46dd11c 100755 +--- a/Configure ++++ b/Configure +@@ -4518,7 +4518,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4558,7 +4558,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4570,6 +4570,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5110,13 +5126,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5125,7 +5141,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5227,7 +5243,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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/ext/SDBM_File/sdbm/sdbm.c b/ext/SDBM_File/sdbm/sdbm.c +index c5f7aa8..c7c329a 100644 +--- a/ext/SDBM_File/sdbm/sdbm.c ++++ b/ext/SDBM_File/sdbm/sdbm.c +@@ -78,8 +78,8 @@ sdbm_open(register char *file, register int flags, register int mode) + register char *dirname; + register char *pagname; + size_t filelen; +- const size_t dirfext_len = sizeof(DIRFEXT ""); +- const size_t pagfext_len = sizeof(PAGFEXT ""); ++ const size_t dirfext_size = sizeof(DIRFEXT ""); ++ const size_t pagfext_size = sizeof(PAGFEXT ""); + + if (file == NULL || !*file) + return errno = EINVAL, (DBM *) NULL; +@@ -88,17 +88,17 @@ sdbm_open(register char *file, register int flags, register int mode) + */ + filelen = strlen(file); + +- if ((dirname = (char *) malloc(filelen + dirfext_len + 1 +- + filelen + pagfext_len + 1)) == NULL) ++ if ((dirname = (char *) malloc(filelen + dirfext_size ++ + filelen + pagfext_size)) == NULL) + return errno = ENOMEM, (DBM *) NULL; + /* + * build the file names + */ + memcpy(dirname, file, filelen); +- memcpy(dirname + filelen, DIRFEXT, dirfext_len + 1); +- pagname = dirname + filelen + dirfext_len + 1; ++ memcpy(dirname + filelen, DIRFEXT, dirfext_size); ++ pagname = dirname + filelen + dirfext_size; + memcpy(pagname, file, filelen); +- memcpy(pagname + filelen, PAGFEXT, pagfext_len + 1); ++ memcpy(pagname + filelen, PAGFEXT, pagfext_size); + + db = sdbm_prep(dirname, pagname, flags, mode); + free((char *) dirname); +diff --git a/hints/linux.sh b/hints/linux.sh +index c88f157..c749f0f 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"*) ++*"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,91 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac + +-rm -f try.c a.out ++# 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 + +-if /bin/sh -c exit; then ++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 ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -299,7 +301,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 +316,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 +418,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 +441,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/lib/Time/Local.t b/lib/Time/Local.t +index 4f8674f..5fff350 100755 +--- a/lib/Time/Local.t ++++ b/lib/Time/Local.t +@@ -96,7 +96,7 @@ for (@time, @neg_time) { + if $year < 70 && ! $neg_epoch_ok; + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -110,7 +110,7 @@ for (@time, @neg_time) { + } + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -127,7 +127,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -136,14 +135,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/lib/h2ph.t b/lib/h2ph.t +index 27dd7b9..947fae6 100755 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -41,7 +41,7 @@ $result = runperl( progfile => 'lib/h2ph.pht', + stderr => 1 ); + like( $result, qr/syntax OK$/, "output compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.',"-w"], + prog => '$SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht);'); + is( $result, '', "output free of warnings" ); + +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/pp.c b/pp.c +index 1c8620c..bbb0129 100644 +--- a/pp.c ++++ b/pp.c +@@ -3493,8 +3493,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index cd4b5a0..4820479 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -783,6 +783,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -800,6 +805,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/5.010.001-slim,threaded-jessie/Dockerfile b/eol/5.010.001-slim,threaded-buster/Dockerfile similarity index 96% rename from 5.010.001-slim,threaded-jessie/Dockerfile rename to eol/5.010.001-slim,threaded-buster/Dockerfile index ccd9a36..8f5e1ad 100644 --- a/5.010.001-slim,threaded-jessie/Dockerfile +++ b/eol/5.010.001-slim,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.010.001-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.010.001-slim,threaded-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..11cd099 --- /dev/null +++ b/eol/5.010.001-slim,threaded-stretch/DevelPatchPerl.patch @@ -0,0 +1,855 @@ +diff --git a/Configure b/Configure +index 01fa3c0..46dd11c 100755 +--- a/Configure ++++ b/Configure +@@ -4518,7 +4518,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4558,7 +4558,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4570,6 +4570,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5110,13 +5126,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5125,7 +5141,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5227,7 +5243,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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/ext/SDBM_File/sdbm/sdbm.c b/ext/SDBM_File/sdbm/sdbm.c +index c5f7aa8..c7c329a 100644 +--- a/ext/SDBM_File/sdbm/sdbm.c ++++ b/ext/SDBM_File/sdbm/sdbm.c +@@ -78,8 +78,8 @@ sdbm_open(register char *file, register int flags, register int mode) + register char *dirname; + register char *pagname; + size_t filelen; +- const size_t dirfext_len = sizeof(DIRFEXT ""); +- const size_t pagfext_len = sizeof(PAGFEXT ""); ++ const size_t dirfext_size = sizeof(DIRFEXT ""); ++ const size_t pagfext_size = sizeof(PAGFEXT ""); + + if (file == NULL || !*file) + return errno = EINVAL, (DBM *) NULL; +@@ -88,17 +88,17 @@ sdbm_open(register char *file, register int flags, register int mode) + */ + filelen = strlen(file); + +- if ((dirname = (char *) malloc(filelen + dirfext_len + 1 +- + filelen + pagfext_len + 1)) == NULL) ++ if ((dirname = (char *) malloc(filelen + dirfext_size ++ + filelen + pagfext_size)) == NULL) + return errno = ENOMEM, (DBM *) NULL; + /* + * build the file names + */ + memcpy(dirname, file, filelen); +- memcpy(dirname + filelen, DIRFEXT, dirfext_len + 1); +- pagname = dirname + filelen + dirfext_len + 1; ++ memcpy(dirname + filelen, DIRFEXT, dirfext_size); ++ pagname = dirname + filelen + dirfext_size; + memcpy(pagname, file, filelen); +- memcpy(pagname + filelen, PAGFEXT, pagfext_len + 1); ++ memcpy(pagname + filelen, PAGFEXT, pagfext_size); + + db = sdbm_prep(dirname, pagname, flags, mode); + free((char *) dirname); +diff --git a/hints/linux.sh b/hints/linux.sh +index c88f157..c749f0f 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"*) ++*"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,91 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac + +-rm -f try.c a.out ++# 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 + +-if /bin/sh -c exit; then ++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 ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -299,7 +301,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 +316,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 +418,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 +441,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/lib/Time/Local.t b/lib/Time/Local.t +index 4f8674f..5fff350 100755 +--- a/lib/Time/Local.t ++++ b/lib/Time/Local.t +@@ -96,7 +96,7 @@ for (@time, @neg_time) { + if $year < 70 && ! $neg_epoch_ok; + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -110,7 +110,7 @@ for (@time, @neg_time) { + } + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -127,7 +127,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -136,14 +135,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/lib/h2ph.t b/lib/h2ph.t +index 27dd7b9..947fae6 100755 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -41,7 +41,7 @@ $result = runperl( progfile => 'lib/h2ph.pht', + stderr => 1 ); + like( $result, qr/syntax OK$/, "output compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.',"-w"], + prog => '$SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht);'); + is( $result, '', "output free of warnings" ); + +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/pp.c b/pp.c +index 1c8620c..bbb0129 100644 +--- a/pp.c ++++ b/pp.c +@@ -3493,8 +3493,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index cd4b5a0..4820479 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -783,6 +783,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -800,6 +805,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/eol/5.010.001-slim,threaded-stretch/Dockerfile b/eol/5.010.001-slim,threaded-stretch/Dockerfile new file mode 100644 index 0000000..df2af59 --- /dev/null +++ b/eol/5.010.001-slim,threaded-stretch/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.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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.10.1","-de0"] diff --git a/eol/5.010.001-slim-buster/DevelPatchPerl.patch b/eol/5.010.001-slim-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..11cd099 --- /dev/null +++ b/eol/5.010.001-slim-buster/DevelPatchPerl.patch @@ -0,0 +1,855 @@ +diff --git a/Configure b/Configure +index 01fa3c0..46dd11c 100755 +--- a/Configure ++++ b/Configure +@@ -4518,7 +4518,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4558,7 +4558,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4570,6 +4570,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5110,13 +5126,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5125,7 +5141,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5227,7 +5243,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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/ext/SDBM_File/sdbm/sdbm.c b/ext/SDBM_File/sdbm/sdbm.c +index c5f7aa8..c7c329a 100644 +--- a/ext/SDBM_File/sdbm/sdbm.c ++++ b/ext/SDBM_File/sdbm/sdbm.c +@@ -78,8 +78,8 @@ sdbm_open(register char *file, register int flags, register int mode) + register char *dirname; + register char *pagname; + size_t filelen; +- const size_t dirfext_len = sizeof(DIRFEXT ""); +- const size_t pagfext_len = sizeof(PAGFEXT ""); ++ const size_t dirfext_size = sizeof(DIRFEXT ""); ++ const size_t pagfext_size = sizeof(PAGFEXT ""); + + if (file == NULL || !*file) + return errno = EINVAL, (DBM *) NULL; +@@ -88,17 +88,17 @@ sdbm_open(register char *file, register int flags, register int mode) + */ + filelen = strlen(file); + +- if ((dirname = (char *) malloc(filelen + dirfext_len + 1 +- + filelen + pagfext_len + 1)) == NULL) ++ if ((dirname = (char *) malloc(filelen + dirfext_size ++ + filelen + pagfext_size)) == NULL) + return errno = ENOMEM, (DBM *) NULL; + /* + * build the file names + */ + memcpy(dirname, file, filelen); +- memcpy(dirname + filelen, DIRFEXT, dirfext_len + 1); +- pagname = dirname + filelen + dirfext_len + 1; ++ memcpy(dirname + filelen, DIRFEXT, dirfext_size); ++ pagname = dirname + filelen + dirfext_size; + memcpy(pagname, file, filelen); +- memcpy(pagname + filelen, PAGFEXT, pagfext_len + 1); ++ memcpy(pagname + filelen, PAGFEXT, pagfext_size); + + db = sdbm_prep(dirname, pagname, flags, mode); + free((char *) dirname); +diff --git a/hints/linux.sh b/hints/linux.sh +index c88f157..c749f0f 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"*) ++*"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,91 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac + +-rm -f try.c a.out ++# 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 + +-if /bin/sh -c exit; then ++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 ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -299,7 +301,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 +316,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 +418,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 +441,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/lib/Time/Local.t b/lib/Time/Local.t +index 4f8674f..5fff350 100755 +--- a/lib/Time/Local.t ++++ b/lib/Time/Local.t +@@ -96,7 +96,7 @@ for (@time, @neg_time) { + if $year < 70 && ! $neg_epoch_ok; + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -110,7 +110,7 @@ for (@time, @neg_time) { + } + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -127,7 +127,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -136,14 +135,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/lib/h2ph.t b/lib/h2ph.t +index 27dd7b9..947fae6 100755 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -41,7 +41,7 @@ $result = runperl( progfile => 'lib/h2ph.pht', + stderr => 1 ); + like( $result, qr/syntax OK$/, "output compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.',"-w"], + prog => '$SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht);'); + is( $result, '', "output free of warnings" ); + +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/pp.c b/pp.c +index 1c8620c..bbb0129 100644 +--- a/pp.c ++++ b/pp.c +@@ -3493,8 +3493,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index cd4b5a0..4820479 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -783,6 +783,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -800,6 +805,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/5.010.001-slim-jessie/Dockerfile b/eol/5.010.001-slim-buster/Dockerfile similarity index 96% rename from 5.010.001-slim-jessie/Dockerfile rename to eol/5.010.001-slim-buster/Dockerfile index 3e9720f..1053b7c 100644 --- a/5.010.001-slim-jessie/Dockerfile +++ b/eol/5.010.001-slim-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.010.001-slim-stretch/DevelPatchPerl.patch b/eol/5.010.001-slim-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..11cd099 --- /dev/null +++ b/eol/5.010.001-slim-stretch/DevelPatchPerl.patch @@ -0,0 +1,855 @@ +diff --git a/Configure b/Configure +index 01fa3c0..46dd11c 100755 +--- a/Configure ++++ b/Configure +@@ -4518,7 +4518,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4558,7 +4558,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4570,6 +4570,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5110,13 +5126,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5125,7 +5141,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5227,7 +5243,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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/ext/SDBM_File/sdbm/sdbm.c b/ext/SDBM_File/sdbm/sdbm.c +index c5f7aa8..c7c329a 100644 +--- a/ext/SDBM_File/sdbm/sdbm.c ++++ b/ext/SDBM_File/sdbm/sdbm.c +@@ -78,8 +78,8 @@ sdbm_open(register char *file, register int flags, register int mode) + register char *dirname; + register char *pagname; + size_t filelen; +- const size_t dirfext_len = sizeof(DIRFEXT ""); +- const size_t pagfext_len = sizeof(PAGFEXT ""); ++ const size_t dirfext_size = sizeof(DIRFEXT ""); ++ const size_t pagfext_size = sizeof(PAGFEXT ""); + + if (file == NULL || !*file) + return errno = EINVAL, (DBM *) NULL; +@@ -88,17 +88,17 @@ sdbm_open(register char *file, register int flags, register int mode) + */ + filelen = strlen(file); + +- if ((dirname = (char *) malloc(filelen + dirfext_len + 1 +- + filelen + pagfext_len + 1)) == NULL) ++ if ((dirname = (char *) malloc(filelen + dirfext_size ++ + filelen + pagfext_size)) == NULL) + return errno = ENOMEM, (DBM *) NULL; + /* + * build the file names + */ + memcpy(dirname, file, filelen); +- memcpy(dirname + filelen, DIRFEXT, dirfext_len + 1); +- pagname = dirname + filelen + dirfext_len + 1; ++ memcpy(dirname + filelen, DIRFEXT, dirfext_size); ++ pagname = dirname + filelen + dirfext_size; + memcpy(pagname, file, filelen); +- memcpy(pagname + filelen, PAGFEXT, pagfext_len + 1); ++ memcpy(pagname + filelen, PAGFEXT, pagfext_size); + + db = sdbm_prep(dirname, pagname, flags, mode); + free((char *) dirname); +diff --git a/hints/linux.sh b/hints/linux.sh +index c88f157..c749f0f 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"*) ++*"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,91 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac + +-rm -f try.c a.out ++# 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 + +-if /bin/sh -c exit; then ++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 ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' + else +@@ -299,7 +301,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 +316,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 +418,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 +441,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/lib/Time/Local.t b/lib/Time/Local.t +index 4f8674f..5fff350 100755 +--- a/lib/Time/Local.t ++++ b/lib/Time/Local.t +@@ -96,7 +96,7 @@ for (@time, @neg_time) { + if $year < 70 && ! $neg_epoch_ok; + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -110,7 +110,7 @@ for (@time, @neg_time) { + } + + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -127,7 +127,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -136,14 +135,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/lib/h2ph.t b/lib/h2ph.t +index 27dd7b9..947fae6 100755 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -41,7 +41,7 @@ $result = runperl( progfile => 'lib/h2ph.pht', + stderr => 1 ); + like( $result, qr/syntax OK$/, "output compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.',"-w"], + prog => '$SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht);'); + is( $result, '', "output free of warnings" ); + +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/pp.c b/pp.c +index 1c8620c..bbb0129 100644 +--- a/pp.c ++++ b/pp.c +@@ -3493,8 +3493,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index cd4b5a0..4820479 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -783,6 +783,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -800,6 +805,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/eol/5.010.001-slim-stretch/Dockerfile b/eol/5.010.001-slim-stretch/Dockerfile new file mode 100644 index 0000000..476a726 --- /dev/null +++ b/eol/5.010.001-slim-stretch/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.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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.10.1","-de0"] diff --git a/5.012.005-main,threaded-jessie/DevelPatchPerl.patch b/eol/5.012.005-main,threaded-buster/DevelPatchPerl.patch similarity index 100% rename from 5.012.005-main,threaded-jessie/DevelPatchPerl.patch rename to eol/5.012.005-main,threaded-buster/DevelPatchPerl.patch diff --git a/5.012.005-main,threaded-jessie/Dockerfile b/eol/5.012.005-main,threaded-buster/Dockerfile similarity index 98% rename from 5.012.005-main,threaded-jessie/Dockerfile rename to eol/5.012.005-main,threaded-buster/Dockerfile index d85d40c..491af6a 100644 --- a/5.012.005-main,threaded-jessie/Dockerfile +++ b/eol/5.012.005-main,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ diff --git a/5.012.005-main-jessie/DevelPatchPerl.patch b/eol/5.012.005-main,threaded-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.012.005-main-jessie/DevelPatchPerl.patch rename to eol/5.012.005-main,threaded-stretch/DevelPatchPerl.patch diff --git a/eol/5.012.005-main,threaded-stretch/Dockerfile b/eol/5.012.005-main,threaded-stretch/Dockerfile new file mode 100644 index 0000000..033f873 --- /dev/null +++ b/eol/5.012.005-main,threaded-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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 https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.12.5","-de0"] diff --git a/5.012.005-slim,threaded-jessie/DevelPatchPerl.patch b/eol/5.012.005-main-buster/DevelPatchPerl.patch similarity index 100% rename from 5.012.005-slim,threaded-jessie/DevelPatchPerl.patch rename to eol/5.012.005-main-buster/DevelPatchPerl.patch diff --git a/5.012.005-main-jessie/Dockerfile b/eol/5.012.005-main-buster/Dockerfile similarity index 98% rename from 5.012.005-main-jessie/Dockerfile rename to eol/5.012.005-main-buster/Dockerfile index 7afaad8..979151d 100644 --- a/5.012.005-main-jessie/Dockerfile +++ b/eol/5.012.005-main-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ diff --git a/5.012.005-slim-jessie/DevelPatchPerl.patch b/eol/5.012.005-main-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.012.005-slim-jessie/DevelPatchPerl.patch rename to eol/5.012.005-main-stretch/DevelPatchPerl.patch diff --git a/eol/5.012.005-main-stretch/Dockerfile b/eol/5.012.005-main-stretch/Dockerfile new file mode 100644 index 0000000..4764689 --- /dev/null +++ b/eol/5.012.005-main-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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 https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.12.5","-de0"] diff --git a/eol/5.012.005-slim,threaded-buster/DevelPatchPerl.patch b/eol/5.012.005-slim,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..0e5e718 --- /dev/null +++ b/eol/5.012.005-slim,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,833 @@ +diff --git a/Configure b/Configure +index 3a8732b..10a1a04 100755 +--- a/Configure ++++ b/Configure +@@ -4536,7 +4536,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4576,7 +4576,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4588,6 +4588,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5128,13 +5144,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5143,7 +5159,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5245,7 +5261,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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/ext/SDBM_File/sdbm/sdbm.c b/ext/SDBM_File/sdbm/sdbm.c +index c5f7aa8..c7c329a 100644 +--- a/ext/SDBM_File/sdbm/sdbm.c ++++ b/ext/SDBM_File/sdbm/sdbm.c +@@ -78,8 +78,8 @@ sdbm_open(register char *file, register int flags, register int mode) + register char *dirname; + register char *pagname; + size_t filelen; +- const size_t dirfext_len = sizeof(DIRFEXT ""); +- const size_t pagfext_len = sizeof(PAGFEXT ""); ++ const size_t dirfext_size = sizeof(DIRFEXT ""); ++ const size_t pagfext_size = sizeof(PAGFEXT ""); + + if (file == NULL || !*file) + return errno = EINVAL, (DBM *) NULL; +@@ -88,17 +88,17 @@ sdbm_open(register char *file, register int flags, register int mode) + */ + filelen = strlen(file); + +- if ((dirname = (char *) malloc(filelen + dirfext_len + 1 +- + filelen + pagfext_len + 1)) == NULL) ++ if ((dirname = (char *) malloc(filelen + dirfext_size ++ + filelen + pagfext_size)) == NULL) + return errno = ENOMEM, (DBM *) NULL; + /* + * build the file names + */ + memcpy(dirname, file, filelen); +- memcpy(dirname + filelen, DIRFEXT, dirfext_len + 1); +- pagname = dirname + filelen + dirfext_len + 1; ++ memcpy(dirname + filelen, DIRFEXT, dirfext_size); ++ pagname = dirname + filelen + dirfext_size; + memcpy(pagname, file, filelen); +- memcpy(pagname + filelen, PAGFEXT, pagfext_len + 1); ++ memcpy(pagname + filelen, PAGFEXT, pagfext_size); + + db = sdbm_prep(dirname, pagname, flags, mode); + free((char *) dirname); +diff --git a/ext/Time-Local/t/Local.t b/ext/Time-Local/t/Local.t +index 61a15a8..8bf0a0b 100755 +--- a/ext/Time-Local/t/Local.t ++++ b/ext/Time-Local/t/Local.t +@@ -84,7 +84,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -100,7 +100,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -117,7 +117,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -126,14 +125,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 0519eca..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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,21 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} ++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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -324,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 27dd7b9..947fae6 100755 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -41,7 +41,7 @@ $result = runperl( progfile => 'lib/h2ph.pht', + stderr => 1 ); + like( $result, qr/syntax OK$/, "output compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.',"-w"], + prog => '$SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht);'); + is( $result, '', "output free of warnings" ); + +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/pp.c b/pp.c +index 89a8409..aa85bda 100644 +--- a/pp.c ++++ b/pp.c +@@ -3559,8 +3559,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index 8f56db4..7f0c987 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -789,6 +789,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -806,6 +811,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/5.012.005-slim,threaded-jessie/Dockerfile b/eol/5.012.005-slim,threaded-buster/Dockerfile similarity index 98% rename from 5.012.005-slim,threaded-jessie/Dockerfile rename to eol/5.012.005-slim,threaded-buster/Dockerfile index 1d073c8..e3177d7 100644 --- a/5.012.005-slim,threaded-jessie/Dockerfile +++ b/eol/5.012.005-slim,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ diff --git a/eol/5.012.005-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.012.005-slim,threaded-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..0e5e718 --- /dev/null +++ b/eol/5.012.005-slim,threaded-stretch/DevelPatchPerl.patch @@ -0,0 +1,833 @@ +diff --git a/Configure b/Configure +index 3a8732b..10a1a04 100755 +--- a/Configure ++++ b/Configure +@@ -4536,7 +4536,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4576,7 +4576,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4588,6 +4588,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5128,13 +5144,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5143,7 +5159,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5245,7 +5261,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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/ext/SDBM_File/sdbm/sdbm.c b/ext/SDBM_File/sdbm/sdbm.c +index c5f7aa8..c7c329a 100644 +--- a/ext/SDBM_File/sdbm/sdbm.c ++++ b/ext/SDBM_File/sdbm/sdbm.c +@@ -78,8 +78,8 @@ sdbm_open(register char *file, register int flags, register int mode) + register char *dirname; + register char *pagname; + size_t filelen; +- const size_t dirfext_len = sizeof(DIRFEXT ""); +- const size_t pagfext_len = sizeof(PAGFEXT ""); ++ const size_t dirfext_size = sizeof(DIRFEXT ""); ++ const size_t pagfext_size = sizeof(PAGFEXT ""); + + if (file == NULL || !*file) + return errno = EINVAL, (DBM *) NULL; +@@ -88,17 +88,17 @@ sdbm_open(register char *file, register int flags, register int mode) + */ + filelen = strlen(file); + +- if ((dirname = (char *) malloc(filelen + dirfext_len + 1 +- + filelen + pagfext_len + 1)) == NULL) ++ if ((dirname = (char *) malloc(filelen + dirfext_size ++ + filelen + pagfext_size)) == NULL) + return errno = ENOMEM, (DBM *) NULL; + /* + * build the file names + */ + memcpy(dirname, file, filelen); +- memcpy(dirname + filelen, DIRFEXT, dirfext_len + 1); +- pagname = dirname + filelen + dirfext_len + 1; ++ memcpy(dirname + filelen, DIRFEXT, dirfext_size); ++ pagname = dirname + filelen + dirfext_size; + memcpy(pagname, file, filelen); +- memcpy(pagname + filelen, PAGFEXT, pagfext_len + 1); ++ memcpy(pagname + filelen, PAGFEXT, pagfext_size); + + db = sdbm_prep(dirname, pagname, flags, mode); + free((char *) dirname); +diff --git a/ext/Time-Local/t/Local.t b/ext/Time-Local/t/Local.t +index 61a15a8..8bf0a0b 100755 +--- a/ext/Time-Local/t/Local.t ++++ b/ext/Time-Local/t/Local.t +@@ -84,7 +84,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -100,7 +100,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -117,7 +117,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -126,14 +125,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 0519eca..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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,21 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} ++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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -324,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 27dd7b9..947fae6 100755 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -41,7 +41,7 @@ $result = runperl( progfile => 'lib/h2ph.pht', + stderr => 1 ); + like( $result, qr/syntax OK$/, "output compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.',"-w"], + prog => '$SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht);'); + is( $result, '', "output free of warnings" ); + +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/pp.c b/pp.c +index 89a8409..aa85bda 100644 +--- a/pp.c ++++ b/pp.c +@@ -3559,8 +3559,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index 8f56db4..7f0c987 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -789,6 +789,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -806,6 +811,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/eol/5.012.005-slim,threaded-stretch/Dockerfile b/eol/5.012.005-slim,threaded-stretch/Dockerfile new file mode 100644 index 0000000..87c8010 --- /dev/null +++ b/eol/5.012.005-slim,threaded-stretch/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.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 https://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 / + +CMD ["perl5.12.5","-de0"] diff --git a/eol/5.012.005-slim-buster/DevelPatchPerl.patch b/eol/5.012.005-slim-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..0e5e718 --- /dev/null +++ b/eol/5.012.005-slim-buster/DevelPatchPerl.patch @@ -0,0 +1,833 @@ +diff --git a/Configure b/Configure +index 3a8732b..10a1a04 100755 +--- a/Configure ++++ b/Configure +@@ -4536,7 +4536,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4576,7 +4576,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4588,6 +4588,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5128,13 +5144,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5143,7 +5159,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5245,7 +5261,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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/ext/SDBM_File/sdbm/sdbm.c b/ext/SDBM_File/sdbm/sdbm.c +index c5f7aa8..c7c329a 100644 +--- a/ext/SDBM_File/sdbm/sdbm.c ++++ b/ext/SDBM_File/sdbm/sdbm.c +@@ -78,8 +78,8 @@ sdbm_open(register char *file, register int flags, register int mode) + register char *dirname; + register char *pagname; + size_t filelen; +- const size_t dirfext_len = sizeof(DIRFEXT ""); +- const size_t pagfext_len = sizeof(PAGFEXT ""); ++ const size_t dirfext_size = sizeof(DIRFEXT ""); ++ const size_t pagfext_size = sizeof(PAGFEXT ""); + + if (file == NULL || !*file) + return errno = EINVAL, (DBM *) NULL; +@@ -88,17 +88,17 @@ sdbm_open(register char *file, register int flags, register int mode) + */ + filelen = strlen(file); + +- if ((dirname = (char *) malloc(filelen + dirfext_len + 1 +- + filelen + pagfext_len + 1)) == NULL) ++ if ((dirname = (char *) malloc(filelen + dirfext_size ++ + filelen + pagfext_size)) == NULL) + return errno = ENOMEM, (DBM *) NULL; + /* + * build the file names + */ + memcpy(dirname, file, filelen); +- memcpy(dirname + filelen, DIRFEXT, dirfext_len + 1); +- pagname = dirname + filelen + dirfext_len + 1; ++ memcpy(dirname + filelen, DIRFEXT, dirfext_size); ++ pagname = dirname + filelen + dirfext_size; + memcpy(pagname, file, filelen); +- memcpy(pagname + filelen, PAGFEXT, pagfext_len + 1); ++ memcpy(pagname + filelen, PAGFEXT, pagfext_size); + + db = sdbm_prep(dirname, pagname, flags, mode); + free((char *) dirname); +diff --git a/ext/Time-Local/t/Local.t b/ext/Time-Local/t/Local.t +index 61a15a8..8bf0a0b 100755 +--- a/ext/Time-Local/t/Local.t ++++ b/ext/Time-Local/t/Local.t +@@ -84,7 +84,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -100,7 +100,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -117,7 +117,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -126,14 +125,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 0519eca..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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,21 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} ++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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -324,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 27dd7b9..947fae6 100755 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -41,7 +41,7 @@ $result = runperl( progfile => 'lib/h2ph.pht', + stderr => 1 ); + like( $result, qr/syntax OK$/, "output compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.',"-w"], + prog => '$SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht);'); + is( $result, '', "output free of warnings" ); + +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/pp.c b/pp.c +index 89a8409..aa85bda 100644 +--- a/pp.c ++++ b/pp.c +@@ -3559,8 +3559,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index 8f56db4..7f0c987 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -789,6 +789,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -806,6 +811,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/5.012.005-slim-jessie/Dockerfile b/eol/5.012.005-slim-buster/Dockerfile similarity index 98% rename from 5.012.005-slim-jessie/Dockerfile rename to eol/5.012.005-slim-buster/Dockerfile index 95a2eeb..7e0f290 100644 --- a/5.012.005-slim-jessie/Dockerfile +++ b/eol/5.012.005-slim-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ diff --git a/eol/5.012.005-slim-stretch/DevelPatchPerl.patch b/eol/5.012.005-slim-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..0e5e718 --- /dev/null +++ b/eol/5.012.005-slim-stretch/DevelPatchPerl.patch @@ -0,0 +1,833 @@ +diff --git a/Configure b/Configure +index 3a8732b..10a1a04 100755 +--- a/Configure ++++ b/Configure +@@ -4536,7 +4536,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4576,7 +4576,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4588,6 +4588,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5128,13 +5144,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5143,7 +5159,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5245,7 +5261,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +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/ext/SDBM_File/sdbm/sdbm.c b/ext/SDBM_File/sdbm/sdbm.c +index c5f7aa8..c7c329a 100644 +--- a/ext/SDBM_File/sdbm/sdbm.c ++++ b/ext/SDBM_File/sdbm/sdbm.c +@@ -78,8 +78,8 @@ sdbm_open(register char *file, register int flags, register int mode) + register char *dirname; + register char *pagname; + size_t filelen; +- const size_t dirfext_len = sizeof(DIRFEXT ""); +- const size_t pagfext_len = sizeof(PAGFEXT ""); ++ const size_t dirfext_size = sizeof(DIRFEXT ""); ++ const size_t pagfext_size = sizeof(PAGFEXT ""); + + if (file == NULL || !*file) + return errno = EINVAL, (DBM *) NULL; +@@ -88,17 +88,17 @@ sdbm_open(register char *file, register int flags, register int mode) + */ + filelen = strlen(file); + +- if ((dirname = (char *) malloc(filelen + dirfext_len + 1 +- + filelen + pagfext_len + 1)) == NULL) ++ if ((dirname = (char *) malloc(filelen + dirfext_size ++ + filelen + pagfext_size)) == NULL) + return errno = ENOMEM, (DBM *) NULL; + /* + * build the file names + */ + memcpy(dirname, file, filelen); +- memcpy(dirname + filelen, DIRFEXT, dirfext_len + 1); +- pagname = dirname + filelen + dirfext_len + 1; ++ memcpy(dirname + filelen, DIRFEXT, dirfext_size); ++ pagname = dirname + filelen + dirfext_size; + memcpy(pagname, file, filelen); +- memcpy(pagname + filelen, PAGFEXT, pagfext_len + 1); ++ memcpy(pagname + filelen, PAGFEXT, pagfext_size); + + db = sdbm_prep(dirname, pagname, flags, mode); + free((char *) dirname); +diff --git a/ext/Time-Local/t/Local.t b/ext/Time-Local/t/Local.t +index 61a15a8..8bf0a0b 100755 +--- a/ext/Time-Local/t/Local.t ++++ b/ext/Time-Local/t/Local.t +@@ -84,7 +84,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -100,7 +100,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -117,7 +117,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -126,14 +125,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 0519eca..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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,21 @@ 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 ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} ++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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -324,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 27dd7b9..947fae6 100755 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -41,7 +41,7 @@ $result = runperl( progfile => 'lib/h2ph.pht', + stderr => 1 ); + like( $result, qr/syntax OK$/, "output compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.',"-w"], + prog => '$SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht);'); + is( $result, '', "output free of warnings" ); + +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/pp.c b/pp.c +index 89a8409..aa85bda 100644 +--- a/pp.c ++++ b/pp.c +@@ -3559,8 +3559,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +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/utils/h2ph.PL b/utils/h2ph.PL +index 8f56db4..7f0c987 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -789,6 +789,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -806,6 +811,18 @@ sub build_preamble_if_necessary + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + print PREAMBLE + "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n"; diff --git a/eol/5.012.005-slim-stretch/Dockerfile b/eol/5.012.005-slim-stretch/Dockerfile new file mode 100644 index 0000000..758831e --- /dev/null +++ b/eol/5.012.005-slim-stretch/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.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 https://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 / + +CMD ["perl5.12.5","-de0"] diff --git a/5.014.004-main,threaded-jessie/DevelPatchPerl.patch b/eol/5.014.004-main,threaded-buster/DevelPatchPerl.patch similarity index 100% rename from 5.014.004-main,threaded-jessie/DevelPatchPerl.patch rename to eol/5.014.004-main,threaded-buster/DevelPatchPerl.patch diff --git a/5.014.004-main,threaded-jessie/Dockerfile b/eol/5.014.004-main,threaded-buster/Dockerfile similarity index 95% rename from 5.014.004-main,threaded-jessie/Dockerfile rename to eol/5.014.004-main,threaded-buster/Dockerfile index 0ceb8c1..e120c14 100644 --- a/5.014.004-main,threaded-jessie/Dockerfile +++ b/eol/5.014.004-main,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.014.004-main-jessie/DevelPatchPerl.patch b/eol/5.014.004-main,threaded-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.014.004-main-jessie/DevelPatchPerl.patch rename to eol/5.014.004-main,threaded-stretch/DevelPatchPerl.patch diff --git a/eol/5.014.004-main,threaded-stretch/Dockerfile b/eol/5.014.004-main,threaded-stretch/Dockerfile new file mode 100644 index 0000000..d5f14a3 --- /dev/null +++ b/eol/5.014.004-main,threaded-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.14.4","-de0"] diff --git a/5.014.004-slim,threaded-jessie/DevelPatchPerl.patch b/eol/5.014.004-main-buster/DevelPatchPerl.patch similarity index 100% rename from 5.014.004-slim,threaded-jessie/DevelPatchPerl.patch rename to eol/5.014.004-main-buster/DevelPatchPerl.patch diff --git a/5.014.004-main-jessie/Dockerfile b/eol/5.014.004-main-buster/Dockerfile similarity index 95% rename from 5.014.004-main-jessie/Dockerfile rename to eol/5.014.004-main-buster/Dockerfile index beb3d31..8f78d98 100644 --- a/5.014.004-main-jessie/Dockerfile +++ b/eol/5.014.004-main-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.014.004-slim-jessie/DevelPatchPerl.patch b/eol/5.014.004-main-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.014.004-slim-jessie/DevelPatchPerl.patch rename to eol/5.014.004-main-stretch/DevelPatchPerl.patch diff --git a/eol/5.014.004-main-stretch/Dockerfile b/eol/5.014.004-main-stretch/Dockerfile new file mode 100644 index 0000000..404b10e --- /dev/null +++ b/eol/5.014.004-main-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.14.4","-de0"] diff --git a/eol/5.014.004-slim,threaded-buster/DevelPatchPerl.patch b/eol/5.014.004-slim,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..41249b6 --- /dev/null +++ b/eol/5.014.004-slim,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,593 @@ +diff --git a/Configure b/Configure +index 0bb5c4f..16c76f6 100755 +--- a/Configure ++++ b/Configure +@@ -4536,7 +4536,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4576,7 +4576,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4588,6 +4588,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5128,13 +5144,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5143,7 +5159,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5245,7 +5261,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 521cac0..0507a8d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -95,7 +95,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -111,7 +111,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -129,7 +129,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -138,14 +137,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 +@@ -182,93 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +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/pp.c b/pp.c +index d91faa4..bcd9802 100644 +--- a/pp.c ++++ b/pp.c +@@ -3823,8 +3823,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index 4545d6d..605d9a0 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -790,6 +790,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -816,6 +821,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/5.014.004-slim,threaded-jessie/Dockerfile b/eol/5.014.004-slim,threaded-buster/Dockerfile similarity index 96% rename from 5.014.004-slim,threaded-jessie/Dockerfile rename to eol/5.014.004-slim,threaded-buster/Dockerfile index b322660..4add3c7 100644 --- a/5.014.004-slim,threaded-jessie/Dockerfile +++ b/eol/5.014.004-slim,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.014.004-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.014.004-slim,threaded-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..41249b6 --- /dev/null +++ b/eol/5.014.004-slim,threaded-stretch/DevelPatchPerl.patch @@ -0,0 +1,593 @@ +diff --git a/Configure b/Configure +index 0bb5c4f..16c76f6 100755 +--- a/Configure ++++ b/Configure +@@ -4536,7 +4536,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4576,7 +4576,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4588,6 +4588,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5128,13 +5144,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5143,7 +5159,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5245,7 +5261,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 521cac0..0507a8d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -95,7 +95,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -111,7 +111,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -129,7 +129,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -138,14 +137,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 +@@ -182,93 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +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/pp.c b/pp.c +index d91faa4..bcd9802 100644 +--- a/pp.c ++++ b/pp.c +@@ -3823,8 +3823,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index 4545d6d..605d9a0 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -790,6 +790,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -816,6 +821,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/eol/5.014.004-slim,threaded-stretch/Dockerfile b/eol/5.014.004-slim,threaded-stretch/Dockerfile new file mode 100644 index 0000000..6578122 --- /dev/null +++ b/eol/5.014.004-slim,threaded-stretch/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.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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.14.4","-de0"] diff --git a/eol/5.014.004-slim-buster/DevelPatchPerl.patch b/eol/5.014.004-slim-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..41249b6 --- /dev/null +++ b/eol/5.014.004-slim-buster/DevelPatchPerl.patch @@ -0,0 +1,593 @@ +diff --git a/Configure b/Configure +index 0bb5c4f..16c76f6 100755 +--- a/Configure ++++ b/Configure +@@ -4536,7 +4536,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4576,7 +4576,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4588,6 +4588,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5128,13 +5144,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5143,7 +5159,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5245,7 +5261,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 521cac0..0507a8d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -95,7 +95,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -111,7 +111,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -129,7 +129,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -138,14 +137,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 +@@ -182,93 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +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/pp.c b/pp.c +index d91faa4..bcd9802 100644 +--- a/pp.c ++++ b/pp.c +@@ -3823,8 +3823,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index 4545d6d..605d9a0 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -790,6 +790,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -816,6 +821,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/5.014.004-slim-jessie/Dockerfile b/eol/5.014.004-slim-buster/Dockerfile similarity index 96% rename from 5.014.004-slim-jessie/Dockerfile rename to eol/5.014.004-slim-buster/Dockerfile index 394c801..9b86b7b 100644 --- a/5.014.004-slim-jessie/Dockerfile +++ b/eol/5.014.004-slim-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.014.004-slim-stretch/DevelPatchPerl.patch b/eol/5.014.004-slim-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..41249b6 --- /dev/null +++ b/eol/5.014.004-slim-stretch/DevelPatchPerl.patch @@ -0,0 +1,593 @@ +diff --git a/Configure b/Configure +index 0bb5c4f..16c76f6 100755 +--- a/Configure ++++ b/Configure +@@ -4536,7 +4536,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4576,7 +4576,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4588,6 +4588,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5128,13 +5144,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5143,7 +5159,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5245,7 +5261,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 521cac0..0507a8d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -95,7 +95,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -111,7 +111,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -129,7 +129,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -138,14 +137,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + 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 +@@ -182,93 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +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/pp.c b/pp.c +index d91faa4..bcd9802 100644 +--- a/pp.c ++++ b/pp.c +@@ -3823,8 +3823,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index 4545d6d..605d9a0 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -790,6 +790,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -816,6 +821,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/eol/5.014.004-slim-stretch/Dockerfile b/eol/5.014.004-slim-stretch/Dockerfile new file mode 100644 index 0000000..af81505 --- /dev/null +++ b/eol/5.014.004-slim-stretch/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.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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.14.4","-de0"] diff --git a/5.016.003-main,threaded-jessie/DevelPatchPerl.patch b/eol/5.016.003-main,threaded-buster/DevelPatchPerl.patch similarity index 100% rename from 5.016.003-main,threaded-jessie/DevelPatchPerl.patch rename to eol/5.016.003-main,threaded-buster/DevelPatchPerl.patch diff --git a/5.016.003-main,threaded-jessie/Dockerfile b/eol/5.016.003-main,threaded-buster/Dockerfile similarity index 95% rename from 5.016.003-main,threaded-jessie/Dockerfile rename to eol/5.016.003-main,threaded-buster/Dockerfile index 23b0798..98871e9 100644 --- a/5.016.003-main,threaded-jessie/Dockerfile +++ b/eol/5.016.003-main,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.016.003-main-jessie/DevelPatchPerl.patch b/eol/5.016.003-main,threaded-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.016.003-main-jessie/DevelPatchPerl.patch rename to eol/5.016.003-main,threaded-stretch/DevelPatchPerl.patch diff --git a/eol/5.016.003-main,threaded-stretch/Dockerfile b/eol/5.016.003-main,threaded-stretch/Dockerfile new file mode 100644 index 0000000..23c76f9 --- /dev/null +++ b/eol/5.016.003-main,threaded-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.16.3","-de0"] diff --git a/5.016.003-slim,threaded-jessie/DevelPatchPerl.patch b/eol/5.016.003-main-buster/DevelPatchPerl.patch similarity index 100% rename from 5.016.003-slim,threaded-jessie/DevelPatchPerl.patch rename to eol/5.016.003-main-buster/DevelPatchPerl.patch diff --git a/5.016.003-main-jessie/Dockerfile b/eol/5.016.003-main-buster/Dockerfile similarity index 95% rename from 5.016.003-main-jessie/Dockerfile rename to eol/5.016.003-main-buster/Dockerfile index f884fe1..e41cd49 100644 --- a/5.016.003-main-jessie/Dockerfile +++ b/eol/5.016.003-main-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.016.003-slim-jessie/DevelPatchPerl.patch b/eol/5.016.003-main-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.016.003-slim-jessie/DevelPatchPerl.patch rename to eol/5.016.003-main-stretch/DevelPatchPerl.patch diff --git a/eol/5.016.003-main-stretch/Dockerfile b/eol/5.016.003-main-stretch/Dockerfile new file mode 100644 index 0000000..a8e5e05 --- /dev/null +++ b/eol/5.016.003-main-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.16.3","-de0"] diff --git a/eol/5.016.003-slim,threaded-buster/DevelPatchPerl.patch b/eol/5.016.003-slim,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..8fc1fe6 --- /dev/null +++ b/eol/5.016.003-slim,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,564 @@ +diff --git a/Configure b/Configure +index fdbbf20..000a4d6 100755 +--- a/Configure ++++ b/Configure +@@ -4459,7 +4459,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4499,7 +4499,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4511,6 +4511,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5073,13 +5089,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5088,7 +5104,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5190,7 +5206,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 521cac0..0507a8d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -95,7 +95,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -111,7 +111,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -129,7 +129,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -138,14 +137,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + 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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +diff --git a/pp.c b/pp.c +index 598a429..72bc668 100644 +--- a/pp.c ++++ b/pp.c +@@ -3426,8 +3426,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index a2d737b..9484d81 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -788,6 +788,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -814,6 +819,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/5.016.003-slim,threaded-jessie/Dockerfile b/eol/5.016.003-slim,threaded-buster/Dockerfile similarity index 96% rename from 5.016.003-slim,threaded-jessie/Dockerfile rename to eol/5.016.003-slim,threaded-buster/Dockerfile index 95dcfa6..7c0f727 100644 --- a/5.016.003-slim,threaded-jessie/Dockerfile +++ b/eol/5.016.003-slim,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.016.003-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.016.003-slim,threaded-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..8fc1fe6 --- /dev/null +++ b/eol/5.016.003-slim,threaded-stretch/DevelPatchPerl.patch @@ -0,0 +1,564 @@ +diff --git a/Configure b/Configure +index fdbbf20..000a4d6 100755 +--- a/Configure ++++ b/Configure +@@ -4459,7 +4459,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4499,7 +4499,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4511,6 +4511,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5073,13 +5089,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5088,7 +5104,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5190,7 +5206,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 521cac0..0507a8d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -95,7 +95,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -111,7 +111,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -129,7 +129,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -138,14 +137,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + 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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +diff --git a/pp.c b/pp.c +index 598a429..72bc668 100644 +--- a/pp.c ++++ b/pp.c +@@ -3426,8 +3426,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index a2d737b..9484d81 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -788,6 +788,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -814,6 +819,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/eol/5.016.003-slim,threaded-stretch/Dockerfile b/eol/5.016.003-slim,threaded-stretch/Dockerfile new file mode 100644 index 0000000..4ab79ec --- /dev/null +++ b/eol/5.016.003-slim,threaded-stretch/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.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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.16.3","-de0"] diff --git a/eol/5.016.003-slim-buster/DevelPatchPerl.patch b/eol/5.016.003-slim-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..8fc1fe6 --- /dev/null +++ b/eol/5.016.003-slim-buster/DevelPatchPerl.patch @@ -0,0 +1,564 @@ +diff --git a/Configure b/Configure +index fdbbf20..000a4d6 100755 +--- a/Configure ++++ b/Configure +@@ -4459,7 +4459,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4499,7 +4499,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4511,6 +4511,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5073,13 +5089,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5088,7 +5104,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5190,7 +5206,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 521cac0..0507a8d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -95,7 +95,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -111,7 +111,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -129,7 +129,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -138,14 +137,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + 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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +diff --git a/pp.c b/pp.c +index 598a429..72bc668 100644 +--- a/pp.c ++++ b/pp.c +@@ -3426,8 +3426,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index a2d737b..9484d81 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -788,6 +788,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -814,6 +819,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/5.016.003-slim-jessie/Dockerfile b/eol/5.016.003-slim-buster/Dockerfile similarity index 96% rename from 5.016.003-slim-jessie/Dockerfile rename to eol/5.016.003-slim-buster/Dockerfile index 9c39f6b..e31aa15 100644 --- a/5.016.003-slim-jessie/Dockerfile +++ b/eol/5.016.003-slim-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.016.003-slim-stretch/DevelPatchPerl.patch b/eol/5.016.003-slim-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..8fc1fe6 --- /dev/null +++ b/eol/5.016.003-slim-stretch/DevelPatchPerl.patch @@ -0,0 +1,564 @@ +diff --git a/Configure b/Configure +index fdbbf20..000a4d6 100755 +--- a/Configure ++++ b/Configure +@@ -4459,7 +4459,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4499,7 +4499,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4511,6 +4511,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5073,13 +5089,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5088,7 +5104,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5190,7 +5206,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 521cac0..0507a8d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -95,7 +95,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -111,7 +111,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -129,7 +129,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -138,14 +137,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + 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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +418,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +diff --git a/pp.c b/pp.c +index 598a429..72bc668 100644 +--- a/pp.c ++++ b/pp.c +@@ -3426,8 +3426,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index a2d737b..9484d81 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -788,6 +788,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -814,6 +819,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/eol/5.016.003-slim-stretch/Dockerfile b/eol/5.016.003-slim-stretch/Dockerfile new file mode 100644 index 0000000..0957545 --- /dev/null +++ b/eol/5.016.003-slim-stretch/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.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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.16.3","-de0"] diff --git a/5.018.004-main,threaded-jessie/DevelPatchPerl.patch b/eol/5.018.004-main,threaded-buster/DevelPatchPerl.patch similarity index 100% rename from 5.018.004-main,threaded-jessie/DevelPatchPerl.patch rename to eol/5.018.004-main,threaded-buster/DevelPatchPerl.patch diff --git a/5.018.004-main,threaded-jessie/Dockerfile b/eol/5.018.004-main,threaded-buster/Dockerfile similarity index 95% rename from 5.018.004-main,threaded-jessie/Dockerfile rename to eol/5.018.004-main,threaded-buster/Dockerfile index 2b3a0be..cef0a81 100644 --- a/5.018.004-main,threaded-jessie/Dockerfile +++ b/eol/5.018.004-main,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.018.004-main-jessie/DevelPatchPerl.patch b/eol/5.018.004-main,threaded-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.018.004-main-jessie/DevelPatchPerl.patch rename to eol/5.018.004-main,threaded-stretch/DevelPatchPerl.patch diff --git a/eol/5.018.004-main,threaded-stretch/Dockerfile b/eol/5.018.004-main,threaded-stretch/Dockerfile new file mode 100644 index 0000000..06cfb35 --- /dev/null +++ b/eol/5.018.004-main,threaded-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.18.4","-de0"] diff --git a/5.018.004-slim,threaded-jessie/DevelPatchPerl.patch b/eol/5.018.004-main-buster/DevelPatchPerl.patch similarity index 100% rename from 5.018.004-slim,threaded-jessie/DevelPatchPerl.patch rename to eol/5.018.004-main-buster/DevelPatchPerl.patch diff --git a/5.018.004-main-jessie/Dockerfile b/eol/5.018.004-main-buster/Dockerfile similarity index 95% rename from 5.018.004-main-jessie/Dockerfile rename to eol/5.018.004-main-buster/Dockerfile index 2a960be..cd9ab75 100644 --- a/5.018.004-main-jessie/Dockerfile +++ b/eol/5.018.004-main-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie +FROM buildpack-deps:buster LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.018.004-slim-jessie/DevelPatchPerl.patch b/eol/5.018.004-main-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.018.004-slim-jessie/DevelPatchPerl.patch rename to eol/5.018.004-main-stretch/DevelPatchPerl.patch diff --git a/eol/5.018.004-main-stretch/Dockerfile b/eol/5.018.004-main-stretch/Dockerfile new file mode 100644 index 0000000..6c73a8b --- /dev/null +++ b/eol/5.018.004-main-stretch/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:stretch +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.18.4","-de0"] diff --git a/eol/5.018.004-slim,threaded-buster/DevelPatchPerl.patch b/eol/5.018.004-slim,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..1c73009 --- /dev/null +++ b/eol/5.018.004-slim,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,547 @@ +diff --git a/Configure b/Configure +index 30ab78a..bd21ae3 100755 +--- a/Configure ++++ b/Configure +@@ -4468,7 +4468,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4508,7 +4508,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4520,6 +4520,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5082,13 +5098,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5097,7 +5113,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5199,7 +5215,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + 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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +diff --git a/pp.c b/pp.c +index 430cf85..d099af0 100644 +--- a/pp.c ++++ b/pp.c +@@ -3412,8 +3412,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index a2d737b..9484d81 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -788,6 +788,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -814,6 +819,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/5.018.004-slim,threaded-jessie/Dockerfile b/eol/5.018.004-slim,threaded-buster/Dockerfile similarity index 96% rename from 5.018.004-slim,threaded-jessie/Dockerfile rename to eol/5.018.004-slim,threaded-buster/Dockerfile index c091e0d..1c7a24c 100644 --- a/5.018.004-slim,threaded-jessie/Dockerfile +++ b/eol/5.018.004-slim,threaded-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.018.004-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.018.004-slim,threaded-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..1c73009 --- /dev/null +++ b/eol/5.018.004-slim,threaded-stretch/DevelPatchPerl.patch @@ -0,0 +1,547 @@ +diff --git a/Configure b/Configure +index 30ab78a..bd21ae3 100755 +--- a/Configure ++++ b/Configure +@@ -4468,7 +4468,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4508,7 +4508,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4520,6 +4520,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5082,13 +5098,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5097,7 +5113,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5199,7 +5215,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + 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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +diff --git a/pp.c b/pp.c +index 430cf85..d099af0 100644 +--- a/pp.c ++++ b/pp.c +@@ -3412,8 +3412,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index a2d737b..9484d81 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -788,6 +788,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -814,6 +819,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/eol/5.018.004-slim,threaded-stretch/Dockerfile b/eol/5.018.004-slim,threaded-stretch/Dockerfile new file mode 100644 index 0000000..34ffbbe --- /dev/null +++ b/eol/5.018.004-slim,threaded-stretch/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.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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.18.4","-de0"] diff --git a/eol/5.018.004-slim-buster/DevelPatchPerl.patch b/eol/5.018.004-slim-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..1c73009 --- /dev/null +++ b/eol/5.018.004-slim-buster/DevelPatchPerl.patch @@ -0,0 +1,547 @@ +diff --git a/Configure b/Configure +index 30ab78a..bd21ae3 100755 +--- a/Configure ++++ b/Configure +@@ -4468,7 +4468,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4508,7 +4508,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4520,6 +4520,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5082,13 +5098,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5097,7 +5113,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5199,7 +5215,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + 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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +diff --git a/pp.c b/pp.c +index 430cf85..d099af0 100644 +--- a/pp.c ++++ b/pp.c +@@ -3412,8 +3412,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index a2d737b..9484d81 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -788,6 +788,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -814,6 +819,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/5.018.004-slim-jessie/Dockerfile b/eol/5.018.004-slim-buster/Dockerfile similarity index 96% rename from 5.018.004-slim-jessie/Dockerfile rename to eol/5.018.004-slim-buster/Dockerfile index b064ee7..a3d6ede 100644 --- a/5.018.004-slim-jessie/Dockerfile +++ b/eol/5.018.004-slim-buster/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:jessie-slim +FROM debian:buster-slim LABEL maintainer="Peter Martini , Zak B. Elep " COPY *.patch /usr/src/perl/ @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.018.004-slim-stretch/DevelPatchPerl.patch b/eol/5.018.004-slim-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..1c73009 --- /dev/null +++ b/eol/5.018.004-slim-stretch/DevelPatchPerl.patch @@ -0,0 +1,547 @@ +diff --git a/Configure b/Configure +index 30ab78a..bd21ae3 100755 +--- a/Configure ++++ b/Configure +@@ -4468,7 +4468,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4508,7 +4508,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -4520,6 +4520,22 @@ case "$gccversion" in + $rm -f try try.* + esac + ++# gcc 4.9 by default does some optimizations that break perl. ++# see ticket 121505. ++# ++# The -fwrapv disables those optimizations (and probably others,) so ++# for gcc 4.9 (and later, since the optimizations probably won't go ++# away), add -fwrapv unless the user requests -fno-wrapv, which ++# disables -fwrapv, or if the user requests -fsanitize=undefined, ++# which turns the overflows -fwrapv ignores into runtime errors. ++case "$gccversion" in ++4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) ++ case "$ccflags" in ++ *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; ++ *) ccflags="$ccflags -fwrapv" ;; ++ esac ++esac ++ + : What should the include directory be ? + echo " " + $echo $n "Hmm... $c" +@@ -5082,13 +5098,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5097,7 +5113,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5199,7 +5215,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +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..c749f0f 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,9 +80,12 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -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. +@@ -169,12 +165,15 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + 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 +181,60 @@ 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. ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -335,7 +301,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 +316,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 +441,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/lib/h2ph.t b/lib/h2ph.t +index 2b58f6a..64d9dc0 100644 +--- a/lib/h2ph.t ++++ b/lib/h2ph.t +@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', + stderr => 1 ); + like( $result, qr/syntax OK$/, "preamble compiles"); + +-$result = runperl( switches => ["-w"], ++$result = runperl( switches => ['-I.', "-w"], + stderr => 1, + prog => <<'PROG' ); + $SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); +diff --git a/pp.c b/pp.c +index 430cf85..d099af0 100644 +--- a/pp.c ++++ b/pp.c +@@ -3412,8 +3412,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } +diff --git a/utils/h2ph.PL b/utils/h2ph.PL +index a2d737b..9484d81 100644 +--- a/utils/h2ph.PL ++++ b/utils/h2ph.PL +@@ -788,6 +788,11 @@ sub build_preamble_if_necessary + + open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!"; + print PREAMBLE "# This file was created by h2ph version $VERSION\n"; ++ # Prevent non-portable hex constants from warning. ++ # ++ # We still produce an overflow warning if we can't represent ++ # a hex constant as an integer. ++ print PREAMBLE "no warnings qw(portable);\n"; + + foreach (sort keys %define) { + if ($opt_D) { +@@ -814,6 +819,18 @@ DEFINE + # integer: + print PREAMBLE + "unless (defined &$_) { sub $_() { $1 } }\n\n"; ++ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) { ++ # hex integer ++ # Special cased, since perl warns on hex integers ++ # that can't be represented in a UV. ++ # ++ # This way we get the warning at time of use, so the user ++ # only gets the warning if they happen to use this ++ # platform-specific definition. ++ my $code = $1; ++ $code = "hex('$code')" if length $code > 10; ++ print PREAMBLE ++ "unless (defined &$_) { sub $_() { $code } }\n\n"; + } elsif ($define{$_} =~ /^\w+$/) { + my $def = $define{$_}; + if ($isatype{$def}) { diff --git a/eol/5.018.004-slim-stretch/Dockerfile b/eol/5.018.004-slim-stretch/Dockerfile new file mode 100644 index 0000000..3ac33a1 --- /dev/null +++ b/eol/5.018.004-slim-stretch/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.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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.18.4","-de0"] diff --git a/5.020.003-main,threaded-stretch/DevelPatchPerl.patch b/eol/5.020.003-main,threaded-buster/DevelPatchPerl.patch similarity index 100% rename from 5.020.003-main,threaded-stretch/DevelPatchPerl.patch rename to eol/5.020.003-main,threaded-buster/DevelPatchPerl.patch diff --git a/eol/5.020.003-main,threaded-buster/Dockerfile b/eol/5.020.003-main,threaded-buster/Dockerfile new file mode 100644 index 0000000..7c4fd62 --- /dev/null +++ b/eol/5.020.003-main,threaded-buster/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:buster +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.20.3","-de0"] diff --git a/5.020.003-main-stretch/DevelPatchPerl.patch b/eol/5.020.003-main,threaded-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.020.003-main-stretch/DevelPatchPerl.patch rename to eol/5.020.003-main,threaded-stretch/DevelPatchPerl.patch diff --git a/5.020.003-main,threaded-stretch/Dockerfile b/eol/5.020.003-main,threaded-stretch/Dockerfile similarity index 96% rename from 5.020.003-main,threaded-stretch/Dockerfile rename to eol/5.020.003-main,threaded-stretch/Dockerfile index f68ea74..02ec585 100644 --- a/5.020.003-main,threaded-stretch/Dockerfile +++ b/eol/5.020.003-main,threaded-stretch/Dockerfile @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.020.003-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.020.003-main-buster/DevelPatchPerl.patch similarity index 100% rename from 5.020.003-slim,threaded-stretch/DevelPatchPerl.patch rename to eol/5.020.003-main-buster/DevelPatchPerl.patch diff --git a/eol/5.020.003-main-buster/Dockerfile b/eol/5.020.003-main-buster/Dockerfile new file mode 100644 index 0000000..8fe22ca --- /dev/null +++ b/eol/5.020.003-main-buster/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:buster +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.20.3","-de0"] diff --git a/5.020.003-slim-stretch/DevelPatchPerl.patch b/eol/5.020.003-main-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.020.003-slim-stretch/DevelPatchPerl.patch rename to eol/5.020.003-main-stretch/DevelPatchPerl.patch diff --git a/5.020.003-main-stretch/Dockerfile b/eol/5.020.003-main-stretch/Dockerfile similarity index 96% rename from 5.020.003-main-stretch/Dockerfile rename to eol/5.020.003-main-stretch/Dockerfile index 4f6022f..10295c4 100644 --- a/5.020.003-main-stretch/Dockerfile +++ b/eol/5.020.003-main-stretch/Dockerfile @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.020.003-slim,threaded-buster/DevelPatchPerl.patch b/eol/5.020.003-slim,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/eol/5.020.003-slim,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +234,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 +441,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/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/eol/5.020.003-slim,threaded-buster/Dockerfile b/eol/5.020.003-slim,threaded-buster/Dockerfile new file mode 100644 index 0000000..2c9129d --- /dev/null +++ b/eol/5.020.003-slim,threaded-buster/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:buster-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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.20.3","-de0"] diff --git a/eol/5.020.003-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.020.003-slim,threaded-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/eol/5.020.003-slim,threaded-stretch/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +234,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 +441,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/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-slim,threaded-stretch/Dockerfile b/eol/5.020.003-slim,threaded-stretch/Dockerfile similarity index 97% rename from 5.020.003-slim,threaded-stretch/Dockerfile rename to eol/5.020.003-slim,threaded-stretch/Dockerfile index 5f2bf06..340d282 100644 --- a/5.020.003-slim,threaded-stretch/Dockerfile +++ b/eol/5.020.003-slim,threaded-stretch/Dockerfile @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.020.003-slim-buster/DevelPatchPerl.patch b/eol/5.020.003-slim-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/eol/5.020.003-slim-buster/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +234,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 +441,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/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/eol/5.020.003-slim-buster/Dockerfile b/eol/5.020.003-slim-buster/Dockerfile new file mode 100644 index 0000000..ed88309 --- /dev/null +++ b/eol/5.020.003-slim-buster/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:buster-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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.20.3","-de0"] diff --git a/eol/5.020.003-slim-stretch/DevelPatchPerl.patch b/eol/5.020.003-slim-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/eol/5.020.003-slim-stretch/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +234,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 +441,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/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-slim-stretch/Dockerfile b/eol/5.020.003-slim-stretch/Dockerfile similarity index 97% rename from 5.020.003-slim-stretch/Dockerfile rename to eol/5.020.003-slim-stretch/Dockerfile index e4c7fdc..9ce6a01 100644 --- a/5.020.003-slim-stretch/Dockerfile +++ b/eol/5.020.003-slim-stretch/Dockerfile @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.022.004-main,threaded-stretch/DevelPatchPerl.patch b/eol/5.022.004-main,threaded-buster/DevelPatchPerl.patch similarity index 100% rename from 5.022.004-main,threaded-stretch/DevelPatchPerl.patch rename to eol/5.022.004-main,threaded-buster/DevelPatchPerl.patch diff --git a/eol/5.022.004-main,threaded-buster/Dockerfile b/eol/5.022.004-main,threaded-buster/Dockerfile new file mode 100644 index 0000000..f47233c --- /dev/null +++ b/eol/5.022.004-main,threaded-buster/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:buster +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.22.4","-de0"] diff --git a/5.022.004-main-stretch/DevelPatchPerl.patch b/eol/5.022.004-main,threaded-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.022.004-main-stretch/DevelPatchPerl.patch rename to eol/5.022.004-main,threaded-stretch/DevelPatchPerl.patch diff --git a/5.022.004-main,threaded-stretch/Dockerfile b/eol/5.022.004-main,threaded-stretch/Dockerfile similarity index 96% rename from 5.022.004-main,threaded-stretch/Dockerfile rename to eol/5.022.004-main,threaded-stretch/Dockerfile index 25e2c3d..9cf2216 100644 --- a/5.022.004-main,threaded-stretch/Dockerfile +++ b/eol/5.022.004-main,threaded-stretch/Dockerfile @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.022.004-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.022.004-main-buster/DevelPatchPerl.patch similarity index 100% rename from 5.022.004-slim,threaded-stretch/DevelPatchPerl.patch rename to eol/5.022.004-main-buster/DevelPatchPerl.patch diff --git a/eol/5.022.004-main-buster/Dockerfile b/eol/5.022.004-main-buster/Dockerfile new file mode 100644 index 0000000..c32848c --- /dev/null +++ b/eol/5.022.004-main-buster/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:buster +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.22.4","-de0"] diff --git a/5.022.004-slim-stretch/DevelPatchPerl.patch b/eol/5.022.004-main-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.022.004-slim-stretch/DevelPatchPerl.patch rename to eol/5.022.004-main-stretch/DevelPatchPerl.patch diff --git a/5.022.004-main-stretch/Dockerfile b/eol/5.022.004-main-stretch/Dockerfile similarity index 96% rename from 5.022.004-main-stretch/Dockerfile rename to eol/5.022.004-main-stretch/Dockerfile index daf0f30..896116e 100644 --- a/5.022.004-main-stretch/Dockerfile +++ b/eol/5.022.004-main-stretch/Dockerfile @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.022.004-slim,threaded-buster/DevelPatchPerl.patch b/eol/5.022.004-slim,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/eol/5.022.004-slim,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -221,92 +234,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/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/eol/5.022.004-slim,threaded-buster/Dockerfile b/eol/5.022.004-slim,threaded-buster/Dockerfile new file mode 100644 index 0000000..6a18d96 --- /dev/null +++ b/eol/5.022.004-slim,threaded-buster/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:buster-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" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -des \ + && make -j$(nproc) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.22.4","-de0"] diff --git a/eol/5.022.004-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.022.004-slim,threaded-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/eol/5.022.004-slim,threaded-stretch/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -221,92 +234,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/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-slim,threaded-stretch/Dockerfile b/eol/5.022.004-slim,threaded-stretch/Dockerfile similarity index 97% rename from 5.022.004-slim,threaded-stretch/Dockerfile rename to eol/5.022.004-slim,threaded-stretch/Dockerfile index f4bd751..4764a7d 100644 --- a/5.022.004-slim,threaded-stretch/Dockerfile +++ b/eol/5.022.004-slim,threaded-stretch/Dockerfile @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.022.004-slim-buster/DevelPatchPerl.patch b/eol/5.022.004-slim-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/eol/5.022.004-slim-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -221,92 +234,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/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/eol/5.022.004-slim-buster/Dockerfile b/eol/5.022.004-slim-buster/Dockerfile new file mode 100644 index 0000000..a1c1295 --- /dev/null +++ b/eol/5.022.004-slim-buster/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:buster-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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.22.4","-de0"] diff --git a/eol/5.022.004-slim-stretch/DevelPatchPerl.patch b/eol/5.022.004-slim-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/eol/5.022.004-slim-stretch/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -221,92 +234,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/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-slim-stretch/Dockerfile b/eol/5.022.004-slim-stretch/Dockerfile similarity index 97% rename from 5.022.004-slim-stretch/Dockerfile rename to eol/5.022.004-slim-stretch/Dockerfile index dcc6ddd..0ef073b 100644 --- a/5.022.004-slim-stretch/Dockerfile +++ b/eol/5.022.004-slim-stretch/Dockerfile @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.024.004-main,threaded-stretch/DevelPatchPerl.patch b/eol/5.024.004-main,threaded-buster/DevelPatchPerl.patch similarity index 100% rename from 5.024.004-main,threaded-stretch/DevelPatchPerl.patch rename to eol/5.024.004-main,threaded-buster/DevelPatchPerl.patch diff --git a/eol/5.024.004-main,threaded-buster/Dockerfile b/eol/5.024.004-main,threaded-buster/Dockerfile new file mode 100644 index 0000000..9f29e94 --- /dev/null +++ b/eol/5.024.004-main,threaded-buster/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:buster +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.24.4","-de0"] diff --git a/5.024.004-main-stretch/DevelPatchPerl.patch b/eol/5.024.004-main,threaded-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.024.004-main-stretch/DevelPatchPerl.patch rename to eol/5.024.004-main,threaded-stretch/DevelPatchPerl.patch diff --git a/5.024.004-main,threaded-stretch/Dockerfile b/eol/5.024.004-main,threaded-stretch/Dockerfile similarity index 96% rename from 5.024.004-main,threaded-stretch/Dockerfile rename to eol/5.024.004-main,threaded-stretch/Dockerfile index 2d2c74c..8491325 100644 --- a/5.024.004-main,threaded-stretch/Dockerfile +++ b/eol/5.024.004-main,threaded-stretch/Dockerfile @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.024.004-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.024.004-main-buster/DevelPatchPerl.patch similarity index 100% rename from 5.024.004-slim,threaded-stretch/DevelPatchPerl.patch rename to eol/5.024.004-main-buster/DevelPatchPerl.patch diff --git a/eol/5.024.004-main-buster/Dockerfile b/eol/5.024.004-main-buster/Dockerfile new file mode 100644 index 0000000..174ab98 --- /dev/null +++ b/eol/5.024.004-main-buster/Dockerfile @@ -0,0 +1,29 @@ +FROM buildpack-deps:buster +LABEL maintainer="Peter Martini , Zak B. Elep " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +RUN true \ + && 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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 \ + && true \ + && rm -fr ./cpanm /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7044* /tmp/* + +WORKDIR / + +CMD ["perl5.24.4","-de0"] diff --git a/5.024.004-slim-stretch/DevelPatchPerl.patch b/eol/5.024.004-main-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.024.004-slim-stretch/DevelPatchPerl.patch rename to eol/5.024.004-main-stretch/DevelPatchPerl.patch diff --git a/5.024.004-main-stretch/Dockerfile b/eol/5.024.004-main-stretch/Dockerfile similarity index 96% rename from 5.024.004-main-stretch/Dockerfile rename to eol/5.024.004-main-stretch/Dockerfile index 614988f..56ec011 100644 --- a/5.024.004-main-stretch/Dockerfile +++ b/eol/5.024.004-main-stretch/Dockerfile @@ -15,7 +15,7 @@ RUN true \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.024.004-slim,threaded-buster/DevelPatchPerl.patch b/eol/5.024.004-slim,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/eol/5.024.004-slim,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -221,92 +234,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/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/eol/5.024.004-slim,threaded-buster/Dockerfile b/eol/5.024.004-slim,threaded-buster/Dockerfile new file mode 100644 index 0000000..06048dd --- /dev/null +++ b/eol/5.024.004-slim,threaded-buster/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:buster-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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.24.4","-de0"] diff --git a/eol/5.024.004-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.024.004-slim,threaded-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/eol/5.024.004-slim,threaded-stretch/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -221,92 +234,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/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-slim,threaded-stretch/Dockerfile b/eol/5.024.004-slim,threaded-stretch/Dockerfile similarity index 97% rename from 5.024.004-slim,threaded-stretch/Dockerfile rename to eol/5.024.004-slim,threaded-stretch/Dockerfile index cb0f643..defcb87 100644 --- a/5.024.004-slim,threaded-stretch/Dockerfile +++ b/eol/5.024.004-slim,threaded-stretch/Dockerfile @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/eol/5.024.004-slim-buster/DevelPatchPerl.patch b/eol/5.024.004-slim-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/eol/5.024.004-slim-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -221,92 +234,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/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/eol/5.024.004-slim-buster/Dockerfile b/eol/5.024.004-slim-buster/Dockerfile new file mode 100644 index 0000000..1e1ee5e --- /dev/null +++ b/eol/5.024.004-slim-buster/Dockerfile @@ -0,0 +1,53 @@ +FROM debian:buster-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) \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ + && make install \ + && cd /usr/src \ + && curl -LO https://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 / + +CMD ["perl5.24.4","-de0"] diff --git a/eol/5.024.004-slim-stretch/DevelPatchPerl.patch b/eol/5.024.004-slim-stretch/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/eol/5.024.004-slim-stretch/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ 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"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++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 +@@ -221,92 +234,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/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-slim-stretch/Dockerfile b/eol/5.024.004-slim-stretch/Dockerfile similarity index 97% rename from 5.024.004-slim-stretch/Dockerfile rename to eol/5.024.004-slim-stretch/Dockerfile index 04f3571..22c8bcc 100644 --- a/5.024.004-slim-stretch/Dockerfile +++ b/eol/5.024.004-slim-stretch/Dockerfile @@ -35,7 +35,7 @@ RUN apt-get update \ && 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 \ + && LD_LIBRARY_PATH=. ./perl -Ilib -de0 \ && make install \ && cd /usr/src \ && curl -LO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz \ diff --git a/5.026.003-main,threaded-buster/DevelPatchPerl.patch b/eol/5.026.003-main,threaded-buster/DevelPatchPerl.patch similarity index 100% rename from 5.026.003-main,threaded-buster/DevelPatchPerl.patch rename to eol/5.026.003-main,threaded-buster/DevelPatchPerl.patch diff --git a/5.026.003-main,threaded-buster/Dockerfile b/eol/5.026.003-main,threaded-buster/Dockerfile similarity index 100% rename from 5.026.003-main,threaded-buster/Dockerfile rename to eol/5.026.003-main,threaded-buster/Dockerfile diff --git a/5.026.003-main,threaded-buster/rt-perl-133295.patch b/eol/5.026.003-main,threaded-buster/rt-perl-133295.patch similarity index 100% rename from 5.026.003-main,threaded-buster/rt-perl-133295.patch rename to eol/5.026.003-main,threaded-buster/rt-perl-133295.patch diff --git a/5.026.003-main,threaded-stretch/DevelPatchPerl.patch b/eol/5.026.003-main,threaded-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.026.003-main,threaded-stretch/DevelPatchPerl.patch rename to eol/5.026.003-main,threaded-stretch/DevelPatchPerl.patch diff --git a/5.026.003-main,threaded-stretch/Dockerfile b/eol/5.026.003-main,threaded-stretch/Dockerfile similarity index 100% rename from 5.026.003-main,threaded-stretch/Dockerfile rename to eol/5.026.003-main,threaded-stretch/Dockerfile diff --git a/5.026.003-main-buster/DevelPatchPerl.patch b/eol/5.026.003-main-buster/DevelPatchPerl.patch similarity index 100% rename from 5.026.003-main-buster/DevelPatchPerl.patch rename to eol/5.026.003-main-buster/DevelPatchPerl.patch diff --git a/5.026.003-main-buster/Dockerfile b/eol/5.026.003-main-buster/Dockerfile similarity index 100% rename from 5.026.003-main-buster/Dockerfile rename to eol/5.026.003-main-buster/Dockerfile diff --git a/5.026.003-main-buster/rt-perl-133295.patch b/eol/5.026.003-main-buster/rt-perl-133295.patch similarity index 100% rename from 5.026.003-main-buster/rt-perl-133295.patch rename to eol/5.026.003-main-buster/rt-perl-133295.patch diff --git a/5.026.003-main-stretch/DevelPatchPerl.patch b/eol/5.026.003-main-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.026.003-main-stretch/DevelPatchPerl.patch rename to eol/5.026.003-main-stretch/DevelPatchPerl.patch diff --git a/5.026.003-main-stretch/Dockerfile b/eol/5.026.003-main-stretch/Dockerfile similarity index 100% rename from 5.026.003-main-stretch/Dockerfile rename to eol/5.026.003-main-stretch/Dockerfile diff --git a/5.026.003-slim,threaded-buster/DevelPatchPerl.patch b/eol/5.026.003-slim,threaded-buster/DevelPatchPerl.patch similarity index 100% rename from 5.026.003-slim,threaded-buster/DevelPatchPerl.patch rename to eol/5.026.003-slim,threaded-buster/DevelPatchPerl.patch diff --git a/5.026.003-slim,threaded-buster/Dockerfile b/eol/5.026.003-slim,threaded-buster/Dockerfile similarity index 100% rename from 5.026.003-slim,threaded-buster/Dockerfile rename to eol/5.026.003-slim,threaded-buster/Dockerfile diff --git a/5.026.003-slim,threaded-buster/rt-perl-133295.patch b/eol/5.026.003-slim,threaded-buster/rt-perl-133295.patch similarity index 100% rename from 5.026.003-slim,threaded-buster/rt-perl-133295.patch rename to eol/5.026.003-slim,threaded-buster/rt-perl-133295.patch diff --git a/5.026.003-slim,threaded-stretch/DevelPatchPerl.patch b/eol/5.026.003-slim,threaded-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.026.003-slim,threaded-stretch/DevelPatchPerl.patch rename to eol/5.026.003-slim,threaded-stretch/DevelPatchPerl.patch diff --git a/5.026.003-slim,threaded-stretch/Dockerfile b/eol/5.026.003-slim,threaded-stretch/Dockerfile similarity index 100% rename from 5.026.003-slim,threaded-stretch/Dockerfile rename to eol/5.026.003-slim,threaded-stretch/Dockerfile diff --git a/5.026.003-slim-buster/DevelPatchPerl.patch b/eol/5.026.003-slim-buster/DevelPatchPerl.patch similarity index 100% rename from 5.026.003-slim-buster/DevelPatchPerl.patch rename to eol/5.026.003-slim-buster/DevelPatchPerl.patch diff --git a/5.026.003-slim-buster/Dockerfile b/eol/5.026.003-slim-buster/Dockerfile similarity index 100% rename from 5.026.003-slim-buster/Dockerfile rename to eol/5.026.003-slim-buster/Dockerfile diff --git a/5.026.003-slim-buster/rt-perl-133295.patch b/eol/5.026.003-slim-buster/rt-perl-133295.patch similarity index 100% rename from 5.026.003-slim-buster/rt-perl-133295.patch rename to eol/5.026.003-slim-buster/rt-perl-133295.patch diff --git a/5.026.003-slim-stretch/DevelPatchPerl.patch b/eol/5.026.003-slim-stretch/DevelPatchPerl.patch similarity index 100% rename from 5.026.003-slim-stretch/DevelPatchPerl.patch rename to eol/5.026.003-slim-stretch/DevelPatchPerl.patch diff --git a/5.026.003-slim-stretch/Dockerfile b/eol/5.026.003-slim-stretch/Dockerfile similarity index 100% rename from 5.026.003-slim-stretch/Dockerfile rename to eol/5.026.003-slim-stretch/Dockerfile diff --git a/eol/config.yml b/eol/config.yml new file mode 100644 index 0000000..1a75651 --- /dev/null +++ b/eol/config.yml @@ -0,0 +1,84 @@ +--- +builds: + - main + - slim + +options: + common: "-Duseshrplib -Dvendorprefix=/usr/local" + threaded: "-Dusethreads" + +releases: + - version: 5.8.9 + sha256: 1097fbcd48ceccb2bc735d119c9db399a02a8ab9f7dc53e29e47e6a8d0d72e79 + extra_flags: "-A ccflags=-fwrapv" + run_tests: serial + debian_release: + - stretch + - buster + + - version: 5.10.1 + sha256: 9385f2c8c2ca8b1dc4a7c31903f1f8dc8f2ba867dc2a9e5c93012ed6b564e826 + extra_flags: "-A ccflags=-fwrapv" + run_tests: no + debian_release: + - stretch + - buster + + - version: 5.12.5 + sha256: 10749417fd3010aae320a34181ad4cd6a4855c1fc63403b87fa4d630b18e966c + extra_flags: "-A ccflags=-fwrapv" + run_tests: serial + debian_release: + - stretch + - buster + + - version: 5.14.4 + sha256: eece8c2b0d491bf6f746bd1f4f1bb7ce26f6b98e91c54690c617d7af38964745 + extra_flags: "-A ccflags=-fwrapv" + run_tests: no + debian_release: + - stretch + - buster + + - version: 5.16.3 + sha256: bb7bc735e6813b177dcfccd480defcde7eddefa173b5967eac11babd1bfa98e8 + extra_flags: "-A ccflags=-fwrapv" + run_tests: no + debian_release: + - stretch + - buster + + - version: 5.18.4 + sha256: 1fb4d27b75cd244e849f253320260efe1750641aaff4a18ce0d67556ff1b96a5 + extra_flags: "-A ccflags=-fwrapv" + run_tests: no # buster: Failed test 'Trapped error when attempting to write to knobbled GDBM_File' + debian_release: + - stretch + - buster + + - version: 5.20.3 + sha256: 1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b + run_tests: no # buster: Failed test 'Trapped error when attempting to write to knobbled GDBM_File' + debian_release: + - stretch + - buster + + - version: 5.22.4 + sha256: 8b3122046d1186598082d0e6da53193b045e85e3505e7d37ee0bdd0bdb539b71 + run_tests: no # buster: Failed test 'Trapped error when attempting to write to knobbled GDBM_File' + debian_release: + - stretch + - buster + + - version: 5.24.4 + sha256: e34ff38c54857f431f37403b757267c9998152bf46b5c750b462f62461279b10 + run_tests: no # buster: Failed test 'Trapped error when attempting to write to knobbled GDBM_File' + debian_release: + - stretch + - buster + + - version: 5.26.3 + sha256: 9ff35a613213f29ab53975141af6825ae7d4408895538cac0922e47ab92a1477 + debian_release: + - stretch + - buster diff --git a/eol/downloads b/eol/downloads new file mode 120000 index 0000000..e1767d8 --- /dev/null +++ b/eol/downloads @@ -0,0 +1 @@ +../downloads \ No newline at end of file diff --git a/generate.pl b/generate.pl index 27c83b1..b4c213b 100755 --- a/generate.pl +++ b/generate.pl @@ -143,14 +143,9 @@ for my $release (@{$config->{releases}}) { $release->{"cpanm_dist_$_"} = $cpanm{$_} for keys %cpanm; $release->{extra_flags} ||= ''; - $release->{debian_release} ||= ['buster']; $release->{image} = $build =~ /main/ ? 'buildpack-deps' : 'debian'; - if (ref $release->{debian_release} ne 'ARRAY') { - $release->{debian_release} = [$release->{debian_release}]; - } - for my $debian_release (@{$release->{debian_release}}) { my $output = $template; @@ -179,14 +174,20 @@ for my $release (@{$config->{releases}}) { print $fh $patch; } - if (defined $release->{test_parallel} && $release->{test_parallel} eq "no") { + $release->{run_tests} //= "parallel"; + if ($release->{run_tests} eq "serial") { $output =~ s/\{\{test\}\}/make test_harness/; } - elsif (!defined $release->{test_parallel} || $release->{test_parallel} eq "yes") { + elsif ($release->{run_tests} eq "parallel") { $output =~ s/\{\{test\}\}/TEST_JOBS=\$(nproc) make test_harness/; } + elsif ($release->{run_tests} eq "no") { + # https://metacpan.org/pod/Devel::PatchPerl#CAVEAT + $output =~ s/\{\{test\}\}/LD_LIBRARY_PATH=. .\/perl -Ilib -de0/; + # https://metacpan.org/pod/distribution/perl/INSTALL#Building-a-shared-Perl-library + } else { - die "test_parallel was provided for $release->{version} but is invalid; should be 'yes' or 'no'\n"; + die "run_tests was provided for $release->{version} but is invalid; should be 'parallel', 'serial', or 'no'\n"; } open my $dockerfile, ">", "$dir/Dockerfile" or die "Couldn't open $dir/Dockerfile for writing"; @@ -239,8 +240,7 @@ The Docker image tag which this Perl would build on, common to both the L and L Docker images. -This can be a single tag, or a list of tags to generate multiple -Dockerfiles for different Debian versions: +This should be a list of tags for different Debian versions: - version: 5.30.0 type: xz @@ -248,8 +248,7 @@ Dockerfiles for different Debian versions: - stretch - buster -Defaults: C for C
builds, C for C -builds. +C<-slim> will be appended to this value for C builds. =item extra_flags @@ -258,11 +257,13 @@ necessary for 5.18.x so that it can get the C<-fwrapv> flag. Default: C<""> -=item test_parallel +=item run_tests + +This can be 'parallel' (default), 'serial', or 'no'. -This can be either 'no', 'yes', or unspecified (equivalent to 'yes'). Added due to dist/IO/t/io_unix.t failing when TEST_JOBS > 1, but should -only be used in case of a documented issue. +only be used in case of a documented issue or old release (see +L). Default: C