On 21/08/2012 23:26, JonY wrote: > On 8/22/2012 02:58, Yaakov (Cygwin/X) wrote: >> Once we get past those, there are a few more:
This is what I get for only checking git master :S >> In file included from winmultiwindowwm.c:74:0: >> taskbar.h:34:16: error: redefinition of ‘struct _tagpropertykey’ >> /usr/include/w32api/wtypes.h:762:16: note: originally defined here >> taskbar.h:37:3: error: conflicting types for ‘PROPERTYKEY’ >> /usr/include/w32api/wtypes.h:765:3: note: previous declaration of >> ‘PROPERTYKEY’ was here >> taskbar.h:39:0: warning: "REFPROPVARIANT" redefined >> /usr/include/w32api/propidl.h:266:0: note: this is the location of the >> previous definition >> In file included from winmultiwindowwm.c:74:0: >> taskbar.h:67:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ >> before ‘const’ >> >> winmultiwindowwm.c: In function ‘winSetAppID’: >> winmultiwindowwm.c:2064:44: error: ‘PKEY_AppUserModel_ID’ undeclared >> (first use in this function) >> >> This would appear to be fixable by using <propkey.h> in >> hw/xwin/taskbar.h instead of defining this stuff ourselves, but that >> header is _W64-specific. > > The header details are actually scrapped from MSDN. It's nice to have more up-to-date PSDK headers. But, I'm guessing that the issue Yaakov is alluding to here is that mingw.org's w32api doesn't have a propkey.h, so I would be reluctant to upstream a patch which unconditionally included propkey.h. Putatively, the X.org source is compilable using a MinGW toolchain to produce a native X server, and this would break that for anyone still using the mingw.org toolchain. Fortunately, this seems fixable if we can check we are using mingw-w64 or mingw.org headers . I'm told that checking for __MINGW64_VERSION_MAJOR is the defined way to do this. Yaakov, you might like to try the attached patch. With an appropriate change to prevent BOOL redefinition errors, this builds X server for me.
>From 8db8baf111ec25370e1123b300e629c0be6490dd Mon Sep 17 00:00:00 2001 From: Jon TURNEY <jon.tur...@dronecode.org.uk> Date: Tue, 21 Aug 2012 15:31:16 +0100 Subject: [PATCH] Fix compilation with mingw-w64 w32api headers - GUID_SECT was only ever needed for gcc pre-2.95 - Wrap 'Status' when including objbase.h - Include propkey.h, propsys.h rather than defining necessary stuff ourselves Signed-off-by: Jon TURNEY <jon.tur...@dronecode.org.uk> --- hw/xwin/ddraw.h | 4 ++++ hw/xwin/taskbar.h | 9 +++++++++ hw/xwin/winshaddd.c | 2 +- hw/xwin/winshadddnl.c | 2 +- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/hw/xwin/ddraw.h b/hw/xwin/ddraw.h index 9463049..fade730 100644 --- a/hw/xwin/ddraw.h +++ b/hw/xwin/ddraw.h @@ -3,7 +3,11 @@ #include <winnt.h> #include <wingdi.h> +#pragma push_macro("Status") +#undef Status +#define Status wStatus #include <objbase.h> +#pragma pop_macro("Status") #if defined(NONAMELESSUNION) && !defined(DUMMYUNIONNAME1) #define DUMMYUNIONNAME1 u1 diff --git a/hw/xwin/taskbar.h b/hw/xwin/taskbar.h index bfe301d..06c2f5d 100644 --- a/hw/xwin/taskbar.h +++ b/hw/xwin/taskbar.h @@ -31,6 +31,13 @@ #include <windows.h> +#ifdef __MINGW64_VERSION_MAJOR +/* If we are using headers from mingw-w64 project, it provides the PSDK headers this needs ... */ +#include <propkey.h> +#include <propsys.h> +#else /* !__MINGW64_VERSION_MAJOR */ +/* ... otherwise, we need to define all this stuff ourselves */ + typedef struct _tagpropertykey { GUID fmtid; DWORD pid; @@ -66,6 +73,8 @@ DEFINE_GUID(IID_IPropertyStore,0x886d8eeb, 0x8cf2, 0x4446, 0x8d,0x02, 0xcd,0xba, DEFINE_PROPERTYKEY(PKEY_AppUserModel_ID, 0x9F4C2855, 0x9F79, 0x4B39, 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, 5); +#endif /* !__MINGW64_VERSION_MAJOR */ + typedef HRESULT (__stdcall *SHGETPROPERTYSTOREFORWINDOWPROC)(HWND,REFIID,void**); typedef HRESULT (__stdcall *PROPVARIANTCLEARPROC)(PROPVARIANT*); diff --git a/hw/xwin/winshaddd.c b/hw/xwin/winshaddd.c index a2aaa39..cab451a 100644 --- a/hw/xwin/winshaddd.c +++ b/hw/xwin/winshaddd.c @@ -42,7 +42,7 @@ */ #ifdef DEFINE_GUID #undef DEFINE_GUID -#define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) const GUID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} +#define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) const GUID n = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} #endif /* DEFINE_GUID */ /* diff --git a/hw/xwin/winshadddnl.c b/hw/xwin/winshadddnl.c index f748c4d..b4720b2 100644 --- a/hw/xwin/winshadddnl.c +++ b/hw/xwin/winshadddnl.c @@ -42,7 +42,7 @@ */ #ifdef DEFINE_GUID #undef DEFINE_GUID -#define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) const GUID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} +#define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) const GUID n = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} #endif /* DEFINE_GUID */ /* -- 1.7.9