aboutsummaryrefslogtreecommitdiffstats
path: root/lang/perl5.20
diff options
context:
space:
mode:
authormat <mat@FreeBSD.org>2015-04-09 20:21:29 +0800
committermat <mat@FreeBSD.org>2015-04-09 20:21:29 +0800
commitcf2a77e0ba5ea7db025e4e9c299c05cac24efbd5 (patch)
tree13588e47865d92c5a884f61a462b25fb3c56bb9f /lang/perl5.20
parent6e8d0466ac640db21041c593adbb8c65a7ce3940 (diff)
downloadfreebsd-ports-gnome-cf2a77e0ba5ea7db025e4e9c299c05cac24efbd5.tar.gz
freebsd-ports-gnome-cf2a77e0ba5ea7db025e4e9c299c05cac24efbd5.tar.zst
freebsd-ports-gnome-cf2a77e0ba5ea7db025e4e9c299c05cac24efbd5.zip
Make Perl build more reproducibly.
Differential Revision: https://reviews.freebsd.org/D2016 Some bits from: Jérémy Bobbio <lunar@debian.org> Sponsored by: Absolight
Diffstat (limited to 'lang/perl5.20')
-rw-r--r--lang/perl5.20/Makefile5
-rw-r--r--lang/perl5.20/files/patch-Configure16
-rw-r--r--lang/perl5.20/files/patch-cpan_podlators_lib_Pod_Man.pm107
-rw-r--r--lang/perl5.20/files/patch-cpan_podlators_t_devise-date.t39
-rw-r--r--lang/perl5.20/files/patch-perl.c21
5 files changed, 185 insertions, 3 deletions
diff --git a/lang/perl5.20/Makefile b/lang/perl5.20/Makefile
index 451fbcea31c9..d0ad5aac51d1 100644
--- a/lang/perl5.20/Makefile
+++ b/lang/perl5.20/Makefile
@@ -3,6 +3,7 @@
PORTNAME= perl
PORTVERSION= ${PERL_VERSION}
+PORTREVISION= 1
CATEGORIES= lang devel perl5
MASTER_SITES= CPAN
MASTER_SITE_SUBDIR= ../../src
@@ -83,7 +84,9 @@ CONFIGURE_ARGS= -sde -Dprefix=${PREFIX} \
-Dsiteman3dir=${SITE_MAN3} \
-Dsiteman1dir=${PREFIX}/man/man1 \
-Ui_malloc -Ui_iconv -Uinstallusrbinperl -Dusenm=n \
- -Dcc="${CC}" -Duseshrplib -Dinc_version_list=none
+ -Dcc="${CC}" -Duseshrplib -Dinc_version_list=none \
+ -Dcf_by=${MAINTAINER:C,@.*,,} -Dcf_email=${MAINTAINER} \
+ -Dcf_time="`env LANG=C ${STAT} -t \"%a %b %d %T %Z %Y\" -f %Sm ${_DISTDIR}/${DISTNAME}${EXTRACT_SUFX}`"
# Keep the following two in sync.
# lddlflags is used for all .so linking
# shrpldflags is used for libperl.so, so remove all the extra bits inherited from lddlflags.
diff --git a/lang/perl5.20/files/patch-Configure b/lang/perl5.20/files/patch-Configure
index bfea05d838f0..f0566b233f43 100644
--- a/lang/perl5.20/files/patch-Configure
+++ b/lang/perl5.20/files/patch-Configure
@@ -1,6 +1,18 @@
--- Configure.orig 2015-01-10 12:06:37 UTC
+++ Configure
-@@ -4948,7 +4948,7 @@ esac
+@@ -3767,7 +3767,10 @@ esac
+ . ./posthint.sh
+
+ : who configured the system
+-cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
++case "$cf_time" in
++"")
++ cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1` ;;
++esac
+ case "$cf_by" in
+ "")
+ cf_by=`(logname) 2>/dev/null`
+@@ -4948,7 +4951,7 @@ esac
: Now check and see which directories actually exist, avoiding duplicates
for xxx in $dlist
do
@@ -9,7 +21,7 @@
case " $libpth " in
*" $xxx "*) ;;
*) libpth="$libpth $xxx";;
-@@ -9342,8 +9342,7 @@ prefixvar=siteman3dir
+@@ -9342,8 +9345,7 @@ prefixvar=siteman3dir
: determine where add-on public executable scripts go
case "$sitescript" in
diff --git a/lang/perl5.20/files/patch-cpan_podlators_lib_Pod_Man.pm b/lang/perl5.20/files/patch-cpan_podlators_lib_Pod_Man.pm
new file mode 100644
index 000000000000..9d70a4a8c98a
--- /dev/null
+++ b/lang/perl5.20/files/patch-cpan_podlators_lib_Pod_Man.pm
@@ -0,0 +1,107 @@
+--- cpan/podlators/lib/Pod/Man.pm.orig 2014-12-27 11:48:48 UTC
++++ cpan/podlators/lib/Pod/Man.pm
+@@ -876,25 +876,42 @@ sub devise_title {
+ }
+
+ # Determine the modification date and return that, properly formatted in ISO
+-# format. If we can't get the modification date of the input, instead use the
+-# current time. Pod::Simple returns a completely unuseful stringified file
+-# handle as the source_filename for input from a file handle, so we have to
+-# deal with that as well.
++# format.
++#
++# If POD_MAN_DATE is set, that overrides anything else. This can be used for
++# reproducible generation of the same file even if the input file timestamps
++# are unpredictable or the POD coms from standard input.
++#
++# Otherwise, use the modification date of the input if we can stat it. Be
++# aware that Pod::Simple returns the stringification of the file handle as
++# source_filename for input from a file handle, so we'll stat some random ref
++# string in that case. If that fails, instead use the current time.
++#
++# $self - Pod::Man object, used to get the source file
++#
++# Returns: YYYY-MM-DD date suitable for the left-hand footer
+ sub devise_date {
+ my ($self) = @_;
++
++ # If POD_MAN_DATE is set, always use it.
++ if ($ENV{POD_MAN_DATE}) {
++ return $ENV{POD_MAN_DATE};
++ }
++
++ # Otherwise, get the input filename and try to stat it. If that fails,
++ # use the current time.
+ my $input = $self->source_filename;
+ my $time;
+ if ($input) {
+- $time = (stat $input)[9] || time;
++ $time = (stat($input))[9] || time();
+ } else {
+- $time = time;
++ $time = time();
+ }
+
+- # Can't use POSIX::strftime(), which uses Fcntl, because MakeMaker
+- # uses this and it has to work in the core which can't load dynamic
+- # libraries.
+- my ($year, $month, $day) = (localtime $time)[5,4,3];
+- return sprintf ("%04d-%02d-%02d", $year + 1900, $month + 1, $day);
++ # Can't use POSIX::strftime(), which uses Fcntl, because MakeMaker uses
++ # this and it has to work in the core which can't load dynamic libraries.
++ my ($year, $month, $day) = (localtime($time))[5,4,3];
++ return sprintf("%04d-%02d-%02d", $year + 1900, $month + 1, $day);
+ }
+
+ # Print out the preamble and the title. The meaning of the arguments to .TH
+@@ -1632,6 +1649,15 @@ argument.
+ Sets the centered page header to use instead of "User Contributed Perl
+ Documentation".
+
++=item date
++
++Sets the left-hand footer. If this option is not set, the contents of the
++environment variable POD_MAN_DATE, if set, will be used. Failing that,
++the modification date of the input file will be used, or the current time
++if stat() can't find that file (which will be the case if the input is
++from C<STDIN>). If obtained from the file modification date or the
++current time, he date will be formatted as C<YYYY-MM-DD>.
++
+ =item errors
+
+ How to report errors. C<die> says to throw an exception on any POD
+@@ -1642,13 +1668,6 @@ POD errors entirely, as much as possible
+
+ The default is C<pod>.
+
+-=item date
+-
+-Sets the left-hand footer. By default, the modification date of the input
+-file will be used, or the current date if stat() can't find that file (the
+-case if the input is from C<STDIN>), and the date will be formatted as
+-C<YYYY-MM-DD>.
+-
+ =item fixed
+
+ The fixed-width font to use for verbatim text and code. Defaults to
+@@ -1810,6 +1829,20 @@ option was set to C<die>.
+
+ =back
+
++=head1 ENVIRONMENT
++
++=over 4
++
++=item POD_MAN_DATE
++
++If set, this will be used as the value of the left-hand footer unless the
++C<date> option is explicitly set, overriding the timestamp of the input
++file or the current time. This is primarily useful to ensure reproducible
++builds of the same output file given the same souce and Pod::Man version,
++even when file timestamps may not be consistent.
++
++=back
++
+ =head1 BUGS
+
+ Encoding handling assumes that PerlIO is available and does not work
diff --git a/lang/perl5.20/files/patch-cpan_podlators_t_devise-date.t b/lang/perl5.20/files/patch-cpan_podlators_t_devise-date.t
new file mode 100644
index 000000000000..edda6a53d7f5
--- /dev/null
+++ b/lang/perl5.20/files/patch-cpan_podlators_t_devise-date.t
@@ -0,0 +1,39 @@
+--- cpan/podlators/t/devise-date.t.orig 2014-12-27 11:48:48 UTC
++++ cpan/podlators/t/devise-date.t
+@@ -1,15 +1,28 @@
+-#!/usr/bin/perl -w
+-
+-# In order for MakeMaker to build in the core, nothing can use
+-# Fcntl which includes POSIX. devise_date()'s use of strftime()
+-# was replaced. This tests that it's identical.
++#!/usr/bin/perl
++#
++# In order for MakeMaker to build in the core, nothing can use Fcntl which
++# includes POSIX. devise_date()'s use of strftime() was replaced. This tests
++# that it's identical. It also tests special handling of the POD_MAN_DATE
++# environment variable.
+
++use 5.006;
+ use strict;
+-
+-use Test::More tests => 1;
++use warnings;
+
+ use Pod::Man;
+ use POSIX qw(strftime);
+
++use Test::More tests => 2;
++
++# Check that the results of device_date matches strftime. There is no input
++# file name, so this will use the current time.
+ my $parser = Pod::Man->new;
+-is $parser->devise_date, strftime("%Y-%m-%d", localtime);
++is(
++ $parser->devise_date,
++ strftime('%Y-%m-%d', localtime()),
++ 'devise_date matches strftime'
++);
++
++# Set the override environment variable and ensure that it's honored.
++local $ENV{POD_MAN_DATE} = '2014-01-01';
++is($parser->devise_date, '2014-01-01', 'devise_date honors POD_MAN_DATE');
diff --git a/lang/perl5.20/files/patch-perl.c b/lang/perl5.20/files/patch-perl.c
new file mode 100644
index 000000000000..97ef7f07184b
--- /dev/null
+++ b/lang/perl5.20/files/patch-perl.c
@@ -0,0 +1,21 @@
+--- perl.c.orig 2015-01-28 21:12:04 UTC
++++ perl.c
+@@ -1776,18 +1776,7 @@ S_Internals_V(pTHX_ CV *cv)
+ PUSHs(Perl_newSVpvn_flags(aTHX_ non_bincompat_options,
+ sizeof(non_bincompat_options) - 1, SVs_TEMP));
+
+-#ifdef __DATE__
+-# ifdef __TIME__
+- PUSHs(Perl_newSVpvn_flags(aTHX_
+- STR_WITH_LEN("Compiled at " __DATE__ " " __TIME__),
+- SVs_TEMP));
+-# else
+- PUSHs(Perl_newSVpvn_flags(aTHX_ STR_WITH_LEN("Compiled on " __DATE__),
+- SVs_TEMP));
+-# endif
+-#else
+ PUSHs(&PL_sv_undef);
+-#endif
+
+ for (i = 1; i <= local_patch_count; i++) {
+ /* This will be an undef, if PL_localpatches[i] is NULL. */