From 27763ea3e233fe7209622b6f0ab267fdb148abe1 Mon Sep 17 00:00:00 2001
From: Gregor Thalhammer <gregor.thalhammer@gmail.com>
Date: Tue, 25 Aug 2015 15:59:01 +0200
Subject: [PATCH] fixes to enable building on Windows (with mingwpy compiler
 package)

---
 pyopencl/cffi_cl.py              | 9 ++++++---
 src/c_wrapper/debug.h            | 3 +++
 src/c_wrapper/wrap_cl_core.h     | 3 ++-
 src/c_wrapper/wrap_constants.cpp | 2 +-
 4 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py
index f2c9206..3765613 100644
--- a/pyopencl/cffi_cl.py
+++ b/pyopencl/cffi_cl.py
@@ -35,7 +35,9 @@ import sys
 from pyopencl._cffi import ffi as _ffi
 from .compyte.array import f_contiguous_strides, c_contiguous_strides
 
-_lib = _ffi.dlopen(None)
+
+#_lib = _ffi.dlopen(None) #gives error
+from pyopencl._cffi import lib as _lib
 
 
 class _CLKernelArg(object):
@@ -455,8 +457,9 @@ class migrate_mem_object_flags_ext(_NoInit):  # noqa
 
 _locals = locals()
 
-
-@_ffi.callback('void (*)(const char*, const char* name, long value)')
+#TODO: constant values are cl_ulong
+#@_ffi.callback('void (*)(const char*, const char* name, long value)')
+@_ffi.callback('void (*)(const char*, const char* name, unsigned long value)')
 def _constant_callback(type_, name, value):
     setattr(_locals[_ffi_pystr(type_)], _ffi_pystr(name), value)  # noqa
 
diff --git a/src/c_wrapper/debug.h b/src/c_wrapper/debug.h
index c561658..68ee98a 100644
--- a/src/c_wrapper/debug.h
+++ b/src/c_wrapper/debug.h
@@ -3,6 +3,9 @@
 #include <string.h>
 #include <mutex>
 
+#include "mingw.mutex.h"
+#include "mingw.thread.h"
+
 #ifndef __PYOPENCL_DEBUG_H
 #define __PYOPENCL_DEBUG_H
 
diff --git a/src/c_wrapper/wrap_cl_core.h b/src/c_wrapper/wrap_cl_core.h
index 9f4c751..38629e9 100644
--- a/src/c_wrapper/wrap_cl_core.h
+++ b/src/c_wrapper/wrap_cl_core.h
@@ -56,7 +56,8 @@ void set_py_funcs(int (*_gc)(), void *(*_ref)(void*), void (*_deref)(void*),
 int have_gl();
 
 unsigned bitlog2(unsigned long v);
-void populate_constants(void(*add)(const char*, const char*, long value));
+//void populate_constants(void(*add)(const char*, const char*, long value));
+void populate_constants(void(*add)(const char*, const char*, unsigned long value));
 int get_debug();
 void set_debug(int debug);
 
diff --git a/src/c_wrapper/wrap_constants.cpp b/src/c_wrapper/wrap_constants.cpp
index 1ac31e1..952d3b5 100644
--- a/src/c_wrapper/wrap_constants.cpp
+++ b/src/c_wrapper/wrap_constants.cpp
@@ -2,7 +2,7 @@
 #include <iostream>
 
 extern "C"
-void populate_constants(void(*add)(const char*, const char*, long value))
+void populate_constants(void(*add)(const char*, const char*, unsigned long value))
 {
 #define _ADD_ATTR(TYPE, PREFIX, NAME, SUFFIX, ...)      \
       add(TYPE, #NAME, CL_##PREFIX##NAME##SUFFIX)
-- 
1.9.5.msysgit.1

