forwarded 625808 http://rt.perl.org/rt3/Ticket/Display.html?id=90122
thanks
On Fri, May 06, 2011 at 09:38:03AM +0300, Niko Tyni wrote:
> + $from_gcc = `LC_ALL=C $Config{cc} -v -E - < /dev/null 2>&1 | awk
> '/^#include/, /^End of search list/' | grep '^ '`;
> I think the -fixed line further down can be dropped altogether with this
> but that will need to be verified first.
>
> Upstream probably needs some information about what different gcc versions
> actually output. (Was the "Reading specs from" line changed in 4.0 like
> the current code indicates?)
Here's a modified patch filed upstream as [perl #90122].
Thanks again,
--
Niko Tyni [email protected]
>From 48e55fe563c1af27d5aef86302e59152e38e6f60 Mon Sep 17 00:00:00 2001
From: Niko Tyni <[email protected]>
Date: Sun, 8 May 2011 11:41:44 +0300
Subject: [PATCH] Make h2ph correctly search gcc include directories
System header conversion with "h2ph -a" is currently broken on Ubuntu
Natty and Oneiric (unless the gcc-multilib package is installed for
backward compatibility), resulting in things like
# perl -e 'require "syscall.ph"'
Can't locate asm/unistd.ph in @INC [...]
This happens because Ubuntu has switched to a 'multiarch' setup, see
<https://wiki.ubuntu.com/MultiarchSpec> for details.
The asm subdirectory isn't in $Config{usrinc} anymore: /usr/include/asm
is now /usr/include/x86_64-linux-gnu/asm. (The third component of the
new path varies with the actual architecture.)
gcc --print-search-dirs doesn't really tell anything about where gcc
looks for the include directories, it was just used to find the gcc
internal directory prefix.
Parse the output of "gcc -v -E" instead, and append $Config{usrinc}
for safety. Duplicates shouldn't matter.
The h2ph "-a" switch isn't currently tested automatically, and that
seems nontrivial to do portably. Manual testing was done with
# mkdir ttt
# ./perl -Ilib ./utils/h2ph -a -d $(pwd)/ttt syscall.h
The gcc invocation has been tested to work with gcc 4.6, 4.1, and 3.3.
http://bugs.debian.org/625808
https://bugs.launchpad.net/bugs/777903
---
utils/h2ph.PL | 12 ++----------
1 files changed, 2 insertions(+), 10 deletions(-)
diff --git a/utils/h2ph.PL b/utils/h2ph.PL
index 87f3c7d..4545d6d 100644
--- a/utils/h2ph.PL
+++ b/utils/h2ph.PL
@@ -761,16 +761,8 @@ sub queue_includes_from
# non-GCC?) C compilers, but gcc uses additional include directories.
sub inc_dirs
{
- my $from_gcc = `LC_ALL=C $Config{cc} -v 2>&1`;
- if( !( $from_gcc =~ s:^Reading specs from (.*?)/specs\b.*:$1/include:s ) )
- { # gcc-4+ :
- $from_gcc = `LC_ALL=C $Config{cc} -print-search-dirs 2>&1`;
- if ( !($from_gcc =~ s/^install:\s*([^\s]+[^\s\/])([\s\/]*).*$/$1\/include/s) )
- {
- $from_gcc = '';
- };
- };
- length($from_gcc) ? ($from_gcc, $from_gcc . "-fixed", $Config{usrinc}) : ($Config{usrinc});
+ my $from_gcc = `LC_ALL=C $Config{cc} -v -E - < /dev/null 2>&1 | awk '/^#include/, /^End of search list/' | grep '^ '`;
+ length($from_gcc) ? (split(' ', $from_gcc), $Config{usrinc}) : ($Config{usrinc});
}
--
1.7.5.1