minetest-mapper-cpp/CMakeLists.txt

165 lines
5.2 KiB
CMake

# CMakeList.txt: CMake-Projektdatei der obersten Ebene. Führen Sie eine globale Konfiguration durch,
# und schließen Sie hier Unterprojekte ein.
#
cmake_minimum_required (VERSION 3.8)
set (CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "")
endif()
# This is important to vcpkg to select the right libraries
IF(NOT CMAKE_BUILD_TYPE )
SET(CMAKE_BUILD_TYPE "Release" CACHE STRING "")
ENDIF()
project (
"Minetestmapper"
DESCRIPTION "Map generator for Minetest"
LANGUAGES C CXX)
find_package(Git REQUIRED)
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --long --dirty --tags --match v[0-9]*
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE git_result
OUTPUT_VARIABLE git_tag
ERROR_VARIABLE git_error
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
if( NOT git_result EQUAL 0 )
message( FATAL_ERROR "Failed to execute Git: ${git_error}" )
endif()
if( git_tag MATCHES "v([0-9]+).([0-9]+).([0-9]+)-([0-9]+)-g([0-9,a-f]+)(-dirty)?" )
set( git_version_major "${CMAKE_MATCH_1}" )
set( git_version_minor "${CMAKE_MATCH_2}" )
set( git_version_patch "${CMAKE_MATCH_3}" )
set( git_commits_since_last_tag "${CMAKE_MATCH_4}" )
set( git_hash "${CMAKE_MATCH_5}" )
set( git_wip "${CMAKE_MATCH_6}" )
else()
message( FATAL_ERROR "Git tag isn't valid semantic version: [${git_tag}]" )
endif()
execute_process(
COMMAND "${GIT_EXECUTABLE}" rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE git_result
OUTPUT_VARIABLE git_current_branch
ERROR_VARIABLE git_error
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
if( NOT git_result EQUAL 0 )
message( FATAL_ERROR "Failed to execute Git: ${git_error}" )
endif()
if(${git_commits_since_last_tag} EQUAL 0)
set (PRERELEASE 0)
else()
set (PRERELEASE 1)
endif()
set(BUILD_BRANCH ${git_current_branch})
if(BUILD_BRANCH STREQUAL "master")
set (SPECIALBUILD 0)
else()
set (SPECIALBUILD 1)
endif()
set (PROJECT_VERSION_MAJOR ${git_version_major})
set (PROJECT_VERSION_MINOR ${git_version_minor})
set (PROJECT_VERSION_PATCH ${git_version_patch})
set (PROJECT_VERSION_TWEAK ${git_commits_since_last_tag})
if(NOT PROJECT_VERSION_TWEAK)
set(PROJECT_VERSION_TWEAK 0)
endif()
if(git_wip)
set (DIRTY_BUILD 1)
else()
set (DIRTY_BUILD 0)
endif()
set (PROJECT_VERSION "${git_version_major}.${git_version_minor}.${git_version_patch}.${git_commits_since_last_tag}-g${git_hash}${git_wip}")
message(STATUS "Version: ${PROJECT_VERSION}")
# Set output directories
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
OPTION(ENABLE_SQLITE3 "Enable sqlite3 backend" True)
OPTION(ENABLE_POSTGRESQL "Enable postgresql backend")
OPTION(ENABLE_LEVELDB "Enable LevelDB backend")
OPTION(ENABLE_REDIS "Enable redis backend")
macro(EnableDBBackend NAME_TECHNICAL DATABASE_NAME)
message (STATUS "${DATABASE_NAME} library: ${${NAME_TECHNICAL}_LIBRARY}")
message (STATUS "${DATABASE_NAME} headers: ${${NAME_TECHNICAL}_INCLUDE_DIR}")
if(${NAME_TECHNICAL}_LIBRARY AND ${NAME_TECHNICAL}_INCLUDE_DIR)
set(USE_${NAME_TECHNICAL} 1)
message(STATUS "${DATABASE_NAME} backend enabled")
include_directories(${${NAME_TECHNICAL}_INCLUDE_DIR})
else(${NAME_TECHNICAL}_LIBRARY AND ${NAME_TECHNICAL}_INCLUDE_DIR)
set(USE_${NAME_TECHNICAL} 0)
if(ENABLE_${NAME_TECHNICAL})
message(SEND_ERROR "${DATABASE_NAME} backend requested but ${DATABASE_NAME} libraries not found!")
else(ENABLE_${NAME_TECHNICAL})
message(STATUS "${DATABASE_NAME} not enabled (${DATABASE_NAME} libraries and/or headers not found)")
endif(ENABLE_${NAME_TECHNICAL})
endif(${NAME_TECHNICAL}_LIBRARY AND ${NAME_TECHNICAL}_INCLUDE_DIR)
endmacro()
# Find sqlite3
if(ENABLE_SQLITE3)
find_library(SQLITE3_LIBRARY sqlite3)
find_path(SQLITE3_INCLUDE_DIR sqlite3.h)
EnableDBBackend(SQLITE3 sqlite3)
endif(ENABLE_SQLITE3)
# Find postgresql
if(ENABLE_POSTGRESQL)
find_library(POSTGRESQL_LIBRARY NAMES pq libpq)
find_path(POSTGRESQL_INCLUDE_DIR libpq-fe.h PATH_SUFFIXES postgresql)
EnableDBBackend(POSTGRESQL postgresql)
endif(ENABLE_POSTGRESQL)
# Find leveldb
if(ENABLE_LEVELDB)
find_library(LEVELDB_LIBRARY NAMES leveldb libleveldb)
find_path(LEVELDB_INCLUDE_DIR db.h PATH_SUFFIXES leveldb)
EnableDBBackend(LEVELDB LevelDB)
endif(ENABLE_LEVELDB)
# Find redis
if(ENABLE_REDIS OR ENABLE_ANY_DATABASE OR ENABLE_ALL_DATABASES)
find_library(REDIS_LIBRARY hiredis)
find_path(REDIS_INCLUDE_DIR hiredis.h PATH_SUFFIXES hiredis)
EnableDBBackend(REDIS redis)
endif(ENABLE_REDIS OR ENABLE_ANY_DATABASE OR ENABLE_ALL_DATABASES)
# Schließen Sie Unterprojekte ein.
add_subdirectory ("Minetestmapper")
configure_file(
"${PROJECT_SOURCE_DIR}/version.h.in"
"${PROJECT_SOURCE_DIR}/Minetestmapper/version.h"
)
configure_file(
"${PROJECT_SOURCE_DIR}/build_config.h.in"
"${PROJECT_SOURCE_DIR}/Minetestmapper/build_config.h"
)