wine/port.h #include fixes
François Gouget
fgouget at codeweavers.com
Mon Oct 15 00:59:51 CDT 2001
François Gouget wrote:
>
> This is a followup on the previous config.h patch, this time tackling
> the wine/port.h case.
Hmmm, I see it has been applied to CVS already. But I'm not too happy
with it anymore :-/
I found a problem with 'dlls/winsock/async.c' and
'dlls/winsock/socket.c' and the DELETE macro.
* DELETE is defined in winnt.h
* DELETE is also defined by a socket-related Solaris header
(arpa/nameser_compat.h, included indirectly)
* so winnt.h undefs DELETE and then defines our value
* 'wine/port.h' includes 'winnt.h'. So if we include it first and then
include the Solaris header we get a redefinition error.
One possible solution would be to handle DELETE differently, e.g.
prefix it in Wine, and not prefix it for Winelib, or something like
that. But wine/port.h is not the only header that needs to include
'config.h'. There is also:
cdrom.h console.h
ts_shape.h ts_xf86dga.h ts_xf86dga2.h ts_xf86vmode.h ts_xlib.h
ts_xpm.h ts_xresource.h ts_xshm.h ts_xutil.h ts_xvideo.h
wine_gl.h
x11drv.h
I think it would be wrong to move all these #includes so that they
are first. Plus for the ts_*.h headers I am not sure it would be very
good. Also #including config.h in these is a bit pointless since we know
that the file including them will need to include config.h too.
So I propose the following instead:
* config.h has no multiple include protection. Add one (__WINE_CONFIG_H
macro).
* modify the above headers so that they don't include config.h but
contain the following instead:
#ifndef __WINE_CONFIG_H
# error You must include config.h to use this header
#endif
This will make sure that no-one forgets to include config.h when
necessary.
* modify all files that include the above headers so that they include
config.h as the first header. This actually requires relatively little
work.
* do the same for port.h
* debugtools.h also uses config.h because it needs NO_DEBUG_MSGS and
NO_TRACE_MSGS. Modify configure.in so that these are put on the command
line instead. They are not the of the same nature as the other macros
anyway: they are completely system independent. Also this will make it
possible to use the Wine debug macros in Winelib applications. Then
debugtools.h will no longer need to #include config.h. This cuts the
number of files causing trouble in about half.
* there are 3 other files that #include config.h for no good reason
that I can see: gdi.h, heap.h and thread.h. Remove the #includes from
there. Anyway, winapi_check ensures that all the .c files that need
config.h already include it directly.
* maybe modify winapi_check to make sure that no header file includes
'config.h' (this would be the frosting on the cake)
Doing this (except for port.h) I have a tree that builds on Solaris
with no _FILE_OFFSET_BITS warning. So if the above sounds good, I have
patches that are almost ready.
--
François Gouget
fgouget at codeweavers.com
More information about the wine-devel
mailing list