# HG changeset patch # User Myhailo Danylenko # Date 1354069653 -7200 # Node ID 4232a5da1af2cf052f7c1d32df023b793df8c552 # Parent 7e8f523b66afbde806391d5f7b28304994065a82 Support lua 5.2 diff -r 7e8f523b66af -r 4232a5da1af2 CMakeLists.txt --- a/CMakeLists.txt Tue Nov 27 12:12:57 2012 +0200 +++ b/CMakeLists.txt Wed Nov 28 04:27:33 2012 +0200 @@ -16,18 +16,29 @@ cmake_minimum_required(VERSION 2.6) project(lua C) -set(PROJECT_VERSION "0.0.1") +set(PROJECT_VERSION "0.0.2") ## User options -option(DEBUG "Enable debugging output" ON) -option(LLM_CONNECTION_ENABLE "Enable exposing of mcabber loudmouth connection to lua" ON) -option(LLM_LOG_HANDLER "Enable registration of log messages handler for lua-loudmouth library's messages" ON) +option(DEBUG "Enable debugging output" ON) +option(WANT_LUA52 "Use lua 5.2 instead of 5.1" OFF) +option(LLM_CONNECTION_ENABLE "Enable exposing of mcabber loudmouth connection to lua" ON) +option(LLM_LOG_HANDLER "Enable registration of log messages handler for lua-loudmouth library's messages" ON) set(ML_SOURCE_PRIORITY G_PRIORITY_HIGH_IDLE CACHE STRING "Glib event source priority for timeout and bgread") -set(ML_BGREAD_BUFFER 4096 CACHE STRING "Background pipe reading buffer size") +set(ML_BGREAD_BUFFER 4096 CACHE STRING "Background pipe reading buffer size") ## Gather information about system -find_package(Lua51 REQUIRED) find_package(PkgConfig REQUIRED) +if(NOT WANT_LUA52) + find_package(Lua51) +endif() +if(WANT_LUA52 OR NOT LUA51_FOUND) + pkg_check_modules(LUA REQUIRED lua5.2) + set(LUA_VERSION "5.2") + set(HAVE_LUA52 "1") +else() + set(LUA_VERSION "5.1") + set(LUA_INCLUDE_DIRS ${LUA_INCLUDE_DIR}) +endif() pkg_check_modules(GLIB REQUIRED glib-2.0) pkg_check_modules(GMODULE REQUIRED gmodule-2.0) pkg_check_modules(MCABBER REQUIRED mcabber) @@ -53,7 +64,7 @@ ## Set up compiler configure_file(config.h.in config.h ESCAPE_QUOTES) -include_directories(SYSTEM ${LUA_INCLUDE_DIR} +include_directories(SYSTEM ${LUA_INCLUDE_DIRS} ${GLIB_INCLUDE_DIRS} ${GMODULE_INCLUDE_DIRS} ${MCABBER_INCLUDE_DIRS}) @@ -67,38 +78,38 @@ ## Extra targets if(DOCGEN_EXECUTABLE) - add_custom_command(OUTPUT ${lua_BINARY_DIR}/lua.html COMMAND ${DOCGEN_EXECUTABLE} -f html -t "Documentation for Lua module for MCabber" -o ${lua_BINARY_DIR}/lua.html -- ${lua_SOURCES} DEPENDS ${DOCGEN_EXECUTABLE} ${lua_SOURCES} WORKING_DIRECTORY ${lua_SOURCE_DIR}) - add_custom_target(doc ALL DEPENDS ${lua_BINARY_DIR}/lua.html) + add_custom_command(OUTPUT ${lua_BINARY_DIR}/lua.html COMMAND ${DOCGEN_EXECUTABLE} -f html -t "Documentation for Lua module for MCabber" -o ${lua_BINARY_DIR}/lua.html -- ${lua_SOURCES} DEPENDS ${DOCGEN_EXECUTABLE} ${lua_SOURCES} WORKING_DIRECTORY ${lua_SOURCE_DIR}) + add_custom_target(doc ALL DEPENDS ${lua_BINARY_DIR}/lua.html) add_custom_command(OUTPUT ${lua_SOURCE_DIR}/docs/api.mdwn COMMAND ${DOCGEN_EXECUTABLE} -f mdwn -t "Documentation for Lua module for MCabber" -o ${lua_SOURCE_DIR}/docs/api.mdwn -- ${lua_SOURCES} DEPENDS ${DOCGEN_EXECUTABLE} ${lua_SOURCES} WORKING_DIRECTORY ${lua_SOURCE_DIR}) add_custom_target(update_api DEPENDS ${lua_SOURCE_DIR}/docs/api.mdwn) endif() ## Packaging information -set(CPACK_PACKAGE_NAME libmcabber-lua) -set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) -set(CPACK_PACKAGE_VENDOR "IsBear") -set(CPACK_PACKAGE_CONTACT "Myhailo Danylenko ") +set(CPACK_PACKAGE_NAME libmcabber-lua) +set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) +set(CPACK_PACKAGE_VENDOR "IsBear") +set(CPACK_PACKAGE_CONTACT "Myhailo Danylenko ") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Mcabber lua module") -set(CPACK_PACKAGE_DESCRIPTION_FILE ${lua_SOURCE_DIR}/README) -set(CPACK_RESOURCE_FILE_LICENSE ${lua_SOURCE_DIR}/COPYING) -set(CPACK_RESOURCE_FILE_README ${lua_SOURCE_DIR}/README) -set(CPACK_RESOURCE_FILE_WELCOME ${lua_SOURCE_DIR}/README) +set(CPACK_PACKAGE_DESCRIPTION_FILE ${lua_SOURCE_DIR}/README) +set(CPACK_RESOURCE_FILE_LICENSE ${lua_SOURCE_DIR}/COPYING) +set(CPACK_RESOURCE_FILE_README ${lua_SOURCE_DIR}/README) +set(CPACK_RESOURCE_FILE_WELCOME ${lua_SOURCE_DIR}/README) set(CPACK_SOURCE_GENERATOR TBZ2) -set(CPACK_GENERATOR DEB CACHE STRING "Binary package generator, eg DEB, RPM, TGZ, NSIS...") +set(CPACK_GENERATOR DEB CACHE STRING "Binary package generator, eg DEB, RPM, TGZ, NSIS...") # XXX -set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, liblua5.1-0, libglib2.0-0") -set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "mcabber-lm | mcabber") -set(CPACK_DEBIAN_PACKAGE_SUGGESTS "liblua5.1-posix1, liblua5.1-base64-0, liblua5.1-sha1-0") -set(CPACK_DEBIAN_PACKAGE_SECTION libs) -find_program(DPKG_EXECUTABLE dpkg) +set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6, liblua${LUA_VERSION}-0, libglib2.0-0") +set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "mcabber") +set(CPACK_DEBIAN_PACKAGE_SUGGESTS "lua${LUA_VERSION}-posix, lua${LUA_VERSION}-base64, lua${LUA_VERSION}-sha1") +set(CPACK_DEBIAN_PACKAGE_SECTION libs) +find_program(DPKG_EXECUTABLE dpkg DOC "Path to dpkg (optional, to detect architecture)") if(DPKG_EXECUTABLE) execute_process(COMMAND ${DPKG_EXECUTABLE} --print-architecture OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE) else() set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386 CACHE STRING "Architecture of package") endif() -set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") +set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") # XXX: Set package name directly to get rid of -Sources? -set(CPACK_SOURCE_IGNORE_FILES "/\\\\..*;\\\\.swp;~$;/build/;\\\\.tar\\\\.;\\\\.deb;\\\\.so") +set(CPACK_SOURCE_IGNORE_FILES "/\\\\..*;\\\\.swp;~$;/build/;\\\\.tar\\\\.;\\\\.deb;\\\\.so") include(CPack) if(HAVE_MCABBER_COMPLETION_FLAGS) @@ -109,13 +120,13 @@ configure_file(lua.avv.in lua.avv) ## Set up installer -install(TARGETS lua DESTINATION lib/mcabber) +install(TARGETS lua DESTINATION lib/mcabber) if(DOCGEN_EXECUTABLE) - install(FILES ${lua_BINARY_DIR}/lua.html DESTINATION share/doc/${CPACK_PACKAGE_NAME}) + install(FILES ${lua_BINARY_DIR}/lua.html DESTINATION share/doc/${CPACK_PACKAGE_NAME}) endif() -install(DIRECTORY examples DESTINATION share/doc/${CPACK_PACKAGE_NAME} PATTERN "*~" EXCLUDE) -install(FILES docs/readme.mdwn docs/todo.mdwn COPYING DESTINATION share/doc/${CPACK_PACKAGE_NAME}) -install(DIRECTORY help DESTINATION share/mcabber) -install(FILES ${PROJECT_BINARY_DIR}/lua.avv DESTINATION share/mcabber/avv/modules RENAME lua) +install(DIRECTORY examples DESTINATION share/doc/${CPACK_PACKAGE_NAME} PATTERN "*~" EXCLUDE) +install(FILES docs/readme.mdwn docs/todo.mdwn COPYING DESTINATION share/doc/${CPACK_PACKAGE_NAME}) +install(DIRECTORY help DESTINATION share/mcabber) +install(FILES ${PROJECT_BINARY_DIR}/lua.avv DESTINATION share/mcabber/avv/modules RENAME lua) ## The End ## vim: se ts=4 sw=4: ## diff -r 7e8f523b66af -r 4232a5da1af2 config.h.in --- a/config.h.in Tue Nov 27 12:12:57 2012 +0200 +++ b/config.h.in Wed Nov 28 04:27:33 2012 +0200 @@ -1,5 +1,5 @@ -/* Copyright 2009 Myhailo Danylenko +/* Copyright 2009-2012 Myhailo Danylenko This file is part of mcabber-lua. @@ -24,6 +24,9 @@ // define this to enable debugging output #cmakedefine DEBUG +// define this if you are building with lua 5.2 +#cmakedefine HAVE_LUA52 + // define this to enable exporting mcabber connection for lua-loudmouth #cmakedefine LLM_CONNECTION_ENABLE @@ -38,6 +41,11 @@ #define PROJECT_VERSION ( "${PROJECT_VERSION}" ) +#ifndef HAVE_LUA52 +# define lua_rawlen lua_objlen +# define luaL_setfuncs(STATE, REGTABLE, IGZERO) luaL_register ( STATE, NULL, REGTABLE ) +#endif + #ifdef DEBUG # include diff -r 7e8f523b66af -r 4232a5da1af2 lua.c --- a/lua.c Tue Nov 27 12:12:57 2012 +0200 +++ b/lua.c Wed Nov 28 04:27:33 2012 +0200 @@ -1,6 +1,6 @@ -/* Copyright 2009,2010 Myhailo Danylenko - * Copyright 2011 Mikael Berthe +/* Copyright 2009-2012 Myhailo Danylenko + * Copyright 2011 Mikael Berthe This file is part of mcabber-lua. @@ -163,7 +163,7 @@ static int lua_global_dopath (lua_State *L) { const char *name = luaL_checkstring (L, 1); - size_t size = lua_objlen (L, 1); + size_t size = lua_rawlen (L, 1); char *path; int ret = 0; if (size > 4 && !strncmp (name + size - 4, ".lua", 4)) @@ -489,7 +489,7 @@ static void lua_rosterlist_callback (gpointer buddy, lua_State *L) { char *jid = from_utf8 (buddy_getjid (buddy)); - lua_pushnumber (L, lua_objlen (L, -1) + 1); + lua_pushnumber (L, lua_rawlen (L, -1) + 1); lua_pushstring (L, jid); lua_settable (L, -3); g_free (jid); @@ -1171,7 +1171,7 @@ luaL_newmetatable (L, "mcabber.command"); lua_pushvalue (L, -1); lua_setfield (L, -2, "__index"); - luaL_register (L, NULL, lua_mcabber_command_reg_m); + luaL_setfuncs (L, lua_mcabber_command_reg_m, 0); lua_pop (L, 1); } @@ -1560,7 +1560,7 @@ luaL_newmetatable (L, "mcabber.hook"); lua_pushvalue (L, -1); lua_setfield (L, -2, "__index"); - luaL_register (L, NULL, lua_mcabber_hook_reg_m); + luaL_setfuncs (L, lua_mcabber_hook_reg_m, 0); lua_pop (L, 1); } @@ -1780,8 +1780,9 @@ { luaL_openlibs (lua); - luaL_register (lua, "main", lua_reg_main); - lua_pop (lua, 1); // XXX + lua_newtable(lua); + luaL_setfuncs (lua, lua_reg_main, 0); + lua_setglobal (lua, "main"); lua_register (lua, "dopath", lua_global_dopath); lua_register (lua, "print", lua_global_print );