Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Merge branch 'errno' into 'master'
Fix Errno.pm generation for gcc-5.0 and later. See merge request mer-core/perl!6
- Loading branch information
Showing
6 changed files
with
177 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
From 7770a3f431b07efcb0965e3853b4310850505e9e Mon Sep 17 00:00:00 2001 | ||
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com> | ||
Date: Wed, 11 Feb 2015 15:46:37 +0100 | ||
Subject: [PATCH] Fix Errno.pm generation for gcc-5.0 | ||
|
||
gcc-5.0 -E interleaves now line numbers with expended macros, so that | ||
the generated errno.c will be preprocessed to | ||
|
||
EBFONT => [[ | ||
59 | ||
]] | ||
|
||
which is hard to parse in in line-based reader. | ||
|
||
So use -P option with gcc >= 5.0. Global -P usage would break makedepend, | ||
global -ftrack-macro-expansion=0 would break lib/h2ph.t. | ||
|
||
RT#123784 | ||
--- | ||
ext/Errno/Errno_pm.PL | 21 ++++++++++++++++----- | ||
1 file changed, 16 insertions(+), 5 deletions(-) | ||
|
||
diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL | ||
index 439f2544ca..a324604a99 100644 | ||
--- a/ext/Errno/Errno_pm.PL | ||
+++ b/ext/Errno/Errno_pm.PL | ||
@@ -242,20 +242,31 @@ sub write_errno_pm { | ||
unless ($^O eq 'beos') { # trust what we have / get later | ||
# invoke CPP and read the output | ||
|
||
+ my $inhibit_linemarkers = ''; | ||
+ if ($Config{gccversion} =~ /\A(\d+)\./ and $1 >= 5) { | ||
+ # GCC 5.0 interleaves expanded macros with line numbers breaking | ||
+ # each line into multiple lines. RT#123784 | ||
+ $inhibit_linemarkers = ' -P'; | ||
+ } | ||
+ | ||
if ($^O eq 'VMS') { | ||
- my $cpp = "$Config{cppstdin} $Config{cppflags} $Config{cppminus}"; | ||
+ my $cpp = "$Config{cppstdin} $Config{cppflags}" . | ||
+ $inhibit_linemarkers . " $Config{cppminus}"; | ||
$cpp =~ s/sys\$input//i; | ||
open(CPPO,"$cpp errno.c |") or | ||
die "Cannot exec $Config{cppstdin}"; | ||
} elsif ($IsMSWin32 || $^O eq 'NetWare') { | ||
- open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or | ||
- die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; | ||
+ my $cpp = "$Config{cpprun} $Config{cppflags}" . | ||
+ $inhibit_linemarkers; | ||
+ open(CPPO,"$cpp errno.c |") or | ||
+ die "Cannot run '$cpp errno.c'"; | ||
} elsif ($IsSymbian) { | ||
- my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc -"; | ||
+ my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc" . | ||
+ $inhibit_linemarkers ." -"; | ||
open(CPPO,"$cpp < errno.c |") | ||
or die "Cannot exec $cpp"; | ||
} else { | ||
- my $cpp = default_cpp(); | ||
+ my $cpp = default_cpp() . $inhibit_linemarkers; | ||
open(CPPO,"$cpp < errno.c |") | ||
or die "Cannot exec $cpp"; | ||
} | ||
-- | ||
2.20.1 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
From 3bea78d24634e630b610f59957e7a019205a67b2 Mon Sep 17 00:00:00 2001 | ||
From: Tony Cook <tony@develop-help.com> | ||
Date: Mon, 16 Feb 2015 15:57:00 +1100 | ||
Subject: [PATCH] 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. | ||
--- | ||
utils/h2ph.PL | 19 ++++++++++++++++++- | ||
1 file changed, 18 insertions(+), 1 deletion(-) | ||
|
||
diff --git a/utils/h2ph.PL b/utils/h2ph.PL | ||
index 9a8b14dca8b..d082f227232 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}) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
From 33593911f214382b592d05aa902655301915e666 Mon Sep 17 00:00:00 2001 | ||
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com> | ||
Date: Tue, 17 Feb 2015 13:11:00 +0100 | ||
Subject: [PATCH] lib/h2ph.t to test generated t/_h2ph_pre.ph instead of the | ||
system one | ||
MIME-Version: 1.0 | ||
Content-Type: text/plain; charset=UTF-8 | ||
Content-Transfer-Encoding: 8bit | ||
|
||
The lib/h2ph.t test executes a t/lib/h2ph.pht which requires | ||
'_h2ph_pre.ph'. This should find and exercise generated t/_h2ph_pre.ph | ||
file. However, it found a loaded _h2ph_pre.ph from system because the | ||
interpreter has the './' directory after the system paths in the @INC by | ||
default. | ||
|
||
This patch adds '-I./' to the runperl() invocation to prefer the | ||
_h2ph_pre.ph generated at build time. | ||
|
||
Signed-off-by: Petr Písař <ppisar@redhat.com> | ||
--- | ||
lib/h2ph.t | 2 +- | ||
1 file changed, 1 insertion(+), 1 deletion(-) | ||
|
||
diff --git a/lib/h2ph.t b/lib/h2ph.t | ||
index 2b58f6adae9..64d9dc080f4 100644 | ||
--- a/lib/h2ph.t | ||
+++ b/lib/h2ph.t | ||
@@ -48,7 +48,7 @@ $result = runperl( progfile => '_h2ph_pre.ph', | ||
stderr => 1 ); | ||
like( $result, qr/syntax OK$/, "preamble compiles"); | ||
|
||
-$result = runperl( switches => ["-w"], | ||
+$result = runperl( switches => ['-I.', "-w"], | ||
stderr => 1, | ||
prog => <<'PROG' ); | ||
$SIG{__WARN__} = sub { die $_[0] }; require q(lib/h2ph.pht); |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters