Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 9 Apr 2015 12:21:30 +0000 (UTC)
From:      Mathieu Arnold <mat@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r383641 - in head: lang/perl5.16 lang/perl5.16/files lang/perl5.18 lang/perl5.18/files lang/perl5.20 lang/perl5.20/files textproc/p5-podlators textproc/p5-podlators/files
Message-ID:  <201504091221.t39CLU2X078316@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mat
Date: Thu Apr  9 12:21:29 2015
New Revision: 383641
URL: https://svnweb.freebsd.org/changeset/ports/383641

Log:
  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

Added:
  head/lang/perl5.16/files/patch-cpan_podlators_lib_Pod_Man.pm   (contents, props changed)
  head/lang/perl5.16/files/patch-cpan_podlators_t_devise-date.t   (contents, props changed)
  head/lang/perl5.16/files/patch-perl.c   (contents, props changed)
  head/lang/perl5.18/files/patch-cpan_podlators_lib_Pod_Man.pm   (contents, props changed)
  head/lang/perl5.18/files/patch-cpan_podlators_t_devise-date.t   (contents, props changed)
  head/lang/perl5.18/files/patch-perl.c   (contents, props changed)
  head/lang/perl5.20/files/patch-cpan_podlators_lib_Pod_Man.pm   (contents, props changed)
  head/lang/perl5.20/files/patch-cpan_podlators_t_devise-date.t   (contents, props changed)
  head/lang/perl5.20/files/patch-perl.c   (contents, props changed)
  head/textproc/p5-podlators/files/
  head/textproc/p5-podlators/files/patch-lib_Pod_Man.pm   (contents, props changed)
  head/textproc/p5-podlators/files/patch-t_devise-date.t   (contents, props changed)
Modified:
  head/lang/perl5.16/Makefile
  head/lang/perl5.16/files/patch-Configure
  head/lang/perl5.18/Makefile
  head/lang/perl5.18/files/patch-Configure
  head/lang/perl5.20/Makefile
  head/lang/perl5.20/files/patch-Configure
  head/textproc/p5-podlators/Makefile

Modified: head/lang/perl5.16/Makefile
==============================================================================
--- head/lang/perl5.16/Makefile	Thu Apr  9 12:12:22 2015	(r383640)
+++ head/lang/perl5.16/Makefile	Thu Apr  9 12:21:29 2015	(r383641)
@@ -3,7 +3,7 @@
 
 PORTNAME=	perl
 PORTVERSION=	${PERL_VERSION}
-PORTREVISION=	18
+PORTREVISION=	19
 CATEGORIES=	lang devel perl5
 MASTER_SITES=	CPAN
 MASTER_SITE_SUBDIR=	../../src
@@ -67,7 +67,9 @@ CONFIGURE_ARGS=	-sde -Dprefix=${PREFIX} 
 	-Dsiteman1dir=${PREFIX}/man/man1 \
 	-Dotherlibdirs=${PREFIX}/lib/perl5/site_perl/${PERL_VER}:${PREFIX}/lib/perl5/site_perl/${PERL_VER}/${PERL_ARCH} \
 	-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.

Modified: head/lang/perl5.16/files/patch-Configure
==============================================================================
--- head/lang/perl5.16/files/patch-Configure	Thu Apr  9 12:12:22 2015	(r383640)
+++ head/lang/perl5.16/files/patch-Configure	Thu Apr  9 12:21:29 2015	(r383641)
@@ -1,6 +1,18 @@
---- Configure.orig	2010-07-14 15:28:45.000000000 +0000
-+++ Configure	2010-07-14 15:29:23.000000000 +0000
-@@ -4798,7 +4798,7 @@
+--- Configure.orig	2013-03-04 15:16:21 UTC
++++ Configure
+@@ -3625,7 +3625,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`
+@@ -4721,7 +4724,7 @@ esac
  libpth=''
  for xxx in $dlist
  do
@@ -9,7 +21,7 @@
  		case " $libpth " in
  		*" $xxx "*) ;;
  		*) libpth="$libpth $xxx";;
-@@ -9125,8 +9125,7 @@
+@@ -9089,8 +9092,7 @@ prefixvar=siteman3dir
  
  : determine where add-on public executable scripts go
  case "$sitescript" in

Added: head/lang/perl5.16/files/patch-cpan_podlators_lib_Pod_Man.pm
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/perl5.16/files/patch-cpan_podlators_lib_Pod_Man.pm	Thu Apr  9 12:21:29 2015	(r383641)
@@ -0,0 +1,94 @@
+--- cpan/podlators/lib/Pod/Man.pm.orig	2013-03-04 15:16:21 UTC
++++ cpan/podlators/lib/Pod/Man.pm
+@@ -851,25 +851,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
+@@ -1553,10 +1570,12 @@ Documentation".
+ 
+ =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>.
++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 fixed
+ 
+@@ -1685,6 +1704,20 @@ invalid.  A quote specification must be 
+ 
+ =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

Added: head/lang/perl5.16/files/patch-cpan_podlators_t_devise-date.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/perl5.16/files/patch-cpan_podlators_t_devise-date.t	Thu Apr  9 12:21:29 2015	(r383641)
@@ -0,0 +1,39 @@
+--- cpan/podlators/t/devise-date.t.orig	2013-03-04 15:16:21 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');

Added: head/lang/perl5.16/files/patch-perl.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/perl5.16/files/patch-perl.c	Thu Apr  9 12:21:29 2015	(r383641)
@@ -0,0 +1,21 @@
+--- perl.c.orig	2013-03-04 15:16:22 UTC
++++ perl.c
+@@ -1754,18 +1754,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.  */

Modified: head/lang/perl5.18/Makefile
==============================================================================
--- head/lang/perl5.18/Makefile	Thu Apr  9 12:12:22 2015	(r383640)
+++ head/lang/perl5.18/Makefile	Thu Apr  9 12:21:29 2015	(r383641)
@@ -3,7 +3,7 @@
 
 PORTNAME=	perl
 PORTVERSION=	${PERL_VERSION}
-PORTREVISION=	11
+PORTREVISION=	12
 CATEGORIES=	lang devel perl5
 MASTER_SITES=	CPAN
 MASTER_SITE_SUBDIR=	../../src
@@ -84,7 +84,9 @@ CONFIGURE_ARGS=	-sde -Dprefix=${PREFIX} 
 	-Dsiteman1dir=${PREFIX}/man/man1 \
 	-Dotherlibdirs=${PREFIX}/lib/perl5/site_perl/${PERL_VER}:${PREFIX}/lib/perl5/site_perl/${PERL_VER}/${PERL_ARCH} \
 	-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.

Modified: head/lang/perl5.18/files/patch-Configure
==============================================================================
--- head/lang/perl5.18/files/patch-Configure	Thu Apr  9 12:12:22 2015	(r383640)
+++ head/lang/perl5.18/files/patch-Configure	Thu Apr  9 12:21:29 2015	(r383641)
@@ -1,6 +1,18 @@
 --- Configure.orig	2014-10-01 01:32:59 UTC
 +++ Configure
-@@ -4730,7 +4730,7 @@
+@@ -3634,7 +3634,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`
+@@ -4730,7 +4733,7 @@ esac
  libpth=''
  for xxx in $dlist
  do
@@ -9,7 +21,7 @@
  		case " $libpth " in
  		*" $xxx "*) ;;
  		*) libpth="$libpth $xxx";;
-@@ -9143,8 +9143,7 @@
+@@ -9143,8 +9146,7 @@ prefixvar=siteman3dir
  
  : determine where add-on public executable scripts go
  case "$sitescript" in

Added: head/lang/perl5.18/files/patch-cpan_podlators_lib_Pod_Man.pm
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/perl5.18/files/patch-cpan_podlators_lib_Pod_Man.pm	Thu Apr  9 12:21:29 2015	(r383641)
@@ -0,0 +1,107 @@
+--- cpan/podlators/lib/Pod/Man.pm.orig	2014-10-01 01:33:00 UTC
++++ cpan/podlators/lib/Pod/Man.pm
+@@ -883,25 +883,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
+@@ -1613,6 +1630,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
+@@ -1623,13 +1649,6 @@ POD errors entirely, as much as possible
+ 
+ The default is C<output>.
+ 
+-=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
+@@ -1785,6 +1804,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

Added: head/lang/perl5.18/files/patch-cpan_podlators_t_devise-date.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/perl5.18/files/patch-cpan_podlators_t_devise-date.t	Thu Apr  9 12:21:29 2015	(r383641)
@@ -0,0 +1,39 @@
+--- cpan/podlators/t/devise-date.t.orig	2014-01-31 21:55:51 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');

Added: head/lang/perl5.18/files/patch-perl.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/perl5.18/files/patch-perl.c	Thu Apr  9 12:21:29 2015	(r383641)
@@ -0,0 +1,21 @@
+--- perl.c.orig	2014-10-01 01:33:00 UTC
++++ perl.c
+@@ -1789,18 +1789,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.  */

Modified: head/lang/perl5.20/Makefile
==============================================================================
--- head/lang/perl5.20/Makefile	Thu Apr  9 12:12:22 2015	(r383640)
+++ head/lang/perl5.20/Makefile	Thu Apr  9 12:21:29 2015	(r383641)
@@ -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.

Modified: head/lang/perl5.20/files/patch-Configure
==============================================================================
--- head/lang/perl5.20/files/patch-Configure	Thu Apr  9 12:12:22 2015	(r383640)
+++ head/lang/perl5.20/files/patch-Configure	Thu Apr  9 12:21:29 2015	(r383641)
@@ -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

Added: head/lang/perl5.20/files/patch-cpan_podlators_lib_Pod_Man.pm
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/perl5.20/files/patch-cpan_podlators_lib_Pod_Man.pm	Thu Apr  9 12:21:29 2015	(r383641)
@@ -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

Added: head/lang/perl5.20/files/patch-cpan_podlators_t_devise-date.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/perl5.20/files/patch-cpan_podlators_t_devise-date.t	Thu Apr  9 12:21:29 2015	(r383641)
@@ -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');

Added: head/lang/perl5.20/files/patch-perl.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lang/perl5.20/files/patch-perl.c	Thu Apr  9 12:21:29 2015	(r383641)
@@ -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.  */

Modified: head/textproc/p5-podlators/Makefile
==============================================================================
--- head/textproc/p5-podlators/Makefile	Thu Apr  9 12:12:22 2015	(r383640)
+++ head/textproc/p5-podlators/Makefile	Thu Apr  9 12:21:29 2015	(r383641)
@@ -3,7 +3,7 @@
 
 PORTNAME=	podlators
 PORTVERSION=	2.5.3
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	textproc perl5
 MASTER_SITES=	CPAN
 MASTER_SITE_SUBDIR=	Pod

Added: head/textproc/p5-podlators/files/patch-lib_Pod_Man.pm
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/textproc/p5-podlators/files/patch-lib_Pod_Man.pm	Thu Apr  9 12:21:29 2015	(r383641)
@@ -0,0 +1,107 @@
+--- lib/Pod/Man.pm.orig	2013-10-06 06:09:56 UTC
++++ 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

Added: head/textproc/p5-podlators/files/patch-t_devise-date.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/textproc/p5-podlators/files/patch-t_devise-date.t	Thu Apr  9 12:21:29 2015	(r383641)
@@ -0,0 +1,39 @@
+--- t/devise-date.t.orig	2013-10-06 06:09:56 UTC
++++ 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');



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201504091221.t39CLU2X078316>