Here's a patch that renames Guile's reimplementations of jmp_buf,
longjmp and setjmp in the public headers.  I have tested that guile-1.8
builds on i386 and ia64 with the addition of this patch.  I have not
tested building lilypond against the modified libguile, but it's fairly
obvious that it will fix the reported compiler error.

This must be applied after fix-ia64-continuations.diff.

Ben.

--- guile-1.8-1.8.5+1.orig/libguile/__scm.h
+++ guile-1.8-1.8.5+1/libguile/__scm.h
@@ -386,21 +386,23 @@
 
 #ifdef vms
 # ifndef CHEAP_CONTINUATIONS
-   typedef int jmp_buf[17];
+   typedef int scm_jmp_buf[17];
    extern int setjump(jmp_buf env);
    extern int longjump(jmp_buf env, int ret);
-#  define setjmp setjump
-#  define longjmp longjump
+#  define scm_setjmp setjump
+#  define scm_longjmp longjump
+#  define SCM_DEFINES_JMP_BUF
 # else
 #  include <setjmp.h>
 # endif
 #else                          /* ndef vms */
 # ifdef _CRAY1
-    typedef int jmp_buf[112];
+    typedef int scm_jmp_buf[112];
     extern int setjump(jmp_buf env);
     extern int longjump(jmp_buf env, int ret);
-#  define setjmp setjump
-#  define longjmp longjump
+#  define scm_setjmp setjump
+#  define scm_longjmp longjump
+#  define SCM_DEFINES_JMP_BUF
 # else                         /* ndef _CRAY1 */
 #  if defined (__ia64__)
 /* For IA64, emulate the setjmp API using getcontext. */
@@ -409,15 +411,19 @@
     typedef struct {
       ucontext_t ctx;
       int fresh;
-    } jmp_buf;
-#   define setjmp(JB)                                  \
+    } scm_jmp_buf;
+#   define scm_setjmp(JB)                              \
       ( (JB).fresh = 1,                                        \
         getcontext (&((JB).ctx)),                      \
         ((JB).fresh ? ((JB).fresh = 0, 0) : 1) )
-#   define longjmp(JB,VAL) scm_ia64_longjmp (&(JB), VAL)
-    void scm_ia64_longjmp (jmp_buf *, int);
+#   define scm_longjmp(JB,VAL) scm_ia64_longjmp (&(JB), VAL)
+    void scm_ia64_longjmp (scm_jmp_buf *, int);
+#   define SCM_DEFINES_JMP_BUF
 #  else                        /* ndef __ia64__ */
 #   include <setjmp.h>
+    typedef jmp_buf scm_jmp_buf;
+#   define scm_setjmp setjmp
+#   define scm_longjmp longjmp
 #  endif                       /* ndef __ia64__ */
 # endif                                /* ndef _CRAY1 */
 #endif                         /* ndef vms */
--- guile-1.8-1.8.5+1.orig/libguile/_scm.h
+++ guile-1.8-1.8.5+1/libguile/_scm.h
@@ -41,6 +41,12 @@
 #include <errno.h>
 #include "libguile/__scm.h"
 
+#ifdef SCM_DEFINES_JMP_BUF
+typedef scm_jmp_buf jmp_buf;
+#define setjmp(JB) scm_setjmp(JB)
+#define longjmp(JB,VAL) scm_longjmp(JB,VAL)
+#endif
+
 /* Include headers for those files central to the implementation.  The
    rest should be explicitly #included in the C files themselves.  */
 #include "libguile/error.h"    /* Everyone signals errors.  */
--- guile-1.8-1.8.5+1.orig/libguile/continuations.h
+++ guile-1.8-1.8.5+1/libguile/continuations.h
@@ -43,7 +43,7 @@
 typedef struct 
 {
   SCM throw_value;
-  jmp_buf jmpbuf;
+  scm_jmp_buf jmpbuf;
   SCM dynenv;
 #ifdef __ia64__
   void *backing_store;
--- guile-1.8-1.8.5+1.orig/libguile/threads.h
+++ guile-1.8-1.8.5+1/libguile/threads.h
@@ -107,7 +107,7 @@
   /* For keeping track of the stack and registers. */
   SCM_STACKITEM *base;
   SCM_STACKITEM *top;
-  jmp_buf regs;
+  scm_jmp_buf regs;
 #ifdef __ia64__
   void *register_backing_store_base;
   scm_t_contregs *pending_rbs_continuation;
--- END ---

-- 
Ben Hutchings
Any smoothly functioning technology is indistinguishable from a rigged demo.

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to