Fixed some issues with compiling bindings on Windows.

pull/10/head
Robert G. Jakabosky 15 years ago
parent d8839be4bd
commit 399258202d

@ -28,10 +28,10 @@ object "zmq_msg_t" {
typedef struct zmq_msg_t typedef struct zmq_msg_t
{ {
void *content; void *content;
unsigned char flags; unsigned char flags;
unsigned char vsm_size; unsigned char vsm_size;
unsigned char vsm_data [30]; /* that '30' is from 'MAX_VSM_SIZE' */ unsigned char vsm_data [30]; /* that '30' is from 'MAX_VSM_SIZE' */
} zmq_msg_t; } zmq_msg_t;
typedef void (zmq_free_fn) (void *data, void *hint); typedef void (zmq_free_fn) (void *data, void *hint);

@ -28,9 +28,11 @@
#ifdef _MSC_VER #ifdef _MSC_VER
/* define some types that we need. */ /* define some standard types missing on Windows. */
typedef __int32 int32_t; typedef __int32 int32_t;
typedef __int64 int64_t;
typedef unsigned __int32 uint32_t; typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
typedef int bool; typedef int bool;
#define FUNC_UNUSED #define FUNC_UNUSED
@ -153,27 +155,27 @@ typedef struct ffi_export_symbol {
#define obj_type_id_zmq_msg_t 0 #define obj_type_id_zmq_msg_t 0
#define obj_type_zmq_msg_t_check(L, _index) \ #define obj_type_zmq_msg_t_check(L, _index) \
(zmq_msg_t *)obj_simple_udata_luacheck(L, _index, &(obj_type_zmq_msg_t)) (zmq_msg_t *)obj_simple_udata_luacheck(L, _index, &(obj_type_zmq_msg_t))
#define obj_type_zmq_msg_t_delete(L, _index, flags) \ #define obj_type_zmq_msg_t_delete(L, _index, flags) \
(zmq_msg_t *)obj_simple_udata_luadelete(L, _index, &(obj_type_zmq_msg_t), flags) (zmq_msg_t *)obj_simple_udata_luadelete(L, _index, &(obj_type_zmq_msg_t), flags)
#define obj_type_zmq_msg_t_push(L, obj, flags) \ #define obj_type_zmq_msg_t_push(L, obj, flags) \
obj_simple_udata_luapush(L, obj, sizeof(zmq_msg_t), &(obj_type_zmq_msg_t)) obj_simple_udata_luapush(L, obj, sizeof(zmq_msg_t), &(obj_type_zmq_msg_t))
#define obj_type_id_ZMQ_Socket 1 #define obj_type_id_ZMQ_Socket 1
#define obj_type_ZMQ_Socket_check(L, _index) \ #define obj_type_ZMQ_Socket_check(L, _index) \
obj_udata_luacheck(L, _index, &(obj_type_ZMQ_Socket)) obj_udata_luacheck(L, _index, &(obj_type_ZMQ_Socket))
#define obj_type_ZMQ_Socket_delete(L, _index, flags) \ #define obj_type_ZMQ_Socket_delete(L, _index, flags) \
obj_udata_luadelete(L, _index, &(obj_type_ZMQ_Socket), flags) obj_udata_luadelete(L, _index, &(obj_type_ZMQ_Socket), flags)
#define obj_type_ZMQ_Socket_push(L, obj, flags) \ #define obj_type_ZMQ_Socket_push(L, obj, flags) \
obj_udata_luapush_weak(L, (void *)obj, &(obj_type_ZMQ_Socket), flags) obj_udata_luapush_weak(L, (void *)obj, &(obj_type_ZMQ_Socket), flags)
#define obj_type_id_ZMQ_Ctx 2 #define obj_type_id_ZMQ_Ctx 2
#define obj_type_ZMQ_Ctx_check(L, _index) \ #define obj_type_ZMQ_Ctx_check(L, _index) \
obj_udata_luacheck(L, _index, &(obj_type_ZMQ_Ctx)) obj_udata_luacheck(L, _index, &(obj_type_ZMQ_Ctx))
#define obj_type_ZMQ_Ctx_delete(L, _index, flags) \ #define obj_type_ZMQ_Ctx_delete(L, _index, flags) \
obj_udata_luadelete(L, _index, &(obj_type_ZMQ_Ctx), flags) obj_udata_luadelete(L, _index, &(obj_type_ZMQ_Ctx), flags)
#define obj_type_ZMQ_Ctx_push(L, obj, flags) \ #define obj_type_ZMQ_Ctx_push(L, obj, flags) \
obj_udata_luapush_weak(L, (void *)obj, &(obj_type_ZMQ_Ctx), flags) obj_udata_luapush_weak(L, (void *)obj, &(obj_type_ZMQ_Ctx), flags)
@ -509,7 +511,6 @@ static void obj_type_register_constants(lua_State *L, const obj_const *constants
} }
static void obj_type_register_package(lua_State *L, const reg_sub_module *type_reg) { static void obj_type_register_package(lua_State *L, const reg_sub_module *type_reg) {
obj_type *type = type_reg->type;
const luaL_reg *reg_list = type_reg->pub_funcs; const luaL_reg *reg_list = type_reg->pub_funcs;
/* create public functions table. */ /* create public functions table. */
@ -529,7 +530,8 @@ static void obj_type_register(lua_State *L, const reg_sub_module *type_reg, int
const obj_base *base = type_reg->bases; const obj_base *base = type_reg->bases;
if(type_reg->is_package == 1) { if(type_reg->is_package == 1) {
return obj_type_register_package(L, type_reg); obj_type_register_package(L, type_reg);
return;
} }
/* create public functions table. */ /* create public functions table. */
@ -822,10 +824,10 @@ static const char zmq_ffi_lua_code[] = "-- try loading luajit's ffi\n"
"\n" "\n"
"typedef struct zmq_msg_t\n" "typedef struct zmq_msg_t\n"
"{\n" "{\n"
" void *content;\n" " void *content;\n"
" unsigned char flags;\n" " unsigned char flags;\n"
" unsigned char vsm_size;\n" " unsigned char vsm_size;\n"
" unsigned char vsm_data [30]; /* that '30' is from 'MAX_VSM_SIZE' */\n" " unsigned char vsm_data [30]; /* that '30' is from 'MAX_VSM_SIZE' */\n"
"} zmq_msg_t;\n" "} zmq_msg_t;\n"
"\n" "\n"
"typedef void (zmq_free_fn) (void *data, void *hint);\n" "typedef void (zmq_free_fn) (void *data, void *hint);\n"
@ -971,7 +973,10 @@ static const char zmq_ffi_lua_code[] = "-- try loading luajit's ffi\n"
"local zmq_pub = _M\n" "local zmq_pub = _M\n"
"\n" "\n"
"\n" "\n"
"local C = ffi.load(\"zmq\",false)\n" "local os_lib_table = {\n"
" [\"Windows\"] = \"libzmq\",\n"
"}\n"
"local C = ffi.load(os_lib_table[ffi.os] or \"zmq\")\n"
"\n" "\n"
"local OBJ_UDATA_CTX_SHOULD_FREE = (OBJ_UDATA_LAST_FLAG * 2)\n" "local OBJ_UDATA_CTX_SHOULD_FREE = (OBJ_UDATA_LAST_FLAG * 2)\n"
"\n" "\n"
@ -1681,8 +1686,8 @@ static int zmq_msg_t__init_data__meth(lua_State *L) {
static int zmq_msg_t__delete__meth(lua_State *L) { static int zmq_msg_t__delete__meth(lua_State *L) {
int this_flags = 0; int this_flags = 0;
zmq_msg_t * this = obj_type_zmq_msg_t_delete(L,1,&(this_flags)); zmq_msg_t * this = obj_type_zmq_msg_t_delete(L,1,&(this_flags));
if(!(this_flags & OBJ_UDATA_FLAG_OWN)) { return 0; }
ZMQ_Error rc_zmq_msg_close = 0; ZMQ_Error rc_zmq_msg_close = 0;
if(!(this_flags & OBJ_UDATA_FLAG_OWN)) { return 0; }
rc_zmq_msg_close = zmq_msg_close(this); rc_zmq_msg_close = zmq_msg_close(this);
/* check for error. */ /* check for error. */
if((0 != rc_zmq_msg_close)) { if((0 != rc_zmq_msg_close)) {
@ -1828,8 +1833,8 @@ static int zmq_msg_t____tostring__meth(lua_State *L) {
static int ZMQ_Socket__close__meth(lua_State *L) { static int ZMQ_Socket__close__meth(lua_State *L) {
int this_flags = 0; int this_flags = 0;
ZMQ_Socket * this = obj_type_ZMQ_Socket_delete(L,1,&(this_flags)); ZMQ_Socket * this = obj_type_ZMQ_Socket_delete(L,1,&(this_flags));
if(!(this_flags & OBJ_UDATA_FLAG_OWN)) { return 0; }
ZMQ_Error rc_zmq_close = 0; ZMQ_Error rc_zmq_close = 0;
if(!(this_flags & OBJ_UDATA_FLAG_OWN)) { return 0; }
rc_zmq_close = zmq_close(this); rc_zmq_close = zmq_close(this);
/* check for error. */ /* check for error. */
if((0 != rc_zmq_close)) { if((0 != rc_zmq_close)) {
@ -1883,7 +1888,9 @@ static int ZMQ_Socket__setopt__meth(lua_State *L) {
size_t val_len; size_t val_len;
const void *val; const void *val;
#if VERSION_2_1
socket_t fd_val; socket_t fd_val;
#endif
int int_val; int int_val;
uint32_t uint32_val; uint32_t uint32_val;
uint64_t uint64_val; uint64_t uint64_val;
@ -1894,11 +1901,13 @@ static int ZMQ_Socket__setopt__meth(lua_State *L) {
} }
switch(opt_types[opt]) { switch(opt_types[opt]) {
#if VERSION_2_1
case OPT_TYPE_FD: case OPT_TYPE_FD:
fd_val = luaL_checklong(L, 3); fd_val = luaL_checklong(L, 3);
val = &fd_val; val = &fd_val;
val_len = sizeof(fd_val); val_len = sizeof(fd_val);
break; break;
#endif
case OPT_TYPE_INT: case OPT_TYPE_INT:
int_val = luaL_checklong(L, 3); int_val = luaL_checklong(L, 3);
val = &int_val; val = &int_val;
@ -1946,7 +1955,9 @@ static int ZMQ_Socket__getopt__meth(lua_State *L) {
ZMQ_Error err = 0; ZMQ_Error err = 0;
size_t val_len; size_t val_len;
#if VERSION_2_1
socket_t fd_val; socket_t fd_val;
#endif
int int_val; int int_val;
uint32_t uint32_val; uint32_t uint32_val;
uint64_t uint64_val; uint64_t uint64_val;
@ -1961,6 +1972,7 @@ static int ZMQ_Socket__getopt__meth(lua_State *L) {
} }
switch(opt_types[opt]) { switch(opt_types[opt]) {
#if VERSION_2_1
case OPT_TYPE_FD: case OPT_TYPE_FD:
val_len = sizeof(fd_val); val_len = sizeof(fd_val);
err = zmq_getsockopt(this, opt, &fd_val, &val_len); err = zmq_getsockopt(this, opt, &fd_val, &val_len);
@ -1969,6 +1981,7 @@ static int ZMQ_Socket__getopt__meth(lua_State *L) {
return 1; return 1;
} }
break; break;
#endif
case OPT_TYPE_INT: case OPT_TYPE_INT:
val_len = sizeof(int_val); val_len = sizeof(int_val);
err = zmq_getsockopt(this, opt, &int_val, &val_len); err = zmq_getsockopt(this, opt, &int_val, &val_len);
@ -2459,7 +2472,7 @@ static void create_object_instance_cache(lua_State *L) {
lua_rawset(L, LUA_REGISTRYINDEX); /* create reference to weak table. */ lua_rawset(L, LUA_REGISTRYINDEX); /* create reference to weak table. */
} }
int luaopen_zmq(lua_State *L) { LUALIB_API int luaopen_zmq(lua_State *L) {
const reg_sub_module *reg = reg_sub_modules; const reg_sub_module *reg = reg_sub_modules;
const luaL_Reg *submodules = submodule_libs; const luaL_Reg *submodules = submodule_libs;
int priv_table = -1; int priv_table = -1;

@ -134,7 +134,9 @@ end
size_t val_len; size_t val_len;
const void *val; const void *val;
#if VERSION_2_1
socket_t fd_val; socket_t fd_val;
#endif
int int_val; int int_val;
uint32_t uint32_val; uint32_t uint32_val;
uint64_t uint64_val; uint64_t uint64_val;
@ -145,11 +147,13 @@ end
} }
switch(opt_types[${opt}]) { switch(opt_types[${opt}]) {
#if VERSION_2_1
case OPT_TYPE_FD: case OPT_TYPE_FD:
fd_val = luaL_checklong(L, ${val::idx}); fd_val = luaL_checklong(L, ${val::idx});
val = &fd_val; val = &fd_val;
val_len = sizeof(fd_val); val_len = sizeof(fd_val);
break; break;
#endif
case OPT_TYPE_INT: case OPT_TYPE_INT:
int_val = luaL_checklong(L, ${val::idx}); int_val = luaL_checklong(L, ${val::idx});
val = &int_val; val = &int_val;
@ -205,7 +209,9 @@ local tmp_val_len = ffi.new('size_t[1]', 4)
c_source[[ c_source[[
size_t val_len; size_t val_len;
#if VERSION_2_1
socket_t fd_val; socket_t fd_val;
#endif
int int_val; int int_val;
uint32_t uint32_val; uint32_t uint32_val;
uint64_t uint64_val; uint64_t uint64_val;
@ -220,6 +226,7 @@ local tmp_val_len = ffi.new('size_t[1]', 4)
} }
switch(opt_types[${opt}]) { switch(opt_types[${opt}]) {
#if VERSION_2_1
case OPT_TYPE_FD: case OPT_TYPE_FD:
val_len = sizeof(fd_val); val_len = sizeof(fd_val);
${err} = zmq_getsockopt(${this}, ${opt}, &fd_val, &val_len); ${err} = zmq_getsockopt(${this}, ${opt}, &fd_val, &val_len);
@ -228,6 +235,7 @@ local tmp_val_len = ffi.new('size_t[1]', 4)
return 1; return 1;
} }
break; break;
#endif
case OPT_TYPE_INT: case OPT_TYPE_INT:
val_len = sizeof(int_val); val_len = sizeof(int_val);
${err} = zmq_getsockopt(${this}, ${opt}, &int_val, &val_len); ${err} = zmq_getsockopt(${this}, ${opt}, &int_val, &val_len);

@ -11,7 +11,10 @@ luajit_ffi = true,
sys_include "string.h", sys_include "string.h",
include "zmq.h", include "zmq.h",
ffi_load "zmq", ffi_load {
"zmq", -- default lib name.
Windows = "libzmq", -- lib name for on windows.
},
c_source[[ c_source[[
#define OBJ_UDATA_CTX_SHOULD_FREE (OBJ_UDATA_LAST_FLAG << 1) #define OBJ_UDATA_CTX_SHOULD_FREE (OBJ_UDATA_LAST_FLAG << 1)

Loading…
Cancel
Save