Update old Perls from jessie to stretch (and test them all in Actions)
Additionally, add buster to all of them. Finally, move all EOL versions into a completely separate `eol/` directory so that the repository is a little easier manage (and so we can limit testing of all old EOL versions to only when something inside the `eol/` directory changes).
This commit is contained in:
parent
738a3ccc0f
commit
22f7d649e2
172 changed files with 21418 additions and 129 deletions
60
.github/workflows/build-image-eol.yml
vendored
Normal file
60
.github/workflows/build-image-eol.yml
vendored
Normal file
|
@ -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"
|
38
.github/workflows/build-image.yml
vendored
38
.github/workflows/build-image.yml
vendored
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
54
config.yml
54
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
|
||||
|
|
0
downloads/.keep
Normal file
0
downloads/.keep
Normal file
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
COPY *.patch /usr/src/perl/
|
29
eol/5.008.009-main,threaded-stretch/Dockerfile
Normal file
29
eol/5.008.009-main,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
COPY *.patch /usr/src/perl/
|
29
eol/5.008.009-main-stretch/Dockerfile
Normal file
29
eol/5.008.009-main-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
722
eol/5.008.009-slim,threaded-buster/DevelPatchPerl.patch
Normal file
722
eol/5.008.009-slim,threaded-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
COPY *.patch /usr/src/perl/
|
722
eol/5.008.009-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
722
eol/5.008.009-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
53
eol/5.008.009-slim,threaded-stretch/Dockerfile
Normal file
53
eol/5.008.009-slim,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,53 @@
|
|||
FROM debian:stretch-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
722
eol/5.008.009-slim-buster/DevelPatchPerl.patch
Normal file
722
eol/5.008.009-slim-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
COPY *.patch /usr/src/perl/
|
722
eol/5.008.009-slim-stretch/DevelPatchPerl.patch
Normal file
722
eol/5.008.009-slim-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
53
eol/5.008.009-slim-stretch/Dockerfile
Normal file
53
eol/5.008.009-slim-stretch/Dockerfile
Normal file
|
@ -0,0 +1,53 @@
|
|||
FROM debian:stretch-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
29
eol/5.010.001-main,threaded-stretch/Dockerfile
Normal file
29
eol/5.010.001-main,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
29
eol/5.010.001-main-stretch/Dockerfile
Normal file
29
eol/5.010.001-main-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
855
eol/5.010.001-slim,threaded-buster/DevelPatchPerl.patch
Normal file
855
eol/5.010.001-slim,threaded-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
855
eol/5.010.001-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
855
eol/5.010.001-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
53
eol/5.010.001-slim,threaded-stretch/Dockerfile
Normal file
53
eol/5.010.001-slim,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,53 @@
|
|||
FROM debian:stretch-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
855
eol/5.010.001-slim-buster/DevelPatchPerl.patch
Normal file
855
eol/5.010.001-slim-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
855
eol/5.010.001-slim-stretch/DevelPatchPerl.patch
Normal file
855
eol/5.010.001-slim-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
53
eol/5.010.001-slim-stretch/Dockerfile
Normal file
53
eol/5.010.001-slim-stretch/Dockerfile
Normal file
|
@ -0,0 +1,53 @@
|
|||
FROM debian:stretch-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
COPY *.patch /usr/src/perl/
|
29
eol/5.012.005-main,threaded-stretch/Dockerfile
Normal file
29
eol/5.012.005-main,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
COPY *.patch /usr/src/perl/
|
29
eol/5.012.005-main-stretch/Dockerfile
Normal file
29
eol/5.012.005-main-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
833
eol/5.012.005-slim,threaded-buster/DevelPatchPerl.patch
Normal file
833
eol/5.012.005-slim,threaded-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
COPY *.patch /usr/src/perl/
|
833
eol/5.012.005-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
833
eol/5.012.005-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
53
eol/5.012.005-slim,threaded-stretch/Dockerfile
Normal file
53
eol/5.012.005-slim,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,53 @@
|
|||
FROM debian:stretch-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
833
eol/5.012.005-slim-buster/DevelPatchPerl.patch
Normal file
833
eol/5.012.005-slim-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
COPY *.patch /usr/src/perl/
|
833
eol/5.012.005-slim-stretch/DevelPatchPerl.patch
Normal file
833
eol/5.012.005-slim-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <doughera@lafayette.edu>
|
||||
|
||||
# Updated Fri Jun 21 11:07:54 EDT 1996
|
||||
-# NDBM support for ELF renabled by <kjahds@kjahds.com>
|
||||
+# NDBM support for ELF re-enabled by <kjahds@kjahds.com>
|
||||
|
||||
# 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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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";
|
53
eol/5.012.005-slim-stretch/Dockerfile
Normal file
53
eol/5.012.005-slim-stretch/Dockerfile
Normal file
|
@ -0,0 +1,53 @@
|
|||
FROM debian:stretch-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
29
eol/5.014.004-main,threaded-stretch/Dockerfile
Normal file
29
eol/5.014.004-main,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
29
eol/5.014.004-main-stretch/Dockerfile
Normal file
29
eol/5.014.004-main-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
593
eol/5.014.004-slim,threaded-buster/DevelPatchPerl.patch
Normal file
593
eol/5.014.004-slim,threaded-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
593
eol/5.014.004-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
593
eol/5.014.004-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
53
eol/5.014.004-slim,threaded-stretch/Dockerfile
Normal file
53
eol/5.014.004-slim,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,53 @@
|
|||
FROM debian:stretch-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
593
eol/5.014.004-slim-buster/DevelPatchPerl.patch
Normal file
593
eol/5.014.004-slim-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
593
eol/5.014.004-slim-stretch/DevelPatchPerl.patch
Normal file
593
eol/5.014.004-slim-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
53
eol/5.014.004-slim-stretch/Dockerfile
Normal file
53
eol/5.014.004-slim-stretch/Dockerfile
Normal file
|
@ -0,0 +1,53 @@
|
|||
FROM debian:stretch-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
29
eol/5.016.003-main,threaded-stretch/Dockerfile
Normal file
29
eol/5.016.003-main,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
29
eol/5.016.003-main-stretch/Dockerfile
Normal file
29
eol/5.016.003-main-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
564
eol/5.016.003-slim,threaded-buster/DevelPatchPerl.patch
Normal file
564
eol/5.016.003-slim,threaded-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
564
eol/5.016.003-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
564
eol/5.016.003-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
53
eol/5.016.003-slim,threaded-stretch/Dockerfile
Normal file
53
eol/5.016.003-slim,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,53 @@
|
|||
FROM debian:stretch-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
564
eol/5.016.003-slim-buster/DevelPatchPerl.patch
Normal file
564
eol/5.016.003-slim-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
564
eol/5.016.003-slim-stretch/DevelPatchPerl.patch
Normal file
564
eol/5.016.003-slim-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
53
eol/5.016.003-slim-stretch/Dockerfile
Normal file
53
eol/5.016.003-slim-stretch/Dockerfile
Normal file
|
@ -0,0 +1,53 @@
|
|||
FROM debian:stretch-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
29
eol/5.018.004-main,threaded-stretch/Dockerfile
Normal file
29
eol/5.018.004-main,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
|
@ -1,4 +1,4 @@
|
|||
FROM buildpack-deps:jessie
|
||||
FROM buildpack-deps:buster
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
29
eol/5.018.004-main-stretch/Dockerfile
Normal file
29
eol/5.018.004-main-stretch/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
|||
FROM buildpack-deps:stretch
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
547
eol/5.018.004-slim,threaded-buster/DevelPatchPerl.patch
Normal file
547
eol/5.018.004-slim,threaded-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
547
eol/5.018.004-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
547
eol/5.018.004-slim,threaded-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
53
eol/5.018.004-slim,threaded-stretch/Dockerfile
Normal file
53
eol/5.018.004-slim,threaded-stretch/Dockerfile
Normal file
|
@ -0,0 +1,53 @@
|
|||
FROM debian:stretch-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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"]
|
547
eol/5.018.004-slim-buster/DevelPatchPerl.patch
Normal file
547
eol/5.018.004-slim-buster/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
|
@ -1,4 +1,4 @@
|
|||
FROM debian:jessie-slim
|
||||
FROM debian:buster-slim
|
||||
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
|
||||
|
||||
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 \
|
547
eol/5.018.004-slim-stretch/DevelPatchPerl.patch
Normal file
547
eol/5.018.004-slim-stretch/DevelPatchPerl.patch
Normal file
|
@ -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 <kjahds@kjahds.com>
|
||||
-# for this test.
|
||||
-cat >try.c <<'EOM'
|
||||
-/* Test for whether ELF binaries are produced */
|
||||
-#include <fcntl.h>
|
||||
-#include <stdlib.h>
|
||||
-#include <unistd.h>
|
||||
-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 <jfriedl@nff.ncl.omron.co.jp>
|
||||
- #
|
||||
- # 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}) {
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue