From fe185e6e3efe80f048c5830860025b3ac5d359bb Mon Sep 17 00:00:00 2001 From: Roman Tsisyk <roman@tsisyk.com> Date: Thu, 20 Jun 2013 14:39:48 +0400 Subject: [PATCH] Refactor CMakeLists.txt to support src/lua/*.lua files --- .gitignore | 1 + cmake/utils.cmake | 19 +++++++++++++++++++ src/CMakeLists.txt | 10 ++++++++++ src/box/CMakeLists.txt | 28 +++++++--------------------- src/box/box_lua.cc | 2 +- src/lua/init.cc | 10 ++++++++++ 6 files changed, 48 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index b67ffacdc4..5876f1430d 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,7 @@ extra/rpm.spec include/config.h install_manifest.txt lcov +src/lua/*.lua.c src/box/lua/*.lua.c src/box/tarantool_box src/box/tarantool.cfg diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 1400bf1169..e78e4bf7d9 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -36,3 +36,22 @@ macro(set_source_files_compile_flags) unset(_file_ext) unset(_lang) endmacro(set_source_files_compile_flags) + +# A helper function to compile *.lua source into *.lua.c sources +function(lua_source varname filename) + set (srcfile "${CMAKE_CURRENT_SOURCE_DIR}/${filename}") + set (tmpfile "${CMAKE_CURRENT_BINARY_DIR}/${filename}.new.c") + set (dstfile "${CMAKE_CURRENT_BINARY_DIR}/${filename}.c") + get_filename_component(module ${filename} NAME_WE) + + ADD_CUSTOM_COMMAND(OUTPUT ${dstfile} + COMMAND ${ECHO} 'const char ${module}_lua[] =' > ${tmpfile} + COMMAND ${CMAKE_BINARY_DIR}/extra/txt2c ${srcfile} >> ${tmpfile} + COMMAND ${ECHO} '\;' >> ${tmpfile} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${tmpfile} ${dstfile} + COMMAND ${CMAKE_COMMAND} -E remove ${tmpfile} + DEPENDS ${srcfile} txt2c) + + set(var ${${varname}}) + set(${varname} ${var} ${dstfile} PARENT_SCOPE) +endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5e089930a2..0d0232055e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -60,6 +60,15 @@ set_source_files_properties(memcached.cc # set_property(DIRECTORY PROPERTY CLEAN_NO_CUSTOM true) +# Compile src/lua/*.lua files into src/lua/*.lua.c sources +file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/src/lua) +set(lua_sources) + +add_custom_target(generate_lua_sources + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src/box + DEPENDS ${lua_sources}) +set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${lua_sources}) + # # Used by modules. # @@ -110,6 +119,7 @@ set (common_sources lua/lua_socket.cc lua/session.cc lua/cjson.cc + ${lua_sources} ) if (ENABLE_TRACE) diff --git a/src/box/CMakeLists.txt b/src/box/CMakeLists.txt index a86df910fd..4e251781ae 100644 --- a/src/box/CMakeLists.txt +++ b/src/box/CMakeLists.txt @@ -2,29 +2,15 @@ if (TARGET_OS_DARWIN) set(module_link_flags "-pagezero_size 10000 -image_base 100000000") endif() -function(lua_source filename) - get_filename_component(module ${filename} NAME_WE) - ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_BINARY_DIR}/src/box/${filename}.c - COMMAND ${ECHO} 'const char ${module}_lua[] =' > ${filename}.new.c - COMMAND ${CMAKE_BINARY_DIR}/extra/txt2c - ${CMAKE_SOURCE_DIR}/src/box/${filename} >> ${filename}.new.c - COMMAND ${ECHO} '\;' >> ${filename}.new.c - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${filename}.new.c - ${CMAKE_BINARY_DIR}/src/box/${filename}.c - COMMAND ${CMAKE_COMMAND} -E remove ${filename}.new.c - DEPENDS ${CMAKE_SOURCE_DIR}/src/box/${filename} txt2c) - - set(lua_sources ${lua_sources} ${CMAKE_BINARY_DIR}/src/box/${filename}.c - PARENT_SCOPE) -endfunction() - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/src/box/lua) -lua_source(lua/box.lua) -lua_source(lua/box_net.lua) -lua_source(lua/misc.lua) -lua_source(lua/sql.lua) -add_custom_target(generate_lua_sources} +set(lua_sources) +lua_source(lua_sources lua/box.lua) +lua_source(lua_sources lua/box_net.lua) +lua_source(lua_sources lua/misc.lua) +lua_source(lua_sources lua/sql.lua) + +add_custom_target(box_generate_lua_sources WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src/box DEPENDS ${lua_sources}) set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${lua_sources}) diff --git a/src/box/box_lua.cc b/src/box/box_lua.cc index 808b1d015c..bbd0e0868e 100644 --- a/src/box/box_lua.cc +++ b/src/box/box_lua.cc @@ -52,7 +52,7 @@ extern "C" { /* contents of box.lua, misc.lua, box.net.lua respectively */ extern char box_lua[], box_net_lua[], misc_lua[], sql_lua[]; -const char *lua_sources[] = { box_lua, box_net_lua, misc_lua, sql_lua, NULL }; +static const char *lua_sources[] = { box_lua, box_net_lua, misc_lua, sql_lua, NULL }; /** * All box connections share the same Lua state. We use diff --git a/src/lua/init.cc b/src/lua/init.cc index a6204378e2..b0dc71c46e 100644 --- a/src/lua/init.cc +++ b/src/lua/init.cc @@ -76,6 +76,9 @@ extern "C" { struct lua_State *tarantool_L; +/* contents of src/lua/ files */ +static const char *lua_sources[] = { NULL }; + /** * Remember the output of the administrative console in the * registry, to use with 'print'. @@ -1318,6 +1321,13 @@ tarantool_lua_init() tarantool_lua_session_init(L); tarantool_lua_error_init(L); + /* Load Lua extension */ + for (const char **s = lua_sources; *s; s++) { + if (luaL_dostring(L, *s)) + panic("Error loading Lua source %.160s...: %s", + *s, lua_tostring(L, -1)); + } + mod_lua_init(L); /* init after internal luas are processed */ -- GitLab