http://bugs.winehq.org/show_bug.cgi?id=20042
--- Comment #19 from Erich Hoover ehoover@mines.edu 2009-11-01 15:59:51 --- (In reply to comment #18)
Is that a switch that should be passed to building on all arches, or just 32 bit?
I believe that this flag should only be passed when building a 32-bit compatibility library for use on a 64-bit system. Since the library is aware of "large file support" (and the generic 32-bit build doesn't have large file support enabled) you end up with a mismatch in the size of the "off_t" type. So, if you don't turn on the flag you'll build the library with 8-byte file offsets instead of 4-byte file offsets.
Currently the way ia32-libs works is very ugly - the libs are copied directly from the 32 bit package and dumped to /usr/lib32. This means that packages which have hard-coded paths pointing to /usr/lib will sometimes run into the 64-bit version of the package on the system, resulting in errors.
While I'm sure you have a lot more experience with it than I, from an end-user perspective I tend to agree. Personally, I think that ia32-libs should be a metapackage with separate packages for the different libraries.
The header file itself comes from the -dev package that was built on 64 bit (I believe because it's assumed that the header file doesn't change between arches).
I've run into some rare header files change behavior between 32-bit and 64-bit. When that is the case it is sometimes necessary to test for defined(__i386) or defined(__x86_64) so that a separate header file is not needed for the two architectures.