Hello, libevent mailing-list.
Here[1] are some steps which helped me to build libevent with
Microsoft Windows XP.
The only quirk I've discovered so far is that when I want to use the
Windows DDK's "BUILD" program to build a libevent-consuming project, I
run into calling convention mismatching... By default, BUILD seems to
want to give /Gz to the compiler, which specifies __stdcall as the
default calling convention for functions. Unfortunately, the steps[1]
that I used resulted in a libevent DLL using the __cdecl calling
convention. The compiler would want /Gd, for that.
So what happens is that only one of these will be linked:
- libevent (via __cdecl)
- Winsock2 (ws2_32, via __stdcall)
In a BUILD "sources" file, one can use the following line to request /Gd:
386_STDCALL=0
But that doesn't help with Winsock2.
Fortunately, Winsock2's header uses WSAAPI to mark the calling
convention for its functions. That preprocesses as "FAR PASCAL", so
the following ugly hack gets libevent and Winsock2 to play nicely with
BUILD:
#ifndef WIN32
/* ... */
#else
#include <windows.h>
#define PASCAL __stdcall
#include <winsock2.h>
#endif
The build-log will warn about a redefinition of PASCAL, but oh well.
Does anyone think it might be worth-while to introduce an
EVENT2_MS_CALLING_CONVENTION macro between the return-type and
identifier for each libevent function? (That's where Microsoft wants
it, if I recall correctly.) Or, if all other implementations use the
same convention for the location of such a calling-convention
extension, perhaps EVENT2_CALLING_CONVENTION. Hooray for clutter?
(Another way to ask is, "Would anyone object to...")
[1] https://www.synthetel.com/libevent-xp