]> git.lizzy.rs Git - minetest.git/blobdiff - CMakeLists.txt
Inventory: Fix rare out-of-bounds access
[minetest.git] / CMakeLists.txt
index 7613e684c89227d32815424d386db9aa7d41b58b..7b266334186e33795ca9479196572c2eac0118b7 100644 (file)
@@ -1,27 +1,21 @@
-cmake_minimum_required(VERSION 2.6)
-
-if(${CMAKE_VERSION} STREQUAL "2.8.2")
-       # Bug http://vtk.org/Bug/view.php?id=11020
-       message(WARNING "CMake/CPack version 2.8.2 will not create working .deb packages!")
-endif()
+cmake_minimum_required(VERSION 3.5)
 
 # This can be read from ${PROJECT_NAME} after project() is called
 project(minetest)
 set(PROJECT_NAME_CAPITALIZED "Minetest")
 
-# Works only for cmake 3.1 and greater
 set(CMAKE_CXX_STANDARD 11)
 set(GCC_MINIMUM_VERSION "4.8")
 set(CLANG_MINIMUM_VERSION "3.4")
 
 # Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing
 set(VERSION_MAJOR 5)
-set(VERSION_MINOR 2)
+set(VERSION_MINOR 5)
 set(VERSION_PATCH 0)
 set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
 
 # Change to false for releases
-set(DEVELOPMENT_BUILD FALSE)
+set(DEVELOPMENT_BUILD TRUE)
 
 set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
 if(VERSION_EXTRA)
@@ -49,6 +43,7 @@ set(RUN_IN_PLACE ${DEFAULT_RUN_IN_PLACE} CACHE BOOL
 
 set(BUILD_CLIENT TRUE CACHE BOOL "Build client")
 set(BUILD_SERVER FALSE CACHE BOOL "Build server")
+set(BUILD_UNITTESTS TRUE CACHE BOOL "Build unittests")
 
 
 set(WARN_ALL TRUE CACHE BOOL "Enable -Wall for Release build")
@@ -63,7 +58,45 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
 
 
 # This is done here so that relative search paths are more reasonable
-find_package(Irrlicht)
+if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lib/irrlichtmt")
+       message(STATUS "Using user-provided IrrlichtMt at subdirectory 'lib/irrlichtmt'")
+       if(BUILD_CLIENT)
+               # tell IrrlichtMt to create a static library
+               set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library" FORCE)
+               add_subdirectory(lib/irrlichtmt EXCLUDE_FROM_ALL)
+               unset(BUILD_SHARED_LIBS CACHE)
+
+               if(NOT TARGET IrrlichtMt)
+                       message(FATAL_ERROR "IrrlichtMt project is missing a CMake target?!")
+               endif()
+       else()
+               add_library(IrrlichtMt::IrrlichtMt INTERFACE IMPORTED)
+               set_target_properties(IrrlichtMt::IrrlichtMt PROPERTIES
+                       INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/irrlichtmt/include")
+       endif()
+else()
+       find_package(IrrlichtMt QUIET)
+       if(NOT TARGET IrrlichtMt::IrrlichtMt)
+               string(CONCAT explanation_msg
+                       "The Minetest team has forked Irrlicht to make their own customizations. "
+                       "It can be found here: https://github.com/minetest/irrlicht")
+               if(BUILD_CLIENT)
+                       message(FATAL_ERROR "IrrlichtMt is required to build the client, but it was not found.\n${explanation_msg}")
+               endif()
+
+               include(MinetestFindIrrlichtHeaders)
+               if(NOT IRRLICHT_INCLUDE_DIR)
+                       message(FATAL_ERROR "Irrlicht or IrrlichtMt headers are required to build the server, but none found.\n${explanation_msg}")
+               endif()
+               message(STATUS "Found Irrlicht headers: ${IRRLICHT_INCLUDE_DIR}")
+               add_library(IrrlichtMt::IrrlichtMt INTERFACE IMPORTED)
+               # Note that we can't use target_include_directories() since that doesn't work for IMPORTED targets before CMake 3.11
+               set_target_properties(IrrlichtMt::IrrlichtMt PROPERTIES
+                       INTERFACE_INCLUDE_DIRECTORIES "${IRRLICHT_INCLUDE_DIR}")
+       else()
+               message(STATUS "Found IrrlichtMt ${IrrlichtMt_VERSION}")
+       endif()
+endif()
 
 
 # Installation
@@ -102,7 +135,7 @@ elseif(UNIX) # Linux, BSD etc
                set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/share/applications")
                set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/share/metainfo")
                set(ICONDIR "${CMAKE_INSTALL_PREFIX}/share/icons")
-               set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/locale")
+               set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/locale")
        endif()
 endif()
 
@@ -164,15 +197,14 @@ if(RUN_IN_PLACE)
        install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/textures/texture_packs_here.txt" DESTINATION "${SHAREDIR}/textures")
 endif()
 
-install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/minetest_game" DESTINATION "${SHAREDIR}/games/" 
+install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/minetest_game" DESTINATION "${SHAREDIR}/games/"
        COMPONENT "SUBGAME_MINETEST_GAME" OPTIONAL PATTERN ".git*" EXCLUDE )
-install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/minimal" DESTINATION "${SHAREDIR}/games/" 
+install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/devtest" DESTINATION "${SHAREDIR}/games/"
        COMPONENT "SUBGAME_MINIMAL" OPTIONAL PATTERN ".git*" EXCLUDE )
 
 if(BUILD_CLIENT)
        install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client/shaders" DESTINATION "${SHAREDIR}/client")
        install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/textures/base/pack" DESTINATION "${SHAREDIR}/textures/base")
-       install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fonts" DESTINATION "${SHAREDIR}")
        if(RUN_IN_PLACE)
                install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/clientmods" DESTINATION "${SHAREDIR}")
                install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client/serverlist" DESTINATION "${SHAREDIR}/client")
@@ -207,8 +239,8 @@ find_package(GMP REQUIRED)
 find_package(Json REQUIRED)
 find_package(Lua REQUIRED)
 
-# JsonCPP doesn't compile well on GCC 4.8
-if(NOT ENABLE_SYSTEM_JSONCPP)
+# JsonCpp doesn't compile well on GCC 4.8
+if(NOT USE_SYSTEM_JSONCPP)
        set(GCC_MINIMUM_VERSION "4.9")
 endif()
 
@@ -217,7 +249,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
                message(FATAL_ERROR "Insufficient gcc version, found ${CMAKE_CXX_COMPILER_VERSION}. "
                        "Version ${GCC_MINIMUM_VERSION} or higher is required.")
        endif()
-elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+elseif(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang")
        if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "${CLANG_MINIMUM_VERSION}")
                message(FATAL_ERROR "Insufficient clang version, found ${CMAKE_CXX_COMPILER_VERSION}. "
                        "Version ${CLANG_MINIMUM_VERSION} or higher is required.")
@@ -248,15 +280,15 @@ cpack_add_component(Docs
 
 cpack_add_component(SUBGAME_MINETEST_GAME
        DISPLAY_NAME "Minetest Game"
-       DESCRIPTION "The official subgame for the Minetest engine, that can easily extended by mods."
-       GROUP "Subgames"
+       DESCRIPTION "The default game bundled in the Minetest engine. Mainly used as a modding base."
+       GROUP "Games"
 )
 
 cpack_add_component(SUBGAME_MINIMAL
-       DISPLAY_NAME "Minimal development test"
-       DESCRIPTION "A minimal subgame helping to develop the engine."
+       DISPLAY_NAME "Development Test"
+       DESCRIPTION "A basic testing environment used for engine development and sometimes for testing mods."
        DISABLED #DISABLED does not mean it is disabled, and is just not selected by default.
-       GROUP "Subgames"
+       GROUP "Games"
 )
 
 cpack_add_component_group(Subgames
@@ -277,19 +309,20 @@ if(WIN32)
                set(CPACK_GENERATOR ZIP)
 
        else()
-               set(CPACK_GENERATOR WIX ZIP)
+               set(CPACK_GENERATOR WIX)
                set(CPACK_PACKAGE_NAME "${PROJECT_NAME_CAPITALIZED}")
-               set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME_CAPITALIZED}")
+               set(CPACK_PACKAGE_INSTALL_DIRECTORY ".")
                set(CPACK_PACKAGE_EXECUTABLES ${PROJECT_NAME} "${PROJECT_NAME_CAPITALIZED}")
                set(CPACK_CREATE_DESKTOP_LINKS ${PROJECT_NAME})
+               set(CPACK_PACKAGING_INSTALL_PREFIX "/${PROJECT_NAME_CAPITALIZED}")
 
                set(CPACK_WIX_PRODUCT_ICON "${CMAKE_CURRENT_SOURCE_DIR}/misc/minetest-icon.ico")
-               # Supported languages can be found at 
+               # Supported languages can be found at
                # http://wixtoolset.org/documentation/manual/v3/wixui/wixui_localization.html
                #set(CPACK_WIX_CULTURES "ar-SA,bg-BG,ca-ES,hr-HR,cs-CZ,da-DK,nl-NL,en-US,et-EE,fi-FI,fr-FR,de-DE")
                set(CPACK_WIX_UI_BANNER "${CMAKE_CURRENT_SOURCE_DIR}/misc/CPACK_WIX_UI_BANNER.BMP")
                set(CPACK_WIX_UI_DIALOG "${CMAKE_CURRENT_SOURCE_DIR}/misc/CPACK_WIX_UI_DIALOG.BMP")
-               
+
                set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/doc/lgpl-2.1.txt")
 
                # The correct way would be to include both x32 and x64 into one installer
@@ -325,4 +358,3 @@ if(DOXYGEN_FOUND)
                COMMENT "Generating API documentation with Doxygen" VERBATIM
        )
 endif()
-