]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - CMakeLists.txt
Merge pull request #59 from PrairieAstronomer/readme_irrlicht_change
[dragonfireclient.git] / CMakeLists.txt
index 7613e684c89227d32815424d386db9aa7d41b58b..fe1cb47eb38751d491da02983c198f5ecad45fc1 100644 (file)
@@ -1,31 +1,33 @@
-cmake_minimum_required(VERSION 2.6)
+cmake_minimum_required(VERSION 3.5)
 
-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!")
+# Set policies up to 3.9 since we want to enable the IPO option
+if(${CMAKE_VERSION} VERSION_LESS 3.9)
+       cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
+else()
+       cmake_policy(VERSION 3.9)
 endif()
 
 # This can be read from ${PROJECT_NAME} after project() is called
 project(minetest)
-set(PROJECT_NAME_CAPITALIZED "Minetest")
+set(PROJECT_NAME_CAPITALIZED "Dragonfire")
 
-# 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")
+set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
+set(GCC_MINIMUM_VERSION "5.1")
+set(CLANG_MINIMUM_VERSION "3.5")
 
 # Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing
 set(VERSION_MAJOR 5)
-set(VERSION_MINOR 2)
+set(VERSION_MINOR 6)
 set(VERSION_PATCH 0)
-set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
+set(VERSION_EXTRA "dragonfire" CACHE STRING "Stuff to append to version string")
 
 # Change to false for releases
 set(DEVELOPMENT_BUILD FALSE)
 
 set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
 if(VERSION_EXTRA)
-       set(VERSION_STRING ${VERSION_STRING}-${VERSION_EXTRA})
+       set(VERSION_STRING "${VERSION_STRING}-${VERSION_EXTRA}")
 elseif(DEVELOPMENT_BUILD)
        set(VERSION_STRING "${VERSION_STRING}-dev")
 endif()
@@ -49,7 +51,8 @@ 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(BUILD_BENCHMARKS FALSE CACHE BOOL "Build benchmarks")
 
 set(WARN_ALL TRUE CACHE BOOL "Enable -Wall for Release build")
 
@@ -62,8 +65,61 @@ endif()
 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)
+set(IRRLICHTMT_BUILD_DIR "" CACHE PATH "Path to IrrlichtMt build directory.")
+if(NOT "${IRRLICHTMT_BUILD_DIR}" STREQUAL "")
+       find_package(IrrlichtMt QUIET
+               PATHS "${IRRLICHTMT_BUILD_DIR}"
+               NO_DEFAULT_PATH
+       )
+
+       if(NOT TARGET IrrlichtMt::IrrlichtMt)
+               # find_package() searches certain subdirectories. ${PATH}/cmake is not
+               # the only one, but it is the one where IrrlichtMt is supposed to export
+               # IrrlichtMtConfig.cmake
+               message(FATAL_ERROR "Could not find IrrlichtMtConfig.cmake in ${IRRLICHTMT_BUILD_DIR}/cmake.")
+       endif()
+elseif(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\n"
+                       "For example use: git clone --depth=1 https://github.com/minetest/irrlicht lib/irrlichtmt\n")
+               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 "IrrlichtMt headers are required to build the server, but none found.\n${explanation_msg}")
+               endif()
+               message(STATUS "Found IrrlichtMt 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}")
+       endif()
+endif()
+
+if(TARGET IrrlichtMt::IrrlichtMt)
+       message(STATUS "Found IrrlichtMt ${IrrlichtMt_VERSION}")
+endif()
 
 
 # Installation
@@ -94,15 +150,16 @@ elseif(UNIX) # Linux, BSD etc
                set(ICONDIR "unix/icons")
                set(LOCALEDIR "locale")
        else()
-               set(SHAREDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}")
-               set(BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
-               set(DOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}")
-               set(MANDIR "${CMAKE_INSTALL_PREFIX}/share/man")
+               include(GNUInstallDirs)
+               set(SHAREDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}")
+               set(BINDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}")
+               set(DOCDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}")
+               set(MANDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_MANDIR}")
                set(EXAMPLE_CONF_DIR ${DOCDIR})
-               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(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/applications")
+               set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/metainfo")
+               set(ICONDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/icons")
+               set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LOCALEDIR}")
        endif()
 endif()
 
@@ -164,15 +221,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")
@@ -191,14 +247,14 @@ if(UNIX AND NOT APPLE)
        install(FILES "doc/minetest.6" "doc/minetestserver.6" DESTINATION "${MANDIR}/man6")
        install(FILES "misc/net.minetest.minetest.desktop" DESTINATION "${XDG_APPS_DIR}")
        install(FILES "misc/net.minetest.minetest.appdata.xml" DESTINATION "${APPDATADIR}")
-       install(FILES "misc/minetest.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps")
-       install(FILES "misc/minetest-xorg-icon-128.png"
+       install(FILES "misc/dragonfire.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps")
+       install(FILES "misc/dragonfire-xorg-icon-128.png"
                DESTINATION "${ICONDIR}/hicolor/128x128/apps"
-               RENAME "minetest.png")
+               RENAME "dragonfire.png")
 endif()
 
 if(APPLE)
-       install(FILES "misc/minetest-icon.icns" DESTINATION "${SHAREDIR}")
+       install(FILES "misc/dragonfire-icon.icns" DESTINATION "${SHAREDIR}")
        install(FILES "misc/Info.plist" DESTINATION "${BUNDLE_PATH}/Contents")
 endif()
 
@@ -206,10 +262,10 @@ endif()
 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)
-       set(GCC_MINIMUM_VERSION "4.9")
+if(NOT USE_LUAJIT)
+       set(LUA_BIT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/bitop)
+       set(LUA_BIT_LIBRARY bitop)
+       add_subdirectory(lib/bitop)
 endif()
 
 if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
@@ -217,16 +273,19 @@ 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.")
        endif()
 endif()
 
+if(BUILD_BENCHMARKS)
+       add_subdirectory(lib/catch2)
+endif()
+
 # Subdirectories
 # Be sure to add all relevant definitions above this
-
 add_subdirectory(src)
 
 
@@ -248,15 +307,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 +336,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 
+               set(CPACK_WIX_PRODUCT_ICON "${CMAKE_CURRENT_SOURCE_DIR}/misc/dragonfire-icon.ico")
+               # 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 +385,3 @@ if(DOXYGEN_FOUND)
                COMMENT "Generating API documentation with Doxygen" VERBATIM
        )
 endif()
-