Skip to content

Commit

Permalink
made things a bit more modular (qtlua can now compile standalone)
Browse files Browse the repository at this point in the history
  • Loading branch information
andresy committed Jan 27, 2012
1 parent 5c4055e commit 4b1adce
Show file tree
Hide file tree
Showing 9 changed files with 226 additions and 85 deletions.
76 changes: 46 additions & 30 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# -*- cmake -*-

project(QtLua)

CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR)
CMAKE_POLICY(VERSION 2.6)

SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

# If you want to include Lua in a main project,
# you might want to define those variables yourself
IF(NOT QtLua_IS_SUBPROJECT)
INCLUDE(QtLuaPaths)

# We do not support dok generation for now
MACRO(ADD_TORCH_DOK)
ENDMACRO(ADD_TORCH_DOK)
ENDIF()

# --- General

SET(WITH_QTLUA ON
Expand All @@ -11,9 +28,6 @@ SET(WITH_QTLUA_IDE ON
# --- Macros

IF (WITH_QTLUA)
SET(CMAKE_QTLUA_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake
CACHE INTERNAL "Path for QtLua cmake modules")
SET(CMAKE_MODULE_PATH ${CMAKE_QTLUA_MODULE_PATH} ${CMAKE_MODULE_PATH})
INCLUDE(MacroQt4AutoGen)
INCLUDE(MacroAddQtLuaModule)
INCLUDE(CheckCXXSourceCompiles)
Expand Down Expand Up @@ -41,33 +55,35 @@ IF (WITH_QTLUA)
INCLUDE_DIRECTORIES(${LUA_INCLUDE_DIR})
ENDIF(WITH_QTLUA)

# was lua compiled with c++?
IF (WITH_QTLUA AND NOT LUA_COMPILED_WITH_CXX)
SET(CMAKE_REQUIRED_DEFINITIONS ${LUA_DEFINITIONS})
SET(CMAKE_REQUIRED_INCLUDES ${LUA_INCLUDE_DIR})
SET(CMAKE_REQUIRED_LIBRARIES ${LUA_LIBRARIES})
CHECK_CXX_SOURCE_RUNS("
#include <stdlib.h>
#include \"lua.h\"
#include \"lauxlib.h\"
int result = 1;
int foo(lua_State *L) {
try { luaL_error(L,\"error\"); } catch(...) { result=0; throw; }
return 0; }
int main() { lua_State *L = luaL_newstate();
lua_pushcfunction(L, foo);
lua_pcall(L, 0, 0, 0); exit(result); }"
LUA_COMPILED_WITH_CXX)
SET(CMAKE_REQUIRED_DEFINITIONS)
SET(CMAKE_REQUIRED_INCLUDES)
SET(CMAKE_REQUIRED_LIBRARIES)
MESSAGE(STATUS "LUA_COMPILED_WITH_CXX=${LUA_COMPILED_WITH_CXX}")
IF (NOT "${LUA_COMPILED_WITH_CXX}" EQUAL "0")
MESSAGE(STATUS "Disabling QtLua (Lua not compiled with C++)")
SET(WITH_QTLUA FALSE)
ENDIF (NOT "${LUA_COMPILED_WITH_CXX}" EQUAL "0")
ENDIF(WITH_QTLUA AND NOT LUA_COMPILED_WITH_CXX)

# It is not easy to check this because we have the relative
# paths activated in general... so the program fails
# to execute given it is not at the install place
# # was lua compiled with c++?
# IF (WITH_QTLUA AND NOT LUA_COMPILED_WITH_CXX)
# SET(CMAKE_REQUIRED_DEFINITIONS ${LUA_DEFINITIONS})
# SET(CMAKE_REQUIRED_INCLUDES ${LUA_INCLUDE_DIR})
# SET(CMAKE_REQUIRED_LIBRARIES ${LUA_LIBRARIES})
# CHECK_CXX_SOURCE_RUNS("
# #include <stdlib.h>
# #include \"lua.h\"
# #include \"lauxlib.h\"
# int result = 1;
# int foo(lua_State *L) {
# try { luaL_error(L,\"error\"); } catch(...) { result=0; throw; }
# return 0; }
# int main() { lua_State *L = luaL_newstate();
# lua_pushcfunction(L, foo);
# lua_pcall(L, 0, 0, 0); exit(result); }"
# LUA_COMPILED_WITH_CXX)
# SET(CMAKE_REQUIRED_DEFINITIONS)
# SET(CMAKE_REQUIRED_INCLUDES)
# SET(CMAKE_REQUIRED_LIBRARIES)
# MESSAGE("HEYYY <${LUA_COMPILED_WITH_CXX}>")
# IF (NOT "${LUA_COMPILED_WITH_CXX}" EQUAL "0")
# MESSAGE(STATUS "Disabling QtLua (Lua not compiled with C++ exceptions support)")
# SET(WITH_QTLUA FALSE)
# ENDIF (NOT "${LUA_COMPILED_WITH_CXX}" EQUAL "0")
# ENDIF(WITH_QTLUA AND NOT LUA_COMPILED_WITH_CXX)


# --- compile libqtlua
Expand Down
58 changes: 58 additions & 0 deletions cmake/FindLua.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# - Find lua
# this module looks for Lua
#
# LUA_EXECUTABLE - the full path to lua
# LUA_LIBRARIES - the lua shared library
# LUA_INCLUDE_DIR - directory for lua includes
# LUA_PACKAGE_PATH - where Lua searches for Lua packages
# LUA_PACKAGE_CPATH - where Lua searches for library packages
# LUA_FOUND - If false, don't attempt to use lua.

FIND_PROGRAM(LUA_EXECUTABLE
lua
PATH)

IF(LUA_EXECUTABLE)
GET_FILENAME_COMPONENT(LUA_DIR ${LUA_EXECUTABLE} PATH)
ENDIF(LUA_EXECUTABLE)

FIND_LIBRARY(LUA_LIBRARIES
NAMES lua liblua
PATHS ${LUA_DIR}/../lib
${LUA_DIR}
NO_DEFAULT_PATH)

FIND_PATH(LUA_INCLUDE_DIR lua.h
${LUA_DIR}/../include/
NO_DEFAULT_PATH)

SET(LUA_PACKAGE_PATH "${LUA_DIR}/../share/lua/5.1" CACHE PATH "where Lua searches for Lua packages")
SET(LUA_PACKAGE_CPATH "${LUA_DIR}/../lib/lua/5.1" CACHE PATH "where Lua searches for library packages")

MARK_AS_ADVANCED(
LUA_EXECUTABLE
LUA_LIBRARIES
LUA_INCLUDE_DIR
LUA_PACKAGE_PATH
LUA_PACKAGE_CPATH
)

IF(LUA_EXECUTABLE)
IF(LUA_LIBRARIES)
IF(LUA_INCLUDE_DIR)
SET(LUA_FOUND 1)
ENDIF(LUA_INCLUDE_DIR)
ENDIF(LUA_LIBRARIES)
ENDIF(LUA_EXECUTABLE)

IF (NOT LUA_FOUND AND Lua_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Could not find Lua")
ENDIF (NOT LUA_FOUND AND Lua_FIND_REQUIRED)

IF(NOT Lua_FIND_QUIETLY)
IF(LUA_FOUND)
MESSAGE(STATUS "Lua found ${LUA_EXECUTABLE}")
ELSE(LUA_FOUND)
MESSAGE(STATUS "Lua not found. Please specify location")
ENDIF(LUA_FOUND)
ENDIF(NOT Lua_FIND_QUIETLY)
10 changes: 5 additions & 5 deletions cmake/InstallRequiredQtLibraries.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ FOREACH(module QT3SUPPORT QTOPENGL QTASSISTANT QTDESIGNER QTMOTIF QTNSPLUGIN
GET_FILENAME_COMPONENT(_libname "${_lib}" NAME_WE)
IF (EXISTS "${QT_BINARY_DIR}/${_libname}.dll")
# --- DEBUG MESSAGE
# MESSAGE("Will install ${Torch_INSTALL_BIN_SUBDIR}/${_libname}.dll")
# MESSAGE("Will install ${QtLua_INSTALL_BIN_SUBDIR}/${_libname}.dll")
INSTALL(PROGRAMS "${QT_BINARY_DIR}/${_libname}.dll"
DESTINATION "${Torch_INSTALL_BIN_SUBDIR}")
DESTINATION "${QtLua_INSTALL_BIN_SUBDIR}")
ENDIF (EXISTS "${QT_BINARY_DIR}/${_libname}.dll")
ENDFOREACH(_lib)
FOREACH(depend_module ${QT_${module}_MODULE_DEPENDS})
Expand All @@ -56,7 +56,7 @@ ENDFOREACH(module)
# Create qt.conf in torch binary directory
FILE(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf" "[Paths]")
INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
DESTINATION "${Torch_INSTALL_BIN_SUBDIR}")
DESTINATION "${QtLua_INSTALL_BIN_SUBDIR}")

# Install qt plugins
FOREACH(_pdir "codecs" "imageformats")
Expand All @@ -80,9 +80,9 @@ FOREACH(_pdir "codecs" "imageformats")
ENDIF ("${_debug}" STREQUAL "DEBUG" AND "${_dll}" STREQUAL "${_dll_d}")
IF (_inst)
# --- DEBUG MESSAGE
# MESSAGE("Will install ${Torch_INSTALL_BIN_SUBDIR}/plugins/${_pdir}/${_dll}.dll")
# MESSAGE("Will install ${QtLua_INSTALL_BIN_SUBDIR}/plugins/${_pdir}/${_dll}.dll")
INSTALL(PROGRAMS "${QT_PLUGINS_DIR}/${_pdir}/${_dll}.dll"
DESTINATION "${Torch_INSTALL_BIN_SUBDIR}/plugins/${_pdir}" )
DESTINATION "${QtLua_INSTALL_BIN_SUBDIR}/plugins/${_pdir}" )
ENDIF(_inst)
ENDFOREACH(_dll)
ENDIF (EXISTS "${QT_PLUGINS_DIR}/${_pdir}")
Expand Down
8 changes: 4 additions & 4 deletions cmake/MacroAddQtLuaModule.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,19 @@ MACRO(MACRO_ADD_QTLUA_MODULE modulename)

SET_TARGET_PROPERTIES("${modulename}" PROPERTIES
PREFIX ""
INSTALL_NAME_DIR "@executable_path/${Torch_INSTALL_BIN2CPATH}")
INSTALL_NAME_DIR "@executable_path/${QtLua_INSTALL_BIN2CPATH}")


INSTALL(TARGETS "${modulename}"
RUNTIME DESTINATION ${Torch_INSTALL_LUA_CPATH_SUBDIR}
LIBRARY DESTINATION ${Torch_INSTALL_LUA_CPATH_SUBDIR})
RUNTIME DESTINATION ${QtLua_INSTALL_LUA_CPATH_SUBDIR}
LIBRARY DESTINATION ${QtLua_INSTALL_LUA_CPATH_SUBDIR})

ENDMACRO(MACRO_ADD_QTLUA_MODULE modulename)


MACRO(MACRO_INSTALL_QTLUA_FILES modulename)
INSTALL(FILES ${ARGN}
DESTINATION "${Torch_INSTALL_LUA_PATH_SUBDIR}/${modulename}")
DESTINATION "${QtLua_INSTALL_LUA_PATH_SUBDIR}/${modulename}")
ENDMACRO(MACRO_INSTALL_QTLUA_FILES modulename)


63 changes: 63 additions & 0 deletions cmake/QtLuaPaths.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
SET(QtLua_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})

SET(QtLua_INSTALL_BIN_SUBDIR "bin" CACHE PATH
"Install dir for binaries (relative to QtLua_INSTALL_PREFIX)")

SET(QtLua_INSTALL_LIB_SUBDIR "lib" CACHE PATH
"Install dir for archives (relative to QtLua_INSTALL_PREFIX)")

SET(QtLua_INSTALL_INCLUDE_SUBDIR "include" CACHE PATH
"Install dir for include (relative to QtLua_INSTALL_PREFIX)")

SET(QtLua_INSTALL_CMAKE_SUBDIR "share/lua/cmake" CACHE PATH
"Install dir for .cmake files (relative to QtLua_INSTALL_PREFIX)")

SET(QtLua_INSTALL_LUA_PATH_SUBDIR "share/lua/5.1" CACHE PATH
"Install dir for QtLua packages files (relative to QtLua_INSTALL_PREFIX)")

SET(QtLua_INSTALL_LUA_CPATH_SUBDIR "lib/lua/5.1" CACHE PATH
"Install dir for QtLua C packages files (relative to QtLua_INSTALL_PREFIX)")

SET(QtLua_INSTALL_FINDLUA_DIR "${QtLua_BINARY_DIR}/cmake")
SET(QtLua_INSTALL_BIN "${QtLua_INSTALL_PREFIX}/${QtLua_INSTALL_BIN_SUBDIR}")
SET(QtLua_INSTALL_LIB "${QtLua_INSTALL_PREFIX}/${QtLua_INSTALL_LIB_SUBDIR}")
SET(QtLua_INSTALL_INCLUDE "${QtLua_INSTALL_PREFIX}/${QtLua_INSTALL_INCLUDE_SUBDIR}")
SET(QtLua_INSTALL_CMAKE "${QtLua_INSTALL_PREFIX}/${QtLua_INSTALL_CMAKE_SUBDIR}")
SET(QtLua_INSTALL_LUA_PATH "${QtLua_INSTALL_PREFIX}/${QtLua_INSTALL_LUA_PATH_SUBDIR}")
SET(QtLua_INSTALL_LUA_CPATH "${QtLua_INSTALL_PREFIX}/${QtLua_INSTALL_LUA_CPATH_SUBDIR}")

# reverse relative path to prefix (ridbus is the palindrom of subdir)
FILE(RELATIVE_PATH QtLua_INSTALL_BIN_RIDBUS "${QtLua_INSTALL_BIN}" "${QtLua_INSTALL_PREFIX}/.")
FILE(RELATIVE_PATH QtLua_INSTALL_CMAKE_RIDBUS "${QtLua_INSTALL_CMAKE}" "${QtLua_INSTALL_PREFIX}/.")
GET_FILENAME_COMPONENT(QtLua_INSTALL_BIN_RIDBUS "${QtLua_INSTALL_BIN_RIDBUS}" PATH)
GET_FILENAME_COMPONENT(QtLua_INSTALL_CMAKE_RIDBUS "${QtLua_INSTALL_CMAKE_RIDBUS}" PATH)

IF(UNIX)
OPTION(QtLua_BUILD_WITH_RPATH "Build libraries with rpaths" ON)

IF(QtLua_BUILD_WITH_RPATH)
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
FILE(RELATIVE_PATH QtLua_INSTALL_BIN2LIB
"${QtLua_INSTALL_BIN}" "${QtLua_INSTALL_LIB}")
FILE(RELATIVE_PATH QtLua_INSTALL_BIN2CPATH
"${QtLua_INSTALL_BIN}" "${QtLua_INSTALL_LUA_CPATH}")
IF(NOT APPLE)
OPTION(WITH_DYNAMIC_RPATH
"Build libraries with executable relative rpaths (\$ORIGIN)" ON )
ENDIF(NOT APPLE)
IF (WITH_DYNAMIC_RPATH OR APPLE)
SET(CMAKE_INSTALL_RPATH "\$ORIGIN/${QtLua_INSTALL_BIN2LIB}")
ELSE (WITH_DYNAMIC_RPATH OR APPLE)
SET(CMAKE_INSTALL_RPATH "${QtLua_INSTALL_LIB}")
ENDIF (WITH_DYNAMIC_RPATH OR APPLE)
SET(CMAKE_INSTALL_NAME_DIR "@executable_path/${QtLua_INSTALL_BIN2LIB}")
ENDIF(QtLua_BUILD_WITH_RPATH)

ENDIF(UNIX)

IF (WIN32)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
ENDIF (WIN32)
28 changes: 16 additions & 12 deletions packages/qttorch/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
# -*- cmake -*-

INCLUDE_DIRECTORIES("${Torch_SOURCE_DIR}/lib/TH")
INCLUDE_DIRECTORIES("${Torch_SOURCE_DIR}/lib/luaT")
INCLUDE_DIRECTORIES(".")
INCLUDE(${QT_USE_FILE})
IF(Torch_SOURCE_DIR)

SET(qttorch_SRC qttorch.h qttorch.cpp)
INCLUDE_DIRECTORIES("${Torch_SOURCE_DIR}/lib/TH")
INCLUDE_DIRECTORIES("${Torch_SOURCE_DIR}/lib/luaT")
INCLUDE_DIRECTORIES(".")
INCLUDE(${QT_USE_FILE})

SET(qttorch_SRC qttorch.h qttorch.cpp)

MACRO_INSTALL_QTLUA_FILES(qttorch init.lua)

MACRO_ADD_QTLUA_MODULE(libqttorch ${qttorch_SRC})

TARGET_LINK_LIBRARIES(libqttorch luaT TH)

ADD_TORCH_DOK(dok qttorch "QT Interface" "Torch Tensor interface" 6.)

MACRO_INSTALL_QTLUA_FILES(qttorch init.lua)

MACRO_ADD_QTLUA_MODULE(libqttorch ${qttorch_SRC})

TARGET_LINK_LIBRARIES(libqttorch luaT TH)

ADD_TORCH_DOK(dok qttorch "QT Interface" "Torch Tensor interface" 6.)
ENDIF(Torch_SOURCE_DIR)
26 changes: 13 additions & 13 deletions qlua/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ TARGET_LINK_LIBRARIES(libqlua
SET(QLUA_LIBRARIES "libqlua")
SET(QLUA_DEFINITIONS)
CONFIGURE_FILE(QLuaConfig.cmake.in
"${Torch_BINARY_DIR}/cmake/QLuaConfig.cmake")
SET(QLua_DIR "${Torch_BINARY_DIR}/cmake" CACHE PATH
"${QtLua_INSTALL_FINDLUA_DIR}/QLuaConfig.cmake")
SET(QLua_DIR "${QtLua_INSTALL_FINDLUA_DIR}" CACHE PATH
"Directory containing QLuaConfig.cmake")
MARK_AS_ADVANCED(QLua_DIR)

Expand Down Expand Up @@ -132,15 +132,15 @@ ENDIF(APPLE)


INSTALL(TARGETS libqlua qlua
RUNTIME DESTINATION ${Torch_INSTALL_BIN_SUBDIR}
LIBRARY DESTINATION ${Torch_INSTALL_LIB_SUBDIR}
ARCHIVE DESTINATION ${Torch_INSTALL_LIB_SUBDIR} )
RUNTIME DESTINATION ${QtLua_INSTALL_BIN_SUBDIR}
LIBRARY DESTINATION ${QtLua_INSTALL_LIB_SUBDIR}
ARCHIVE DESTINATION ${QtLua_INSTALL_LIB_SUBDIR} )

IF (WITH_QTLUA_IDE AND WIN32)
INSTALL(TARGETS winqlua
RUNTIME DESTINATION ${Torch_INSTALL_BIN_SUBDIR}
LIBRARY DESTINATION ${Torch_INSTALL_LIB_SUBDIR}
ARCHIVE DESTINATION ${Torch_INSTALL_LIB_SUBDIR} )
RUNTIME DESTINATION ${QtLua_INSTALL_BIN_SUBDIR}
LIBRARY DESTINATION ${QtLua_INSTALL_LIB_SUBDIR}
ARCHIVE DESTINATION ${QtLua_INSTALL_LIB_SUBDIR} )
ENDIF(WITH_QTLUA_IDE AND WIN32)

IF (WITH_QTLUA_IDE AND APPLE)
Expand All @@ -149,19 +149,19 @@ IF (WITH_QTLUA_IDE AND APPLE)
IF(GENERATE_MACQLUA_BUNDLE)
CONFIGURE_FILE("qlua.plist.in" "${CMAKE_CURRENT_BINARY_DIR}/Info.plist")
INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/Info.plist"
DESTINATION "${Torch_INSTALL_PREFIX}"
DESTINATION "${QtLua_INSTALL_PREFIX}"
PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ)
INSTALL(TARGETS macqlua
RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/MacOS" )
INSTALL(FILES
"${CMAKE_CURRENT_SOURCE_DIR}/images/torch.icns"
"${CMAKE_CURRENT_SOURCE_DIR}/images/luadoc.icns"
DESTINATION "${Torch_INSTALL_PREFIX}/Resources"
DESTINATION "${QtLua_INSTALL_PREFIX}/Resources"
PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ)
ENDIF(GENERATE_MACQLUA_BUNDLE)
INSTALL(TARGETS macqlua
RUNTIME DESTINATION ${Torch_INSTALL_BIN_SUBDIR}
LIBRARY DESTINATION ${Torch_INSTALL_LIB_SUBDIR}
ARCHIVE DESTINATION ${Torch_INSTALL_LIB_SUBDIR} )
RUNTIME DESTINATION ${QtLua_INSTALL_BIN_SUBDIR}
LIBRARY DESTINATION ${QtLua_INSTALL_LIB_SUBDIR}
ARCHIVE DESTINATION ${QtLua_INSTALL_LIB_SUBDIR} )
ENDIF(WITH_QTLUA_IDE AND APPLE)

Loading

0 comments on commit 4b1adce

Please sign in to comment.