diff --git a/Makefile b/Makefile index 052c0821a..a48e9b3d0 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,7 @@ # USE_VSYSCALL : enable vsyscall on Linux x86, bypassing libc # USE_GETADDRINFO : use getaddrinfo() to resolve IPv6 host names. # USE_OPENSSL : enable use of OpenSSL. Recommended, but see below. +# USE_LUA : enable Lua support. # USE_FUTEX : enable use of futex on kernel 2.6. Automatic. # USE_ACCEPT4 : enable use of accept4() on linux. Automatic. # USE_MY_ACCEPT4 : use own implemention of accept4() if glibc < 2.10. @@ -74,6 +75,8 @@ # PCRE_INC : force the include path to libpcre ($PCREDIR/inc) # SSL_LIB : force the lib path to libssl/libcrypto # SSL_INC : force the include path to libssl/libcrypto +# LUA_LIB : force the lib path to lua +# LUA_INC : force the include path to lua # IGNOREGIT : ignore GIT commit versions if set. # VERSION : force haproxy version reporting. # SUBVERS : add a sub-version (eg: platform, model, ...). @@ -557,6 +560,12 @@ endif endif endif +ifneq ($(USE_LUA),) +OPTIONS_CFLAGS += -DUSE_LUA $(if $(LUA_INC),-I$(LUA_INC)) +OPTIONS_LDFLAGS += $(if $(LUA_LIB),-L$(LUA_LIB)) -llua -lm +OPTIONS_OBJS += src/hlua.o +endif + ifneq ($(USE_PCRE)$(USE_STATIC_PCRE)$(USE_PCRE_JIT),) # PCREDIR is used to automatically construct the PCRE_INC and PCRE_LIB paths, # by appending /include and /lib respectively. If your system does not use the diff --git a/include/proto/hlua.h b/include/proto/hlua.h new file mode 100644 index 000000000..c69210e61 --- /dev/null +++ b/include/proto/hlua.h @@ -0,0 +1,11 @@ +#ifndef _PROTO_HLUA_H +#define _PROTO_HLUA_H + +#include + +#include + +/* Lua HAProxy integration functions. */ +void hlua_init(); + +#endif /* _PROTO_HLUA_H */ diff --git a/include/types/hlua.h b/include/types/hlua.h new file mode 100644 index 000000000..d1aa235f0 --- /dev/null +++ b/include/types/hlua.h @@ -0,0 +1,6 @@ +#ifndef _TYPES_HLUA_H +#define _TYPES_HLUA_H + +#include + +#endif /* _TYPES_HLUA_H */ diff --git a/src/haproxy.c b/src/haproxy.c index f50deff95..76561676c 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -88,6 +88,9 @@ #include #include #include +#ifdef USE_LUA +#include +#endif #include #include #include @@ -558,6 +561,11 @@ void init(int argc, char **argv) init_pendconn(); init_proto_http(); +#ifdef USE_LUA + /* Initialise lua. */ + hlua_init(); +#endif + global.tune.options |= GTUNE_USE_SELECT; /* select() is always available */ #if defined(ENABLE_POLL) global.tune.options |= GTUNE_USE_POLL; diff --git a/src/hlua.c b/src/hlua.c new file mode 100644 index 000000000..3e0b19f24 --- /dev/null +++ b/src/hlua.c @@ -0,0 +1,18 @@ +#include +#include +#include + +/* Lua uses longjmp to perform yield or throwing errors. This + * macro is used only for identifying the function that can + * not return because a longjmp is executed. + * __LJMP marks a prototype of hlua file that can use longjmp. + * WILL_LJMP() marks an lua function that will use longjmp. + * MAY_LJMP() marks an lua function that may use longjmp. + */ +#define __LJMP +#define WILL_LJMP(func) func +#define MAY_LJMP(func) func + +void hlua_init(void) +{ +}