Add sqlite3 backend hack for android
[oweals/minetest.git] / src / CMakeLists.txt
index f0b98f44bd8d356736493b23c125b3a5fc433f6e..de1ea2c28eaf0e0936df1127f62649eae4b5cd3c 100644 (file)
@@ -1,6 +1,8 @@
 project(minetest)
 cmake_minimum_required( VERSION 2.6 )
 
+INCLUDE(CheckCSourceRuns)
+
 # Set some random things default to not being visible in the GUI
 mark_as_advanced(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
 mark_as_advanced(SQLITE3_INCLUDE_DIR SQLITE3_LIBRARY)
@@ -131,8 +133,6 @@ if(WIN32)
                set(FREETYPE_LIBRARY "${PROJECT_SOURCE_DIR}/../../freetype2/objs/win32/vc2005/freetype247.lib"
                                CACHE FILEPATH "Path to freetype247.lib")
        endif(USE_FREETYPE)
-       set(MINGWM10_DLL ""
-                       CACHE FILEPATH "Path to mingwm10.dll (for installation)")
        if(ENABLE_SOUND)
                set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)")
                set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)")
@@ -160,7 +160,12 @@ else()
                endif(APPLE)
        endif(BUILD_CLIENT)
        find_package(ZLIB REQUIRED)
-       set(PLATFORM_LIBS -lpthread -lrt ${CMAKE_DL_LIBS})
+       set(PLATFORM_LIBS -lpthread ${CMAKE_DL_LIBS})
+       if(APPLE)
+               set(PLATFORM_LIBS "-framework CoreFoundation" ${PLATFORM_LIBS})
+       else()
+               set(PLATFORM_LIBS -lrt ${PLATFORM_LIBS})
+       endif(APPLE)
        #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
        # This way Xxf86vm is found on OpenBSD too
        find_library(XXF86VM_LIBRARY Xxf86vm)
@@ -198,25 +203,74 @@ if(USE_FREETYPE)
        set(CGUITTFONT_LIBRARY cguittfont)
 endif(USE_FREETYPE)
 
-
-find_library(LUA_LIBRARY luajit
-               NAMES luajit-5.1)
-find_path(LUA_INCLUDE_DIR luajit.h
-       NAMES luajit.h
-       PATH_SUFFIXES luajit-2.0)
-message (STATUS "LuaJIT library: ${LUA_LIBRARY}")
-message (STATUS "LuaJIT headers: ${LUA_INCLUDE_DIR}")
+if (NOT DISABLE_LUAJIT)
+       find_library(LUA_LIBRARY luajit
+                       NAMES luajit-5.1)
+       find_path(LUA_INCLUDE_DIR luajit.h
+               NAMES luajit.h
+               PATH_SUFFIXES luajit-2.0)
+       message (STATUS "LuaJIT library: ${LUA_LIBRARY}")
+       message (STATUS "LuaJIT headers: ${LUA_INCLUDE_DIR}")
+else (NOT ${DISABLE_LUAJIT} MATCHES "1")
+       message (STATUS "LuaJIT detection disabled! (DISABLE_LUAJIT=1)")
+       set(LUA_LIBRARY "")
+       set(LUA_INCLUDE_DIR "")
+endif (NOT DISABLE_LUAJIT)
 
 set(USE_LUAJIT 0)
 if(LUA_LIBRARY AND LUA_INCLUDE_DIR)
-       message (STATUS "LuaJIT found.")
-       set(USE_LUAJIT 1)
-else(LUA_LIBRARY AND LUA_INCLUDE_DIR)
+       message (STATUS "LuaJIT found, checking for broken versions...")
+       if(CMAKE_CROSSCOMPILING)
+               message(WARNING "Cross-compiling enabled, assuming LuaJIT is not broken")
+               set(VALID_LUAJIT_VERSION 1)
+       else(CMAKE_CROSSCOMPILING)
+               set(BACKUP_REQUIRED_INCS CMAKE_REQUIRED_INCLUDES)
+               set(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES} ${LUA_INCLUDE_DIR}")
+               CHECK_C_SOURCE_RUNS("
+                       #include <luajit.h>
+                       #include <stdio.h>
+                       #include <string.h>
+
+                       #define ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0]))
+
+                       static char *broken_luajit_versions[] = {
+                                       \"LuaJIT 2.0.0-beta7\",
+                                       \"LuaJIT 2.0.0-beta6\",
+                                       \"LuaJIT 2.0.0-beta5\",
+                                       \"LuaJIT 2.0.0-beta4\",
+                                       \"LuaJIT 2.0.0-beta3\",
+                                       \"LuaJIT 2.0.0-beta2\",
+                                       \"LuaJIT 2.0.0-beta1\"
+                       };
+
+                       int main(int argc, char *argv[]) {
+                               unsigned int i;
+                               for (i = 0; i < ARRAYSIZE(broken_luajit_versions); i++) {
+                                       if (strcmp(LUAJIT_VERSION, broken_luajit_versions[i]) == 0) {
+                                               return 1;
+                                       }
+                               }
+                               return 0;
+                       }
+                       "
+                       VALID_LUAJIT_VERSION)
+               set(CMAKE_REQUIRED_INCLUDES BACKUP_REQUIRED_INCS)
+       endif(CMAKE_CROSSCOMPILING)
+       if (VALID_LUAJIT_VERSION)
+               message (STATUS "LuaJIT version ok")
+               set(USE_LUAJIT 1)
+       else (VALID_LUAJIT_VERSION)
+               message (STATUS "LuaJIT versions till 2.0.0beta7 known to be broken, update to at least beta8")
+               set(USE_LUAJIT 0)
+       endif (VALID_LUAJIT_VERSION)
+endif (LUA_LIBRARY AND LUA_INCLUDE_DIR)
+
+if(NOT USE_LUAJIT)
        message (STATUS "LuaJIT not found, using bundled Lua.")
        set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
        set(LUA_LIBRARY "lua")
        add_subdirectory(lua)
-endif(LUA_LIBRARY AND LUA_INCLUDE_DIR)
+endif(NOT USE_LUAJIT)
 
 mark_as_advanced(LUA_LIBRARY)
 mark_as_advanced(LUA_INCLUDE_DIR)
@@ -240,6 +294,25 @@ if(ENABLE_LEVELDB)
        endif(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR)
 endif(ENABLE_LEVELDB)
 
+set(USE_REDIS 0)
+
+OPTION(ENABLE_REDIS "Enable redis backend" 1)
+
+if(ENABLE_REDIS)
+       find_library(REDIS_LIBRARY hiredis)
+       find_path(REDIS_INCLUDE_DIR hiredis.h PATH_SUFFIXES hiredis)
+       message(STATUS "redis library: ${REDIS_LIBRARY}")
+       message(STATUS "redis headers: ${REDIS_INCLUDE_DIR}")
+       if(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
+               set(USE_REDIS 1)
+               message(STATUS "redis backend enabled")
+               include_directories(${REDIS_INCLUDE_DIR})
+       else(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
+               set(USE_REDIS 0)
+               message(STATUS "redis not found!")
+       endif(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
+endif(ENABLE_REDIS)
+
 configure_file(
        "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
        "${PROJECT_BINARY_DIR}/cmake_config.h"
@@ -282,9 +355,7 @@ set(common_SRCS
        mapgen.cpp
        mapgen_v6.cpp
        mapgen_v7.cpp
-       mapgen_indev.cpp
        mapgen_singlenode.cpp
-       mapgen_math.cpp
        treegen.cpp
        dungeongen.cpp
        cavegen.cpp
@@ -308,6 +379,7 @@ set(common_SRCS
        connection.cpp
        environment.cpp
        server.cpp
+       clientiface.cpp
        socket.cpp
        mapblock.cpp
        mapsector.cpp
@@ -316,6 +388,7 @@ set(common_SRCS
        database-dummy.cpp
        database-leveldb.cpp
        database-sqlite3.cpp
+       database-redis.cpp
        player.cpp
        test.cpp
        sha1.cpp
@@ -333,7 +406,7 @@ set(common_SRCS
        ${UTIL_SRCS}
 )
 
-# This gives us the icon
+# This gives us the icon and file version information
 if(WIN32)
        set(WINRESOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../misc/winresource.rc)
        if(MINGW)
@@ -341,10 +414,11 @@ if(WIN32)
                        set(CMAKE_RC_COMPILER "windres.exe")
                endif()
                ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
-                       COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR}
+                       COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR} -I${CMAKE_CURRENT_BINARY_DIR}
                        -i${WINRESOURCE_FILE}
                        -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
-                       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+                       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+                       DEPENDS ${WINRESOURCE_FILE})
                SET(common_SRCS ${common_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
        else(MINGW) # Probably MSVC
                set(common_SRCS ${common_SRCS} ${WINRESOURCE_FILE})
@@ -371,14 +445,10 @@ set(minetest_SRCS
        chat.cpp
        hud.cpp
        guiKeyChangeMenu.cpp
-       guiMessageMenu.cpp
-       guiTextInputMenu.cpp
        guiFormSpecMenu.cpp
        guiTable.cpp
-       guiPauseMenu.cpp
        guiPasswordChange.cpp
        guiVolumeChange.cpp
-       guiDeathScreen.cpp
        guiChatConsole.cpp
        client.cpp
        clientmedia.cpp
@@ -390,16 +460,9 @@ set(minetest_SRCS
        guiEngine.cpp
        guiFileSelectMenu.cpp
        convert_json.cpp
+       drawscene.cpp
        ${minetest_SCRIPT_SRCS}
 )
-
-if(USE_FREETYPE)
-       set(minetest_SRCS
-               ${minetest_SRCS}
-               intlGUIEditBox.cpp
-       )
-endif(USE_FREETYPE)
-
 list(SORT minetest_SRCS)
 
 # Server sources
@@ -442,7 +505,7 @@ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
 if(BUILD_CLIENT)
        add_executable(${PROJECT_NAME} ${minetest_SRCS})
        add_dependencies(${PROJECT_NAME} GenerateVersion)
-       target_link_libraries(
+       set(minetest_LIBS
                ${PROJECT_NAME}
                ${ZLIB_LIBRARIES}
                ${IRRLICHT_LIBRARY}
@@ -460,6 +523,16 @@ if(BUILD_CLIENT)
                ${PLATFORM_LIBS}
                ${CLIENT_PLATFORM_LIBS}
        )
+       if(APPLE)
+               target_link_libraries(
+                       ${minetest_LIBS}
+                       ${ICONV_LIBRARY}
+               )
+       else()
+               target_link_libraries(
+                       ${minetest_LIBS}
+               )
+       endif()
        if(USE_CURL)
                target_link_libraries(
                        ${PROJECT_NAME}
@@ -482,6 +555,9 @@ if(BUILD_CLIENT)
        if (USE_LEVELDB)
                target_link_libraries(${PROJECT_NAME} ${LEVELDB_LIBRARY})
        endif(USE_LEVELDB)
+       if (USE_REDIS)
+               target_link_libraries(${PROJECT_NAME} ${REDIS_LIBRARY})
+       endif(USE_REDIS)
 endif(BUILD_CLIENT)
 
 if(BUILD_SERVER)
@@ -499,6 +575,9 @@ if(BUILD_SERVER)
        if (USE_LEVELDB)
                target_link_libraries(${PROJECT_NAME}server ${LEVELDB_LIBRARY})
        endif(USE_LEVELDB)
+       if (USE_REDIS)
+               target_link_libraries(${PROJECT_NAME}server ${REDIS_LIBRARY})
+       endif(USE_REDIS)
        if(USE_CURL)
                target_link_libraries(
                        ${PROJECT_NAME}server
@@ -537,7 +616,9 @@ if(MSVC)
 
 else()
        # Probably GCC
-
+       if(APPLE)
+               SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000" )
+       endif()
        if(WARN_ALL)
                set(RELEASE_WARNING_FLAGS "-Wall")
        else()
@@ -555,12 +636,12 @@ else()
                set(OTHER_FLAGS "-mthreads -fexceptions")
        endif()
 
+       set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -ffast-math -Wall -pipe -funroll-loops")
        if(APPLE)
-               set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
-               set(ARCH i386)
-       endif()
-
-       set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
+               set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os")
+       else()
+               set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -fomit-frame-pointer")
+       endif(APPLE)
        set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
 
        if(USE_GPROF)
@@ -581,12 +662,6 @@ endif()
 # Installation
 #
 if(WIN32)
-       if(MINGWM10_DLL)
-               install(FILES ${MINGWM10_DLL} DESTINATION ${BINDIR})
-       endif()
-       if(DEFINED ZLIB_DLL)
-               install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
-       endif()
        if(USE_SOUND)
                if(OPENAL_DLL)
                        install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR})
@@ -604,6 +679,18 @@ if(WIN32)
        if(CURL_DLL)
                install(FILES ${CURL_DLL} DESTINATION ${BINDIR})
        endif()
+       if(ZLIB_DLL)
+               install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
+       endif()
+       if(ZLIBWAPI_DLL)
+               install(FILES ${ZLIBWAPI_DLL} DESTINATION ${BINDIR})
+       endif()
+       if(FREETYPE_DLL)
+               install(FILES ${FREETYPE_DLL} DESTINATION ${BINDIR})
+       endif()
+       if(LEVELDB_DLL)
+               install(FILES ${LEVELDB_DLL} DESTINATION ${BINDIR})
+       endif()
 endif()
 
 if(BUILD_CLIENT)