]> git.lizzy.rs Git - minetest.git/blobdiff - src/CMakeLists.txt
Small fixes of minetest.has_feature
[minetest.git] / src / CMakeLists.txt
index a1c2d013c2f0ffa9de4e4980b7eda88ce4f3bc5b..32e25c3bd00639bb7043724d26ecbf4c55355942 100644 (file)
@@ -1,7 +1,6 @@
 cmake_minimum_required(VERSION 2.6)
 
-project(Minetest)
-string(TOLOWER ${PROJECT_NAME} PROJECT_NAME_LOWER)
+project(minetest)
 
 INCLUDE(CheckIncludeFiles)
 
@@ -28,6 +27,12 @@ set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
 mark_as_advanced(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
 
 
+if(NOT (BUILD_CLIENT OR BUILD_SERVER))
+       message(WARNING "Neither BUILD_CLIENT nor BUILD_SERVER is set! Setting BUILD_SERVER=true")
+       set(BUILD_SERVER TRUE)
+endif()
+
+
 option(ENABLE_CURL "Enable cURL support for fetching media" TRUE)
 set(USE_CURL FALSE)
 
@@ -41,6 +46,15 @@ else()
        mark_as_advanced(CLEAR CURL_LIBRARY CURL_INCLUDE_DIR)
 endif()
 
+if(NOT USE_CURL)
+       if(BUILD_CLIENT)
+               message(WARNING "cURL is required to load the server list")
+       endif()
+       if(BUILD_SERVER)
+               message(WARNING "cURL is required to announce to the server list")
+       endif()
+endif()
+
 
 option(ENABLE_GETTEXT "Use GetText for internationalization" FALSE)
 set(USE_GETTEXT FALSE)
@@ -111,23 +125,30 @@ option(ENABLE_FREETYPE "Enable FreeType2 (TrueType fonts and basic unicode suppo
 set(USE_FREETYPE FALSE)
 
 if(ENABLE_FREETYPE)
-       if(UNIX)
-               include(FindPkgConfig)
-               if(PKG_CONFIG_FOUND)
-                       pkg_check_modules(FREETYPE QUIET freetype2)
-                       if(FREETYPE_FOUND)
-                               SET(FREETYPE_PKGCONFIG_FOUND TRUE)
-                               SET(FREETYPE_LIBRARY ${FREETYPE_LIBRARIES})
-                               # Because CMake is idiotic
-                               string(REPLACE ";" " " FREETYPE_CFLAGS_STR ${FREETYPE_CFLAGS})
-                               string(REPLACE ";" " " FREETYPE_LDFLAGS_STR ${FREETYPE_LDFLAGS})
-                       endif(FREETYPE_FOUND)
-               endif(PKG_CONFIG_FOUND)
-       endif(UNIX)
-       if(NOT FREETYPE_FOUND)
-               find_package(Freetype)
-       endif()
+##
+## Note: FindFreetype.cmake seems to have been fixed in recent versions of
+## CMake. If issues persist, re-enable this workaround specificially for the
+## failing platforms.
+##
+#      if(UNIX)
+#              include(FindPkgConfig)
+#              if(PKG_CONFIG_FOUND)
+#                      pkg_check_modules(FREETYPE QUIET freetype2)
+#                      if(FREETYPE_FOUND)
+#                              SET(FREETYPE_PKGCONFIG_FOUND TRUE)
+#                              SET(FREETYPE_LIBRARY ${FREETYPE_LIBRARIES})
+#                              # Because CMake is idiotic
+#                              string(REPLACE ";" " " FREETYPE_CFLAGS_STR ${FREETYPE_CFLAGS})
+#                              string(REPLACE ";" " " FREETYPE_LDFLAGS_STR ${FREETYPE_LDFLAGS})
+#                      endif(FREETYPE_FOUND)
+#              endif(PKG_CONFIG_FOUND)
+#      endif(UNIX)
+#      if(NOT FREETYPE_FOUND)
+#              find_package(Freetype)
+#      endif()
+       find_package(Freetype)
        if(FREETYPE_FOUND)
+               message(STATUS "Freetype enabled.")
                set(USE_FREETYPE TRUE)
                set(CGUITTFONT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cguittfont")
                set(CGUITTFONT_LIBRARY cguittfont)
@@ -137,6 +158,7 @@ endif(ENABLE_FREETYPE)
 
 find_package(Lua REQUIRED)
 
+find_package(GMP REQUIRED)
 
 option(ENABLE_LEVELDB "Enable LevelDB backend" TRUE)
 set(USE_LEVELDB FALSE)
@@ -173,6 +195,21 @@ endif(ENABLE_REDIS)
 find_package(SQLite3 REQUIRED)
 find_package(Json REQUIRED)
 
+OPTION(ENABLE_SPATIAL "Enable SpatialIndex AreaStore backend" TRUE)
+set(USE_SPATIAL FALSE)
+
+if(ENABLE_SPATIAL)
+       find_library(SPATIAL_LIBRARY spatialindex)
+       find_path(SPATIAL_INCLUDE_DIR spatialindex/SpatialIndex.h)
+       if(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR)
+               set(USE_SPATIAL TRUE)
+               message(STATUS "SpatialIndex AreaStore backend enabled.")
+               include_directories(${SPATIAL_INCLUDE_DIR})
+       else(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR)
+               message(STATUS "SpatialIndex not found!")
+       endif(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR)
+endif(ENABLE_SPATIAL)
+
 
 if(NOT MSVC)
        set(USE_GPROF FALSE CACHE BOOL "Use -pg flag for g++")
@@ -188,8 +225,10 @@ if(WIN32)
                # Surpress some useless warnings
                add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
        else() # Probably MinGW = GCC
-               set(PLATFORM_LIBS ws2_32.lib)
+               set(PLATFORM_LIBS "")
        endif()
+       set(PLATFORM_LIBS ws2_32.lib shlwapi.lib ${PLATFORM_LIBS})
+
        # Zlib stuff
        set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
                        CACHE PATH "Zlib include directory")
@@ -240,11 +279,18 @@ else()
        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)
        mark_as_advanced(XXF86VM_LIBRARY)
        set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
+
+       # Prefer local iconv if installed
+       find_library(ICONV_LIBRARY iconv)
+       mark_as_advanced(ICONV_LIBRARY)
+       if (ICONV_LIBRARY)
+               set(PLATFORM_LIBS ${PLATFORM_LIBS} ${ICONV_LIBRARY})
+       endif()
 endif()
 
 check_include_files(endian.h HAVE_ENDIAN_H)
@@ -261,22 +307,19 @@ add_custom_target(GenerateVersion
        -D "GENERATE_VERSION_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}"
        -D "GENERATE_VERSION_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}"
        -D "VERSION_STRING=${VERSION_STRING}"
-       -D "VERSION_EXTRA=${VERSION_EXTRA}"
+       -D "DEVELOPMENT_BUILD=${DEVELOPMENT_BUILD}"
        -P "${CMAKE_SOURCE_DIR}/cmake/Modules/GenerateVersion.cmake"
        WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
 
 
-add_subdirectory(jthread)
+add_subdirectory(threading)
 add_subdirectory(network)
 add_subdirectory(script)
+add_subdirectory(unittest)
 add_subdirectory(util)
 
-
-set (unittests_SRCS
-       test.cpp
-)
-
 set(common_SRCS
+       areastore.cpp
        ban.cpp
        cavegen.cpp
        clientiface.cpp
@@ -325,10 +368,12 @@ set(common_SRCS
        nodemetadata.cpp
        nodetimer.cpp
        noise.cpp
+       objdef.cpp
        object_properties.cpp
        pathfinder.cpp
        player.cpp
        porting.cpp
+       profiler.cpp
        quicktune.cpp
        rollback.cpp
        rollback_interface.cpp
@@ -350,7 +395,7 @@ set(common_SRCS
        ${JTHREAD_SRCS}
        ${common_SCRIPT_SRCS}
        ${UTIL_SRCS}
-       ${unittests_SRCS}
+       ${UNITTEST_SRCS}
 )
 
 
@@ -410,11 +455,13 @@ set(client_SRCS
        guiVolumeChange.cpp
        hud.cpp
        imagefilters.cpp
+       intlGUIEditBox.cpp
        keycode.cpp
        localplayer.cpp
        main.cpp
        mapblock_mesh.cpp
        mesh.cpp
+       minimap.cpp
        particles.cpp
        shader.cpp
        sky.cpp
@@ -441,6 +488,7 @@ include_directories(
        ${SOUND_INCLUDE_DIRS}
        ${SQLITE3_INCLUDE_DIR}
        ${LUA_INCLUDE_DIR}
+       ${GMP_INCLUDE_DIR}
        ${JSON_INCLUDE_DIR}
        ${PROJECT_SOURCE_DIR}/script
 )
@@ -459,10 +507,10 @@ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
 
 
 if(BUILD_CLIENT)
-       add_executable(${PROJECT_NAME_LOWER} ${client_SRCS})
-       add_dependencies(${PROJECT_NAME_LOWER} GenerateVersion)
+       add_executable(${PROJECT_NAME} ${client_SRCS})
+       add_dependencies(${PROJECT_NAME} GenerateVersion)
        set(client_LIBS
-               ${PROJECT_NAME_LOWER}
+               ${PROJECT_NAME}
                ${ZLIB_LIBRARIES}
                ${IRRLICHT_LIBRARY}
                ${OPENGL_LIBRARIES}
@@ -474,6 +522,7 @@ if(BUILD_CLIENT)
                ${SOUND_LIBRARIES}
                ${SQLITE3_LIBRARY}
                ${LUA_LIBRARY}
+               ${GMP_LIBRARY}
                ${JSON_LIBRARY}
                ${OPENGLES2_LIBRARIES}
                ${PLATFORM_LIBS}
@@ -491,55 +540,62 @@ if(BUILD_CLIENT)
        endif()
        if(USE_CURL)
                target_link_libraries(
-                       ${PROJECT_NAME_LOWER}
+                       ${PROJECT_NAME}
                        ${CURL_LIBRARY}
                )
        endif()
        if(USE_FREETYPE)
                if(FREETYPE_PKGCONFIG_FOUND)
-                       set_target_properties(${PROJECT_NAME_LOWER}
+                       set_target_properties(${PROJECT_NAME}
                                PROPERTIES
                                COMPILE_FLAGS "${FREETYPE_CFLAGS_STR}"
                        )
                endif()
                target_link_libraries(
-                       ${PROJECT_NAME_LOWER}
+                       ${PROJECT_NAME}
                        ${FREETYPE_LIBRARY}
                        ${CGUITTFONT_LIBRARY}
                )
        endif()
        if (USE_LEVELDB)
-               target_link_libraries(${PROJECT_NAME_LOWER} ${LEVELDB_LIBRARY})
+               target_link_libraries(${PROJECT_NAME} ${LEVELDB_LIBRARY})
        endif()
        if (USE_REDIS)
-               target_link_libraries(${PROJECT_NAME_LOWER} ${REDIS_LIBRARY})
+               target_link_libraries(${PROJECT_NAME} ${REDIS_LIBRARY})
+       endif()
+       if (USE_SPATIAL)
+               target_link_libraries(${PROJECT_NAME} ${SPATIAL_LIBRARY})
        endif()
 endif(BUILD_CLIENT)
 
 
 if(BUILD_SERVER)
-       add_executable(${PROJECT_NAME_LOWER}server ${server_SRCS})
-       add_dependencies(${PROJECT_NAME_LOWER}server GenerateVersion)
+       add_executable(${PROJECT_NAME}server ${server_SRCS})
+       add_dependencies(${PROJECT_NAME}server GenerateVersion)
        target_link_libraries(
-               ${PROJECT_NAME_LOWER}server
+               ${PROJECT_NAME}server
                ${ZLIB_LIBRARIES}
                ${SQLITE3_LIBRARY}
                ${JSON_LIBRARY}
                ${GETTEXT_LIBRARY}
                ${LUA_LIBRARY}
+               ${GMP_LIBRARY}
                ${PLATFORM_LIBS}
        )
-       set_target_properties(${PROJECT_NAME_LOWER}server PROPERTIES
+       set_target_properties(${PROJECT_NAME}server PROPERTIES
                        COMPILE_DEFINITIONS "SERVER")
        if (USE_LEVELDB)
-               target_link_libraries(${PROJECT_NAME_LOWER}server ${LEVELDB_LIBRARY})
+               target_link_libraries(${PROJECT_NAME}server ${LEVELDB_LIBRARY})
        endif()
        if (USE_REDIS)
-               target_link_libraries(${PROJECT_NAME_LOWER}server ${REDIS_LIBRARY})
+               target_link_libraries(${PROJECT_NAME}server ${REDIS_LIBRARY})
+       endif()
+       if (USE_SPATIAL)
+               target_link_libraries(${PROJECT_NAME}server ${SPATIAL_LIBRARY})
        endif()
        if(USE_CURL)
                target_link_libraries(
-                       ${PROJECT_NAME_LOWER}server
+                       ${PROJECT_NAME}server
                        ${CURL_LIBRARY}
                )
        endif()
@@ -581,6 +637,7 @@ else()
        if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
                # clang does not understand __extern_always_inline but libc headers use it
                set(OTHER_FLAGS "${OTHER_FLAGS} \"-D__extern_always_inline=extern __always_inline\"")
+               set(OTHER_FLAGS "${OTHER_FLAGS} -Wsign-compare")
        endif()
 
        if(MINGW)
@@ -640,7 +697,7 @@ if(WIN32)
 endif()
 
 if(BUILD_CLIENT)
-       install(TARGETS ${PROJECT_NAME_LOWER}
+       install(TARGETS ${PROJECT_NAME}
                RUNTIME DESTINATION ${BINDIR}
                LIBRARY DESTINATION ${BINDIR}
                ARCHIVE DESTINATION ${BINDIR}
@@ -658,7 +715,7 @@ if(BUILD_CLIENT)
        if(USE_GETTEXT)
                foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
                        set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
-                       set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME_LOWER}.mo")
+                       set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
                        install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
                endforeach()
        endif()
@@ -679,16 +736,16 @@ if(BUILD_CLIENT)
 endif(BUILD_CLIENT)
 
 if(BUILD_SERVER)
-       install(TARGETS ${PROJECT_NAME_LOWER}server DESTINATION ${BINDIR})
+       install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR})
 endif()
 
 if (USE_GETTEXT)
        set(MO_FILES)
 
        foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
-               set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/${PROJECT_NAME_LOWER}.po")
+               set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/${PROJECT_NAME}.po")
                set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
-               set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME_LOWER}.mo")
+               set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
 
                add_custom_command(OUTPUT ${MO_BUILD_PATH}
                        COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}