From d9f67edb7d0664f7527c9f08a847b5314c3b7e81 Mon Sep 17 00:00:00 2001 From: "Robert G. Jakabosky" Date: Sun, 4 Sep 2011 07:03:35 -0700 Subject: [PATCH] Improve CMake build script. --- CMakeLists.txt | 13 +++++++-- cmake/CustomMacros.cmake | 61 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 cmake/CustomMacros.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 502ab89..1d0ed89 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,8 @@ set(BUILD_SHARED_LIBS TRUE) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) -set(INSTALL_CMOD share/lua/cmod CACHE PATH "Directory to install Lua binary modules (configure lua via LUA_CPATH)") +set(INSTALL_CMOD ${CMAKE_INSTALL_PREFIX}/lib/lua/5.1 CACHE PATH + "Directory to install Lua binary modules (configure lua via LUA_CPATH)") set(LUA_NATIVE_OBJECTS_PATH ../LuaNativeObjects CACHE PATH "Directory to LuaNativeObjects bindings generator.") set(USE_PRE_GENERATED_BINDINGS TRUE CACHE BOOL @@ -24,12 +25,17 @@ include(FindLua51) if(NOT ${LUA51_FOUND}) message(FATAL_ERROR "The FindLua51 module could not find lua :-(") endif() -set(COMMON_LIBS "${COMMON_LIBS};${LUA_LIBRARIES}") +## MAC OSX needs extra linker flags +if(APPLE) + set(COMMON_LDFLAGS "${COMMON_LDFLAGS} -undefined dynamic_lookup") +endif() ## find threads set(CMAKE_THREAD_PREFER_PTHREAD TRUE) include(FindThreads) +include(CustomMacros) + ## LuaNativeObjects include(LuaNativeObjects) @@ -52,7 +58,8 @@ endif() add_library(lua-llthreads MODULE ${LUA_LLTHREADS_SRC}) target_link_libraries(lua-llthreads ${COMMON_LIBS} ${CMAKE_THREAD_LIBS_INIT}) set_target_properties(lua-llthreads PROPERTIES PREFIX "") -set_target_properties(lua-llthreads PROPERTIES COMPILE_FLAGS "${COMMON_CFLAGS}") +add_target_properties(lua-llthreads COMPILE_FLAGS "${COMMON_CFLAGS}") +add_target_properties(lua-llthreads LINK_FLAGS "${LD_FLAGS} ${COMMON_LDFLAGS}") set_target_properties(lua-llthreads PROPERTIES OUTPUT_NAME llthreads) install(TARGETS lua-llthreads diff --git a/cmake/CustomMacros.cmake b/cmake/CustomMacros.cmake new file mode 100644 index 0000000..312eeff --- /dev/null +++ b/cmake/CustomMacros.cmake @@ -0,0 +1,61 @@ +## Orignal Macros copied from lighttpd 2.0 + +## modules are without the "lib" prefix + +macro(setup_static_modules TARGET) + file(WRITE ${TARGET}_builtins.h "/* auto-generated by CMake build do not edit */\n\n") +endmacro(setup_static_modules) + +macro(add_module TARGET MODNAME) + set(_static_mod ${BUILD_STATIC}) + + ## create list of module source files. + set(_srcfiles) + set(_def_module_src ${CMAKE_CURRENT_SOURCE_DIR}/modules/${MODNAME}.c) + if(EXISTS ${_def_module_src}) + set(_srcfiles ${_def_module_src}) + endif(EXISTS ${_def_module_src}) + foreach(_srcfile ${ARGN}) + if(_srcfile STREQUAL "STATIC") + set(_static_mod TRUE) + else(_srcfile STREQUAL "STATIC") + set(_srcfiles ${_srcfiles} ${_srcfile}) + endif(_srcfile STREQUAL "STATIC") + endforeach(_srcfile) + + if(_static_mod) + set(STATIC_MODULE_SRC ${STATIC_MODULE_SRC} ${_srcfiles}) + file(APPEND ${TARGET}_builtins.h "STATIC_MOD(${MODNAME})\n") + else(_static_mod) + add_library(${MODNAME} MODULE ${_srcfiles}) + set(MODULE_TARGETS ${MODULE_TARGETS} ${MODNAME}) + + add_target_properties(${MODNAME} LINK_FLAGS ${COMMON_LDFLAGS}) + add_target_properties(${MODNAME} COMPILE_FLAGS ${COMMON_CFLAGS}) + set_target_properties(${MODNAME} PROPERTIES CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) + + ## Windows likes to link it this way back to app! + if(WIN32) + set_target_properties(${MODNAME} PROPERTIES LINK_FLAGS ${TARGET}.lib) + endif(WIN32) + + if(APPLE) + set_target_properties(${MODNAME} PROPERTIES LINK_FLAGS "-flat_namespace -undefined suppress") + endif(APPLE) + endif(_static_mod) +endmacro(add_module) + +macro(add_target_properties _target _name) + set(_properties) + foreach(_prop ${ARGN}) + set(_properties "${_properties} ${_prop}") + endforeach(_prop) + get_target_property(_old_properties ${_target} ${_name}) + ##message(STATUS "adding property to ${_target} ${_name}:" ${_properties}) + if(NOT _old_properties) + # in case it's NOTFOUND + set(_old_properties) + endif(NOT _old_properties) + set_target_properties(${_target} PROPERTIES ${_name} "${_old_properties} ${_properties}") +endmacro(add_target_properties) +