extended foreign decls

Fergus Henderson fjh at cs.mu.oz.au
Wed Jan 3 20:26:25 EST 2001


On 03-Jan-2001, Marcin 'Qrczak' Kowalczyk <qrczak at knm.org.pl> wrote:
> Wed, 3 Jan 2001 21:44:03 +1100, Fergus Henderson <fjh at cs.mu.oz.au> pisze:
> 
> > Personally I'd rather have a single well-designed convenient foreign
> > language interface as a standard part of the language, rather than
> > having a minimalistic foreign language interface in the language
> > standard and having convenience provided by a separate tool (or by
> > several competing separate tools).  But I understand why you might
> > differ on that point.
> 
> I would prefer that too if it was possible, but it does not look well.
> Interfacing to C is complex enough, it's yet worse for other languages.
> 
> A problem: HsFFI includes some C headers (stdint.h, which includes
> among others features.h on glibc). There are headers like stdio.h (if
> I remember correctly) which provide certain prototypes or macros only
> when certain macros are defined, like _XOPEN_SOURCE and _GNU_SOURCE.
...
> #option -optc-D_GNU_SOURCE -optc-D_XOPEN_SOURCE=500
> #undef _GNU_SOURCE
> #define _GNU_SOURCE 1
> #undef _XOPEN_SOURCE
> #define _XOPEN_SOURCE 500
> 
> Ugly, isn't it?
...
> Would a builtin support predict all possible uses of C features?

Well, the Mercury language specification doesn't say anything about
compiler options, since they tend to vary between implementations.
But with the Mercury build environment (a de facto standard, I suppose ;-),
you can solve that problem by putting

	CFLAGS = -D_GNU_SOURCE -D_XOPEN_SOURCE=500

in your Mmakefile, or

	CFLAGS-foo = -D_GNU_SOURCE -D_XOPEN_SOURCE=500

if you only want it for module `foo'.

-- 
Fergus Henderson <fjh at cs.mu.oz.au>  |  "I have always known that the pursuit
                                    |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.




More information about the FFI mailing list