Building tests with MSVC 6 broken?

Dan Kegel dank at kegel.com
Tue Feb 5 16:25:11 CST 2008


Call me an oldtimer, but I decided to try building
winetest with MSVC 6 today.

I installed cygwin's git and perl, grabbed wine from git,
and used msvcmaker as described at
http://winehq.org/site/docs/winedev-guide/testing-windows

I downloaded and installed the Platform SDK from
the first google hit, the Windows Server 2003 SP1 Platform SDK,
http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5
(although the latest is Windows Server 2003 R2 Platform SDK,
I thought the slightly older one would be ok).
Oddly, Microsoft's Platform SDK page lists the SP1 SDK
as the latest.  Pffft.

I then used Tools/ Options / Directories to tell msdev
about include and lib in both msvc6 and the platform SDK.
Then I tried building wineruntests.

First hitch:
error C2065: 'RRF_RT_REG_DWORD' : undeclared identifier
Fix:
Move Platform SDK higher in the priority list in Tools / Options / Directories.
msdev will then use the newer headers, which have that symbol.

Second hitch:
Linking... uuid.lib(cguid_i.obj) : fatal error LNK1103: debugging
information corrupt; recompile module Error executing link.exe.
Fix: From http://blogs.msdn.com/stephen_griffin/archive/2006/08/03/building-mfcmapi-with-visual-studio-6.aspx
In the platform SDK's lib directory, rename uuid.lib to uuid.lib.bad.
msdev will then use the older library.  (Microsoft intentionally removed
VC6 support from the newer one, whoops.)

Third hitch:
http://www.winehq.org/pipermail/wine-patches/2007-September/043988.html
introduced a type LSTATUS into winreg.h.  This isn't present in
the 2003 SP1 platform sdk, nor in the newer 2003 R2 platform SDK,
but as long as only our winreg.h uses it, that's fine.  Sadly, that
patch uses it elsewhere, so compilation breaks.
A google search for LSTATUS at microsoft.com finds nothing.
Fix:
change the LSTATUS in comctl32/tests/mru.c to LONG
(gee, maybe we should move the definition of LSTATUS from winreg.h to
advapi32/registry.c, too).
(But see below.)

Fourth hitch:
comdlg32\tests\printdlg.c: error C2064: 'LPPRINTDLGEXW' : undeclared identifier
Turns out commdlg.h in the platform sdk only defines LPPRINTDLGEXW if
STDMETHOD is declared.  STDMETHOD is declared in basetyps.h, but
including that file makes commdlg.h not even compile.  Bleah.
Fix:
replace the #include "windef.h" ... "winuser.h" with #include "windows.h"
in comdlg32/tests/printdlg.h.

Fifth hitch:
crypt32/tests/cert.c: error C2081: 'HCRYPTPROV_OR_NCRYPT_KEY_HANDLE':
name in formal parameter list illegal
Turns out that identifier was introduced in Vista, and added to Wine here:
http://www.winehq.org/pipermail/wine-patches/2007-August/042250.html
Fix:
Uninstall the platform SDK and install the Windows SDK!
http://www.microsoft.com/downloads/details.aspx?familyid=c2b1e300-f358-4523-b479-f53d234cdccf

Sixth hitch:
c:\program files\microsoft sdks\windows\v6.0\include\specstrings.h:
fatal error C1083: cannot open include file 'sal.h'
I think sal.h comes with Visual Studio 8 and higher.  Crap.

Thus it looks like you can't build wine's tests with Visual C 6 and
the Microsoft headers anymore.

So I tried building with the Wine headers.
That blows up with "can't find stdio.h".

So I'm stuck.  What's the recommended way to build the wine test suite
with Visual C 6, if any?
- Dan



More information about the wine-devel mailing list