Checking Spec files

Here is a script to check spec files. This script works by comparing the output of winedump or dumpbin on the Windows dlls with the contents of Wine's spec files. It then applies a number of rules to try to detect problems. However the information we can extract from the Windows dlls is incomplete so this script uses heuristics. This means the problems it reports should be treated with a grain of salt.

Running the check script

Create a directory and put the script and the 'API databases' there. You can find these there:

Then run the script as follows:

./check_spec --verbose ~/wine/dlls/shell32.spec

And here is a description of the checks it performs so far:

APIs which should not have an explicit ordinal

The script scans the Wine spec file for APIs which have both a name and an explicit ordinal. For each of these, the script looks up the API by name on the Windows platforms and collates a list of the corresponding ordinals. If it finds more than one ordinal then it considers the API should not be given an explicit ordinal.

In that case it reports how many times the API was found with the right ordinal on Windows, and how many different values were found. If the former is 0 or 1 then it's clear the API should not be given an explicit ordinal. If the latter is 2 then things are maybe not so clear.

APIs which have the wrong ordinal

This check collates a list of Windows ordinals for the API exactly as above. But it emits a warning about the API only if it found a single ordinal value on Windows and that ordinal does not match Wine's ordinal.

APIs which should have the -noname property

Again this check concerns APIs which have both an explicit ordinal and a name. This time it counts the number of Windows platforms where the API is not exported by name but which still have an entry point with the right ordinal and no name.

If more than one such platforms were found, the script considers the API should have the '-noname' property.

APIs which should not have the -noname property

This the same check as above but with a different analysis of the results. Namely, the script considers the API should not have the -noname property if one of the following two conditions is met:

Missing APIs

The script only reports an API as missing if it is present on all platforms but missing from Wine's spec file. That's per Wine's policy to not add APIs that are only present on newer platforms unless we have a good reason to. This page is hosted for free by