I'm not sure to understand.
With the current approach, the differences between versions can be handled through `#ifdef GAMEINPUT_API_VERSION`. An application can build with these headers in a similar way they are built against any of the SDK headers, by defining GAMEINPUT_API_VERSION to their desired version prior to inclusion.
The implementation (or the tests) can then additionally define `_GAMEINPUT_` which makes every identifier to be suffixed with the version instead, allowing us to implement every interface versions in the module (and to test differences between versions without having to duplicate tests in separate files too).
There aren't that many differences, yes which is why I'm not keen on duplicating entire headers.
Are you suggesting instead to manually change the name of the symbols which are being overloaded over API versions? This would break compatibility with native SDK and applications which may want to compile with Wine headers.