[C2hs] problem with sys/sysmacros.h
Duncan Coutts
duncan.coutts at worcester.oxford.ac.uk
Sat Jul 24 16:27:56 EDT 2004
On Sun, 2004-05-16 at 02:24, Jens Petersen wrote:
> Hi,
>
> I have a problem when processing "vte/vte.h" (from
> vte-0.11.10) with c2hs-0.12.0 and glibc-2.3.3:
> /usr/include/sys/sysmacros.h:43: (column 1) [FATAL]
> >>> Syntax error!
> The symbol `{' does not fit here.
A temporary solution is to pass -C-D_SYS_SYSMACROS_H to c2hs so that cpp
will not include the file and so c2hs will not see it.
Another problem that I found when trying to run c2hs with vte/vte.h is
that this header file contains an #ident directive. I've never seen this
before, no other header files on my system have this. It seems to be
used for rcs/cvs id info. The annoying thing is that cpp seems to pass
it straight through and so c2hs chokes on it.
Here's a patch to make c2hs ignore it. It's a diff from the gtk2hs fork
so may not apply cleanly to Manuel's main branch but it's a fairly
simple change. It follows what c2hs already does with #pragma
directives.
diff -C2 -r1.3 CLexer.hs
*** c/CLexer.hs 3 Nov 2003 14:14:39 -0000 1.3
--- c/CLexer.hs 24 Jul 2004 20:25:52 -0000
***************
*** 46,50 ****
-- `__const__', `__inline', `__inline__', `__restrict', and `__restrict__'.
--
! -- * Any line starting with `#pragma' is ignored.
--
-- With K&R we refer to ``The C Programming Language'', second edition, Brain
--- 46,50 ----
-- `__const__', `__inline', `__inline__', `__restrict', and `__restrict__'.
--
! -- * Any line starting with `#pragma' or '#ident' is ignored.
--
-- With K&R we refer to ``The C Programming Language'', second edition, Brain
***************
*** 444,447 ****
--- 444,448 ----
>||< linedir
>||< pragma
+ >||< rcsId
-- whitespace (follows K&R A2.1)
***************
*** 494,497 ****
--- 495,511 ----
ppwhite = (char ' ' >|< char '\t')`star` epsilon
+ -- #ident directive
+ --
+ -- * gcc's cpp seems to recognise this directive and it passes it through
+ -- to us. It seems to be used for cvs/rcs info. We simply ignore it (but
+ -- take care to update the position information)
+ --
+ rcsId :: CLexer
+ rcsId = char '#' +> ppwhite +> string "ident" +> anyButNL`star` char '\n'
+ `lexmeta` \_ pos ns -> (Nothing, retPos pos, ns, Nothing)
+ where
+ ppwhite = (char ' ' >|< char '\t')`star` epsilon
+
+
-- identifiers and keywords (follows K&R A2.3 and A2.4)
--
Duncan
More information about the C2hs
mailing list