Help for .h to D pain?

Matthias Pleh sufu at alter.com
Sat Nov 13 03:09:40 PST 2010


Am 12.11.2010 05:01, schrieb jfd:
> I was trying to translate Apache module include files to D, but it soon leads
> to a labyrinth of tangled nested #includes and #define and typedef's.  The
> tools, `dmc -c -e -l', htod, etc. immediately choked.  It is getting really,
> really,... time consuming, and the words "man years" flashes before my eyes
> :O...  I'm beginning to see why C++ supports the .h's... after years of
> knocking it... :(
>
> There's gotta be a easier way... Help me!...
>
> DMC is spewing out errors:
>
> -----------------------------------------
> $ dmc -I. -c httpd.h -e -l
> #define __STDC_IEC_559__
>                         ^
> features.h(327) : Preprocessor error: macro '__STDC_IEC_559__' can't be #undef'd
>   or #define'd
> #define __STDC_IEC_559_COMPLEX__
>                                 ^
> features.h(328) : Preprocessor error: macro '__STDC_IEC_559_COMPLEX__' can't be
> #undef'd or #define'd
> typedef __signed__ char
>                        ^
> asm-generic/int-ll64.h(19) : Error: '=', ';' or ',' expected
> typedef __signed__ short __s16;
>                               ^
> asm-generic/int-ll64.h(22) : Error: illegal combination of types
> typedef __signed__ int __s32;
>                             ^
> asm-generic/int-ll64.h(25) : Error: illegal combination of types
> Fatal error: too many errors
> --- errorlevel 1
> -----------------------------------------
>
> HTOD too:
>
> -----------------------------------------
> $ htod httpd.h
> Fatal error: unable to open input file 'features.h'
>
> $ htod -I. httpd.h
> #define __STDC_IEC_559__                1
>                         ^
> features.h(327) : Preprocessor error: macro '__STDC_IEC_559__' can't be #undef'd
>   or #define'd
> #define __STDC_IEC_559_COMPLEX__        1
>                                 ^
> features.h(328) : Preprocessor error: macro '__STDC_IEC_559_COMPLEX__' can't be
> #undef'd or #define'd
> Fatal error: unable to open input file 'stddef.h'
> -----------------------------------------
>
> And what tool is there on Linux?
>
> Hey, here's a crazy idea: Why not support #include "x.h"?  Now that's
> "seamless"!  That's ONLY, and I emphasize ONLY (before someone goes nuts with
> it), for supporting existing C libraries, not for general D programming.
> Internally, it would import everything in .h that it reads as `extern(C)'
> objects for D, or something like that.
>
> LLVM has C compiler, right?  Why not borrow its header file parser (if license
> allows)?
>
> BTW, LDC and clang LLVM C compiler both compile to LLVM, so they should be
> able to read each other's stuff, right?  That maybe a discussion more for the
> LDC forums, but it also would involve D language change.
>
> I'm okay with a "standard tool" instead of new "language feature", if that
> tool makes it EEEASY..., and works "flawlessly" and "seamlessly" on Linux,
> Windows, Mac, etc.  Hey, maybe that's beginning to sound like a big project in
> itself, close to a full C compiler... :)
>
> Help, anyone?  Thank you.


I've found this tool very usefull to translate C/C++ files to d
http://www.cabaret.demon.co.uk/filepp/

It's just a preprocessor, but gives very nice output!
(much nicier than g++, dmc or cl)
Afterwards you can use htod, or translate by hand.

greets
Matthias


More information about the Digitalmars-d mailing list