diff options
author | Ronan Collobert <locronan@fb.com> | 2014-09-11 01:26:53 +0400 |
---|---|---|
committer | Ronan Collobert <locronan@fb.com> | 2014-09-11 01:26:53 +0400 |
commit | 6819e2edda2db910b9e82fb302448f7d45eacac7 (patch) | |
tree | 27a1a33ebc2e364f5b0781fd5aec54b7b15d7b4c | |
parent | 9dc61ae51366fdb12c07b4506e04909ad7330704 (diff) |
lua-5.2: first cmake support
-rw-r--r-- | CMakeLists.txt | 6 | ||||
-rw-r--r-- | lua-5.2/CMakeLists.txt | 100 | ||||
-rw-r--r-- | lua-5.2/cmake/FindReadline.cmake | 60 | ||||
-rw-r--r-- | lua-5.2/src/luaconf.h.in (renamed from lua-5.2/src/luaconf.h) | 15 | ||||
-rw-r--r-- | luarocks/CMakeLists.txt | 4 |
5 files changed, 182 insertions, 3 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ec5a1e..d50c33d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,10 +10,16 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR) CMAKE_POLICY(VERSION 2.6) OPTION(WITH_LUA51 "Use Lua 5.1 instead of LuaJIT" OFF) +OPTION(WITH_LUA52 "Use Lua 5.2 instead of LuaJIT" OFF) IF(WITH_LUA51) SET(LUA_EXE_NAME lua) + SET(LUA_VERSION 5.1) ADD_SUBDIRECTORY(lua-5.1) +ELSEIF(WITH_LUA52) + SET(LUA_EXE_NAME lua) + SET(LUA_VERSION 5.2) + ADD_SUBDIRECTORY(lua-5.2) ELSE() SET(LUA_EXE_NAME luajit) ADD_SUBDIRECTORY(luajit) diff --git a/lua-5.2/CMakeLists.txt b/lua-5.2/CMakeLists.txt new file mode 100644 index 0000000..b2675e4 --- /dev/null +++ b/lua-5.2/CMakeLists.txt @@ -0,0 +1,100 @@ +# -*- cmake -*- + +PROJECT(Lua) + +CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR) +CMAKE_POLICY(VERSION 2.6) + +SET(CMAKE_MODULE_PATH + "${CMAKE_CURRENT_SOURCE_DIR}/cmake" + "${CMAKE_MODULE_PATH}") + +SET(INSTALL_INCLUDE_SUBDIR "include" CACHE STRING "installation include subdirectory name") +IF(WIN32) + SET(INSTALL_BIN_SUBDIR "." CACHE STRING "installation executable subdirectory name") + SET(INSTALL_LIB_SUBDIR "." CACHE STRING "installation library subdirectory name") + SET(INSTALL_LUA_PATH_SUBDIR "lua") # not editable + SET(INSTALL_LUA_CPATH_SUBDIR ".") # not editable +ELSE() + SET(INSTALL_BIN_SUBDIR "bin" CACHE STRING "installation executable subdirectory name") + SET(INSTALL_LIB_SUBDIR "lib" CACHE STRING "installation library subdirectory name") + SET(INSTALL_LUA_PATH_SUBDIR "share/lua/5.2/") # not editable + SET(INSTALL_LUA_LIB_SUBDIR "lib" CACHE STRING "installation lua lib subdirectory name") + SET(INSTALL_LUA_CPATH_SUBDIR "${INSTALL_LUA_LIB_SUBDIR}/lua/5.2/") # not editable +ENDIF() + +IF(UNIX) + SET(LUA_ROOT "${CMAKE_INSTALL_PREFIX}") +ENDIF() + +# Readline support +FIND_PACKAGE(Readline) +IF(READLINE_FOUND) + SET(LUA_USE_READLINE 1) + LIST(APPEND LIBS ${READLINE_LIBRARIES}) + INCLUDE_DIRECTORIES(${READLINE_INCLUDE_DIR}) +ENDIF(READLINE_FOUND) + +INCLUDE(CheckLibraryExists) +INCLUDE(CheckSymbolExists) +INCLUDE(CheckFunctionExists) + +CHECK_FUNCTION_EXISTS(_longjmp LUA_USE_ULONGJMP) +CHECK_SYMBOL_EXISTS(isatty unistd.h LUA_USE_ISATTY) +CHECK_SYMBOL_EXISTS(mkstemp stdlib.h LUA_USE_MKSTEMP) +CHECK_SYMBOL_EXISTS(popen stdio.h LUA_USE_POPEN) +CHECK_FUNCTION_EXISTS(gmtime_r LUA_USE_GMTIME_R) +CHECK_LIBRARY_EXISTS(m sin "" LUA_USE_LIBM) +IF(LUA_USE_LIBM) + LIST(APPEND LIBS "m") +ENDIF() + +IF(NOT WIN32) + FIND_LIBRARY(DL_LIBRARY "dl") + IF(DL_LIBRARY) + SET(CMAKE_REQUIRED_LIBRARIES ${DL_LIBRARY}) + LIST(APPEND LIBS ${DL_LIBRARY}) + ENDIF(DL_LIBRARY) + CHECK_FUNCTION_EXISTS(dlopen LUA_USE_DLOPEN) + IF(NOT LUA_USE_DLOPEN) + MESSAGE(FATAL_ERROR "Cannot compile a useful lua. +Function dlopen() seems not to be supported on your platform. +Apparently you are not on a Windows platform as well. +So lua has no way to deal with shared libraries!") + ENDIF(NOT LUA_USE_DLOPEN) +ELSE() + SET(LUA_BUILD_AS_DLL 1) +ENDIF() + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) +CONFIGURE_FILE(src/luaconf.h.in + ${CMAKE_CURRENT_BINARY_DIR}/luaconf.h) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/luaconf.h src/lua.h src/lauxlib.h src/lualib.h + DESTINATION "${INSTALL_INCLUDE_SUBDIR}") + +SET(SRC_LIB + src/lapi.c src/lcode.c src/lctype.c src/ldebug.c src/ldo.c src/ldump.c src/lfunc.c src/lgc.c src/llex.c + src/lmem.c src/lobject.c src/lopcodes.c src/lparser.c src/lstate.c src/lstring.c src/ltable.c + src/ltm.c src/lundump.c src/lvm.c src/lzio.c + src/lauxlib.c src/lbaselib.c src/lbitlib.c src/lcorolib.c src/ldblib.c src/liolib.c + src/lmathlib.c src/loslib.c src/lstrlib.c src/ltablib.c src/loadlib.c src/linit.c + ${CMAKE_CURRENT_BINARY_DIR}/luaconf.h) + +# Shared library and executables +ADD_LIBRARY(liblua SHARED ${SRC_LIB}) +SET_TARGET_PROPERTIES(liblua PROPERTIES + PREFIX "lib" IMPORT_PREFIX "lib" OUTPUT_NAME "luajit") +ADD_EXECUTABLE(lua src/lua.c ${SRC_LIB}) +ADD_EXECUTABLE(luac src/luac.c ${SRC_LIB}) +TARGET_LINK_LIBRARIES(liblua ${LIBS}) +TARGET_LINK_LIBRARIES(lua ${LIBS}) +TARGET_LINK_LIBRARIES(luac ${LIBS}) + +# Install files +INSTALL(TARGETS lua luac liblua + RUNTIME DESTINATION "${INSTALL_BIN_SUBDIR}" + LIBRARY DESTINATION "${INSTALL_LIB_SUBDIR}" + ARCHIVE DESTINATION "${INSTALL_LIB_SUBDIR}") + +INSTALL(FILES src/lua.h ${CMAKE_CURRENT_BINARY_DIR}/luaconf.h src/lualib.h src/lauxlib.h + DESTINATION "${INSTALL_INCLUDE_SUBDIR}/lua") diff --git a/lua-5.2/cmake/FindReadline.cmake b/lua-5.2/cmake/FindReadline.cmake new file mode 100644 index 0000000..4a2fc0c --- /dev/null +++ b/lua-5.2/cmake/FindReadline.cmake @@ -0,0 +1,60 @@ +# - Find the readline library +# This module defines +# READLINE_INCLUDE_DIR, path to readline/readline.h, etc. +# READLINE_LIBRARIES, the libraries required to use READLINE. +# READLINE_FOUND, If false, do not try to use READLINE. +# also defined, but not for general use are +# READLINE_readline_LIBRARY, where to find the READLINE library. + +# Apple readline does not support readline hooks +# So we look for another one by default +IF(APPLE) + FIND_PATH(READLINE_INCLUDE_DIR NAMES readline/readline.h PATHS + /sw/include + /opt/local/include + /opt/include + /usr/local/include + /usr/include/ + NO_DEFAULT_PATH + ) +ENDIF(APPLE) +FIND_PATH(READLINE_INCLUDE_DIR NAMES readline/readline.h) + + +# Apple readline does not support readline hooks +# So we look for another one by default +IF(APPLE) + FIND_LIBRARY(READLINE_readline_LIBRARY NAMES readline PATHS + /sw/lib + /opt/local/lib + /opt/lib + /usr/local/lib + /usr/lib + NO_DEFAULT_PATH + ) +ENDIF(APPLE) +FIND_LIBRARY(READLINE_readline_LIBRARY NAMES readline) + +MARK_AS_ADVANCED( + READLINE_INCLUDE_DIR + READLINE_readline_LIBRARY + ) + +SET( READLINE_FOUND "NO" ) +IF(READLINE_INCLUDE_DIR) + IF(READLINE_readline_LIBRARY) + SET( READLINE_FOUND "YES" ) + SET( READLINE_LIBRARIES + ${READLINE_readline_LIBRARY} + ) + + ENDIF(READLINE_readline_LIBRARY) +ENDIF(READLINE_INCLUDE_DIR) + +IF(READLINE_FOUND) + MESSAGE(STATUS "Found readline library") +ELSE(READLINE_FOUND) + IF(READLINE_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find readline -- please give some paths to CMake") + ENDIF(READLINE_FIND_REQUIRED) +ENDIF(READLINE_FOUND) diff --git a/lua-5.2/src/luaconf.h b/lua-5.2/src/luaconf.h.in index 18be9a9..2270d66 100644 --- a/lua-5.2/src/luaconf.h +++ b/lua-5.2/src/luaconf.h.in @@ -11,6 +11,19 @@ #include <limits.h> #include <stddef.h> +#cmakedefine LUA_USE_ULONGJMP 1 +#cmakedefine LUA_USE_DLOPEN 1 +#cmakedefine LUA_USE_ISATTY 1 +#cmakedefine LUA_USE_MKSTEMP 1 +#cmakedefine LUA_USE_POPEN 1 +#cmakedefine LUA_USE_GMTIME_R 1 +#cmakedefine LUA_USE_POSIX 1 +#cmakedefine LUA_USE_READLINE 1 +#cmakedefine LUA_BUILD_AS_DLL 1 +#cmakedefine LUA_USE_AFORMAT 1 +#cmakedefine LUA_USE_STRTODHEX 1 +#cmakedefine LUA_USE_LONGLONG 1 +#define LUA_ROOT "@LUA_ROOT@/" /* ** ================================================================== @@ -100,7 +113,7 @@ #else /* }{ */ #define LUA_VDIR LUA_VERSION_MAJOR "." LUA_VERSION_MINOR "/" -#define LUA_ROOT "/usr/local/" +/* #define LUA_ROOT "/usr/local/" */ #define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR #define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR #define LUA_PATH_DEFAULT \ diff --git a/luarocks/CMakeLists.txt b/luarocks/CMakeLists.txt index fee52be..944638e 100644 --- a/luarocks/CMakeLists.txt +++ b/luarocks/CMakeLists.txt @@ -14,9 +14,9 @@ IF(WIN32) ELSE() SET(INSTALL_BIN_SUBDIR "bin" CACHE STRING "installation executable subdirectory name") SET(INSTALL_LIB_SUBDIR "lib" CACHE STRING "installation library subdirectory name") - SET(INSTALL_LUA_PATH_SUBDIR "share/lua/5.1") # not editable + SET(INSTALL_LUA_PATH_SUBDIR "share/lua/${LUA_VERSION}") # not editable SET(INSTALL_LUA_LIB_SUBDIR "lib" CACHE STRING "installation lua lib subdirectory name") - SET(INSTALL_LUA_CPATH_SUBDIR "${INSTALL_LUA_LIB_SUBDIR}/lua/5.1") # not editable + SET(INSTALL_LUA_CPATH_SUBDIR "${INSTALL_LUA_LIB_SUBDIR}/lua/${LUA_VERSION}") # not editable SET(INSTALL_LUAROCKS_ROCKS_SUBDIR "lib/luarocks/rocks" CACHE STRING "installation luarocks rocks subdirectory name") SET(INSTALL_LUAROCKS_SYSCONF_SUBDIR "etc/luarocks" CACHE STRING "installation luarocks sysconfig subdirectory name") ENDIF() |