[Reproducible-commits] [perl] 08/36: h2ph: correct handling of hex constants for the preamble

Mattia Rizzolo mattia at mapreri.org
Tue Nov 17 14:00:57 UTC 2015


This is an automated email from the git hooks/post-receive script.

mapreri-guest pushed a commit to branch pu/reproducible_builds
in repository perl.

commit e54137f9f52ce93e27aa7df55bb043863d0c775f
Author: Tony Cook <tony at develop-help.com>
Date:   Mon Feb 16 15:57:00 2015 +1100

    h2ph: correct handling of hex constants for the preamble
    
    Previously they were treated as identifiers resulting in code
    generated like C< &0xFFF >.
    
    We also try to prevent compile-time warnings from large hex integers,
    the user isn't responsible for the generated code, so we delay those
    warnings to run-time.
    
    Origin: upstream, http://perl5.git.perl.org/perl.git/commit/3bea78d24634e630b610f59957e7a019205a67b2
    Bug: https://rt.perl.org/Ticket/Display.html?id=123784
    Bug-Debian: https://bugs.debian.org/778060
    Patch-Name: fixes/h2ph-hex-constants.diff
---
 utils/h2ph.PL | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/utils/h2ph.PL b/utils/h2ph.PL
index 9a8b14d..d082f22 100644
--- a/utils/h2ph.PL
+++ b/utils/h2ph.PL
@@ -769,7 +769,7 @@ sub inc_dirs
 sub build_preamble_if_necessary
 {
     # Increment $VERSION every time this function is modified:
-    my $VERSION     = 3;
+    my $VERSION     = 4;
     my $preamble    = "$Dest_dir/_h2ph_pre.ph";
 
     # Can we skip building the preamble file?
@@ -788,6 +788,11 @@ sub build_preamble_if_necessary
 
     open  PREAMBLE, ">$preamble" or die "Cannot open $preamble:  $!";
 	print PREAMBLE "# This file was created by h2ph version $VERSION\n";
+        # Prevent non-portable hex constants from warning.
+        #
+        # We still produce an overflow warning if we can't represent
+        # a hex constant as an integer.
+        print PREAMBLE "no warnings qw(portable);\n";
 
 	foreach (sort keys %define) {
 	    if ($opt_D) {
@@ -814,6 +819,18 @@ DEFINE
 		# integer:
 		print PREAMBLE
 		    "unless (defined &$_) { sub $_() { $1 } }\n\n";
+            } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) {
+                # hex integer
+                # Special cased, since perl warns on hex integers
+                # that can't be represented in a UV.
+                #
+                # This way we get the warning at time of use, so the user
+                # only gets the warning if they happen to use this
+                # platform-specific definition.
+                my $code = $1;
+                $code = "hex('$code')" if length $code > 10;
+                print PREAMBLE
+                    "unless (defined &$_) { sub $_() { $code } }\n\n";
 	    } elsif ($define{$_} =~ /^\w+$/) {
 		my $def = $define{$_};
 		if ($isatype{$def}) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/reproducible/perl.git



More information about the Reproducible-commits mailing list