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