Dan Kegel wrote:
Thanks to everybody who responded to Jeremy's call to run winetest using the 'dotests' script at http://wiki.winehq.org/MakeTestFailures
We now have 35 reports, and have some good data on which test failures are common. See the Most Common Failures section at the bottom. Here's what it says right now:
The skipgood script above now also tallies tests by how many people they fail for. Currently, it shows:
35 shell32:shelllink 32 user32:msg 16 user32:input 14 ntdll:info 13 d3d9:visual 10 user32:win 8 ddraw:visual 7 urlmon:protocol 5 gdi32:font 4 winmm:wave 3 d3d9:query urlmon:url wininet:url 2 comctl32:tooltips ddraw:dsurface msxml3:domdoc quartz:referenceclock wininet:http 1 d3d8:visual d3d9:device dinput:device dsound:ds3d dsound:ds3d8 dsound:dsound ...
Let's ignore the tests that only fail for one person for the moment, and look at the others.
shell32:shelllink fails on all winetest reports from all machines, including on real Windows. Yet "make test" in shell32 succeeds on this test. Could somebody have a look at why it reliably fails under winetest? I filed this as bug 13311.
I had a look at this one.
The problem as far as I can see lies with the fact that when we run 'make shelllink.ok' we eventually end up in UNIXFS_build_shitemid (shfldr_unixfs.c) where the trace shows:
trace:shell:UNIXFS_build_shitemid (pszUnixPath="/wine/wine-git/dlls/shell32/tests/shell32_test.exe", pIDL=0x12793a)
This shell32_test.exe doesn't exist (it's shell32_test.exe.so).
So when you do (in the test directory):
ln -s shell32_test.exe.so shell32_test.exe rm shelllink.ok make shelllink.ok
You will see the exact same errors as with winetest.
Winetest unpacks all it's executables in a temp directory and in this case (for me on the last run) it's showing in the trace:
trace:shell:UNIXFS_build_shitemid (pszUnixPath="/tmp/wctSkl1EH/shell32_test.exe", pIDL=0x127712)
And that file really exists.
So I guess this issue is with this piece of code in shfldr_unixfs.c:
509 /* We are only interested in regular files and directories. */ 510 if (stat(pszUnixPath, &fileStat)) return NULL;
Now we only need a solution :-)