Summary of current change suggestions

Fergus Henderson fjh at
Fri Feb 23 06:41:50 EST 2001

On 22-Feb-2001, Marcin 'Qrczak' Kowalczyk <qrczak at> wrote:
> Thu, 22 Feb 2001 12:08:22 -0000, Simon Marlow <simonmar at> pisze:
> > Don't forget you might need multiple includes, eg. <sys/types.h> &
> > <sys/socket.h> for socket(), and ordering is important.
> Easy with my proposal:
> foreign import "socket" include "<sys/types.h>" include "<sys/socket.h>"
>     socket_c :: CInt -> CInt -> CInt -> IO CInt
> include options accumulate instead of being overridden.

OK, now how about things where you need to #define symbols before
including the header file?

Or where the header file to include varies depending on the system?

E.g. consider the following code.

#include "config.h"
  ** Some versions of Linux call it struct sigcontext_struct, some call it
  ** struct sigcontext.  The following #define eliminates the differences.
  #define sigcontext_struct sigcontext /* must be before #include <signal.h> */
  struct sigcontext; /* this forward decl avoids a gcc warning in signal.h */

  ** On some systems (e.g. most versions of Linux) we need to #define
  ** __KERNEL__ to get sigcontext_struct from <signal.h>.
  #define __KERNEL__
  #include <signal.h>
  #undef __KERNEL__

  ** Some versions of Linux define it in <signal.h>, others define it in
  ** <asm/sigcontext.h>.  We try both.
    #include <asm/sigcontext.h>
  #include <signal.h>

Fergus Henderson <fjh at>  |  "I have always known that the pursuit
                                    |  of excellence is a lethal habit"
WWW: <>  |     -- the last words of T. S. Garp.

More information about the FFI mailing list