Package: perl
Version: 5.8.8-11
Severity: serious
h2ph does not translate "#if defined __x86_64__" correctly; it
translates it as:
if(defined (defined(&__x86_64__) ? &__x86_64__ : 0)) {
This is always true. Upstream has fixed this problem by changing the
0 to undef, which fixes the problem. I've attached the patch.
This is serious because this bug prevents dbishell from building. The
above test causes it to think that an i386 system is a 64-bit system,
which causes it to try to include stubs-64.ph, which doesn't exist.
--
Matt
diff -ru perl-5.8.8~/t/lib/h2ph.pht perl-5.8.8/t/lib/h2ph.pht
--- perl-5.8.8~/t/lib/h2ph.pht 2007-09-23 20:26:44.000000000 -0700
+++ perl-5.8.8/t/lib/h2ph.pht 2007-09-23 21:01:48.000000000 -0700
@@ -28,21 +28,21 @@
eval q((($a) < ($b) ? ($a) : ($b)));
}' unless defined(&MIN);
}
- if(!(defined (defined(&__SOMETHING_MORE_IMPORTANT) ?
&__SOMETHING_MORE_IMPORTANT : 0))) {
+ if(!(defined (defined(&__SOMETHING_MORE_IMPORTANT) ?
&__SOMETHING_MORE_IMPORTANT : undef))) {
}
- elsif(!(defined (defined(&__SOMETHING_REALLY_REALLY_IMPORTANT) ?
&__SOMETHING_REALLY_REALLY_IMPORTANT : 0))) {
+ elsif(!(defined (defined(&__SOMETHING_REALLY_REALLY_IMPORTANT) ?
&__SOMETHING_REALLY_REALLY_IMPORTANT : undef))) {
die("Nup, can't go on");
} else {
eval 'sub EVERYTHING_IS_OK () {1;}' unless defined(&EVERYTHING_IS_OK);
}
undef(&WHATEVER) if defined(&WHATEVER);
- if((!((defined (defined(&__SOMETHING_TRIVIAL) ? &__SOMETHING_TRIVIAL : 0)
&& defined (defined(&__SOMETHING_LESS_SO) ? &__SOMETHING_LESS_SO : 0))) ||
defined (defined(&__SOMETHING_OVERPOWERING) ? &__SOMETHING_OVERPOWERING : 0))) {
+ if((!((defined (defined(&__SOMETHING_TRIVIAL) ? &__SOMETHING_TRIVIAL :
undef) && defined (defined(&__SOMETHING_LESS_SO) ? &__SOMETHING_LESS_SO :
undef))) || defined (defined(&__SOMETHING_OVERPOWERING) ?
&__SOMETHING_OVERPOWERING : undef))) {
eval 'sub WHATEVER () {6;}' unless defined(&WHATEVER);
}
- elsif(!(defined (defined(&__SOMETHING_TRIVIAL) ? &__SOMETHING_TRIVIAL : 0)) )
{
+ elsif(!(defined (defined(&__SOMETHING_TRIVIAL) ? &__SOMETHING_TRIVIAL :
undef)) ) {
eval 'sub WHATEVER () {7;}' unless defined(&WHATEVER);
}
- elsif(!(defined (defined(&__SOMETHING_LESS_SO) ? &__SOMETHING_LESS_SO : 0)) )
{
+ elsif(!(defined (defined(&__SOMETHING_LESS_SO) ? &__SOMETHING_LESS_SO :
undef)) ) {
eval 'sub WHATEVER () {8;}' unless defined(&WHATEVER);
} else {
eval 'sub WHATEVER () {1000;}' unless defined(&WHATEVER);
diff -ru perl-5.8.8~/utils/h2ph.PL perl-5.8.8/utils/h2ph.PL
--- perl-5.8.8~/utils/h2ph.PL 2007-09-23 20:26:44.000000000 -0700
+++ perl-5.8.8/utils/h2ph.PL 2007-09-23 20:41:45.000000000 -0700
@@ -514,7 +514,7 @@
}
} else {
if ($inif && $new !~ /defined\s*\($/) {
- $new .= '(defined(&' . $id . ') ? &' . $id . ' : 0)';
+ $new .= '(defined(&' . $id . ') ? &' . $id . ' : undef)';
} elsif (/^\[/) {
$new .= " \$$id";
} else {