Compilation error with MinGW

Hi all,

I'm hitting the same problem as in this[1] thread. I use release_37
branch on 64-bit Windows 7.
The problem is here:

#ifdef __MINGW32__
#include <imagehlp.h>
#else
#include <dbghelp.h>
#endif

<skip>

typedef BOOL (WINAPI
*fpEnumerateLoadedModules)(HANDLE,PENUMLOADED_MODULES_CALLBACK64,PVOID);

imagehlp.h doesn't define PENUMLOADED_MODULES_CALLBACK64 type.
I fixed it on my side by the patch in the bottom of this email, but I
don't know if it's the right approach in general.

[1] http://comments.gmane.org/gmane.comp.compilers.clang.user/709

-- Sly.

diff --git a/lib/Support/Windows/DynamicLibrary.inc
b/lib/Support/Windows/DynamicLibrary.inc
index d38f197..b4c8f1b 100644
--- a/lib/Support/Windows/DynamicLibrary.inc
+++ b/lib/Support/Windows/DynamicLibrary.inc
@@ -31,7 +31,16 @@ using namespace sys;
//=== and must not be UNIX code.
//===----------------------------------------------------------------------===//

+#if defined(__MINGW32__) and !defined(_WIN64)
+typedef BOOL (WINAPI
*fpEnumerateLoadedModules)(HANDLE,PENUMLOADED_MODULES_CALLBACK,PVOID);
+static const char* sEnumerateLoadedModules = "EnumerateLoadedModules";
+typedef DWORD ModuleOffset;
+#else
typedef BOOL (WINAPI
*fpEnumerateLoadedModules)(HANDLE,PENUMLOADED_MODULES_CALLBACK64,PVOID);
+static const char* sEnumerateLoadedModules = "EnumerateLoadedModules64";
+typedef DWORD64 ModuleOffset;
+#endif

Which mingw distribution exactly do you use?

I use the one from mingw.org, installed by the recommended way with
mingw-get-setup.exe.

Sly.

This is an outdated version, please download mingw-w64 from https://sourceforge.net/projects/mingw-w64/

Can we somehow distinguish between mingw and mingw-w64 at configure
time and error properly?

Easy to do at build time, something like

#include <stdlib.h>
#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
#error MinGW.org not supported. Please use Mingw-w64.
#endif

Probably could go into CMakeLists.txt somehow.

Got it, thank you.

Sly.