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 {