Walter Bright wrote:
Now let's try the other way. I add O_APPEND to the linux branch, and linux works great. Now I port to OSX, and the compiler dies with "O_APPEND is undefined". I know immediately exactly what is wrong, look up the .h file, and insert the right O_APPEND into the OSX version of the declaration.
Maybe I'm missing something here, but why is Mac OS X including std.c.linux.linux ? Shouldn't it use std.c.darwin.darwin instead ?
Furthermore, when I build a FreeBSD version, the compiler bings at me for every declaration that needs some porting attention, instead of silently using the wrong values.
GDC got tired of porting std.c.linux.linux over, so it generates a std.c.unix.unix module from the C headers at configure time instead. Also helps with the constants that have different values for different architectures, in addition to having different values for different OS.
This would be even better if the OSX and linux declarations were split into separate "personality" modules. That way you can develop happily on OSX without fear of accidentally breaking linux support. You can defer dealing with the linux version until you actually on the linux machine and are in an efficient position to take care of it.
The version(linux) and version(darwin) should keep those separated, right ? And save you when you include the wrong std.c module, too... --anders
