From 47ea4d29f40009a4df868ae402924fda250da2d0 Mon Sep 17 00:00:00 2001 From: ryan Date: Sun, 15 May 2022 13:52:23 -0400 Subject: [PATCH] arm is special --- .../DevelPatchPerl.patch | 281 ++++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ .../Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 41 +++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ .../Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 41 +++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ 5.020.003-main,debugging-bullseye/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 41 +++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ 5.020.003-main,debugging-buster/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 41 +++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ 5.020.003-main,longdouble-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ 5.020.003-main,longdouble-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ 5.020.003-main,threaded-bullseye/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 41 +++ .../DevelPatchPerl.patch | 281 ++++++++++++++++++ 5.020.003-main,threaded-buster/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 41 +++ 5.020.003-main-bullseye/DevelPatchPerl.patch | 281 ++++++++++++++++++ 5.020.003-main-bullseye/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 41 +++ 5.020.003-main-buster/DevelPatchPerl.patch | 281 ++++++++++++++++++ 5.020.003-main-buster/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 41 +++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 42 +++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 42 +++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.022.004-main,debugging-bullseye/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 42 +++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.022.004-main,debugging-buster/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 42 +++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.022.004-main,longdouble-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.022.004-main,longdouble-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.022.004-main,threaded-bullseye/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 42 +++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.022.004-main,threaded-buster/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 42 +++ 5.022.004-main-bullseye/DevelPatchPerl.patch | 264 ++++++++++++++++ 5.022.004-main-bullseye/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 42 +++ 5.022.004-main-buster/DevelPatchPerl.patch | 264 ++++++++++++++++ 5.022.004-main-buster/Dockerfile | 59 ++++ .../fix-pack-longdouble.patch | 42 +++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.024.004-main,debugging-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.024.004-main,debugging-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.024.004-main,longdouble-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.024.004-main,longdouble-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.024.004-main,threaded-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 264 ++++++++++++++++ 5.024.004-main,threaded-buster/Dockerfile | 59 ++++ 5.024.004-main-bullseye/DevelPatchPerl.patch | 264 ++++++++++++++++ 5.024.004-main-bullseye/Dockerfile | 59 ++++ 5.024.004-main-buster/DevelPatchPerl.patch | 264 ++++++++++++++++ 5.024.004-main-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ 5.026.003-main,debugging-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ 5.026.003-main,debugging-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ 5.026.003-main,longdouble-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ 5.026.003-main,longdouble-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ 5.026.003-main,threaded-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 213 +++++++++++++ 5.026.003-main,threaded-buster/Dockerfile | 59 ++++ 5.026.003-main-bullseye/DevelPatchPerl.patch | 213 +++++++++++++ 5.026.003-main-bullseye/Dockerfile | 59 ++++ 5.026.003-main-buster/DevelPatchPerl.patch | 213 +++++++++++++ 5.026.003-main-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 178 +++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 178 +++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 178 +++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 178 +++++++++++ .../Dockerfile | 59 ++++ ...e-HiRes-don-t-truncate-nanosec-utime.patch | 96 ++++++ .../DevelPatchPerl.patch | 178 +++++++++++ .../Dockerfile | 59 ++++ ...e-HiRes-don-t-truncate-nanosec-utime.patch | 96 ++++++ .../DevelPatchPerl.patch | 178 +++++++++++ .../Dockerfile | 59 ++++ ...e-HiRes-don-t-truncate-nanosec-utime.patch | 96 ++++++ .../DevelPatchPerl.patch | 178 +++++++++++ 5.028.003-main,debugging-bullseye/Dockerfile | 59 ++++ ...e-HiRes-don-t-truncate-nanosec-utime.patch | 96 ++++++ .../DevelPatchPerl.patch | 178 +++++++++++ 5.028.003-main,debugging-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 178 +++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 178 +++++++++++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 178 +++++++++++ 5.028.003-main,longdouble-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 178 +++++++++++ 5.028.003-main,longdouble-buster/Dockerfile | 59 ++++ ...e-HiRes-don-t-truncate-nanosec-utime.patch | 96 ++++++ .../DevelPatchPerl.patch | 178 +++++++++++ 5.028.003-main,threaded-bullseye/Dockerfile | 59 ++++ ...e-HiRes-don-t-truncate-nanosec-utime.patch | 96 ++++++ .../DevelPatchPerl.patch | 178 +++++++++++ 5.028.003-main,threaded-buster/Dockerfile | 59 ++++ ...e-HiRes-don-t-truncate-nanosec-utime.patch | 96 ++++++ 5.028.003-main-bullseye/DevelPatchPerl.patch | 178 +++++++++++ 5.028.003-main-bullseye/Dockerfile | 59 ++++ ...e-HiRes-don-t-truncate-nanosec-utime.patch | 96 ++++++ 5.028.003-main-buster/DevelPatchPerl.patch | 178 +++++++++++ 5.028.003-main-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ 5.030.003-main,debugging-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ 5.030.003-main,debugging-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ 5.030.003-main,longdouble-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ 5.030.003-main,longdouble-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ 5.030.003-main,threaded-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 23 ++ 5.030.003-main,threaded-buster/Dockerfile | 59 ++++ 5.030.003-main-bullseye/DevelPatchPerl.patch | 23 ++ 5.030.003-main-bullseye/Dockerfile | 59 ++++ 5.030.003-main-buster/DevelPatchPerl.patch | 23 ++ 5.030.003-main-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.032.001-main,debugging-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.032.001-main,debugging-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.032.001-main,longdouble-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.032.001-main,longdouble-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.032.001-main,threaded-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.032.001-main,threaded-buster/Dockerfile | 59 ++++ 5.032.001-main-bullseye/DevelPatchPerl.patch | 0 5.032.001-main-bullseye/Dockerfile | 59 ++++ 5.032.001-main-buster/DevelPatchPerl.patch | 0 5.032.001-main-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.034.000-main,debugging-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.034.000-main,debugging-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 .../Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.034.000-main,longdouble-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.034.000-main,longdouble-buster/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.034.000-main,threaded-bullseye/Dockerfile | 59 ++++ .../DevelPatchPerl.patch | 0 5.034.000-main,threaded-buster/Dockerfile | 59 ++++ 5.034.000-main-bullseye/DevelPatchPerl.patch | 0 5.034.000-main-bullseye/Dockerfile | 59 ++++ 5.034.000-main-buster/DevelPatchPerl.patch | 0 5.034.000-main-buster/Dockerfile | 59 ++++ config.yml | 2 +- generate.pl | 8 +- 282 files changed, 28557 insertions(+), 5 deletions(-) create mode 100644 5.020.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.020.003-main,debugging,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.020.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.020.003-main,debugging,longdouble,threaded-buster/Dockerfile create mode 100644 5.020.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.020.003-main,debugging,longdouble-bullseye/Dockerfile create mode 100644 5.020.003-main,debugging,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.020.003-main,debugging,longdouble-buster/Dockerfile create mode 100644 5.020.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.020.003-main,debugging,threaded-bullseye/Dockerfile create mode 100644 5.020.003-main,debugging,threaded-bullseye/fix-pack-longdouble.patch create mode 100644 5.020.003-main,debugging,threaded-buster/DevelPatchPerl.patch create mode 100644 5.020.003-main,debugging,threaded-buster/Dockerfile create mode 100644 5.020.003-main,debugging,threaded-buster/fix-pack-longdouble.patch create mode 100644 5.020.003-main,debugging-bullseye/DevelPatchPerl.patch create mode 100644 5.020.003-main,debugging-bullseye/Dockerfile create mode 100644 5.020.003-main,debugging-bullseye/fix-pack-longdouble.patch create mode 100644 5.020.003-main,debugging-buster/DevelPatchPerl.patch create mode 100644 5.020.003-main,debugging-buster/Dockerfile create mode 100644 5.020.003-main,debugging-buster/fix-pack-longdouble.patch create mode 100644 5.020.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.020.003-main,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.020.003-main,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.020.003-main,longdouble,threaded-buster/Dockerfile create mode 100644 5.020.003-main,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.020.003-main,longdouble-bullseye/Dockerfile create mode 100644 5.020.003-main,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.020.003-main,longdouble-buster/Dockerfile create mode 100644 5.020.003-main,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.020.003-main,threaded-bullseye/Dockerfile create mode 100644 5.020.003-main,threaded-bullseye/fix-pack-longdouble.patch create mode 100644 5.020.003-main,threaded-buster/DevelPatchPerl.patch create mode 100644 5.020.003-main,threaded-buster/Dockerfile create mode 100644 5.020.003-main,threaded-buster/fix-pack-longdouble.patch create mode 100644 5.020.003-main-bullseye/DevelPatchPerl.patch create mode 100644 5.020.003-main-bullseye/Dockerfile create mode 100644 5.020.003-main-bullseye/fix-pack-longdouble.patch create mode 100644 5.020.003-main-buster/DevelPatchPerl.patch create mode 100644 5.020.003-main-buster/Dockerfile create mode 100644 5.020.003-main-buster/fix-pack-longdouble.patch create mode 100644 5.022.004-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.022.004-main,debugging,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.022.004-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.022.004-main,debugging,longdouble,threaded-buster/Dockerfile create mode 100644 5.022.004-main,debugging,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.022.004-main,debugging,longdouble-bullseye/Dockerfile create mode 100644 5.022.004-main,debugging,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.022.004-main,debugging,longdouble-buster/Dockerfile create mode 100644 5.022.004-main,debugging,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.022.004-main,debugging,threaded-bullseye/Dockerfile create mode 100644 5.022.004-main,debugging,threaded-bullseye/fix-pack-longdouble.patch create mode 100644 5.022.004-main,debugging,threaded-buster/DevelPatchPerl.patch create mode 100644 5.022.004-main,debugging,threaded-buster/Dockerfile create mode 100644 5.022.004-main,debugging,threaded-buster/fix-pack-longdouble.patch create mode 100644 5.022.004-main,debugging-bullseye/DevelPatchPerl.patch create mode 100644 5.022.004-main,debugging-bullseye/Dockerfile create mode 100644 5.022.004-main,debugging-bullseye/fix-pack-longdouble.patch create mode 100644 5.022.004-main,debugging-buster/DevelPatchPerl.patch create mode 100644 5.022.004-main,debugging-buster/Dockerfile create mode 100644 5.022.004-main,debugging-buster/fix-pack-longdouble.patch create mode 100644 5.022.004-main,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.022.004-main,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.022.004-main,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.022.004-main,longdouble,threaded-buster/Dockerfile create mode 100644 5.022.004-main,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.022.004-main,longdouble-bullseye/Dockerfile create mode 100644 5.022.004-main,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.022.004-main,longdouble-buster/Dockerfile create mode 100644 5.022.004-main,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.022.004-main,threaded-bullseye/Dockerfile create mode 100644 5.022.004-main,threaded-bullseye/fix-pack-longdouble.patch create mode 100644 5.022.004-main,threaded-buster/DevelPatchPerl.patch create mode 100644 5.022.004-main,threaded-buster/Dockerfile create mode 100644 5.022.004-main,threaded-buster/fix-pack-longdouble.patch create mode 100644 5.022.004-main-bullseye/DevelPatchPerl.patch create mode 100644 5.022.004-main-bullseye/Dockerfile create mode 100644 5.022.004-main-bullseye/fix-pack-longdouble.patch create mode 100644 5.022.004-main-buster/DevelPatchPerl.patch create mode 100644 5.022.004-main-buster/Dockerfile create mode 100644 5.022.004-main-buster/fix-pack-longdouble.patch create mode 100644 5.024.004-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.024.004-main,debugging,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.024.004-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.024.004-main,debugging,longdouble,threaded-buster/Dockerfile create mode 100644 5.024.004-main,debugging,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.024.004-main,debugging,longdouble-bullseye/Dockerfile create mode 100644 5.024.004-main,debugging,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.024.004-main,debugging,longdouble-buster/Dockerfile create mode 100644 5.024.004-main,debugging,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.024.004-main,debugging,threaded-bullseye/Dockerfile create mode 100644 5.024.004-main,debugging,threaded-buster/DevelPatchPerl.patch create mode 100644 5.024.004-main,debugging,threaded-buster/Dockerfile create mode 100644 5.024.004-main,debugging-bullseye/DevelPatchPerl.patch create mode 100644 5.024.004-main,debugging-bullseye/Dockerfile create mode 100644 5.024.004-main,debugging-buster/DevelPatchPerl.patch create mode 100644 5.024.004-main,debugging-buster/Dockerfile create mode 100644 5.024.004-main,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.024.004-main,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.024.004-main,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.024.004-main,longdouble,threaded-buster/Dockerfile create mode 100644 5.024.004-main,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.024.004-main,longdouble-bullseye/Dockerfile create mode 100644 5.024.004-main,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.024.004-main,longdouble-buster/Dockerfile create mode 100644 5.024.004-main,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.024.004-main,threaded-bullseye/Dockerfile create mode 100644 5.024.004-main,threaded-buster/DevelPatchPerl.patch create mode 100644 5.024.004-main,threaded-buster/Dockerfile create mode 100644 5.024.004-main-bullseye/DevelPatchPerl.patch create mode 100644 5.024.004-main-bullseye/Dockerfile create mode 100644 5.024.004-main-buster/DevelPatchPerl.patch create mode 100644 5.024.004-main-buster/Dockerfile create mode 100644 5.026.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.026.003-main,debugging,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.026.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.026.003-main,debugging,longdouble,threaded-buster/Dockerfile create mode 100644 5.026.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.026.003-main,debugging,longdouble-bullseye/Dockerfile create mode 100644 5.026.003-main,debugging,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.026.003-main,debugging,longdouble-buster/Dockerfile create mode 100644 5.026.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.026.003-main,debugging,threaded-bullseye/Dockerfile create mode 100644 5.026.003-main,debugging,threaded-buster/DevelPatchPerl.patch create mode 100644 5.026.003-main,debugging,threaded-buster/Dockerfile create mode 100644 5.026.003-main,debugging-bullseye/DevelPatchPerl.patch create mode 100644 5.026.003-main,debugging-bullseye/Dockerfile create mode 100644 5.026.003-main,debugging-buster/DevelPatchPerl.patch create mode 100644 5.026.003-main,debugging-buster/Dockerfile create mode 100644 5.026.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.026.003-main,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.026.003-main,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.026.003-main,longdouble,threaded-buster/Dockerfile create mode 100644 5.026.003-main,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.026.003-main,longdouble-bullseye/Dockerfile create mode 100644 5.026.003-main,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.026.003-main,longdouble-buster/Dockerfile create mode 100644 5.026.003-main,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.026.003-main,threaded-bullseye/Dockerfile create mode 100644 5.026.003-main,threaded-buster/DevelPatchPerl.patch create mode 100644 5.026.003-main,threaded-buster/Dockerfile create mode 100644 5.026.003-main-bullseye/DevelPatchPerl.patch create mode 100644 5.026.003-main-bullseye/Dockerfile create mode 100644 5.026.003-main-buster/DevelPatchPerl.patch create mode 100644 5.026.003-main-buster/Dockerfile create mode 100644 5.028.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.028.003-main,debugging,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.028.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.028.003-main,debugging,longdouble,threaded-buster/Dockerfile create mode 100644 5.028.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.028.003-main,debugging,longdouble-bullseye/Dockerfile create mode 100644 5.028.003-main,debugging,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.028.003-main,debugging,longdouble-buster/Dockerfile create mode 100644 5.028.003-main,debugging,threaded-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch create mode 100644 5.028.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.028.003-main,debugging,threaded-bullseye/Dockerfile create mode 100644 5.028.003-main,debugging,threaded-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch create mode 100644 5.028.003-main,debugging,threaded-buster/DevelPatchPerl.patch create mode 100644 5.028.003-main,debugging,threaded-buster/Dockerfile create mode 100644 5.028.003-main,debugging-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch create mode 100644 5.028.003-main,debugging-bullseye/DevelPatchPerl.patch create mode 100644 5.028.003-main,debugging-bullseye/Dockerfile create mode 100644 5.028.003-main,debugging-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch create mode 100644 5.028.003-main,debugging-buster/DevelPatchPerl.patch create mode 100644 5.028.003-main,debugging-buster/Dockerfile create mode 100644 5.028.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.028.003-main,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.028.003-main,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.028.003-main,longdouble,threaded-buster/Dockerfile create mode 100644 5.028.003-main,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.028.003-main,longdouble-bullseye/Dockerfile create mode 100644 5.028.003-main,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.028.003-main,longdouble-buster/Dockerfile create mode 100644 5.028.003-main,threaded-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch create mode 100644 5.028.003-main,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.028.003-main,threaded-bullseye/Dockerfile create mode 100644 5.028.003-main,threaded-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch create mode 100644 5.028.003-main,threaded-buster/DevelPatchPerl.patch create mode 100644 5.028.003-main,threaded-buster/Dockerfile create mode 100644 5.028.003-main-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch create mode 100644 5.028.003-main-bullseye/DevelPatchPerl.patch create mode 100644 5.028.003-main-bullseye/Dockerfile create mode 100644 5.028.003-main-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch create mode 100644 5.028.003-main-buster/DevelPatchPerl.patch create mode 100644 5.028.003-main-buster/Dockerfile create mode 100644 5.030.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.030.003-main,debugging,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.030.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.030.003-main,debugging,longdouble,threaded-buster/Dockerfile create mode 100644 5.030.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.030.003-main,debugging,longdouble-bullseye/Dockerfile create mode 100644 5.030.003-main,debugging,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.030.003-main,debugging,longdouble-buster/Dockerfile create mode 100644 5.030.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.030.003-main,debugging,threaded-bullseye/Dockerfile create mode 100644 5.030.003-main,debugging,threaded-buster/DevelPatchPerl.patch create mode 100644 5.030.003-main,debugging,threaded-buster/Dockerfile create mode 100644 5.030.003-main,debugging-bullseye/DevelPatchPerl.patch create mode 100644 5.030.003-main,debugging-bullseye/Dockerfile create mode 100644 5.030.003-main,debugging-buster/DevelPatchPerl.patch create mode 100644 5.030.003-main,debugging-buster/Dockerfile create mode 100644 5.030.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.030.003-main,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.030.003-main,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.030.003-main,longdouble,threaded-buster/Dockerfile create mode 100644 5.030.003-main,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.030.003-main,longdouble-bullseye/Dockerfile create mode 100644 5.030.003-main,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.030.003-main,longdouble-buster/Dockerfile create mode 100644 5.030.003-main,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.030.003-main,threaded-bullseye/Dockerfile create mode 100644 5.030.003-main,threaded-buster/DevelPatchPerl.patch create mode 100644 5.030.003-main,threaded-buster/Dockerfile create mode 100644 5.030.003-main-bullseye/DevelPatchPerl.patch create mode 100644 5.030.003-main-bullseye/Dockerfile create mode 100644 5.030.003-main-buster/DevelPatchPerl.patch create mode 100644 5.030.003-main-buster/Dockerfile create mode 100644 5.032.001-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.032.001-main,debugging,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.032.001-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.032.001-main,debugging,longdouble,threaded-buster/Dockerfile create mode 100644 5.032.001-main,debugging,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.032.001-main,debugging,longdouble-bullseye/Dockerfile create mode 100644 5.032.001-main,debugging,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.032.001-main,debugging,longdouble-buster/Dockerfile create mode 100644 5.032.001-main,debugging,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.032.001-main,debugging,threaded-bullseye/Dockerfile create mode 100644 5.032.001-main,debugging,threaded-buster/DevelPatchPerl.patch create mode 100644 5.032.001-main,debugging,threaded-buster/Dockerfile create mode 100644 5.032.001-main,debugging-bullseye/DevelPatchPerl.patch create mode 100644 5.032.001-main,debugging-bullseye/Dockerfile create mode 100644 5.032.001-main,debugging-buster/DevelPatchPerl.patch create mode 100644 5.032.001-main,debugging-buster/Dockerfile create mode 100644 5.032.001-main,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.032.001-main,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.032.001-main,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.032.001-main,longdouble,threaded-buster/Dockerfile create mode 100644 5.032.001-main,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.032.001-main,longdouble-bullseye/Dockerfile create mode 100644 5.032.001-main,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.032.001-main,longdouble-buster/Dockerfile create mode 100644 5.032.001-main,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.032.001-main,threaded-bullseye/Dockerfile create mode 100644 5.032.001-main,threaded-buster/DevelPatchPerl.patch create mode 100644 5.032.001-main,threaded-buster/Dockerfile create mode 100644 5.032.001-main-bullseye/DevelPatchPerl.patch create mode 100644 5.032.001-main-bullseye/Dockerfile create mode 100644 5.032.001-main-buster/DevelPatchPerl.patch create mode 100644 5.032.001-main-buster/Dockerfile create mode 100644 5.034.000-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.034.000-main,debugging,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.034.000-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.034.000-main,debugging,longdouble,threaded-buster/Dockerfile create mode 100644 5.034.000-main,debugging,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.034.000-main,debugging,longdouble-bullseye/Dockerfile create mode 100644 5.034.000-main,debugging,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.034.000-main,debugging,longdouble-buster/Dockerfile create mode 100644 5.034.000-main,debugging,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.034.000-main,debugging,threaded-bullseye/Dockerfile create mode 100644 5.034.000-main,debugging,threaded-buster/DevelPatchPerl.patch create mode 100644 5.034.000-main,debugging,threaded-buster/Dockerfile create mode 100644 5.034.000-main,debugging-bullseye/DevelPatchPerl.patch create mode 100644 5.034.000-main,debugging-bullseye/Dockerfile create mode 100644 5.034.000-main,debugging-buster/DevelPatchPerl.patch create mode 100644 5.034.000-main,debugging-buster/Dockerfile create mode 100644 5.034.000-main,longdouble,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.034.000-main,longdouble,threaded-bullseye/Dockerfile create mode 100644 5.034.000-main,longdouble,threaded-buster/DevelPatchPerl.patch create mode 100644 5.034.000-main,longdouble,threaded-buster/Dockerfile create mode 100644 5.034.000-main,longdouble-bullseye/DevelPatchPerl.patch create mode 100644 5.034.000-main,longdouble-bullseye/Dockerfile create mode 100644 5.034.000-main,longdouble-buster/DevelPatchPerl.patch create mode 100644 5.034.000-main,longdouble-buster/Dockerfile create mode 100644 5.034.000-main,threaded-bullseye/DevelPatchPerl.patch create mode 100644 5.034.000-main,threaded-bullseye/Dockerfile create mode 100644 5.034.000-main,threaded-buster/DevelPatchPerl.patch create mode 100644 5.034.000-main,threaded-buster/Dockerfile create mode 100644 5.034.000-main-bullseye/DevelPatchPerl.patch create mode 100644 5.034.000-main-bullseye/Dockerfile create mode 100644 5.034.000-main-buster/DevelPatchPerl.patch create mode 100644 5.034.000-main-buster/Dockerfile diff --git a/5.020.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.020.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,debugging,longdouble,threaded-bullseye/Dockerfile b/5.020.003-main,debugging,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..3631047 --- /dev/null +++ b/5.020.003-main,debugging,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch b/5.020.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,debugging,longdouble,threaded-buster/Dockerfile b/5.020.003-main,debugging,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..9407861 --- /dev/null +++ b/5.020.003-main,debugging,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch b/5.020.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,debugging,longdouble-bullseye/Dockerfile b/5.020.003-main,debugging,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..19790c7 --- /dev/null +++ b/5.020.003-main,debugging,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,debugging,longdouble-buster/DevelPatchPerl.patch b/5.020.003-main,debugging,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,debugging,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,debugging,longdouble-buster/Dockerfile b/5.020.003-main,debugging,longdouble-buster/Dockerfile new file mode 100644 index 0000000..e20f1a6 --- /dev/null +++ b/5.020.003-main,debugging,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch b/5.020.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,debugging,threaded-bullseye/Dockerfile b/5.020.003-main,debugging,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..23d159f --- /dev/null +++ b/5.020.003-main,debugging,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,debugging,threaded-bullseye/fix-pack-longdouble.patch b/5.020.003-main,debugging,threaded-bullseye/fix-pack-longdouble.patch new file mode 100644 index 0000000..a62c9eb --- /dev/null +++ b/5.020.003-main,debugging,threaded-bullseye/fix-pack-longdouble.patch @@ -0,0 +1,41 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.020.003-main,debugging,threaded-buster/DevelPatchPerl.patch b/5.020.003-main,debugging,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,debugging,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,debugging,threaded-buster/Dockerfile b/5.020.003-main,debugging,threaded-buster/Dockerfile new file mode 100644 index 0000000..f6b8674 --- /dev/null +++ b/5.020.003-main,debugging,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,debugging,threaded-buster/fix-pack-longdouble.patch b/5.020.003-main,debugging,threaded-buster/fix-pack-longdouble.patch new file mode 100644 index 0000000..a62c9eb --- /dev/null +++ b/5.020.003-main,debugging,threaded-buster/fix-pack-longdouble.patch @@ -0,0 +1,41 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.020.003-main,debugging-bullseye/DevelPatchPerl.patch b/5.020.003-main,debugging-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,debugging-bullseye/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,debugging-bullseye/Dockerfile b/5.020.003-main,debugging-bullseye/Dockerfile new file mode 100644 index 0000000..2f210c1 --- /dev/null +++ b/5.020.003-main,debugging-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,debugging-bullseye/fix-pack-longdouble.patch b/5.020.003-main,debugging-bullseye/fix-pack-longdouble.patch new file mode 100644 index 0000000..a62c9eb --- /dev/null +++ b/5.020.003-main,debugging-bullseye/fix-pack-longdouble.patch @@ -0,0 +1,41 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.020.003-main,debugging-buster/DevelPatchPerl.patch b/5.020.003-main,debugging-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,debugging-buster/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,debugging-buster/Dockerfile b/5.020.003-main,debugging-buster/Dockerfile new file mode 100644 index 0000000..f189971 --- /dev/null +++ b/5.020.003-main,debugging-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,debugging-buster/fix-pack-longdouble.patch b/5.020.003-main,debugging-buster/fix-pack-longdouble.patch new file mode 100644 index 0000000..a62c9eb --- /dev/null +++ b/5.020.003-main,debugging-buster/fix-pack-longdouble.patch @@ -0,0 +1,41 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.020.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.020.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,longdouble,threaded-bullseye/Dockerfile b/5.020.003-main,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..758e513 --- /dev/null +++ b/5.020.003-main,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,longdouble,threaded-buster/DevelPatchPerl.patch b/5.020.003-main,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,longdouble,threaded-buster/Dockerfile b/5.020.003-main,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..83da6fa --- /dev/null +++ b/5.020.003-main,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,longdouble-bullseye/DevelPatchPerl.patch b/5.020.003-main,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,longdouble-bullseye/Dockerfile b/5.020.003-main,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..54a040d --- /dev/null +++ b/5.020.003-main,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,longdouble-buster/DevelPatchPerl.patch b/5.020.003-main,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,longdouble-buster/Dockerfile b/5.020.003-main,longdouble-buster/Dockerfile new file mode 100644 index 0000000..4a29d0d --- /dev/null +++ b/5.020.003-main,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,threaded-bullseye/DevelPatchPerl.patch b/5.020.003-main,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,threaded-bullseye/Dockerfile b/5.020.003-main,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..a1d7609 --- /dev/null +++ b/5.020.003-main,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,threaded-bullseye/fix-pack-longdouble.patch b/5.020.003-main,threaded-bullseye/fix-pack-longdouble.patch new file mode 100644 index 0000000..a62c9eb --- /dev/null +++ b/5.020.003-main,threaded-bullseye/fix-pack-longdouble.patch @@ -0,0 +1,41 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.020.003-main,threaded-buster/DevelPatchPerl.patch b/5.020.003-main,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main,threaded-buster/Dockerfile b/5.020.003-main,threaded-buster/Dockerfile new file mode 100644 index 0000000..637ad12 --- /dev/null +++ b/5.020.003-main,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main,threaded-buster/fix-pack-longdouble.patch b/5.020.003-main,threaded-buster/fix-pack-longdouble.patch new file mode 100644 index 0000000..a62c9eb --- /dev/null +++ b/5.020.003-main,threaded-buster/fix-pack-longdouble.patch @@ -0,0 +1,41 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.020.003-main-bullseye/DevelPatchPerl.patch b/5.020.003-main-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main-bullseye/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main-bullseye/Dockerfile b/5.020.003-main-bullseye/Dockerfile new file mode 100644 index 0000000..a1241f0 --- /dev/null +++ b/5.020.003-main-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main-bullseye/fix-pack-longdouble.patch b/5.020.003-main-bullseye/fix-pack-longdouble.patch new file mode 100644 index 0000000..a62c9eb --- /dev/null +++ b/5.020.003-main-bullseye/fix-pack-longdouble.patch @@ -0,0 +1,41 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.020.003-main-buster/DevelPatchPerl.patch b/5.020.003-main-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..14c00e2 --- /dev/null +++ b/5.020.003-main-buster/DevelPatchPerl.patch @@ -0,0 +1,281 @@ +diff --git a/Configure b/Configure +index 438b926..a762f78 100755 +--- a/Configure ++++ b/Configure +@@ -4591,7 +4591,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4631,7 +4631,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5328,13 +5328,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5343,7 +5343,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5445,7 +5445,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index 956adfc..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,33 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ ++# libquadmath is sometimes installed as gcc internal library, ++# so contrary to our usual policy of *not* looking at gcc internal ++# directories we now *do* look at them, in case they contain ++# the quadmath library. ++# XXX This may apply to other gcc internal libraries, if such exist. ++# XXX This could be at Configure level, but then the $gcc is messy. ++case "$usequadmath" in ++"$define") ++ for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'` ++ do ++ case `ls $d/*libquadmath*$so* 2>/dev/null` in ++ $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;; ++ esac ++ done ++ ;; ++esac ++ + case "$libc" in + '') + # If you have glibc, then report the version for ./myconfig bug reporting. +@@ -204,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +@@ -497,7 +441,7 @@ then + DBLIB="$DBDIR/libdb.so" + if [ -f $DBLIB ] + then +- if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null ++ if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null + then + if ldd $DBLIB | grep pthread >/dev/null + then +diff --git a/pp.c b/pp.c +index 4ec6887..729239c 100644 +--- a/pp.c ++++ b/pp.c +@@ -3435,8 +3435,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.020.003-main-buster/Dockerfile b/5.020.003-main-buster/Dockerfile new file mode 100644 index 0000000..be722d6 --- /dev/null +++ b/5.020.003-main-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.20.3.tar.bz2 -o perl-5.20.3.tar.bz2 \ + && echo '1b40068166c242e34a536836286e70b78410602a80615143301e52aa2901493b *perl-5.20.3.tar.bz2' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.20.3.tar.bz2 -C /usr/src/perl \ + && rm perl-5.20.3.tar.bz2 \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.20.3","-de0"] diff --git a/5.020.003-main-buster/fix-pack-longdouble.patch b/5.020.003-main-buster/fix-pack-longdouble.patch new file mode 100644 index 0000000..a62c9eb --- /dev/null +++ b/5.020.003-main-buster/fix-pack-longdouble.patch @@ -0,0 +1,41 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(USE_LONG_DOUBLE) ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.022.004-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.022.004-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,debugging,longdouble,threaded-bullseye/Dockerfile b/5.022.004-main,debugging,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..03089c6 --- /dev/null +++ b/5.022.004-main,debugging,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch b/5.022.004-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,debugging,longdouble,threaded-buster/Dockerfile b/5.022.004-main,debugging,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..9ba2b50 --- /dev/null +++ b/5.022.004-main,debugging,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,debugging,longdouble-bullseye/DevelPatchPerl.patch b/5.022.004-main,debugging,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,debugging,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,debugging,longdouble-bullseye/Dockerfile b/5.022.004-main,debugging,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..95dbe95 --- /dev/null +++ b/5.022.004-main,debugging,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,debugging,longdouble-buster/DevelPatchPerl.patch b/5.022.004-main,debugging,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,debugging,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,debugging,longdouble-buster/Dockerfile b/5.022.004-main,debugging,longdouble-buster/Dockerfile new file mode 100644 index 0000000..2db4992 --- /dev/null +++ b/5.022.004-main,debugging,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,debugging,threaded-bullseye/DevelPatchPerl.patch b/5.022.004-main,debugging,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,debugging,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,debugging,threaded-bullseye/Dockerfile b/5.022.004-main,debugging,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..0e0a497 --- /dev/null +++ b/5.022.004-main,debugging,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,debugging,threaded-bullseye/fix-pack-longdouble.patch b/5.022.004-main,debugging,threaded-bullseye/fix-pack-longdouble.patch new file mode 100644 index 0000000..403839b --- /dev/null +++ b/5.022.004-main,debugging,threaded-bullseye/fix-pack-longdouble.patch @@ -0,0 +1,42 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,12 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && defined(USE_LONG_DOUBLE) \ ++ && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.022.004-main,debugging,threaded-buster/DevelPatchPerl.patch b/5.022.004-main,debugging,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,debugging,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,debugging,threaded-buster/Dockerfile b/5.022.004-main,debugging,threaded-buster/Dockerfile new file mode 100644 index 0000000..208b343 --- /dev/null +++ b/5.022.004-main,debugging,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,debugging,threaded-buster/fix-pack-longdouble.patch b/5.022.004-main,debugging,threaded-buster/fix-pack-longdouble.patch new file mode 100644 index 0000000..403839b --- /dev/null +++ b/5.022.004-main,debugging,threaded-buster/fix-pack-longdouble.patch @@ -0,0 +1,42 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,12 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && defined(USE_LONG_DOUBLE) \ ++ && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.022.004-main,debugging-bullseye/DevelPatchPerl.patch b/5.022.004-main,debugging-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,debugging-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,debugging-bullseye/Dockerfile b/5.022.004-main,debugging-bullseye/Dockerfile new file mode 100644 index 0000000..0da1368 --- /dev/null +++ b/5.022.004-main,debugging-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,debugging-bullseye/fix-pack-longdouble.patch b/5.022.004-main,debugging-bullseye/fix-pack-longdouble.patch new file mode 100644 index 0000000..403839b --- /dev/null +++ b/5.022.004-main,debugging-bullseye/fix-pack-longdouble.patch @@ -0,0 +1,42 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,12 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && defined(USE_LONG_DOUBLE) \ ++ && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.022.004-main,debugging-buster/DevelPatchPerl.patch b/5.022.004-main,debugging-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,debugging-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,debugging-buster/Dockerfile b/5.022.004-main,debugging-buster/Dockerfile new file mode 100644 index 0000000..e59ad76 --- /dev/null +++ b/5.022.004-main,debugging-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,debugging-buster/fix-pack-longdouble.patch b/5.022.004-main,debugging-buster/fix-pack-longdouble.patch new file mode 100644 index 0000000..403839b --- /dev/null +++ b/5.022.004-main,debugging-buster/fix-pack-longdouble.patch @@ -0,0 +1,42 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,12 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && defined(USE_LONG_DOUBLE) \ ++ && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.022.004-main,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.022.004-main,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,longdouble,threaded-bullseye/Dockerfile b/5.022.004-main,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..ec8adc2 --- /dev/null +++ b/5.022.004-main,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,longdouble,threaded-buster/DevelPatchPerl.patch b/5.022.004-main,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,longdouble,threaded-buster/Dockerfile b/5.022.004-main,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..87c6349 --- /dev/null +++ b/5.022.004-main,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,longdouble-bullseye/DevelPatchPerl.patch b/5.022.004-main,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,longdouble-bullseye/Dockerfile b/5.022.004-main,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..69b4bc5 --- /dev/null +++ b/5.022.004-main,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,longdouble-buster/DevelPatchPerl.patch b/5.022.004-main,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,longdouble-buster/Dockerfile b/5.022.004-main,longdouble-buster/Dockerfile new file mode 100644 index 0000000..50c14f6 --- /dev/null +++ b/5.022.004-main,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,threaded-bullseye/DevelPatchPerl.patch b/5.022.004-main,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,threaded-bullseye/Dockerfile b/5.022.004-main,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..a486570 --- /dev/null +++ b/5.022.004-main,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,threaded-bullseye/fix-pack-longdouble.patch b/5.022.004-main,threaded-bullseye/fix-pack-longdouble.patch new file mode 100644 index 0000000..403839b --- /dev/null +++ b/5.022.004-main,threaded-bullseye/fix-pack-longdouble.patch @@ -0,0 +1,42 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,12 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && defined(USE_LONG_DOUBLE) \ ++ && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.022.004-main,threaded-buster/DevelPatchPerl.patch b/5.022.004-main,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main,threaded-buster/Dockerfile b/5.022.004-main,threaded-buster/Dockerfile new file mode 100644 index 0000000..1daf22b --- /dev/null +++ b/5.022.004-main,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main,threaded-buster/fix-pack-longdouble.patch b/5.022.004-main,threaded-buster/fix-pack-longdouble.patch new file mode 100644 index 0000000..403839b --- /dev/null +++ b/5.022.004-main,threaded-buster/fix-pack-longdouble.patch @@ -0,0 +1,42 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,12 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && defined(USE_LONG_DOUBLE) \ ++ && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.022.004-main-bullseye/DevelPatchPerl.patch b/5.022.004-main-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main-bullseye/Dockerfile b/5.022.004-main-bullseye/Dockerfile new file mode 100644 index 0000000..833e151 --- /dev/null +++ b/5.022.004-main-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main-bullseye/fix-pack-longdouble.patch b/5.022.004-main-bullseye/fix-pack-longdouble.patch new file mode 100644 index 0000000..403839b --- /dev/null +++ b/5.022.004-main-bullseye/fix-pack-longdouble.patch @@ -0,0 +1,42 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,12 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && defined(USE_LONG_DOUBLE) \ ++ && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.022.004-main-buster/DevelPatchPerl.patch b/5.022.004-main-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7dd1f36 --- /dev/null +++ b/5.022.004-main-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index 5f5f279..8ce5cbb 100755 +--- a/Configure ++++ b/Configure +@@ -4658,7 +4658,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4698,7 +4698,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5410,13 +5410,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5425,7 +5425,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5534,7 +5534,7 @@ case "$cppflags" in + *) cppflags="$cppflags $ccflags" ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23010,7 +23010,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[45].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 3173c5a..f2a37bd 100644 +--- a/pp.c ++++ b/pp.c +@@ -3624,8 +3624,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.022.004-main-buster/Dockerfile b/5.022.004-main-buster/Dockerfile new file mode 100644 index 0000000..7e05b5c --- /dev/null +++ b/5.022.004-main-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.22.4.tar.xz -o perl-5.22.4.tar.xz \ + && echo '713243dce27d7aa0bdbf52b2070de5ce449f9ffbcc14a93efbc6f2beff0f5ce8 *perl-5.22.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.22.4.tar.xz -C /usr/src/perl \ + && rm perl-5.22.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.22.4","-de0"] diff --git a/5.022.004-main-buster/fix-pack-longdouble.patch b/5.022.004-main-buster/fix-pack-longdouble.patch new file mode 100644 index 0000000..403839b --- /dev/null +++ b/5.022.004-main-buster/fix-pack-longdouble.patch @@ -0,0 +1,42 @@ +From a2db6c92fc2880ba1f288b6c4599a779997dd4e7 Mon Sep 17 00:00:00 2001 +From: Tony Cook +Date: Thu, 9 Apr 2015 15:45:16 +1000 +Subject: [PATCH] [perl #123971] fix long double pack padding on newer GCC + +--- + pp_pack.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/pp_pack.c b/pp_pack.c +index 06adade..1d732a8 100644 +--- a/pp_pack.c ++++ b/pp_pack.c +@@ -2709,6 +2709,12 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + #ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + anv.nv = sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && defined(USE_LONG_DOUBLE) \ ++ && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(anv.bytes+10, sizeof(anv.bytes) - 10, U8); ++# endif + #else + anv.nv = SvNV(fromstr); + #endif +@@ -2726,6 +2732,11 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) + # ifdef __GNUC__ + /* to work round a gcc/x86 bug; don't use SvNV */ + aldouble.ld = (long double)sv_2nv(fromstr); ++# if defined(LONGDOUBLE_X86_80_BIT) && LONG_DOUBLESIZE > 10 ++ /* GCC sometimes overwrites the padding in the ++ assignment above */ ++ Zero(aldouble.bytes+10, sizeof(aldouble.bytes) - 10, U8); ++# endif + # else + aldouble.ld = (long double)SvNV(fromstr); + # endif +-- +1.7.10.4 + + diff --git a/5.024.004-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.024.004-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,debugging,longdouble,threaded-bullseye/Dockerfile b/5.024.004-main,debugging,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..f8f0885 --- /dev/null +++ b/5.024.004-main,debugging,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch b/5.024.004-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,debugging,longdouble,threaded-buster/Dockerfile b/5.024.004-main,debugging,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..f48b80d --- /dev/null +++ b/5.024.004-main,debugging,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,debugging,longdouble-bullseye/DevelPatchPerl.patch b/5.024.004-main,debugging,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,debugging,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,debugging,longdouble-bullseye/Dockerfile b/5.024.004-main,debugging,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..1d3d442 --- /dev/null +++ b/5.024.004-main,debugging,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,debugging,longdouble-buster/DevelPatchPerl.patch b/5.024.004-main,debugging,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,debugging,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,debugging,longdouble-buster/Dockerfile b/5.024.004-main,debugging,longdouble-buster/Dockerfile new file mode 100644 index 0000000..e488f2c --- /dev/null +++ b/5.024.004-main,debugging,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,debugging,threaded-bullseye/DevelPatchPerl.patch b/5.024.004-main,debugging,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,debugging,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,debugging,threaded-bullseye/Dockerfile b/5.024.004-main,debugging,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..e133d2b --- /dev/null +++ b/5.024.004-main,debugging,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,debugging,threaded-buster/DevelPatchPerl.patch b/5.024.004-main,debugging,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,debugging,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,debugging,threaded-buster/Dockerfile b/5.024.004-main,debugging,threaded-buster/Dockerfile new file mode 100644 index 0000000..f81ea40 --- /dev/null +++ b/5.024.004-main,debugging,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,debugging-bullseye/DevelPatchPerl.patch b/5.024.004-main,debugging-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,debugging-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,debugging-bullseye/Dockerfile b/5.024.004-main,debugging-bullseye/Dockerfile new file mode 100644 index 0000000..ce1328e --- /dev/null +++ b/5.024.004-main,debugging-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,debugging-buster/DevelPatchPerl.patch b/5.024.004-main,debugging-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,debugging-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,debugging-buster/Dockerfile b/5.024.004-main,debugging-buster/Dockerfile new file mode 100644 index 0000000..85117ca --- /dev/null +++ b/5.024.004-main,debugging-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.024.004-main,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,longdouble,threaded-bullseye/Dockerfile b/5.024.004-main,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..73a240c --- /dev/null +++ b/5.024.004-main,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,longdouble,threaded-buster/DevelPatchPerl.patch b/5.024.004-main,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,longdouble,threaded-buster/Dockerfile b/5.024.004-main,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..556b846 --- /dev/null +++ b/5.024.004-main,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,longdouble-bullseye/DevelPatchPerl.patch b/5.024.004-main,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,longdouble-bullseye/Dockerfile b/5.024.004-main,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..5de92ef --- /dev/null +++ b/5.024.004-main,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,longdouble-buster/DevelPatchPerl.patch b/5.024.004-main,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,longdouble-buster/Dockerfile b/5.024.004-main,longdouble-buster/Dockerfile new file mode 100644 index 0000000..6479669 --- /dev/null +++ b/5.024.004-main,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,threaded-bullseye/DevelPatchPerl.patch b/5.024.004-main,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,threaded-bullseye/Dockerfile b/5.024.004-main,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..45d1eab --- /dev/null +++ b/5.024.004-main,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main,threaded-buster/DevelPatchPerl.patch b/5.024.004-main,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main,threaded-buster/Dockerfile b/5.024.004-main,threaded-buster/Dockerfile new file mode 100644 index 0000000..eee6372 --- /dev/null +++ b/5.024.004-main,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main-bullseye/DevelPatchPerl.patch b/5.024.004-main-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main-bullseye/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main-bullseye/Dockerfile b/5.024.004-main-bullseye/Dockerfile new file mode 100644 index 0000000..541675c --- /dev/null +++ b/5.024.004-main-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.024.004-main-buster/DevelPatchPerl.patch b/5.024.004-main-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..96788a0 --- /dev/null +++ b/5.024.004-main-buster/DevelPatchPerl.patch @@ -0,0 +1,264 @@ +diff --git a/Configure b/Configure +index cf143bf..c56df9d 100755 +--- a/Configure ++++ b/Configure +@@ -4686,7 +4686,7 @@ else + fi + $rm -f try try.* + case "$gccversion" in +-1*) cpp=`./loc gcc-cpp $cpp $pth` ;; ++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;; + esac + case "$gccversion" in + '') gccosandvers='' ;; +@@ -4726,7 +4726,7 @@ esac + # gcc 3.* complain about adding -Idirectories that they already know about, + # so we will take those off from locincpth. + case "$gccversion" in +-3*) ++3.*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ +@@ -5452,13 +5452,13 @@ fi + case "$hint" in + default|recommended) + case "$gccversion" in +- 1*) dflt="$dflt -fpcc-struct-return" ;; ++ 1.*) dflt="$dflt -fpcc-struct-return" ;; + esac + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; + esac + case "$gccversion" in +- 2*) if $test -d /etc/conf/kconfig.d && ++ 2.*) if $test -d /etc/conf/kconfig.d && + $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 + then + # Interactive Systems (ISC) POSIX mode. +@@ -5467,7 +5467,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5585,7 +5585,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23379,7 +23379,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 472e71a..0a852a0 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -91,7 +91,7 @@ for (@time, @neg_time) { + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timelocal($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = localtime($time); +@@ -107,7 +107,7 @@ for (@time, @neg_time) { + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; ++ my $year_in = $year + 1900; + my $time = timegm($sec,$min,$hour,$mday,$mon,$year_in); + + my($s,$m,$h,$D,$M,$Y) = gmtime($time); +@@ -125,7 +125,6 @@ for (@time, @neg_time) { + + for (@bad_time) { + my($year, $mon, $mday, $hour, $min, $sec) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm($sec,$min,$hour,$mday,$mon,$year) }; +@@ -134,14 +133,14 @@ for (@bad_time) { + } + + { +- is(timelocal(0,0,1,1,0,90) - timelocal(0,0,0,1,0,90), 3600, ++ is(timelocal(0,0,1,1,0,1990) - timelocal(0,0,0,1,0,1990), 3600, + 'one hour difference between two calls to timelocal'); + +- is(timelocal(1,2,3,1,0,100) - timelocal(1,2,3,31,11,99), 24 * 3600, ++ is(timelocal(1,2,3,1,0,2000) - timelocal(1,2,3,31,11,1999), 24 * 3600, + 'one day difference between two calls to timelocal'); + + # Diff beween Jan 1, 1980 and Mar 1, 1980 = (31 + 29 = 60 days) +- is(timegm(0,0,0, 1, 2, 80) - timegm(0,0,0, 1, 0, 80), 60 * 24 * 3600, ++ is(timegm(0,0,0, 1, 2, 1980) - timegm(0,0,0, 1, 0, 1980), 60 * 24 * 3600, + '60 day difference between two calls to timegm'); + } + +diff --git a/hints/linux.sh b/hints/linux.sh +index fb5a46e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +@@ -221,92 +234,6 @@ case "$libc" in + ;; + esac + +-# Are we using ELF? Thanks to Kenneth Albanowski +-# for this test. +-cat >try.c <<'EOM' +-/* Test for whether ELF binaries are produced */ +-#include +-#include +-#include +-main() { +- char buffer[4]; +- int i=open("a.out",O_RDONLY); +- if(i==-1) +- exit(1); /* fail */ +- if(read(i,&buffer[0],4)<4) +- exit(1); /* fail */ +- if(buffer[0] != 127 || buffer[1] != 'E' || +- buffer[2] != 'L' || buffer[3] != 'F') +- exit(1); /* fail */ +- exit(0); /* succeed (yes, it's ELF) */ +-} +-EOM +-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then +- cat <<'EOM' >&4 +- +-You appear to have ELF support. I'll try to use it for dynamic loading. +-If dynamic loading doesn't work, read hints/linux.sh for further information. +-EOM +- +-else +- cat <<'EOM' >&4 +- +-You don't have an ELF gcc. I will use dld if possible. If you are +-using a version of DLD earlier than 3.2.6, or don't have it at all, you +-should probably upgrade. If you are forced to use 3.2.4, you should +-uncomment a couple of lines in hints/linux.sh and restart Configure so +-that shared libraries will be disallowed. +- +-EOM +- lddlflags="-r $lddlflags" +- # These empty values are so that Configure doesn't put in the +- # Linux ELF values. +- ccdlflags=' ' +- cccdlflags=' ' +- ccflags="-DOVR_DBL_DIG=14 $ccflags" +- so='sa' +- dlext='o' +- nm_so_opt=' ' +- ## If you are using DLD 3.2.4 which does not support shared libs, +- ## uncomment the next two lines: +- #ldflags="-static" +- #so='none' +- +- # In addition, on some systems there is a problem with perl and NDBM +- # which causes AnyDBM and NDBM_File to lock up. This is evidenced +- # in the tests as AnyDBM just freezing. Apparently, this only +- # happens on a.out systems, so we disable NDBM for all a.out linux +- # systems. If someone can suggest a more robust test +- # that would be appreciated. +- # +- # More info: +- # Date: Wed, 7 Feb 1996 03:21:04 +0900 +- # From: Jeffrey Friedl +- # +- # I tried compiling with DBM support and sure enough things locked up +- # just as advertised. Checking into it, I found that the lockup was +- # during the call to dbm_open. Not *in* dbm_open -- but between the call +- # to and the jump into. +- # +- # To make a long story short, making sure that the *.a and *.sa pairs of +- # /usr/lib/lib{m,db,gdbm}.{a,sa} +- # were perfectly in sync took care of it. +- # +- # This will generate a harmless Whoa There! message +- case "$d_dbm_open" in +- '') cat <<'EOM' >&4 +- +-Disabling ndbm. This will generate a Whoa There message in Configure. +-Read hints/linux.sh for further information. +-EOM +- # You can override this with Configure -Dd_dbm_open +- d_dbm_open=undef +- ;; +- esac +-fi +- +-rm -f try.c a.out +- + if ${sh:-/bin/sh} -c exit; then + echo '' + echo 'You appear to have a working bash. Good.' +diff --git a/pp.c b/pp.c +index 4a2cde0..b979e19 100644 +--- a/pp.c ++++ b/pp.c +@@ -3818,8 +3818,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.024.004-main-buster/Dockerfile b/5.024.004-main-buster/Dockerfile new file mode 100644 index 0000000..56ac553 --- /dev/null +++ b/5.024.004-main-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.24.4.tar.xz -o perl-5.24.4.tar.xz \ + && echo '7f080287ff64750270689843ae945f02159a33cb8f2fc910248c15befba5db84 *perl-5.24.4.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.24.4.tar.xz -C /usr/src/perl \ + && rm perl-5.24.4.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.24.4","-de0"] diff --git a/5.026.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.026.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,debugging,longdouble,threaded-bullseye/Dockerfile b/5.026.003-main,debugging,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..46e6dbe --- /dev/null +++ b/5.026.003-main,debugging,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch b/5.026.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,debugging,longdouble,threaded-buster/Dockerfile b/5.026.003-main,debugging,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..4741087 --- /dev/null +++ b/5.026.003-main,debugging,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch b/5.026.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,debugging,longdouble-bullseye/Dockerfile b/5.026.003-main,debugging,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..163168e --- /dev/null +++ b/5.026.003-main,debugging,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,debugging,longdouble-buster/DevelPatchPerl.patch b/5.026.003-main,debugging,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,debugging,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,debugging,longdouble-buster/Dockerfile b/5.026.003-main,debugging,longdouble-buster/Dockerfile new file mode 100644 index 0000000..db14808 --- /dev/null +++ b/5.026.003-main,debugging,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch b/5.026.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,debugging,threaded-bullseye/Dockerfile b/5.026.003-main,debugging,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..352d24b --- /dev/null +++ b/5.026.003-main,debugging,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,debugging,threaded-buster/DevelPatchPerl.patch b/5.026.003-main,debugging,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,debugging,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,debugging,threaded-buster/Dockerfile b/5.026.003-main,debugging,threaded-buster/Dockerfile new file mode 100644 index 0000000..73b83ce --- /dev/null +++ b/5.026.003-main,debugging,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,debugging-bullseye/DevelPatchPerl.patch b/5.026.003-main,debugging-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,debugging-bullseye/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,debugging-bullseye/Dockerfile b/5.026.003-main,debugging-bullseye/Dockerfile new file mode 100644 index 0000000..fce7c48 --- /dev/null +++ b/5.026.003-main,debugging-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,debugging-buster/DevelPatchPerl.patch b/5.026.003-main,debugging-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,debugging-buster/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,debugging-buster/Dockerfile b/5.026.003-main,debugging-buster/Dockerfile new file mode 100644 index 0000000..a3df27d --- /dev/null +++ b/5.026.003-main,debugging-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.026.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,longdouble,threaded-bullseye/Dockerfile b/5.026.003-main,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..fd7bc2a --- /dev/null +++ b/5.026.003-main,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,longdouble,threaded-buster/DevelPatchPerl.patch b/5.026.003-main,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,longdouble,threaded-buster/Dockerfile b/5.026.003-main,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..5571b40 --- /dev/null +++ b/5.026.003-main,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,longdouble-bullseye/DevelPatchPerl.patch b/5.026.003-main,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,longdouble-bullseye/Dockerfile b/5.026.003-main,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..5901b06 --- /dev/null +++ b/5.026.003-main,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,longdouble-buster/DevelPatchPerl.patch b/5.026.003-main,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,longdouble-buster/Dockerfile b/5.026.003-main,longdouble-buster/Dockerfile new file mode 100644 index 0000000..6b0a408 --- /dev/null +++ b/5.026.003-main,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,threaded-bullseye/DevelPatchPerl.patch b/5.026.003-main,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,threaded-bullseye/Dockerfile b/5.026.003-main,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..928fa2b --- /dev/null +++ b/5.026.003-main,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main,threaded-buster/DevelPatchPerl.patch b/5.026.003-main,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main,threaded-buster/Dockerfile b/5.026.003-main,threaded-buster/Dockerfile new file mode 100644 index 0000000..6f10239 --- /dev/null +++ b/5.026.003-main,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main-bullseye/DevelPatchPerl.patch b/5.026.003-main-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main-bullseye/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main-bullseye/Dockerfile b/5.026.003-main-bullseye/Dockerfile new file mode 100644 index 0000000..7f4d71d --- /dev/null +++ b/5.026.003-main-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.026.003-main-buster/DevelPatchPerl.patch b/5.026.003-main-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c28bcd4 --- /dev/null +++ b/5.026.003-main-buster/DevelPatchPerl.patch @@ -0,0 +1,213 @@ +diff --git a/Configure b/Configure +index bdcfaf1..1824010 100755 +--- a/Configure ++++ b/Configure +@@ -4703,7 +4703,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='' ;; +@@ -4743,7 +4743,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 | \ +@@ -5469,13 +5469,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. +@@ -5484,7 +5484,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5602,7 +5602,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23612,7 +23612,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index 3f38ea0..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi +@@ -178,6 +181,16 @@ case "$plibpth" in + ;; + esac + ++# For the musl libc, perl should #define _GNU_SOURCE. Otherwise, some ++# available functions, like memem, won't be used. See the discussion in ++# [perl #133760]. musl doesn't offer an easy way to identify it, but, ++# at least on alpine linux, the ldd --version output contains the ++# string 'musl.' ++case `ldd --version 2>&1` in ++ musl*) ccflags="$ccflags -D_GNU_SOURCE" ;; ++ *) ;; ++esac ++ + # libquadmath is sometimes installed as gcc internal library, + # so contrary to our usual policy of *not* looking at gcc internal + # directories we now *do* look at them, in case they contain +diff --git a/pp.c b/pp.c +index fbba3bd..1e0a5eb 100644 +--- a/pp.c ++++ b/pp.c +@@ -3737,8 +3737,12 @@ PP(pp_crypt) + #if defined(__GLIBC__) || defined(__EMX__) + if (PL_reentrant_buffer->_crypt_struct_buffer) { + PL_reentrant_buffer->_crypt_struct_buffer->initialized = 0; +- /* work around glibc-2.2.5 bug */ ++#if (defined(__GLIBC__) && __GLIBC__ == 2) && \ ++ (defined(__GLIBC_MINOR__) && __GLIBC_MINOR__ >= 2 && __GLIBC_MINOR__ < 4) ++ /* work around glibc-2.2.5 bug, has been fixed at some ++ * time in glibc-2.3.X */ + PL_reentrant_buffer->_crypt_struct_buffer->current_saltbits = 0; ++#endif + } + #endif + } diff --git a/5.026.003-main-buster/Dockerfile b/5.026.003-main-buster/Dockerfile new file mode 100644 index 0000000..0762d16 --- /dev/null +++ b/5.026.003-main-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.26.3.tar.xz -o perl-5.26.3.tar.xz \ + && echo 'e0a17cdaed5304aea1783e507e56bb0001dd72c46f211553ead3a580c3f38135 *perl-5.26.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.26.3.tar.xz -C /usr/src/perl \ + && rm perl-5.26.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.26.3","-de0"] diff --git a/5.028.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.028.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,debugging,longdouble,threaded-bullseye/Dockerfile b/5.028.003-main,debugging,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..8eb3d40 --- /dev/null +++ b/5.028.003-main,debugging,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch b/5.028.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,debugging,longdouble,threaded-buster/Dockerfile b/5.028.003-main,debugging,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..19bb47a --- /dev/null +++ b/5.028.003-main,debugging,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch b/5.028.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,debugging,longdouble-bullseye/Dockerfile b/5.028.003-main,debugging,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..71ed87d --- /dev/null +++ b/5.028.003-main,debugging,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,debugging,longdouble-buster/DevelPatchPerl.patch b/5.028.003-main,debugging,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,debugging,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,debugging,longdouble-buster/Dockerfile b/5.028.003-main,debugging,longdouble-buster/Dockerfile new file mode 100644 index 0000000..c40c037 --- /dev/null +++ b/5.028.003-main,debugging,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,debugging,threaded-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch b/5.028.003-main,debugging,threaded-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch new file mode 100644 index 0000000..769534e --- /dev/null +++ b/5.028.003-main,debugging,threaded-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch @@ -0,0 +1,96 @@ +From 66f85150154f441b79024356cbc59fbafcff7c2a Mon Sep 17 00:00:00 2001 +From: David Mitchell +Date: Fri, 27 Apr 2018 12:43:44 +0100 +Subject: [PATCH] time::HiRes: don't truncate nanosec utime + +When passed a floating point atime/mtime value, T::HR::utime() +was converting it into two longs: secs and nsec. But the nanosec value +was calculated using a final NV to long cast, which truncates any +fractional part rather than rounding to nearest. Use a 0.5 addition to +force rounding. + +This was manifesting as a test in lib/File/Copy.t failing to preserve +the same mtime after a couple of round trips with utime() and stat(). + +In particular, the test was attempting to set an mtime to the literal +floating-point value + + 1000000000.12345 + +This value can't be represented exactly as an NV, so was actually +(under -Dquadmath) + +1000000000.1234499999999999999999999568211720247320 + +which was (using truncation) being converted into the two sec/nsec +longs: + + 1000000000, 123449999 + +After this commit, it instead correctly gets converted to + + 1000000000, 123450000 +--- + dist/Time-HiRes/HiRes.xs | 10 ++++++++-- + dist/Time-HiRes/t/utime.t | 15 ++++++++++++++- + 2 files changed, 22 insertions(+), 3 deletions(-) + +diff --git a/dist/Time-HiRes/HiRes.xs b/dist/Time-HiRes/HiRes.xs +index c4a7af7575..97e870c788 100644 +--- a/dist/Time-HiRes/HiRes.xs ++++ b/dist/Time-HiRes/HiRes.xs +@@ -1444,10 +1444,16 @@ PROTOTYPE: $$@ + "): negative time not invented yet", + SvNV(accessed), SvNV(modified)); + Zero(&utbuf, sizeof utbuf, char); ++ + utbuf[0].tv_sec = (Time_t)SvNV(accessed); /* time accessed */ +- utbuf[0].tv_nsec = (long)( ( SvNV(accessed) - utbuf[0].tv_sec ) * 1e9 ); ++ utbuf[0].tv_nsec = (long)( ++ (SvNV(accessed) - (NV)utbuf[0].tv_sec) ++ * NV_1E9 + (NV)0.5); ++ + utbuf[1].tv_sec = (Time_t)SvNV(modified); /* time modified */ +- utbuf[1].tv_nsec = (long)( ( SvNV(modified) - utbuf[1].tv_sec ) * 1e9 ); ++ utbuf[1].tv_nsec = (long)( ++ (SvNV(modified) - (NV)utbuf[1].tv_sec) ++ * NV_1E9 + (NV)0.5); + } + + while (items > 0) { +diff --git a/dist/Time-HiRes/t/utime.t b/dist/Time-HiRes/t/utime.t +index 7fd4604b35..bb4621a920 100644 +--- a/dist/Time-HiRes/t/utime.t ++++ b/dist/Time-HiRes/t/utime.t +@@ -112,7 +112,7 @@ BEGIN { + } + } + +-use Test::More tests => 18; ++use Test::More tests => 22; + BEGIN { push @INC, '.' } + use t::Watchdog; + use File::Temp qw( tempfile ); +@@ -164,6 +164,19 @@ print "#utime \$filename\n"; + is $got_mtime, $mtime, "mtime set correctly"; + }; + ++print "#utime \$filename round-trip\n"; ++{ ++ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); ++ # this fractional part is not exactly representable ++ my $t = 1000000000.12345; ++ is Time::HiRes::utime($t, $t, $filename), 1, "One file changed"; ++ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is Time::HiRes::utime($got_atime, $got_mtime, $filename), 1, "One file changed"; ++ my ($got_atime2, $got_mtime2) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is $got_atime, $got_atime2, "atime round trip ok"; ++ is $got_mtime, $got_mtime2, "mtime round trip ok"; ++}; ++ + print "utime \$filename and \$fh\n"; + { + my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); +-- +2.35.1 + diff --git a/5.028.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch b/5.028.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,debugging,threaded-bullseye/Dockerfile b/5.028.003-main,debugging,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..a1818a4 --- /dev/null +++ b/5.028.003-main,debugging,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,debugging,threaded-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch b/5.028.003-main,debugging,threaded-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch new file mode 100644 index 0000000..769534e --- /dev/null +++ b/5.028.003-main,debugging,threaded-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch @@ -0,0 +1,96 @@ +From 66f85150154f441b79024356cbc59fbafcff7c2a Mon Sep 17 00:00:00 2001 +From: David Mitchell +Date: Fri, 27 Apr 2018 12:43:44 +0100 +Subject: [PATCH] time::HiRes: don't truncate nanosec utime + +When passed a floating point atime/mtime value, T::HR::utime() +was converting it into two longs: secs and nsec. But the nanosec value +was calculated using a final NV to long cast, which truncates any +fractional part rather than rounding to nearest. Use a 0.5 addition to +force rounding. + +This was manifesting as a test in lib/File/Copy.t failing to preserve +the same mtime after a couple of round trips with utime() and stat(). + +In particular, the test was attempting to set an mtime to the literal +floating-point value + + 1000000000.12345 + +This value can't be represented exactly as an NV, so was actually +(under -Dquadmath) + +1000000000.1234499999999999999999999568211720247320 + +which was (using truncation) being converted into the two sec/nsec +longs: + + 1000000000, 123449999 + +After this commit, it instead correctly gets converted to + + 1000000000, 123450000 +--- + dist/Time-HiRes/HiRes.xs | 10 ++++++++-- + dist/Time-HiRes/t/utime.t | 15 ++++++++++++++- + 2 files changed, 22 insertions(+), 3 deletions(-) + +diff --git a/dist/Time-HiRes/HiRes.xs b/dist/Time-HiRes/HiRes.xs +index c4a7af7575..97e870c788 100644 +--- a/dist/Time-HiRes/HiRes.xs ++++ b/dist/Time-HiRes/HiRes.xs +@@ -1444,10 +1444,16 @@ PROTOTYPE: $$@ + "): negative time not invented yet", + SvNV(accessed), SvNV(modified)); + Zero(&utbuf, sizeof utbuf, char); ++ + utbuf[0].tv_sec = (Time_t)SvNV(accessed); /* time accessed */ +- utbuf[0].tv_nsec = (long)( ( SvNV(accessed) - utbuf[0].tv_sec ) * 1e9 ); ++ utbuf[0].tv_nsec = (long)( ++ (SvNV(accessed) - (NV)utbuf[0].tv_sec) ++ * NV_1E9 + (NV)0.5); ++ + utbuf[1].tv_sec = (Time_t)SvNV(modified); /* time modified */ +- utbuf[1].tv_nsec = (long)( ( SvNV(modified) - utbuf[1].tv_sec ) * 1e9 ); ++ utbuf[1].tv_nsec = (long)( ++ (SvNV(modified) - (NV)utbuf[1].tv_sec) ++ * NV_1E9 + (NV)0.5); + } + + while (items > 0) { +diff --git a/dist/Time-HiRes/t/utime.t b/dist/Time-HiRes/t/utime.t +index 7fd4604b35..bb4621a920 100644 +--- a/dist/Time-HiRes/t/utime.t ++++ b/dist/Time-HiRes/t/utime.t +@@ -112,7 +112,7 @@ BEGIN { + } + } + +-use Test::More tests => 18; ++use Test::More tests => 22; + BEGIN { push @INC, '.' } + use t::Watchdog; + use File::Temp qw( tempfile ); +@@ -164,6 +164,19 @@ print "#utime \$filename\n"; + is $got_mtime, $mtime, "mtime set correctly"; + }; + ++print "#utime \$filename round-trip\n"; ++{ ++ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); ++ # this fractional part is not exactly representable ++ my $t = 1000000000.12345; ++ is Time::HiRes::utime($t, $t, $filename), 1, "One file changed"; ++ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is Time::HiRes::utime($got_atime, $got_mtime, $filename), 1, "One file changed"; ++ my ($got_atime2, $got_mtime2) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is $got_atime, $got_atime2, "atime round trip ok"; ++ is $got_mtime, $got_mtime2, "mtime round trip ok"; ++}; ++ + print "utime \$filename and \$fh\n"; + { + my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); +-- +2.35.1 + diff --git a/5.028.003-main,debugging,threaded-buster/DevelPatchPerl.patch b/5.028.003-main,debugging,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,debugging,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,debugging,threaded-buster/Dockerfile b/5.028.003-main,debugging,threaded-buster/Dockerfile new file mode 100644 index 0000000..8a60103 --- /dev/null +++ b/5.028.003-main,debugging,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,debugging-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch b/5.028.003-main,debugging-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch new file mode 100644 index 0000000..769534e --- /dev/null +++ b/5.028.003-main,debugging-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch @@ -0,0 +1,96 @@ +From 66f85150154f441b79024356cbc59fbafcff7c2a Mon Sep 17 00:00:00 2001 +From: David Mitchell +Date: Fri, 27 Apr 2018 12:43:44 +0100 +Subject: [PATCH] time::HiRes: don't truncate nanosec utime + +When passed a floating point atime/mtime value, T::HR::utime() +was converting it into two longs: secs and nsec. But the nanosec value +was calculated using a final NV to long cast, which truncates any +fractional part rather than rounding to nearest. Use a 0.5 addition to +force rounding. + +This was manifesting as a test in lib/File/Copy.t failing to preserve +the same mtime after a couple of round trips with utime() and stat(). + +In particular, the test was attempting to set an mtime to the literal +floating-point value + + 1000000000.12345 + +This value can't be represented exactly as an NV, so was actually +(under -Dquadmath) + +1000000000.1234499999999999999999999568211720247320 + +which was (using truncation) being converted into the two sec/nsec +longs: + + 1000000000, 123449999 + +After this commit, it instead correctly gets converted to + + 1000000000, 123450000 +--- + dist/Time-HiRes/HiRes.xs | 10 ++++++++-- + dist/Time-HiRes/t/utime.t | 15 ++++++++++++++- + 2 files changed, 22 insertions(+), 3 deletions(-) + +diff --git a/dist/Time-HiRes/HiRes.xs b/dist/Time-HiRes/HiRes.xs +index c4a7af7575..97e870c788 100644 +--- a/dist/Time-HiRes/HiRes.xs ++++ b/dist/Time-HiRes/HiRes.xs +@@ -1444,10 +1444,16 @@ PROTOTYPE: $$@ + "): negative time not invented yet", + SvNV(accessed), SvNV(modified)); + Zero(&utbuf, sizeof utbuf, char); ++ + utbuf[0].tv_sec = (Time_t)SvNV(accessed); /* time accessed */ +- utbuf[0].tv_nsec = (long)( ( SvNV(accessed) - utbuf[0].tv_sec ) * 1e9 ); ++ utbuf[0].tv_nsec = (long)( ++ (SvNV(accessed) - (NV)utbuf[0].tv_sec) ++ * NV_1E9 + (NV)0.5); ++ + utbuf[1].tv_sec = (Time_t)SvNV(modified); /* time modified */ +- utbuf[1].tv_nsec = (long)( ( SvNV(modified) - utbuf[1].tv_sec ) * 1e9 ); ++ utbuf[1].tv_nsec = (long)( ++ (SvNV(modified) - (NV)utbuf[1].tv_sec) ++ * NV_1E9 + (NV)0.5); + } + + while (items > 0) { +diff --git a/dist/Time-HiRes/t/utime.t b/dist/Time-HiRes/t/utime.t +index 7fd4604b35..bb4621a920 100644 +--- a/dist/Time-HiRes/t/utime.t ++++ b/dist/Time-HiRes/t/utime.t +@@ -112,7 +112,7 @@ BEGIN { + } + } + +-use Test::More tests => 18; ++use Test::More tests => 22; + BEGIN { push @INC, '.' } + use t::Watchdog; + use File::Temp qw( tempfile ); +@@ -164,6 +164,19 @@ print "#utime \$filename\n"; + is $got_mtime, $mtime, "mtime set correctly"; + }; + ++print "#utime \$filename round-trip\n"; ++{ ++ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); ++ # this fractional part is not exactly representable ++ my $t = 1000000000.12345; ++ is Time::HiRes::utime($t, $t, $filename), 1, "One file changed"; ++ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is Time::HiRes::utime($got_atime, $got_mtime, $filename), 1, "One file changed"; ++ my ($got_atime2, $got_mtime2) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is $got_atime, $got_atime2, "atime round trip ok"; ++ is $got_mtime, $got_mtime2, "mtime round trip ok"; ++}; ++ + print "utime \$filename and \$fh\n"; + { + my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); +-- +2.35.1 + diff --git a/5.028.003-main,debugging-bullseye/DevelPatchPerl.patch b/5.028.003-main,debugging-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,debugging-bullseye/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,debugging-bullseye/Dockerfile b/5.028.003-main,debugging-bullseye/Dockerfile new file mode 100644 index 0000000..cee952a --- /dev/null +++ b/5.028.003-main,debugging-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,debugging-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch b/5.028.003-main,debugging-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch new file mode 100644 index 0000000..769534e --- /dev/null +++ b/5.028.003-main,debugging-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch @@ -0,0 +1,96 @@ +From 66f85150154f441b79024356cbc59fbafcff7c2a Mon Sep 17 00:00:00 2001 +From: David Mitchell +Date: Fri, 27 Apr 2018 12:43:44 +0100 +Subject: [PATCH] time::HiRes: don't truncate nanosec utime + +When passed a floating point atime/mtime value, T::HR::utime() +was converting it into two longs: secs and nsec. But the nanosec value +was calculated using a final NV to long cast, which truncates any +fractional part rather than rounding to nearest. Use a 0.5 addition to +force rounding. + +This was manifesting as a test in lib/File/Copy.t failing to preserve +the same mtime after a couple of round trips with utime() and stat(). + +In particular, the test was attempting to set an mtime to the literal +floating-point value + + 1000000000.12345 + +This value can't be represented exactly as an NV, so was actually +(under -Dquadmath) + +1000000000.1234499999999999999999999568211720247320 + +which was (using truncation) being converted into the two sec/nsec +longs: + + 1000000000, 123449999 + +After this commit, it instead correctly gets converted to + + 1000000000, 123450000 +--- + dist/Time-HiRes/HiRes.xs | 10 ++++++++-- + dist/Time-HiRes/t/utime.t | 15 ++++++++++++++- + 2 files changed, 22 insertions(+), 3 deletions(-) + +diff --git a/dist/Time-HiRes/HiRes.xs b/dist/Time-HiRes/HiRes.xs +index c4a7af7575..97e870c788 100644 +--- a/dist/Time-HiRes/HiRes.xs ++++ b/dist/Time-HiRes/HiRes.xs +@@ -1444,10 +1444,16 @@ PROTOTYPE: $$@ + "): negative time not invented yet", + SvNV(accessed), SvNV(modified)); + Zero(&utbuf, sizeof utbuf, char); ++ + utbuf[0].tv_sec = (Time_t)SvNV(accessed); /* time accessed */ +- utbuf[0].tv_nsec = (long)( ( SvNV(accessed) - utbuf[0].tv_sec ) * 1e9 ); ++ utbuf[0].tv_nsec = (long)( ++ (SvNV(accessed) - (NV)utbuf[0].tv_sec) ++ * NV_1E9 + (NV)0.5); ++ + utbuf[1].tv_sec = (Time_t)SvNV(modified); /* time modified */ +- utbuf[1].tv_nsec = (long)( ( SvNV(modified) - utbuf[1].tv_sec ) * 1e9 ); ++ utbuf[1].tv_nsec = (long)( ++ (SvNV(modified) - (NV)utbuf[1].tv_sec) ++ * NV_1E9 + (NV)0.5); + } + + while (items > 0) { +diff --git a/dist/Time-HiRes/t/utime.t b/dist/Time-HiRes/t/utime.t +index 7fd4604b35..bb4621a920 100644 +--- a/dist/Time-HiRes/t/utime.t ++++ b/dist/Time-HiRes/t/utime.t +@@ -112,7 +112,7 @@ BEGIN { + } + } + +-use Test::More tests => 18; ++use Test::More tests => 22; + BEGIN { push @INC, '.' } + use t::Watchdog; + use File::Temp qw( tempfile ); +@@ -164,6 +164,19 @@ print "#utime \$filename\n"; + is $got_mtime, $mtime, "mtime set correctly"; + }; + ++print "#utime \$filename round-trip\n"; ++{ ++ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); ++ # this fractional part is not exactly representable ++ my $t = 1000000000.12345; ++ is Time::HiRes::utime($t, $t, $filename), 1, "One file changed"; ++ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is Time::HiRes::utime($got_atime, $got_mtime, $filename), 1, "One file changed"; ++ my ($got_atime2, $got_mtime2) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is $got_atime, $got_atime2, "atime round trip ok"; ++ is $got_mtime, $got_mtime2, "mtime round trip ok"; ++}; ++ + print "utime \$filename and \$fh\n"; + { + my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); +-- +2.35.1 + diff --git a/5.028.003-main,debugging-buster/DevelPatchPerl.patch b/5.028.003-main,debugging-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,debugging-buster/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,debugging-buster/Dockerfile b/5.028.003-main,debugging-buster/Dockerfile new file mode 100644 index 0000000..5b089e6 --- /dev/null +++ b/5.028.003-main,debugging-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.028.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,longdouble,threaded-bullseye/Dockerfile b/5.028.003-main,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..7728adc --- /dev/null +++ b/5.028.003-main,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,longdouble,threaded-buster/DevelPatchPerl.patch b/5.028.003-main,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,longdouble,threaded-buster/Dockerfile b/5.028.003-main,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..0acb08b --- /dev/null +++ b/5.028.003-main,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,longdouble-bullseye/DevelPatchPerl.patch b/5.028.003-main,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,longdouble-bullseye/Dockerfile b/5.028.003-main,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..4a1e56e --- /dev/null +++ b/5.028.003-main,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,longdouble-buster/DevelPatchPerl.patch b/5.028.003-main,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,longdouble-buster/Dockerfile b/5.028.003-main,longdouble-buster/Dockerfile new file mode 100644 index 0000000..7abbc96 --- /dev/null +++ b/5.028.003-main,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,threaded-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch b/5.028.003-main,threaded-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch new file mode 100644 index 0000000..769534e --- /dev/null +++ b/5.028.003-main,threaded-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch @@ -0,0 +1,96 @@ +From 66f85150154f441b79024356cbc59fbafcff7c2a Mon Sep 17 00:00:00 2001 +From: David Mitchell +Date: Fri, 27 Apr 2018 12:43:44 +0100 +Subject: [PATCH] time::HiRes: don't truncate nanosec utime + +When passed a floating point atime/mtime value, T::HR::utime() +was converting it into two longs: secs and nsec. But the nanosec value +was calculated using a final NV to long cast, which truncates any +fractional part rather than rounding to nearest. Use a 0.5 addition to +force rounding. + +This was manifesting as a test in lib/File/Copy.t failing to preserve +the same mtime after a couple of round trips with utime() and stat(). + +In particular, the test was attempting to set an mtime to the literal +floating-point value + + 1000000000.12345 + +This value can't be represented exactly as an NV, so was actually +(under -Dquadmath) + +1000000000.1234499999999999999999999568211720247320 + +which was (using truncation) being converted into the two sec/nsec +longs: + + 1000000000, 123449999 + +After this commit, it instead correctly gets converted to + + 1000000000, 123450000 +--- + dist/Time-HiRes/HiRes.xs | 10 ++++++++-- + dist/Time-HiRes/t/utime.t | 15 ++++++++++++++- + 2 files changed, 22 insertions(+), 3 deletions(-) + +diff --git a/dist/Time-HiRes/HiRes.xs b/dist/Time-HiRes/HiRes.xs +index c4a7af7575..97e870c788 100644 +--- a/dist/Time-HiRes/HiRes.xs ++++ b/dist/Time-HiRes/HiRes.xs +@@ -1444,10 +1444,16 @@ PROTOTYPE: $$@ + "): negative time not invented yet", + SvNV(accessed), SvNV(modified)); + Zero(&utbuf, sizeof utbuf, char); ++ + utbuf[0].tv_sec = (Time_t)SvNV(accessed); /* time accessed */ +- utbuf[0].tv_nsec = (long)( ( SvNV(accessed) - utbuf[0].tv_sec ) * 1e9 ); ++ utbuf[0].tv_nsec = (long)( ++ (SvNV(accessed) - (NV)utbuf[0].tv_sec) ++ * NV_1E9 + (NV)0.5); ++ + utbuf[1].tv_sec = (Time_t)SvNV(modified); /* time modified */ +- utbuf[1].tv_nsec = (long)( ( SvNV(modified) - utbuf[1].tv_sec ) * 1e9 ); ++ utbuf[1].tv_nsec = (long)( ++ (SvNV(modified) - (NV)utbuf[1].tv_sec) ++ * NV_1E9 + (NV)0.5); + } + + while (items > 0) { +diff --git a/dist/Time-HiRes/t/utime.t b/dist/Time-HiRes/t/utime.t +index 7fd4604b35..bb4621a920 100644 +--- a/dist/Time-HiRes/t/utime.t ++++ b/dist/Time-HiRes/t/utime.t +@@ -112,7 +112,7 @@ BEGIN { + } + } + +-use Test::More tests => 18; ++use Test::More tests => 22; + BEGIN { push @INC, '.' } + use t::Watchdog; + use File::Temp qw( tempfile ); +@@ -164,6 +164,19 @@ print "#utime \$filename\n"; + is $got_mtime, $mtime, "mtime set correctly"; + }; + ++print "#utime \$filename round-trip\n"; ++{ ++ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); ++ # this fractional part is not exactly representable ++ my $t = 1000000000.12345; ++ is Time::HiRes::utime($t, $t, $filename), 1, "One file changed"; ++ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is Time::HiRes::utime($got_atime, $got_mtime, $filename), 1, "One file changed"; ++ my ($got_atime2, $got_mtime2) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is $got_atime, $got_atime2, "atime round trip ok"; ++ is $got_mtime, $got_mtime2, "mtime round trip ok"; ++}; ++ + print "utime \$filename and \$fh\n"; + { + my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); +-- +2.35.1 + diff --git a/5.028.003-main,threaded-bullseye/DevelPatchPerl.patch b/5.028.003-main,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,threaded-bullseye/Dockerfile b/5.028.003-main,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..d3a7a5f --- /dev/null +++ b/5.028.003-main,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main,threaded-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch b/5.028.003-main,threaded-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch new file mode 100644 index 0000000..769534e --- /dev/null +++ b/5.028.003-main,threaded-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch @@ -0,0 +1,96 @@ +From 66f85150154f441b79024356cbc59fbafcff7c2a Mon Sep 17 00:00:00 2001 +From: David Mitchell +Date: Fri, 27 Apr 2018 12:43:44 +0100 +Subject: [PATCH] time::HiRes: don't truncate nanosec utime + +When passed a floating point atime/mtime value, T::HR::utime() +was converting it into two longs: secs and nsec. But the nanosec value +was calculated using a final NV to long cast, which truncates any +fractional part rather than rounding to nearest. Use a 0.5 addition to +force rounding. + +This was manifesting as a test in lib/File/Copy.t failing to preserve +the same mtime after a couple of round trips with utime() and stat(). + +In particular, the test was attempting to set an mtime to the literal +floating-point value + + 1000000000.12345 + +This value can't be represented exactly as an NV, so was actually +(under -Dquadmath) + +1000000000.1234499999999999999999999568211720247320 + +which was (using truncation) being converted into the two sec/nsec +longs: + + 1000000000, 123449999 + +After this commit, it instead correctly gets converted to + + 1000000000, 123450000 +--- + dist/Time-HiRes/HiRes.xs | 10 ++++++++-- + dist/Time-HiRes/t/utime.t | 15 ++++++++++++++- + 2 files changed, 22 insertions(+), 3 deletions(-) + +diff --git a/dist/Time-HiRes/HiRes.xs b/dist/Time-HiRes/HiRes.xs +index c4a7af7575..97e870c788 100644 +--- a/dist/Time-HiRes/HiRes.xs ++++ b/dist/Time-HiRes/HiRes.xs +@@ -1444,10 +1444,16 @@ PROTOTYPE: $$@ + "): negative time not invented yet", + SvNV(accessed), SvNV(modified)); + Zero(&utbuf, sizeof utbuf, char); ++ + utbuf[0].tv_sec = (Time_t)SvNV(accessed); /* time accessed */ +- utbuf[0].tv_nsec = (long)( ( SvNV(accessed) - utbuf[0].tv_sec ) * 1e9 ); ++ utbuf[0].tv_nsec = (long)( ++ (SvNV(accessed) - (NV)utbuf[0].tv_sec) ++ * NV_1E9 + (NV)0.5); ++ + utbuf[1].tv_sec = (Time_t)SvNV(modified); /* time modified */ +- utbuf[1].tv_nsec = (long)( ( SvNV(modified) - utbuf[1].tv_sec ) * 1e9 ); ++ utbuf[1].tv_nsec = (long)( ++ (SvNV(modified) - (NV)utbuf[1].tv_sec) ++ * NV_1E9 + (NV)0.5); + } + + while (items > 0) { +diff --git a/dist/Time-HiRes/t/utime.t b/dist/Time-HiRes/t/utime.t +index 7fd4604b35..bb4621a920 100644 +--- a/dist/Time-HiRes/t/utime.t ++++ b/dist/Time-HiRes/t/utime.t +@@ -112,7 +112,7 @@ BEGIN { + } + } + +-use Test::More tests => 18; ++use Test::More tests => 22; + BEGIN { push @INC, '.' } + use t::Watchdog; + use File::Temp qw( tempfile ); +@@ -164,6 +164,19 @@ print "#utime \$filename\n"; + is $got_mtime, $mtime, "mtime set correctly"; + }; + ++print "#utime \$filename round-trip\n"; ++{ ++ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); ++ # this fractional part is not exactly representable ++ my $t = 1000000000.12345; ++ is Time::HiRes::utime($t, $t, $filename), 1, "One file changed"; ++ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is Time::HiRes::utime($got_atime, $got_mtime, $filename), 1, "One file changed"; ++ my ($got_atime2, $got_mtime2) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is $got_atime, $got_atime2, "atime round trip ok"; ++ is $got_mtime, $got_mtime2, "mtime round trip ok"; ++}; ++ + print "utime \$filename and \$fh\n"; + { + my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); +-- +2.35.1 + diff --git a/5.028.003-main,threaded-buster/DevelPatchPerl.patch b/5.028.003-main,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main,threaded-buster/Dockerfile b/5.028.003-main,threaded-buster/Dockerfile new file mode 100644 index 0000000..8537e14 --- /dev/null +++ b/5.028.003-main,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch b/5.028.003-main-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch new file mode 100644 index 0000000..769534e --- /dev/null +++ b/5.028.003-main-bullseye/0001-time-HiRes-don-t-truncate-nanosec-utime.patch @@ -0,0 +1,96 @@ +From 66f85150154f441b79024356cbc59fbafcff7c2a Mon Sep 17 00:00:00 2001 +From: David Mitchell +Date: Fri, 27 Apr 2018 12:43:44 +0100 +Subject: [PATCH] time::HiRes: don't truncate nanosec utime + +When passed a floating point atime/mtime value, T::HR::utime() +was converting it into two longs: secs and nsec. But the nanosec value +was calculated using a final NV to long cast, which truncates any +fractional part rather than rounding to nearest. Use a 0.5 addition to +force rounding. + +This was manifesting as a test in lib/File/Copy.t failing to preserve +the same mtime after a couple of round trips with utime() and stat(). + +In particular, the test was attempting to set an mtime to the literal +floating-point value + + 1000000000.12345 + +This value can't be represented exactly as an NV, so was actually +(under -Dquadmath) + +1000000000.1234499999999999999999999568211720247320 + +which was (using truncation) being converted into the two sec/nsec +longs: + + 1000000000, 123449999 + +After this commit, it instead correctly gets converted to + + 1000000000, 123450000 +--- + dist/Time-HiRes/HiRes.xs | 10 ++++++++-- + dist/Time-HiRes/t/utime.t | 15 ++++++++++++++- + 2 files changed, 22 insertions(+), 3 deletions(-) + +diff --git a/dist/Time-HiRes/HiRes.xs b/dist/Time-HiRes/HiRes.xs +index c4a7af7575..97e870c788 100644 +--- a/dist/Time-HiRes/HiRes.xs ++++ b/dist/Time-HiRes/HiRes.xs +@@ -1444,10 +1444,16 @@ PROTOTYPE: $$@ + "): negative time not invented yet", + SvNV(accessed), SvNV(modified)); + Zero(&utbuf, sizeof utbuf, char); ++ + utbuf[0].tv_sec = (Time_t)SvNV(accessed); /* time accessed */ +- utbuf[0].tv_nsec = (long)( ( SvNV(accessed) - utbuf[0].tv_sec ) * 1e9 ); ++ utbuf[0].tv_nsec = (long)( ++ (SvNV(accessed) - (NV)utbuf[0].tv_sec) ++ * NV_1E9 + (NV)0.5); ++ + utbuf[1].tv_sec = (Time_t)SvNV(modified); /* time modified */ +- utbuf[1].tv_nsec = (long)( ( SvNV(modified) - utbuf[1].tv_sec ) * 1e9 ); ++ utbuf[1].tv_nsec = (long)( ++ (SvNV(modified) - (NV)utbuf[1].tv_sec) ++ * NV_1E9 + (NV)0.5); + } + + while (items > 0) { +diff --git a/dist/Time-HiRes/t/utime.t b/dist/Time-HiRes/t/utime.t +index 7fd4604b35..bb4621a920 100644 +--- a/dist/Time-HiRes/t/utime.t ++++ b/dist/Time-HiRes/t/utime.t +@@ -112,7 +112,7 @@ BEGIN { + } + } + +-use Test::More tests => 18; ++use Test::More tests => 22; + BEGIN { push @INC, '.' } + use t::Watchdog; + use File::Temp qw( tempfile ); +@@ -164,6 +164,19 @@ print "#utime \$filename\n"; + is $got_mtime, $mtime, "mtime set correctly"; + }; + ++print "#utime \$filename round-trip\n"; ++{ ++ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); ++ # this fractional part is not exactly representable ++ my $t = 1000000000.12345; ++ is Time::HiRes::utime($t, $t, $filename), 1, "One file changed"; ++ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is Time::HiRes::utime($got_atime, $got_mtime, $filename), 1, "One file changed"; ++ my ($got_atime2, $got_mtime2) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is $got_atime, $got_atime2, "atime round trip ok"; ++ is $got_mtime, $got_mtime2, "mtime round trip ok"; ++}; ++ + print "utime \$filename and \$fh\n"; + { + my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); +-- +2.35.1 + diff --git a/5.028.003-main-bullseye/DevelPatchPerl.patch b/5.028.003-main-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main-bullseye/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main-bullseye/Dockerfile b/5.028.003-main-bullseye/Dockerfile new file mode 100644 index 0000000..32d950e --- /dev/null +++ b/5.028.003-main-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.028.003-main-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch b/5.028.003-main-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch new file mode 100644 index 0000000..769534e --- /dev/null +++ b/5.028.003-main-buster/0001-time-HiRes-don-t-truncate-nanosec-utime.patch @@ -0,0 +1,96 @@ +From 66f85150154f441b79024356cbc59fbafcff7c2a Mon Sep 17 00:00:00 2001 +From: David Mitchell +Date: Fri, 27 Apr 2018 12:43:44 +0100 +Subject: [PATCH] time::HiRes: don't truncate nanosec utime + +When passed a floating point atime/mtime value, T::HR::utime() +was converting it into two longs: secs and nsec. But the nanosec value +was calculated using a final NV to long cast, which truncates any +fractional part rather than rounding to nearest. Use a 0.5 addition to +force rounding. + +This was manifesting as a test in lib/File/Copy.t failing to preserve +the same mtime after a couple of round trips with utime() and stat(). + +In particular, the test was attempting to set an mtime to the literal +floating-point value + + 1000000000.12345 + +This value can't be represented exactly as an NV, so was actually +(under -Dquadmath) + +1000000000.1234499999999999999999999568211720247320 + +which was (using truncation) being converted into the two sec/nsec +longs: + + 1000000000, 123449999 + +After this commit, it instead correctly gets converted to + + 1000000000, 123450000 +--- + dist/Time-HiRes/HiRes.xs | 10 ++++++++-- + dist/Time-HiRes/t/utime.t | 15 ++++++++++++++- + 2 files changed, 22 insertions(+), 3 deletions(-) + +diff --git a/dist/Time-HiRes/HiRes.xs b/dist/Time-HiRes/HiRes.xs +index c4a7af7575..97e870c788 100644 +--- a/dist/Time-HiRes/HiRes.xs ++++ b/dist/Time-HiRes/HiRes.xs +@@ -1444,10 +1444,16 @@ PROTOTYPE: $$@ + "): negative time not invented yet", + SvNV(accessed), SvNV(modified)); + Zero(&utbuf, sizeof utbuf, char); ++ + utbuf[0].tv_sec = (Time_t)SvNV(accessed); /* time accessed */ +- utbuf[0].tv_nsec = (long)( ( SvNV(accessed) - utbuf[0].tv_sec ) * 1e9 ); ++ utbuf[0].tv_nsec = (long)( ++ (SvNV(accessed) - (NV)utbuf[0].tv_sec) ++ * NV_1E9 + (NV)0.5); ++ + utbuf[1].tv_sec = (Time_t)SvNV(modified); /* time modified */ +- utbuf[1].tv_nsec = (long)( ( SvNV(modified) - utbuf[1].tv_sec ) * 1e9 ); ++ utbuf[1].tv_nsec = (long)( ++ (SvNV(modified) - (NV)utbuf[1].tv_sec) ++ * NV_1E9 + (NV)0.5); + } + + while (items > 0) { +diff --git a/dist/Time-HiRes/t/utime.t b/dist/Time-HiRes/t/utime.t +index 7fd4604b35..bb4621a920 100644 +--- a/dist/Time-HiRes/t/utime.t ++++ b/dist/Time-HiRes/t/utime.t +@@ -112,7 +112,7 @@ BEGIN { + } + } + +-use Test::More tests => 18; ++use Test::More tests => 22; + BEGIN { push @INC, '.' } + use t::Watchdog; + use File::Temp qw( tempfile ); +@@ -164,6 +164,19 @@ print "#utime \$filename\n"; + is $got_mtime, $mtime, "mtime set correctly"; + }; + ++print "#utime \$filename round-trip\n"; ++{ ++ my ($fh, $filename) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); ++ # this fractional part is not exactly representable ++ my $t = 1000000000.12345; ++ is Time::HiRes::utime($t, $t, $filename), 1, "One file changed"; ++ my ($got_atime, $got_mtime) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is Time::HiRes::utime($got_atime, $got_mtime, $filename), 1, "One file changed"; ++ my ($got_atime2, $got_mtime2) = ( Time::HiRes::stat($fh) )[8, 9]; ++ is $got_atime, $got_atime2, "atime round trip ok"; ++ is $got_mtime, $got_mtime2, "mtime round trip ok"; ++}; ++ + print "utime \$filename and \$fh\n"; + { + my ($fh1, $filename1) = tempfile( "Time-HiRes-utime-XXXXXXXXX", UNLINK => 1 ); +-- +2.35.1 + diff --git a/5.028.003-main-buster/DevelPatchPerl.patch b/5.028.003-main-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..c72bc46 --- /dev/null +++ b/5.028.003-main-buster/DevelPatchPerl.patch @@ -0,0 +1,178 @@ +diff --git a/Configure b/Configure +index f99377e..e020242 100755 +--- a/Configure ++++ b/Configure +@@ -4689,7 +4689,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='' ;; +@@ -4729,7 +4729,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 | \ +@@ -5455,13 +5455,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. +@@ -5470,7 +5470,7 @@ default|recommended) + ;; + esac + case "$gccversion" in +- 1*) ;; ++ 1.*) ;; + 2.[0-8]*) ;; + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag +@@ -5588,7 +5588,7 @@ case "$cppflags" in + ;; + esac + case "$gccversion" in +-1*) cppflags="$cppflags -D__GNUC__" ++1.*) cppflags="$cppflags -D__GNUC__" + esac + case "$mips_type" in + '');; +@@ -23026,7 +23026,7 @@ fi + + : add -D_FORTIFY_SOURCE if feasible and not already there + case "$gccversion" in +-[4567].*) case "$optimize$ccflags" in ++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 +diff --git a/cpan/Time-Local/t/Local.t b/cpan/Time-Local/t/Local.t +index 6341396..701d22d 100644 +--- a/cpan/Time-Local/t/Local.t ++++ b/cpan/Time-Local/t/Local.t +@@ -85,19 +85,17 @@ my $epoch_is_64 + + for ( @time, @neg_time ) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + SKIP: { + skip '1970 test on VOS fails.', 12 +- if $^O eq 'vos' && $year == 70; ++ if $^O eq 'vos' && $year == 1970; + skip 'this platform does not support negative epochs.', 12 +- if $year < 70 && !$neg_epoch_ok; ++ if $year < 1970 && !$neg_epoch_ok; + + # Test timelocal() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timelocal( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = localtime($time); + +@@ -106,13 +104,12 @@ SKIP: { + is( $h, $hour, "timelocal hour for @$_" ); + is( $D, $mday, "timelocal day for @$_" ); + is( $M, $mon, "timelocal month for @$_" ); +- is( $Y, $year, "timelocal year for @$_" ); ++ is( $Y, $year - 1900, "timelocal year for @$_" ); + } + + # Test timegm() + { +- my $year_in = $year < 70 ? $year + 1900 : $year; +- my $time = timegm( $sec, $min, $hour, $mday, $mon, $year_in ); ++ my $time = timegm( $sec, $min, $hour, $mday, $mon, $year ); + + my ( $s, $m, $h, $D, $M, $Y ) = gmtime($time); + +@@ -121,14 +118,13 @@ SKIP: { + is( $h, $hour, "timegm hour for @$_" ); + is( $D, $mday, "timegm day for @$_" ); + is( $M, $mon, "timegm month for @$_" ); +- is( $Y, $year, "timegm year for @$_" ); ++ is( $Y, $year - 1900, "timegm year for @$_" ); + } + } + } + + for (@bad_time) { + my ( $year, $mon, $mday, $hour, $min, $sec ) = @$_; +- $year -= 1900; + $mon--; + + eval { timegm( $sec, $min, $hour, $mday, $mon, $year ) }; +@@ -229,6 +225,30 @@ SKIP: + ); + } + ++# 2-digit years ++{ ++ my $current_year = ( localtime() )[5]; ++ my $pre_break = ( $current_year + 49 ) - 100; ++ my $break = ( $current_year + 50 ) - 100; ++ my $post_break = ( $current_year + 51 ) - 100; ++ ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $pre_break ) ) )[5] ), ++ $pre_break + 100, ++ "year $pre_break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $break ) ) )[5] ), ++ $break + 100, ++ "year $break is treated as next century", ++ ); ++ is( ++ ( ( localtime( timelocal( 0, 0, 0, 1, 1, $post_break ) ) )[5] ), ++ $post_break, ++ "year $post_break is treated as current century", ++ ); ++} ++ + SKIP: + { + skip 'These tests only run for the package maintainer.', 8 +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.028.003-main-buster/Dockerfile b/5.028.003-main-buster/Dockerfile new file mode 100644 index 0000000..0666454 --- /dev/null +++ b/5.028.003-main-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && apt-get install -y --no-install-recommends \ + bzip2 \ + ca-certificates \ + # cpio \ + curl \ + dpkg-dev \ + # file \ + gcc \ + # g++ \ + libbz2-dev \ + libdb-dev \ + libc6-dev \ + libgdbm-dev \ + liblzma-dev \ + make \ + netbase \ + patch \ + procps \ + zlib1g-dev \ + xz-utils \ + && curl -SL https://www.cpan.org/src/5.0/perl-5.28.3.tar.xz -o perl-5.28.3.tar.xz \ + && echo '77dc1ddf541643af14d585867d3d0741cce45d0dbe8f1467024e63165d9e2fc5 *perl-5.28.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.28.3.tar.xz -C /usr/src/perl \ + && rm perl-5.28.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.28.3","-de0"] diff --git a/5.030.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.030.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,debugging,longdouble,threaded-bullseye/Dockerfile b/5.030.003-main,debugging,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..0f14697 --- /dev/null +++ b/5.030.003-main,debugging,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch b/5.030.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,debugging,longdouble,threaded-buster/Dockerfile b/5.030.003-main,debugging,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..77b87ef --- /dev/null +++ b/5.030.003-main,debugging,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch b/5.030.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,debugging,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,debugging,longdouble-bullseye/Dockerfile b/5.030.003-main,debugging,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..c0301d9 --- /dev/null +++ b/5.030.003-main,debugging,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,debugging,longdouble-buster/DevelPatchPerl.patch b/5.030.003-main,debugging,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,debugging,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,debugging,longdouble-buster/Dockerfile b/5.030.003-main,debugging,longdouble-buster/Dockerfile new file mode 100644 index 0000000..6dbd0a8 --- /dev/null +++ b/5.030.003-main,debugging,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch b/5.030.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,debugging,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,debugging,threaded-bullseye/Dockerfile b/5.030.003-main,debugging,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..e57c7f8 --- /dev/null +++ b/5.030.003-main,debugging,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,debugging,threaded-buster/DevelPatchPerl.patch b/5.030.003-main,debugging,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,debugging,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,debugging,threaded-buster/Dockerfile b/5.030.003-main,debugging,threaded-buster/Dockerfile new file mode 100644 index 0000000..6571091 --- /dev/null +++ b/5.030.003-main,debugging,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,debugging-bullseye/DevelPatchPerl.patch b/5.030.003-main,debugging-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,debugging-bullseye/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,debugging-bullseye/Dockerfile b/5.030.003-main,debugging-bullseye/Dockerfile new file mode 100644 index 0000000..ef5a704 --- /dev/null +++ b/5.030.003-main,debugging-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,debugging-buster/DevelPatchPerl.patch b/5.030.003-main,debugging-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,debugging-buster/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,debugging-buster/Dockerfile b/5.030.003-main,debugging-buster/Dockerfile new file mode 100644 index 0000000..e1eb754 --- /dev/null +++ b/5.030.003-main,debugging-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.030.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,longdouble,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,longdouble,threaded-bullseye/Dockerfile b/5.030.003-main,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..7da39a9 --- /dev/null +++ b/5.030.003-main,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,longdouble,threaded-buster/DevelPatchPerl.patch b/5.030.003-main,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,longdouble,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,longdouble,threaded-buster/Dockerfile b/5.030.003-main,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..6ac1710 --- /dev/null +++ b/5.030.003-main,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,longdouble-bullseye/DevelPatchPerl.patch b/5.030.003-main,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,longdouble-bullseye/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,longdouble-bullseye/Dockerfile b/5.030.003-main,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..1d99127 --- /dev/null +++ b/5.030.003-main,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,longdouble-buster/DevelPatchPerl.patch b/5.030.003-main,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,longdouble-buster/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,longdouble-buster/Dockerfile b/5.030.003-main,longdouble-buster/Dockerfile new file mode 100644 index 0000000..fbca411 --- /dev/null +++ b/5.030.003-main,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,threaded-bullseye/DevelPatchPerl.patch b/5.030.003-main,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,threaded-bullseye/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,threaded-bullseye/Dockerfile b/5.030.003-main,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..aae272b --- /dev/null +++ b/5.030.003-main,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main,threaded-buster/DevelPatchPerl.patch b/5.030.003-main,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main,threaded-buster/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main,threaded-buster/Dockerfile b/5.030.003-main,threaded-buster/Dockerfile new file mode 100644 index 0000000..7a98c6f --- /dev/null +++ b/5.030.003-main,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main-bullseye/DevelPatchPerl.patch b/5.030.003-main-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main-bullseye/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main-bullseye/Dockerfile b/5.030.003-main-bullseye/Dockerfile new file mode 100644 index 0000000..5641978 --- /dev/null +++ b/5.030.003-main-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.030.003-main-buster/DevelPatchPerl.patch b/5.030.003-main-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..7eca6ba --- /dev/null +++ b/5.030.003-main-buster/DevelPatchPerl.patch @@ -0,0 +1,23 @@ +diff --git a/hints/linux.sh b/hints/linux.sh +index a985a8e..c749f0f 100644 +--- a/hints/linux.sh ++++ b/hints/linux.sh +@@ -85,7 +85,7 @@ uname_minus_m="${uname_minus_m:-"$targetarch"}" + + # Check if we're about to use Intel's ICC compiler + case "`${cc:-cc} -V 2>&1`" in +-*"Intel(R) C++ Compiler"*|*"Intel(R) C Compiler"*) ++*"Intel(R) C"*" Compiler"*) + # record the version, formats: + # icc (ICC) 10.1 20080801 + # icpc (ICC) 10.1 20080801 +@@ -165,6 +165,9 @@ esac + # plibpth to bypass this check. + if [ -x /usr/bin/gcc ] ; then + gcc=/usr/bin/gcc ++# clang also provides -print-search-dirs ++elif ${cc:-cc} --version 2>/dev/null | grep -q '^clang ' ; then ++ gcc=${cc:-cc} + else + gcc=gcc + fi diff --git a/5.030.003-main-buster/Dockerfile b/5.030.003-main-buster/Dockerfile new file mode 100644 index 0000000..ae1ae33 --- /dev/null +++ b/5.030.003-main-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.30.3.tar.xz -o perl-5.30.3.tar.xz \ + && echo '6967595f2e3f3a94544c35152f9a25e0cb8ea24ae45f4bf1882f2e33f4a400f4 *perl-5.30.3.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.30.3.tar.xz -C /usr/src/perl \ + && rm perl-5.30.3.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.30.3","-de0"] diff --git a/5.032.001-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.032.001-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,debugging,longdouble,threaded-bullseye/Dockerfile b/5.032.001-main,debugging,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..a41949b --- /dev/null +++ b/5.032.001-main,debugging,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch b/5.032.001-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,debugging,longdouble,threaded-buster/Dockerfile b/5.032.001-main,debugging,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..6a0a222 --- /dev/null +++ b/5.032.001-main,debugging,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,debugging,longdouble-bullseye/DevelPatchPerl.patch b/5.032.001-main,debugging,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,debugging,longdouble-bullseye/Dockerfile b/5.032.001-main,debugging,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..455c326 --- /dev/null +++ b/5.032.001-main,debugging,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,debugging,longdouble-buster/DevelPatchPerl.patch b/5.032.001-main,debugging,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,debugging,longdouble-buster/Dockerfile b/5.032.001-main,debugging,longdouble-buster/Dockerfile new file mode 100644 index 0000000..91602fa --- /dev/null +++ b/5.032.001-main,debugging,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,debugging,threaded-bullseye/DevelPatchPerl.patch b/5.032.001-main,debugging,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,debugging,threaded-bullseye/Dockerfile b/5.032.001-main,debugging,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..62f2bed --- /dev/null +++ b/5.032.001-main,debugging,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,debugging,threaded-buster/DevelPatchPerl.patch b/5.032.001-main,debugging,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,debugging,threaded-buster/Dockerfile b/5.032.001-main,debugging,threaded-buster/Dockerfile new file mode 100644 index 0000000..63f123c --- /dev/null +++ b/5.032.001-main,debugging,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,debugging-bullseye/DevelPatchPerl.patch b/5.032.001-main,debugging-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,debugging-bullseye/Dockerfile b/5.032.001-main,debugging-bullseye/Dockerfile new file mode 100644 index 0000000..631be8a --- /dev/null +++ b/5.032.001-main,debugging-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,debugging-buster/DevelPatchPerl.patch b/5.032.001-main,debugging-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,debugging-buster/Dockerfile b/5.032.001-main,debugging-buster/Dockerfile new file mode 100644 index 0000000..c362105 --- /dev/null +++ b/5.032.001-main,debugging-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.032.001-main,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,longdouble,threaded-bullseye/Dockerfile b/5.032.001-main,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..0164a17 --- /dev/null +++ b/5.032.001-main,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,longdouble,threaded-buster/DevelPatchPerl.patch b/5.032.001-main,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,longdouble,threaded-buster/Dockerfile b/5.032.001-main,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..1a70f01 --- /dev/null +++ b/5.032.001-main,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,longdouble-bullseye/DevelPatchPerl.patch b/5.032.001-main,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,longdouble-bullseye/Dockerfile b/5.032.001-main,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..6f5e2c1 --- /dev/null +++ b/5.032.001-main,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,longdouble-buster/DevelPatchPerl.patch b/5.032.001-main,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,longdouble-buster/Dockerfile b/5.032.001-main,longdouble-buster/Dockerfile new file mode 100644 index 0000000..940ffb5 --- /dev/null +++ b/5.032.001-main,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,threaded-bullseye/DevelPatchPerl.patch b/5.032.001-main,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,threaded-bullseye/Dockerfile b/5.032.001-main,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..0ee1e12 --- /dev/null +++ b/5.032.001-main,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main,threaded-buster/DevelPatchPerl.patch b/5.032.001-main,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main,threaded-buster/Dockerfile b/5.032.001-main,threaded-buster/Dockerfile new file mode 100644 index 0000000..f7d360a --- /dev/null +++ b/5.032.001-main,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main-bullseye/DevelPatchPerl.patch b/5.032.001-main-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main-bullseye/Dockerfile b/5.032.001-main-bullseye/Dockerfile new file mode 100644 index 0000000..c98c758 --- /dev/null +++ b/5.032.001-main-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.032.001-main-buster/DevelPatchPerl.patch b/5.032.001-main-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.032.001-main-buster/Dockerfile b/5.032.001-main-buster/Dockerfile new file mode 100644 index 0000000..0cddc8e --- /dev/null +++ b/5.032.001-main-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.32.1.tar.xz -o perl-5.32.1.tar.xz \ + && echo '57cc47c735c8300a8ce2fa0643507b44c4ae59012bfdad0121313db639e02309 *perl-5.32.1.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.32.1.tar.xz -C /usr/src/perl \ + && rm perl-5.32.1.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.32.1","-de0"] diff --git a/5.034.000-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.034.000-main,debugging,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,debugging,longdouble,threaded-bullseye/Dockerfile b/5.034.000-main,debugging,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..96e038d --- /dev/null +++ b/5.034.000-main,debugging,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch b/5.034.000-main,debugging,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,debugging,longdouble,threaded-buster/Dockerfile b/5.034.000-main,debugging,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..85c1ee4 --- /dev/null +++ b/5.034.000-main,debugging,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,debugging,longdouble-bullseye/DevelPatchPerl.patch b/5.034.000-main,debugging,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,debugging,longdouble-bullseye/Dockerfile b/5.034.000-main,debugging,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..919a3e8 --- /dev/null +++ b/5.034.000-main,debugging,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,debugging,longdouble-buster/DevelPatchPerl.patch b/5.034.000-main,debugging,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,debugging,longdouble-buster/Dockerfile b/5.034.000-main,debugging,longdouble-buster/Dockerfile new file mode 100644 index 0000000..e16cd5b --- /dev/null +++ b/5.034.000-main,debugging,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,debugging,threaded-bullseye/DevelPatchPerl.patch b/5.034.000-main,debugging,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,debugging,threaded-bullseye/Dockerfile b/5.034.000-main,debugging,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..3859785 --- /dev/null +++ b/5.034.000-main,debugging,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,debugging,threaded-buster/DevelPatchPerl.patch b/5.034.000-main,debugging,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,debugging,threaded-buster/Dockerfile b/5.034.000-main,debugging,threaded-buster/Dockerfile new file mode 100644 index 0000000..bae357f --- /dev/null +++ b/5.034.000-main,debugging,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,debugging-bullseye/DevelPatchPerl.patch b/5.034.000-main,debugging-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,debugging-bullseye/Dockerfile b/5.034.000-main,debugging-bullseye/Dockerfile new file mode 100644 index 0000000..2aeff53 --- /dev/null +++ b/5.034.000-main,debugging-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,debugging-buster/DevelPatchPerl.patch b/5.034.000-main,debugging-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,debugging-buster/Dockerfile b/5.034.000-main,debugging-buster/Dockerfile new file mode 100644 index 0000000..e34fce3 --- /dev/null +++ b/5.034.000-main,debugging-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Accflags=-ggdb -DDEBUGGING -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,longdouble,threaded-bullseye/DevelPatchPerl.patch b/5.034.000-main,longdouble,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,longdouble,threaded-bullseye/Dockerfile b/5.034.000-main,longdouble,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..fdd0c3b --- /dev/null +++ b/5.034.000-main,longdouble,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,longdouble,threaded-buster/DevelPatchPerl.patch b/5.034.000-main,longdouble,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,longdouble,threaded-buster/Dockerfile b/5.034.000-main,longdouble,threaded-buster/Dockerfile new file mode 100644 index 0000000..3376025 --- /dev/null +++ b/5.034.000-main,longdouble,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,longdouble-bullseye/DevelPatchPerl.patch b/5.034.000-main,longdouble-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,longdouble-bullseye/Dockerfile b/5.034.000-main,longdouble-bullseye/Dockerfile new file mode 100644 index 0000000..b2966b4 --- /dev/null +++ b/5.034.000-main,longdouble-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,longdouble-buster/DevelPatchPerl.patch b/5.034.000-main,longdouble-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,longdouble-buster/Dockerfile b/5.034.000-main,longdouble-buster/Dockerfile new file mode 100644 index 0000000..53bc65c --- /dev/null +++ b/5.034.000-main,longdouble-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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" -Duselongdouble -Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,threaded-bullseye/DevelPatchPerl.patch b/5.034.000-main,threaded-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,threaded-bullseye/Dockerfile b/5.034.000-main,threaded-bullseye/Dockerfile new file mode 100644 index 0000000..6798e25 --- /dev/null +++ b/5.034.000-main,threaded-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main,threaded-buster/DevelPatchPerl.patch b/5.034.000-main,threaded-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main,threaded-buster/Dockerfile b/5.034.000-main,threaded-buster/Dockerfile new file mode 100644 index 0000000..544d354 --- /dev/null +++ b/5.034.000-main,threaded-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main-bullseye/DevelPatchPerl.patch b/5.034.000-main-bullseye/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main-bullseye/Dockerfile b/5.034.000-main-bullseye/Dockerfile new file mode 100644 index 0000000..c31e48e --- /dev/null +++ b/5.034.000-main-bullseye/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:bullseye-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/5.034.000-main-buster/DevelPatchPerl.patch b/5.034.000-main-buster/DevelPatchPerl.patch new file mode 100644 index 0000000..e69de29 diff --git a/5.034.000-main-buster/Dockerfile b/5.034.000-main-buster/Dockerfile new file mode 100644 index 0000000..6f8235d --- /dev/null +++ b/5.034.000-main-buster/Dockerfile @@ -0,0 +1,59 @@ +FROM debian:buster-backports +LABEL maintainer="Ryan Voots " + +COPY *.patch /usr/src/perl/ +WORKDIR /usr/src/perl + +ENV DEBIAN_FRONTEND=noninteractive + +RUN perl -i.bak -pE '$x=$_; $x=~s|^deb |deb-src |g;$_.=$x' /etc/apt/sources.list \ + && apt update \ + && apt -yq full-upgrade \ + && apt -yq build-dep perl \ + && 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.34.0.tar.xz -o perl-5.34.0.tar.xz \ + && echo '82c2e5e5c71b0e10487a80d79140469ab1f8056349ca8545140a224dbbed7ded *perl-5.34.0.tar.xz' | sha256sum -c - \ + && tar --strip-components=1 -xaf perl-5.34.0.tar.xz -C /usr/src/perl \ + && rm perl-5.34.0.tar.xz \ + && cat *.patch | patch -p1 \ + && echo 'print "1..0 # Skipped: Tests are invalid"' > /usr/src/perl/ext/GDBM_File/t/fatal.t \ + && 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 -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib -des \ + && make -j$(nproc) \ + && TEST_JOBS=$(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.34.0","-de0"] diff --git a/config.yml b/config.yml index 62a3587..12978c2 100644 --- a/config.yml +++ b/config.yml @@ -5,7 +5,7 @@ builds: options: common: "-Duseshrplib -Dvendorprefix=/usr/local -Aldflags='-Wl,-z,now -Wl,-zrelro -Wl,-z,noexecstack' -Accflags='-fpie -fPIC -fstack-protector-all -pie -D_FORTIFY_SOURCE=2' -Duseshrplib" threaded: "-Dusethreads" - quadmath: "-Dusequadmath" + longdouble: "-Duselongdouble" debugging: "-Accflags=-ggdb -DDEBUGGING" releases: diff --git a/generate.pl b/generate.pl index 07358a4..1f7ccc7 100755 --- a/generate.pl +++ b/generate.pl @@ -98,12 +98,12 @@ if (!-d "downloads") { for my $build (@{$config->{builds}}) { $builds{$build} = $config->{options}{common}; $builds{"$build,threaded"} = "@{$config->{options}}{qw/threaded common/}"; - $builds{"$build,quadmath"} = "@{$config->{options}}{qw/quadmath common/}"; + $builds{"$build,longdouble"} = "@{$config->{options}}{qw/longdouble common/}"; $builds{"$build,debugging"} = "@{$config->{options}}{qw/debugging common/}"; - $builds{"$build,quadmath,threaded"} = "@{$config->{options}}{qw/quadmath threaded common/}"; + $builds{"$build,longdouble,threaded"} = "@{$config->{options}}{qw/longdouble threaded common/}"; $builds{"$build,debugging,threaded"} = "@{$config->{options}}{qw/debugging threaded common/}"; - $builds{"$build,debugging,quadmath,threaded"} = "@{$config->{options}}{qw/debugging threaded quadmath common/}"; - $builds{"$build,debugging,quadmath"} = "@{$config->{options}}{qw/debugging quadmath common/}"; + $builds{"$build,debugging,longdouble,threaded"} = "@{$config->{options}}{qw/debugging threaded longdouble common/}"; + $builds{"$build,debugging,longdouble"} = "@{$config->{options}}{qw/debugging longdouble common/}"; } for my $release (@{$config->{releases}}) {