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 {

Reply via email to