minetestmapper/CMakeLists.txt

226 lines
5.9 KiB
CMake
Raw Permalink Normal View History

2021-03-29 05:58:56 -07:00
cmake_minimum_required(VERSION 3.5)
project(minetestmapper
VERSION 1.0
LANGUAGES CXX
)
2014-03-29 00:32:56 -07:00
# Stuff & Paths
2014-08-02 07:30:52 -07:00
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE)
2014-08-02 07:30:52 -07:00
endif()
2020-03-26 15:07:27 -07:00
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
2014-12-20 03:31:39 -08:00
if(WIN32)
set(SHAREDIR ".")
set(BINDIR ".")
set(DOCDIR ".")
else()
set(SHAREDIR "share/minetest") # reuse Minetest share dir
set(BINDIR "bin")
set(DOCDIR "share/doc/${PROJECT_NAME}")
set(MANDIR "share/man")
endif()
set(CUSTOM_SHAREDIR "" CACHE STRING "Directory to install data files into")
if(NOT CUSTOM_SHAREDIR STREQUAL "")
set(SHAREDIR "${CUSTOM_SHAREDIR}")
message(STATUS "Using SHAREDIR=${SHAREDIR}")
endif()
set(CUSTOM_BINDIR "" CACHE STRING "Directory to install binaries into")
if(NOT CUSTOM_BINDIR STREQUAL "")
set(BINDIR "${CUSTOM_BINDIR}")
message(STATUS "Using BINDIR=${BINDIR}")
endif()
set(CUSTOM_DOCDIR "" CACHE STRING "Directory to install documentation into")
if(NOT CUSTOM_DOCDIR STREQUAL "")
set(DOCDIR "${CUSTOM_DOCDIR}")
message(STATUS "Using DOCDIR=${DOCDIR}")
endif()
2021-09-01 14:55:32 -07:00
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
# Libraries: gd
find_library(LIBGD_LIBRARY gd)
find_path(LIBGD_INCLUDE_DIR gd.h)
message (STATUS "libgd library: ${LIBGD_LIBRARY}")
message (STATUS "libgd headers: ${LIBGD_INCLUDE_DIR}")
if(NOT LIBGD_LIBRARY OR NOT LIBGD_INCLUDE_DIR)
message(FATAL_ERROR "libgd not found!")
endif(NOT LIBGD_LIBRARY OR NOT LIBGD_INCLUDE_DIR)
# Libraries: zlib
2021-03-29 05:58:56 -07:00
find_package(ZLIB REQUIRED)
2021-09-01 14:55:32 -07:00
# Libraries: zstd
find_package(Zstd REQUIRED)
# Libraries: sqlite3
2014-03-09 04:32:13 -07:00
find_library(SQLITE3_LIBRARY sqlite3)
2021-03-29 05:58:56 -07:00
find_path(SQLITE3_INCLUDE_DIR sqlite3.h)
2014-03-09 04:32:13 -07:00
message (STATUS "sqlite3 library: ${SQLITE3_LIBRARY}")
message (STATUS "sqlite3 headers: ${SQLITE3_INCLUDE_DIR}")
if(NOT SQLITE3_LIBRARY OR NOT SQLITE3_INCLUDE_DIR)
message(FATAL_ERROR "sqlite3 not found!")
endif(NOT SQLITE3_LIBRARY OR NOT SQLITE3_INCLUDE_DIR)
2012-09-01 06:51:02 -07:00
2017-01-08 14:24:09 -08:00
# Libraries: postgresql
option(ENABLE_POSTGRESQL "Enable PostgreSQL backend" TRUE)
set(USE_POSTGRESQL FALSE)
2017-01-08 14:24:09 -08:00
if(ENABLE_POSTGRESQL)
if(CMAKE_VERSION VERSION_LESS "3.20")
find_package(PostgreSQL QUIET)
# Before CMake 3.20 FindPostgreSQL.cmake always looked for server includes
# but we don't need them, so continue anyway if only those are missing.
if(PostgreSQL_INCLUDE_DIR AND PostgreSQL_LIBRARY)
set(PostgreSQL_FOUND TRUE)
set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR})
set(PostgreSQL_LIBRARIES ${PostgreSQL_LIBRARY})
endif()
else()
find_package(PostgreSQL)
endif()
2017-01-08 14:24:09 -08:00
if(PostgreSQL_FOUND)
set(USE_POSTGRESQL TRUE)
2017-01-08 14:24:09 -08:00
message(STATUS "PostgreSQL backend enabled")
# This variable is case sensitive, don't try to change it to POSTGRESQL_INCLUDE_DIR
message(STATUS "PostgreSQL includes: ${PostgreSQL_INCLUDE_DIRS}")
include_directories(${PostgreSQL_INCLUDE_DIRS})
2017-01-08 14:24:09 -08:00
else()
message(STATUS "PostgreSQL not found!")
set(PostgreSQL_LIBRARIES "")
2017-01-08 14:24:09 -08:00
endif()
endif(ENABLE_POSTGRESQL)
# Libraries: leveldb
OPTION(ENABLE_LEVELDB "Enable LevelDB backend" TRUE)
set(USE_LEVELDB FALSE)
2014-03-05 12:41:27 -08:00
if(ENABLE_LEVELDB)
find_library(LEVELDB_LIBRARY leveldb)
find_path(LEVELDB_INCLUDE_DIR leveldb/db.h)
2014-03-05 12:41:27 -08:00
message (STATUS "LevelDB library: ${LEVELDB_LIBRARY}")
message (STATUS "LevelDB headers: ${LEVELDB_INCLUDE_DIR}")
if(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR)
set(USE_LEVELDB TRUE)
2014-03-05 12:41:27 -08:00
message(STATUS "LevelDB backend enabled")
include_directories(${LEVELDB_INCLUDE_DIR})
else()
2014-03-05 12:41:27 -08:00
message(STATUS "LevelDB not found!")
set(LEVELDB_LIBRARY "")
endif()
2014-03-05 12:41:27 -08:00
endif(ENABLE_LEVELDB)
# Libraries: redis
OPTION(ENABLE_REDIS "Enable redis backend" TRUE)
set(USE_REDIS FALSE)
2014-04-26 06:01:35 -07:00
if(ENABLE_REDIS)
find_library(REDIS_LIBRARY hiredis)
find_path(REDIS_INCLUDE_DIR hiredis/hiredis.h)
2014-04-26 06:01:35 -07:00
message (STATUS "redis library: ${REDIS_LIBRARY}")
message (STATUS "redis headers: ${REDIS_INCLUDE_DIR}")
if(REDIS_LIBRARY AND REDIS_INCLUDE_DIR)
set(USE_REDIS TRUE)
2014-04-26 06:01:35 -07:00
message(STATUS "redis backend enabled")
include_directories(${REDIS_INCLUDE_DIR})
else()
2014-04-26 06:01:35 -07:00
message(STATUS "redis not found!")
set(REDIS_LIBRARY "")
endif()
2014-04-26 06:01:35 -07:00
endif(ENABLE_REDIS)
# Compiling & Linking
2012-08-22 06:22:01 -07:00
include_directories(
"${PROJECT_BINARY_DIR}"
2018-03-25 05:12:39 -07:00
"${CMAKE_CURRENT_SOURCE_DIR}/include"
2012-08-22 06:22:01 -07:00
"${CMAKE_CURRENT_BINARY_DIR}"
2014-03-09 04:32:13 -07:00
${SQLITE3_INCLUDE_DIR}
${LIBGD_INCLUDE_DIR}
${ZLIB_INCLUDE_DIR}
2021-09-01 14:55:32 -07:00
${ZSTD_INCLUDE_DIR}
2012-08-22 06:22:01 -07:00
)
2014-03-05 12:41:27 -08:00
configure_file(
2018-03-25 05:12:39 -07:00
"${PROJECT_SOURCE_DIR}/include/cmake_config.h.in"
2014-03-05 12:41:27 -08:00
"${PROJECT_BINARY_DIR}/cmake_config.h"
2012-08-22 06:22:01 -07:00
)
add_definitions(-DUSE_CMAKE_CONFIG_H)
if(CMAKE_CXX_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$")
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
set(CMAKE_CXX_FLAGS_DEBUG "-Og -g2")
add_compile_options(-Wall -pipe)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Release")
add_definitions(-DNDEBUG)
endif()
2012-08-22 06:22:01 -07:00
add_executable(minetestmapper
2018-03-25 06:19:48 -07:00
BlockDecoder.cpp
2012-08-25 04:19:58 -07:00
PixelAttributes.cpp
PlayerAttributes.cpp
2012-08-23 03:46:22 -07:00
TileGenerator.cpp
2012-09-18 01:43:34 -07:00
ZlibDecompressor.cpp
2021-09-01 14:55:32 -07:00
ZstdDecompressor.cpp
Image.cpp
mapper.cpp
2014-07-08 05:54:27 -07:00
util.cpp
2014-03-05 12:41:27 -08:00
db-sqlite3.cpp
$<$<BOOL:${USE_POSTGRESQL}>:db-postgresql.cpp>
$<$<BOOL:${USE_LEVELDB}>:db-leveldb.cpp>
$<$<BOOL:${USE_REDIS}>:db-redis.cpp>
2012-08-22 06:22:01 -07:00
)
2012-08-22 06:31:26 -07:00
target_link_libraries(
2013-07-29 09:16:08 -07:00
minetestmapper
2014-03-09 04:32:13 -07:00
${SQLITE3_LIBRARY}
${PostgreSQL_LIBRARIES}
2014-03-05 12:41:27 -08:00
${LEVELDB_LIBRARY}
2014-04-26 06:01:35 -07:00
${REDIS_LIBRARY}
${LIBGD_LIBRARY}
${ZLIB_LIBRARY}
2021-09-01 14:55:32 -07:00
${ZSTD_LIBRARY}
2012-08-22 06:31:26 -07:00
)
2014-03-29 00:32:56 -07:00
# Installing & Packaging
2014-03-29 00:32:56 -07:00
install(TARGETS "${PROJECT_NAME}" DESTINATION "${BINDIR}")
install(FILES "AUTHORS" DESTINATION "${DOCDIR}")
install(FILES "COPYING" DESTINATION "${DOCDIR}")
install(FILES "README.rst" DESTINATION "${DOCDIR}")
install(FILES "colors.txt" DESTINATION "${SHAREDIR}")
2017-01-17 08:49:15 -08:00
if(UNIX)
install(FILES "minetestmapper.6" DESTINATION "${MANDIR}/man6")
endif()
2014-03-29 00:32:56 -07:00
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Overview mapper for Minetest")
set(CPACK_PACKAGE_VENDOR "celeron55")
set(CPACK_PACKAGE_CONTACT "Perttu Ahola <celeron55@gmail.com>")
if(WIN32)
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-win32")
2014-03-29 00:32:56 -07:00
set(CPACK_GENERATOR ZIP)
else()
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-linux")
2014-03-29 00:32:56 -07:00
set(CPACK_GENERATOR TGZ)
set(CPACK_SOURCE_GENERATOR TGZ)
endif()
include(CPack)