2024-10-27 14:04:51 +01:00
project ( luanti )
2011-07-23 18:33:49 +02:00
2022-10-23 21:59:12 +02:00
INCLUDE ( CheckTypeSize )
2014-11-17 03:52:24 +01:00
INCLUDE ( CheckIncludeFiles )
2016-09-14 05:05:21 +02:00
INCLUDE ( CheckLibraryExists )
2014-02-08 15:45:09 +01:00
2022-10-23 21:59:12 +02:00
check_type_size ( int SIZEOF_INT BUILTIN_TYPES_ONLY LANGUAGE CXX )
if ( SIZEOF_INT LESS 4 )
2024-10-27 14:04:51 +01:00
message ( FATAL_ERROR "${PROJECT_NAME_CAPITALIZED} will not work with int less than 32 bits wide." )
2022-10-23 21:59:12 +02:00
endif ( )
check_type_size ( size_t SIZEOF_SIZE_T LANGUAGE CXX )
if ( SIZEOF_SIZE_T LESS 4 )
2024-10-27 14:04:51 +01:00
message ( FATAL_ERROR "${PROJECT_NAME_CAPITALIZED} will not work with size_t less than 32 bits wide." )
2022-10-23 21:59:12 +02:00
endif ( )
2015-01-19 04:30:11 +01:00
# Add custom SemiDebug build mode
2020-04-16 19:21:47 +02:00
set ( CMAKE_CXX_FLAGS_SEMIDEBUG "-O1 -g -Wall" CACHE STRING
2015-01-19 04:30:11 +01:00
" F l a g s u s e d b y t h e C + + c o m p i l e r d u r i n g s e m i d e b u g b u i l d s . "
F O R C E
)
set ( CMAKE_C_FLAGS_SEMIDEBUG "-O1 -g -Wall -pedantic" CACHE STRING
" F l a g s u s e d b y t h e C c o m p i l e r d u r i n g s e m i d e b u g b u i l d s . "
F O R C E
)
mark_as_advanced (
C M A K E _ C X X _ F L A G S _ S E M I D E B U G
C M A K E _ C _ F L A G S _ S E M I D E B U G
)
2024-05-03 16:29:02 +02:00
set ( SUPPORTED_BUILD_TYPES None Release Debug SemiDebug RelWithDebInfo MinSizeRel )
2015-01-19 04:30:11 +01:00
set ( CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
2024-05-03 16:29:02 +02:00
" C h o o s e t h e t y p e o f b u i l d . O p t i o n s a r e : $ { S U P P O R T E D _ B U I L D _ T Y P E S } . "
2015-01-19 04:30:11 +01:00
F O R C E
)
2024-05-03 16:29:02 +02:00
if ( NOT ( CMAKE_BUILD_TYPE IN_LIST SUPPORTED_BUILD_TYPES ) )
message ( WARNING
" U n k n o w n C M A K E _ B U I L D _ T Y P E : $ { C M A K E _ B U I L D _ T Y P E } . O p t i o n s a r e : $ { S U P P O R T E D _ B U I L D _ T Y P E S } . " )
endif ( )
2015-01-19 04:30:11 +01:00
2015-02-28 00:05:29 +01:00
2012-03-25 03:03:51 +02:00
# Set some random things default to not being visible in the GUI
mark_as_advanced ( EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH )
2012-12-14 12:30:17 +01:00
2015-09-01 20:26:15 +02:00
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 ( )
2023-03-25 23:19:05 +01:00
option ( PRECOMPILE_HEADERS "Precompile some headers (experimental; requires CMake 3.16 or later)" FALSE )
set ( PRECOMPILED_HEADERS_PATH "" CACHE FILEPATH "Path to a file listing all headers to precompile" )
if ( PRECOMPILE_HEADERS )
if ( ${ CMAKE_VERSION } VERSION_LESS 3.16 )
message ( FATAL_ERROR "PRECOMPILE_HEADERS is on, but precompiled headers require at least CMake 3.16." )
endif ( )
if ( PRECOMPILED_HEADERS_PATH )
set ( PRECOMPILED_HEADERS ${ PRECOMPILED_HEADERS_PATH } )
else ( )
set ( PRECOMPILED_HEADERS "${CMAKE_SOURCE_DIR}/src/precompiled_headers.txt" )
endif ( )
message ( STATUS "Reading headers to precompile from: ${PRECOMPILED_HEADERS}" )
# ignore lines that begin with # and empty lines
file ( STRINGS ${ PRECOMPILED_HEADERS } PRECOMPILED_HEADERS_LIST REGEX "^[^#].*$" )
set_property ( DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${ PRECOMPILED_HEADERS } )
endif ( )
2015-02-28 00:05:29 +01:00
option ( ENABLE_CURL "Enable cURL support for fetching media" TRUE )
set ( USE_CURL FALSE )
2012-12-14 12:30:17 +01:00
2015-02-28 00:05:29 +01:00
if ( ENABLE_CURL )
2024-01-13 19:14:04 +01:00
find_package ( CURL 7.28.0 )
2015-02-28 00:05:29 +01:00
if ( CURL_FOUND )
message ( STATUS "cURL support enabled." )
set ( USE_CURL TRUE )
endif ( )
else ( )
mark_as_advanced ( CLEAR CURL_LIBRARY CURL_INCLUDE_DIR )
endif ( )
2012-12-14 12:30:17 +01:00
2015-09-01 20:27:41 +02:00
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 ( )
2011-07-24 13:58:51 +02:00
2021-04-11 17:10:06 +02:00
option ( ENABLE_GETTEXT "Use GetText for internationalization" ${ BUILD_CLIENT } )
2015-02-28 00:05:29 +01:00
set ( USE_GETTEXT FALSE )
2011-07-22 14:42:04 +02:00
2012-03-25 03:03:51 +02:00
if ( ENABLE_GETTEXT )
find_package ( GettextLib )
2020-04-29 12:49:55 +02:00
if ( GETTEXTLIB_FOUND )
2015-02-28 00:05:29 +01:00
if ( WIN32 )
message ( STATUS "GetText library: ${GETTEXT_LIBRARY}" )
2021-03-10 14:48:53 +01:00
message ( STATUS "GetText DLL(s): ${GETTEXT_DLL}" )
2015-02-28 00:05:29 +01:00
endif ( )
set ( USE_GETTEXT TRUE )
message ( STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}" )
2020-04-29 12:49:55 +02:00
endif ( GETTEXTLIB_FOUND )
2012-03-25 03:03:51 +02:00
else ( )
2021-03-10 14:48:53 +01:00
mark_as_advanced ( GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT )
2015-02-28 00:05:29 +01:00
message ( STATUS "GetText disabled." )
2012-03-25 03:03:51 +02:00
endif ( )
2011-07-22 14:42:04 +02:00
2015-02-28 00:05:29 +01:00
option ( ENABLE_SOUND "Enable sound" TRUE )
set ( USE_SOUND FALSE )
if ( BUILD_CLIENT AND ENABLE_SOUND )
2012-03-23 11:05:17 +01:00
# Sound libraries
find_package ( OpenAL )
2012-03-25 03:03:51 +02:00
find_package ( Vorbis )
if ( NOT OPENAL_FOUND )
message ( STATUS "Sound enabled, but OpenAL not found!" )
2015-02-28 00:05:29 +01:00
mark_as_advanced ( CLEAR OPENAL_LIBRARY OPENAL_INCLUDE_DIR )
2012-03-25 03:03:51 +02:00
endif ( )
if ( NOT VORBIS_FOUND )
message ( STATUS "Sound enabled, but Vorbis libraries not found!" )
2015-02-28 00:05:29 +01:00
mark_as_advanced ( CLEAR OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY )
2012-03-25 03:03:51 +02:00
endif ( )
if ( OPENAL_FOUND AND VORBIS_FOUND )
2015-02-28 00:05:29 +01:00
set ( USE_SOUND TRUE )
message ( STATUS "Sound enabled." )
else ( )
message ( FATAL_ERROR "Sound enabled, but cannot be used.\n"
" T o c o n t i n u e , e i t h e r f i l l i n t h e r e q u i r e d p a t h s o r d i s a b l e s o u n d . ( - D E N A B L E _ S O U N D = 0 ) " )
2012-03-25 03:03:51 +02:00
endif ( )
endif ( )
2015-02-28 00:05:29 +01:00
2022-01-08 14:53:25 +01:00
if ( BUILD_CLIENT )
find_package ( Freetype REQUIRED )
2021-04-11 17:10:06 +02:00
endif ( )
2013-02-03 13:19:09 +01:00
2015-07-25 07:43:32 +02:00
option ( ENABLE_CURSES "Enable ncurses console" TRUE )
set ( USE_CURSES FALSE )
if ( ENABLE_CURSES )
find_package ( Ncursesw )
if ( CURSES_FOUND )
set ( USE_CURSES TRUE )
message ( STATUS "ncurses console enabled." )
include_directories ( ${ CURSES_INCLUDE_DIRS } )
else ( )
message ( STATUS "ncurses not found!" )
endif ( )
endif ( ENABLE_CURSES )
2016-05-14 11:00:42 +02:00
option ( ENABLE_POSTGRESQL "Enable PostgreSQL backend" TRUE )
set ( USE_POSTGRESQL FALSE )
if ( ENABLE_POSTGRESQL )
2021-04-20 19:50:34 +02:00
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 )
2021-04-21 20:25:18 +02:00
set ( PostgreSQL_INCLUDE_DIRS ${ PostgreSQL_INCLUDE_DIR } )
2022-05-26 18:01:37 +02:00
set ( PostgreSQL_LIBRARIES ${ PostgreSQL_LIBRARY } )
2021-04-20 19:50:34 +02:00
endif ( )
else ( )
find_package ( PostgreSQL )
endif ( )
2016-05-14 11:00:42 +02:00
2019-04-07 18:45:25 +02:00
if ( PostgreSQL_FOUND )
2016-05-14 11:00:42 +02:00
set ( USE_POSTGRESQL TRUE )
message ( STATUS "PostgreSQL backend enabled" )
# This variable is case sensitive, don't try to change it to POSTGRESQL_INCLUDE_DIR
2019-04-07 18:45:25 +02:00
message ( STATUS "PostgreSQL includes: ${PostgreSQL_INCLUDE_DIRS}" )
include_directories ( ${ PostgreSQL_INCLUDE_DIRS } )
2016-05-14 11:00:42 +02:00
else ( )
message ( STATUS "PostgreSQL not found!" )
endif ( )
endif ( ENABLE_POSTGRESQL )
2015-02-28 00:05:29 +01:00
option ( ENABLE_LEVELDB "Enable LevelDB backend" TRUE )
set ( USE_LEVELDB FALSE )
if ( ENABLE_LEVELDB )
2019-06-10 03:56:55 +02:00
find_library ( LEVELDB_LIBRARY NAMES leveldb libleveldb )
2015-02-28 00:05:29 +01:00
find_path ( LEVELDB_INCLUDE_DIR db.h PATH_SUFFIXES leveldb )
if ( LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR )
set ( USE_LEVELDB TRUE )
message ( STATUS "LevelDB backend enabled." )
include_directories ( ${ LEVELDB_INCLUDE_DIR } )
else ( )
message ( STATUS "LevelDB not found!" )
endif ( )
endif ( ENABLE_LEVELDB )
OPTION ( ENABLE_REDIS "Enable Redis backend" TRUE )
set ( USE_REDIS FALSE )
if ( ENABLE_REDIS )
find_library ( REDIS_LIBRARY hiredis )
find_path ( REDIS_INCLUDE_DIR hiredis.h PATH_SUFFIXES hiredis )
if ( REDIS_LIBRARY AND REDIS_INCLUDE_DIR )
set ( USE_REDIS TRUE )
message ( STATUS "Redis backend enabled." )
include_directories ( ${ REDIS_INCLUDE_DIR } )
else ( REDIS_LIBRARY AND REDIS_INCLUDE_DIR )
message ( STATUS "Redis not found!" )
endif ( REDIS_LIBRARY AND REDIS_INCLUDE_DIR )
endif ( ENABLE_REDIS )
find_package ( SQLite3 REQUIRED )
2021-09-01 10:48:54 +02:00
2020-04-27 08:31:37 +02:00
OPTION ( ENABLE_PROMETHEUS "Enable prometheus client support" FALSE )
set ( USE_PROMETHEUS FALSE )
if ( ENABLE_PROMETHEUS )
find_path ( PROMETHEUS_CPP_INCLUDE_DIR NAMES prometheus/counter.h )
find_library ( PROMETHEUS_PULL_LIBRARY NAMES prometheus-cpp-pull )
find_library ( PROMETHEUS_CORE_LIBRARY NAMES prometheus-cpp-core )
if ( PROMETHEUS_CPP_INCLUDE_DIR AND PROMETHEUS_PULL_LIBRARY AND PROMETHEUS_CORE_LIBRARY )
set ( PROMETHEUS_LIBRARIES ${ PROMETHEUS_PULL_LIBRARY } ${ PROMETHEUS_CORE_LIBRARY } )
set ( USE_PROMETHEUS TRUE )
include_directories ( ${ PROMETHEUS_CPP_INCLUDE_DIR } )
endif ( PROMETHEUS_CPP_INCLUDE_DIR AND PROMETHEUS_PULL_LIBRARY AND PROMETHEUS_CORE_LIBRARY )
endif ( ENABLE_PROMETHEUS )
if ( USE_PROMETHEUS )
message ( STATUS "Prometheus client enabled." )
else ( USE_PROMETHEUS )
message ( STATUS "Prometheus client disabled." )
endif ( USE_PROMETHEUS )
2015-07-11 02:24:00 +02:00
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 )
2015-02-28 00:05:29 +01:00
2021-09-01 10:48:54 +02:00
find_package ( ZLIB REQUIRED )
find_package ( Zstd REQUIRED )
2011-02-15 19:53:29 +01:00
if ( NOT MSVC )
2015-02-28 00:05:29 +01:00
set ( USE_GPROF FALSE CACHE BOOL "Use -pg flag for g++" )
2011-02-15 19:53:29 +01:00
endif ( )
2011-02-15 15:11:24 +01:00
2017-10-30 08:17:43 +01:00
# Haiku endian support
if ( HAIKU )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_BSD_SOURCE" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_BSD_SOURCE" )
endif ( )
2011-01-18 14:05:29 +01:00
# Use cmake_config.h
2015-02-28 00:05:29 +01:00
add_definitions ( -DUSE_CMAKE_CONFIG_H )
2011-01-18 14:05:29 +01:00
2022-09-26 17:02:49 +02:00
set ( THREADS_PREFER_PTHREAD_FLAG ON )
find_package ( Threads REQUIRED )
set ( PLATFORM_LIBS Threads::Threads )
2011-01-09 16:28:31 +01:00
if ( WIN32 )
2011-01-08 16:34:25 +01:00
# Windows
2011-02-11 15:43:26 +01:00
if ( MSVC ) # MSVC Specifics
2015-02-01 09:08:04 +01:00
set ( PLATFORM_LIBS dbghelp.lib ${ PLATFORM_LIBS } )
2011-02-10 14:55:15 +01:00
# Surpress some useless warnings
add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
2017-01-20 23:19:41 +01:00
# Get M_PI to work
add_definitions ( /D "_USE_MATH_DEFINES" )
2022-11-09 17:57:19 +01:00
# Don't define min/max macros in minwindef.h
2017-08-24 17:13:53 +02:00
add_definitions ( /D "NOMINMAX" )
2011-02-10 14:55:15 +01:00
endif ( )
2022-01-22 20:20:43 +01:00
set ( PLATFORM_LIBS ws2_32.lib version.lib shlwapi.lib winmm.lib ${ PLATFORM_LIBS } )
2015-04-08 18:55:06 +02:00
2021-10-25 22:33:13 +02:00
set ( EXTRA_DLL "" CACHE FILEPATH "Optional paths to additional DLLs that should be packaged" )
2021-09-01 10:48:54 +02:00
# DLLs are automatically copied to the output directory by vcpkg when VCPKG_APPLOCAL_DEPS=ON
2019-06-10 03:56:55 +02:00
if ( NOT VCPKG_APPLOCAL_DEPS )
2021-10-25 22:33:13 +02:00
set ( ZLIB_DLL "" CACHE FILEPATH "Path to Zlib DLL for installation (optional)" )
set ( ZSTD_DLL "" CACHE FILEPATH "Path to Zstd DLL for installation (optional)" )
2024-04-15 16:16:15 +02:00
if ( BUILD_CLIENT )
set ( PNG_DLL "" CACHE FILEPATH "Path to libpng DLL for installation (optional)" )
set ( JPEG_DLL "" CACHE FILEPATH "Path to libjpeg DLL for installation (optional)" )
set ( SDL2_DLL "" CACHE FILEPATH "Path to SDL2 DLL for installation (optional)" )
endif ( )
if ( BUILD_CLIENT AND ENABLE_SOUND )
set ( OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL DLL for installation (optional)" )
set ( OGG_DLL "" CACHE FILEPATH "Path to Ogg DLL for installation (optional)" )
2021-03-10 14:48:53 +01:00
set ( VORBIS_DLL "" CACHE FILEPATH "Path to Vorbis DLLs for installation (optional)" )
endif ( )
if ( USE_GETTEXT )
set ( GETTEXT_DLL "" CACHE FILEPATH "Path to Intl/Iconv DLLs for installation (optional)" )
2019-06-10 03:56:55 +02:00
endif ( )
if ( USE_LUAJIT )
2020-01-22 21:41:03 +01:00
set ( LUA_DLL "" CACHE FILEPATH "Path to luajit-5.1.dll for installation (optional)" )
2019-06-10 03:56:55 +02:00
endif ( )
2017-07-18 21:29:23 +02:00
endif ( )
2011-01-09 16:28:31 +01:00
else ( )
# Unix probably
2022-09-26 17:02:49 +02:00
set ( PLATFORM_LIBS ${ PLATFORM_LIBS } ${ CMAKE_DL_LIBS } )
2014-06-26 20:30:22 +02:00
if ( APPLE )
set ( PLATFORM_LIBS "-framework CoreFoundation" ${ PLATFORM_LIBS } )
else ( )
2016-06-19 09:48:12 +02:00
check_library_exists ( rt clock_gettime "" HAVE_LIBRT )
if ( HAVE_LIBRT )
set ( PLATFORM_LIBS -lrt ${ PLATFORM_LIBS } )
endif ( HAVE_LIBRT )
2014-06-26 20:30:22 +02:00
endif ( APPLE )
2015-06-29 08:39:22 +02:00
find_library ( ICONV_LIBRARY iconv )
mark_as_advanced ( ICONV_LIBRARY )
if ( ICONV_LIBRARY )
set ( PLATFORM_LIBS ${ PLATFORM_LIBS } ${ ICONV_LIBRARY } )
endif ( )
2022-09-26 16:59:47 +02:00
2020-08-23 15:39:32 +02:00
if ( HAIKU )
2022-09-26 16:59:47 +02:00
set ( PLATFORM_LIBS ${ PLATFORM_LIBS } network )
2020-08-23 15:39:32 +02:00
endif ( )
2023-05-26 15:21:23 +02:00
if ( ANDROID )
set ( PLATFORM_LIBS ${ PLATFORM_LIBS } android log )
endif ( )
2011-01-08 16:34:25 +01:00
endif ( )
2023-04-22 18:42:08 +02:00
# On clang and gcc, some functionalities of std::atomic require -latomic.
# See <https://en.cppreference.com/w/cpp/atomic/atomic#Notes>.
2023-12-27 22:19:56 +01:00
# Note that find_library does not reliably find it so we have to resort to this.
# Also, passing -latomic is not always the same as adding atomic to the library list.
include ( CheckCSourceCompiles )
2024-04-20 20:37:46 +02:00
if ( NOT CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" )
set ( CMAKE_REQUIRED_LIBRARIES "-latomic" )
check_c_source_compiles ( "int main(){}" HAVE_LINK_ATOMIC )
set ( CMAKE_REQUIRED_LIBRARIES "" )
if ( HAVE_LINK_ATOMIC )
set ( PLATFORM_LIBS ${ PLATFORM_LIBS } "-latomic" )
endif ( )
2023-04-22 18:42:08 +02:00
endif ( )
2024-01-19 22:48:43 +01:00
include ( CheckSymbolExists )
check_symbol_exists ( strlcpy "string.h" HAVE_STRLCPY )
2024-06-07 16:57:30 +02:00
if ( UNIX )
check_symbol_exists ( malloc_trim "malloc.h" HAVE_MALLOC_TRIM )
else ( )
set ( HAVE_MALLOC_TRIM FALSE )
endif ( )
2015-02-28 00:05:29 +01:00
check_include_files ( endian.h HAVE_ENDIAN_H )
2014-11-17 03:52:24 +01:00
2011-01-08 16:34:25 +01:00
configure_file (
2011-01-18 14:05:29 +01:00
" $ { P R O J E C T _ S O U R C E _ D I R } / c m a k e _ c o n f i g . h . i n "
" $ { P R O J E C T _ B I N A R Y _ D I R } / c m a k e _ c o n f i g . h "
2011-01-08 16:34:25 +01:00
)
2011-01-08 02:10:20 +01:00
2015-02-28 00:05:29 +01:00
2013-09-25 04:29:07 +02:00
# Add a target that always rebuilds cmake_config_githash.h
add_custom_target ( GenerateVersion
C O M M A N D $ { C M A K E _ C O M M A N D }
- D " G E N E R A T E _ V E R S I O N _ S O U R C E _ D I R = $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } "
- D " G E N E R A T E _ V E R S I O N _ B I N A R Y _ D I R = $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } "
- D " V E R S I O N _ S T R I N G = $ { V E R S I O N _ S T R I N G } "
2015-05-05 00:46:49 +02:00
- D " D E V E L O P M E N T _ B U I L D = $ { D E V E L O P M E N T _ B U I L D } "
2013-09-25 04:29:07 +02:00
- P " $ { C M A K E _ S O U R C E _ D I R } / c m a k e / M o d u l e s / G e n e r a t e V e r s i o n . c m a k e "
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } " )
2015-02-28 00:05:29 +01:00
2015-04-07 12:13:12 +02:00
add_subdirectory ( threading )
2018-04-17 15:54:50 +02:00
add_subdirectory ( content )
2017-11-08 23:56:20 +01:00
add_subdirectory ( database )
add_subdirectory ( mapgen )
2015-02-21 11:51:12 +01:00
add_subdirectory ( network )
2013-05-25 00:51:02 +02:00
add_subdirectory ( script )
add_subdirectory ( util )
2018-03-16 08:41:33 +01:00
add_subdirectory ( server )
2013-05-25 00:51:02 +02:00
2024-09-06 17:12:33 +02:00
# Source files that are identical between server & client builds.
# This means they don't use or include anything that depends on the
# CHECK_CLIENT_BUILD() macro. If you wrongly add something here there will be
# a compiler error and you need to instead add it to client_SRCS or common_SRCS.
set ( independent_SRCS
2015-07-25 07:43:32 +02:00
c h a t . c p p
2024-09-09 21:34:56 +02:00
c o n t e n t _ n o d e m e t a . c p p
2024-09-06 17:12:33 +02:00
c o n v e r t _ j s o n . c p p
2024-09-09 21:34:56 +02:00
c r a f t d e f . c p p
d e b u g . c p p
2024-09-06 17:12:33 +02:00
f a c e _ p o s i t i o n _ c a c h e . c p p
g e t t e x t _ p l u r a l _ f o r m . c p p
h t t p f e t c h . c p p
h u d . c p p
2024-09-09 20:39:35 +02:00
i n v e n t o r y . c p p
2024-09-06 17:12:33 +02:00
i t e m s t a c k m e t a d a t a . c p p
l i g h t i n g . c p p
l o g . c p p
m e t a d a t a . c p p
m o d c h a n n e l s . c p p
n a m e i d m a p p i n g . c p p
2024-09-09 20:39:35 +02:00
n o d e m e t a d a t a . c p p
2024-09-06 17:12:33 +02:00
n o d e t i m e r . c p p
n o i s e . c p p
o b j d e f . c p p
o b j e c t _ p r o p e r t i e s . c p p
p a r t i c l e s . c p p
p r o f i l e r . c p p
s e r i a l i z a t i o n . c p p
2024-09-09 21:34:56 +02:00
s e t t i n g s . c p p
2024-09-06 17:12:33 +02:00
s t a t i c o b j e c t . c p p
t e r m i n a l _ c h a t _ c o n s o l e . c p p
t e x t u r e _ o v e r r i d e . c p p
t i l e a n i m a t i o n . c p p
2024-09-09 21:34:56 +02:00
t o o l . c p p
$ { c o m m o n _ n e t w o r k _ S R C S }
$ { c o n t e n t _ S R C S }
$ { d a t a b a s e _ S R C S }
2024-09-06 17:12:33 +02:00
$ { t h r e a d i n g _ S R C S }
2024-09-09 21:34:56 +02:00
$ { u t i l _ S R C S }
2024-09-06 17:12:33 +02:00
)
# /!\ Consider carefully before adding files here /!\
set ( common_SRCS
2024-03-17 14:59:50 +01:00
c l i e n t d y n a m i c i n f o . c p p
2014-09-12 00:22:05 +02:00
c o l l i s i o n . c p p
2017-06-06 16:19:04 +02:00
c o n t e n t _ m a p n o d e . c p p
2014-09-12 00:22:05 +02:00
d e f a u l t s e t t i n g s . c p p
e m e r g e . c p p
e n v i r o n m e n t . c p p
f i l e s y s . c p p
g e t t e x t . c p p
i n v e n t o r y m a n a g e r . c p p
2012-01-12 06:10:39 +01:00
i t e m d e f . c p p
2014-09-12 00:22:05 +02:00
l i g h t . c p p
2018-11-28 20:01:49 +01:00
m a i n . c p p
2016-06-25 00:15:56 +02:00
m a p _ s e t t i n g s _ m a n a g e r . c p p
2024-09-06 17:12:33 +02:00
m a p . c p p
2014-09-12 00:22:05 +02:00
m a p b l o c k . c p p
m a p n o d e . c p p
m a p s e c t o r . c p p
n o d e d e f . c p p
p a t h f i n d e r . c p p
p l a y e r . c p p
2011-01-08 02:10:20 +01:00
p o r t i n g . c p p
2016-07-23 21:11:20 +02:00
r a y c a s t . c p p
2016-11-27 21:51:40 +01:00
r e f l o w s c a n . c p p
2016-10-08 19:08:23 +02:00
r e m o t e p l a y e r . c p p
2014-09-12 00:22:05 +02:00
r o l l b a c k _ i n t e r f a c e . c p p
2011-01-08 02:10:20 +01:00
s e r v e r . c p p
2017-01-08 11:01:35 +01:00
s e r v e r e n v i r o n m e n t . c p p
2024-03-06 21:04:57 +01:00
s e r v e r m a p . c p p
2017-01-31 18:05:03 +01:00
t r a n s l a t i o n . c p p
2014-09-12 00:22:05 +02:00
v e r s i o n . c p p
v o x e l . c p p
v o x e l a l g o r i t h m s . c p p
2013-08-11 04:09:45 +02:00
$ { c o m m o n _ S C R I P T _ S R C S }
2024-09-06 17:12:33 +02:00
$ { c o m m o n _ s e r v e r _ S R C S }
$ { m a p g e n _ S R C S }
2024-09-09 21:34:56 +02:00
$ { s e r v e r _ n e t w o r k _ S R C S }
2011-01-08 02:10:20 +01:00
)
2023-05-26 15:21:23 +02:00
if ( ANDROID )
set ( common_SRCS ${ common_SRCS } porting_android.cpp )
endif ( )
2020-04-16 20:43:49 +02:00
if ( BUILD_UNITTESTS )
2024-09-06 17:12:33 +02:00
add_subdirectory ( unittest )
2020-04-16 20:43:49 +02:00
set ( common_SRCS ${ common_SRCS } ${ UNITTEST_SRCS } )
endif ( )
2022-05-06 22:17:16 +02:00
if ( BUILD_BENCHMARKS )
2024-09-06 17:12:33 +02:00
add_subdirectory ( benchmark )
2022-05-06 22:17:16 +02:00
set ( common_SRCS ${ common_SRCS } ${ BENCHMARK_SRCS } )
endif ( )
2015-02-28 00:05:29 +01:00
2024-06-07 17:58:36 +02:00
if ( BUILD_UNITTESTS OR BUILD_BENCHMARKS )
set ( common_SRCS ${ common_SRCS } catch.cpp )
endif ( )
2014-03-02 23:49:19 +01:00
# This gives us the icon and file version information
2011-10-15 16:05:16 +02:00
if ( WIN32 )
2015-02-28 00:05:29 +01:00
set ( WINRESOURCE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../misc/winresource.rc" )
2024-10-27 14:04:51 +01:00
set ( EXE_MANIFEST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../misc/luanti.exe.manifest" )
2011-10-15 16:05:16 +02:00
if ( MINGW )
2012-04-02 20:01:58 +02:00
if ( NOT CMAKE_RC_COMPILER )
set ( CMAKE_RC_COMPILER "windres.exe" )
endif ( )
2011-10-15 16:05:16 +02:00
ADD_CUSTOM_COMMAND ( OUTPUT ${ CMAKE_CURRENT_BINARY_DIR } /winresource_rc.o
2014-03-11 17:48:34 +01:00
C O M M A N D $ { C M A K E _ R C _ C O M P I L E R } - I $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } - I $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R }
2012-04-02 20:01:58 +02:00
- i $ { W I N R E S O U R C E _ F I L E }
- o $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / w i n r e s o u r c e _ r c . o
2014-03-02 23:49:19 +01:00
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R }
2024-10-27 14:04:51 +01:00
D E P E N D S $ { W I N R E S O U R C E _ F I L E } $ { E X E _ M A N I F E S T _ F I L E } )
2018-02-19 14:57:01 +01:00
SET ( extra_windows_SRCS ${ CMAKE_CURRENT_BINARY_DIR } /winresource_rc.o )
2011-10-15 16:05:16 +02:00
else ( MINGW ) # Probably MSVC
2024-10-27 14:04:51 +01:00
set ( extra_windows_SRCS ${ WINRESOURCE_FILE } ${ EXE_MANIFEST_FILE } )
2011-10-15 16:05:16 +02:00
endif ( MINGW )
2011-07-30 23:39:43 +02:00
endif ( )
2015-02-21 11:51:12 +01:00
2015-02-28 00:05:29 +01:00
# Client sources
2015-02-21 11:51:12 +01:00
if ( BUILD_CLIENT )
add_subdirectory ( client )
2024-09-06 17:12:33 +02:00
add_subdirectory ( gui )
add_subdirectory ( irrlicht_changes )
2015-02-21 11:51:12 +01:00
endif ( BUILD_CLIENT )
2015-02-28 00:05:29 +01:00
set ( client_SRCS
$ { c l i e n t _ S R C S }
2011-01-28 00:38:16 +01:00
$ { c o m m o n _ S R C S }
2017-11-08 23:56:20 +01:00
$ { g u i _ S R C S }
2015-02-21 11:51:12 +01:00
$ { c l i e n t _ n e t w o r k _ S R C S }
2016-05-31 17:30:11 +02:00
$ { c l i e n t _ i r r l i c h t _ c h a n g e s _ S R C S }
2015-02-28 00:05:29 +01:00
$ { c l i e n t _ S C R I P T _ S R C S }
2011-01-28 00:38:16 +01:00
)
2020-04-16 20:43:49 +02:00
if ( BUILD_UNITTESTS )
set ( client_SRCS ${ client_SRCS } ${ UNITTEST_CLIENT_SRCS } )
endif ( )
2022-05-06 22:17:16 +02:00
if ( BUILD_BENCHMARKS )
set ( client_SRCS ${ client_SRCS } ${ BENCHMARK_CLIENT_SRCS } )
endif ( )
2011-02-20 23:45:14 +01:00
# Server sources
2024-09-06 17:12:33 +02:00
# (nothing here because a client always comes with a server)
2015-02-28 00:05:29 +01:00
set ( server_SRCS
2011-01-28 00:38:16 +01:00
$ { c o m m o n _ S R C S }
2011-01-08 16:34:25 +01:00
)
2018-02-25 12:26:41 +01:00
# Avoid source_group on broken CMake version.
# see issue #7074 #7075
if ( CMAKE_VERSION VERSION_GREATER 3.8.1 )
2018-02-19 15:01:10 +01:00
source_group ( TREE ${ PROJECT_SOURCE_DIR } PREFIX "Source Files" FILES ${ client_SRCS } )
source_group ( TREE ${ PROJECT_SOURCE_DIR } PREFIX "Source Files" FILES ${ server_SRCS } )
endif ( )
2011-01-08 02:10:20 +01:00
include_directories (
2011-01-08 16:34:25 +01:00
$ { P R O J E C T _ B I N A R Y _ D I R }
2013-05-25 00:51:02 +02:00
$ { P R O J E C T _ S O U R C E _ D I R }
2021-12-02 00:30:40 +01:00
$ { P R O J E C T _ S O U R C E _ D I R } / s c r i p t
)
include_directories ( SYSTEM
2011-01-08 16:34:25 +01:00
$ { Z L I B _ I N C L U D E _ D I R }
2021-09-01 02:32:31 +02:00
$ { Z S T D _ I N C L U D E _ D I R }
2011-07-19 20:02:31 +02:00
$ { S Q L I T E 3 _ I N C L U D E _ D I R }
2011-11-10 20:45:45 +01:00
$ { L U A _ I N C L U D E _ D I R }
2015-04-12 06:18:48 +02:00
$ { G M P _ I N C L U D E _ D I R }
2013-02-21 23:00:44 +01:00
$ { J S O N _ I N C L U D E _ D I R }
2021-11-26 19:31:05 +01:00
$ { L U A _ B I T _ I N C L U D E _ D I R }
2024-10-27 14:04:51 +01:00
# on Android, Luanti depends on SDL2 directly
2024-03-25 23:06:51 +01:00
# on other platforms, only IrrlichtMt depends on SDL2
" $ < $ < P L A T F O R M _ I D : A n d r o i d > : $ { S D L 2 _ I N C L U D E _ D I R S } > "
2011-01-08 02:10:20 +01:00
)
2019-03-02 10:56:01 +01:00
if ( USE_GETTEXT )
include_directories ( ${ GETTEXT_INCLUDE_DIR } )
endif ( )
2015-02-28 00:05:29 +01:00
2022-01-08 14:53:25 +01:00
if ( BUILD_CLIENT )
2021-12-02 00:30:40 +01:00
include_directories ( SYSTEM
2022-01-08 14:53:25 +01:00
$ { F R E E T Y P E _ I N C L U D E _ D I R S }
$ { S O U N D _ I N C L U D E _ D I R S }
)
2015-02-28 00:05:29 +01:00
endif ( )
2013-02-03 13:19:09 +01:00
2013-02-21 23:00:44 +01:00
if ( USE_CURL )
2015-02-28 00:05:29 +01:00
include_directories ( ${ CURL_INCLUDE_DIR } )
endif ( )
2013-02-21 23:00:44 +01:00
2021-04-11 17:10:06 +02:00
# When cross-compiling assume the user doesn't want to run the executable anyway,
2024-10-27 14:04:51 +01:00
# otherwise place it in <source dir>/bin/ since Luanti can only run from there.
2021-04-11 17:10:06 +02:00
if ( NOT CMAKE_CROSSCOMPILING )
set ( EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin" )
endif ( )
2015-02-28 00:05:29 +01:00
2024-09-06 17:12:33 +02:00
# shared object target
add_library ( EngineCommon OBJECT
$ { i n d e p e n d e n t _ S R C S }
)
add_dependencies ( EngineCommon GenerateVersion )
2024-09-09 21:34:56 +02:00
target_link_libraries ( EngineCommon
s h a 2 5 6
)
2024-09-06 17:12:33 +02:00
get_target_property (
I R R L I C H T _ I N C L U D E S I r r l i c h t M t : : I r r l i c h t M t I N T E R F A C E _ I N C L U D E _ D I R E C T O R I E S )
target_include_directories ( EngineCommon PRIVATE ${ IRRLICHT_INCLUDES } )
if ( PRECOMPILE_HEADERS )
target_precompile_headers ( EngineCommon PRIVATE ${ PRECOMPILED_HEADERS_LIST } )
endif ( )
2024-11-10 19:06:52 +01:00
if ( APPLE )
# Configure the Info.plist file
configure_file (
" $ { C M A K E _ S O U R C E _ D I R } / m i s c / m a c o s / I n f o . p l i s t . i n "
" $ { C M A K E _ B I N A R Y _ D I R } / I n f o . p l i s t "
)
endif ( )
2011-01-08 16:34:25 +01:00
if ( BUILD_CLIENT )
2024-09-06 17:12:33 +02:00
# client target
2023-05-26 15:21:23 +02:00
if ( ANDROID )
2024-09-06 17:12:33 +02:00
add_library ( ${ PROJECT_NAME } SHARED )
2023-05-26 15:21:23 +02:00
else ( )
2024-09-06 17:12:33 +02:00
add_executable ( ${ PROJECT_NAME } )
2023-05-26 15:21:23 +02:00
endif ( )
2024-11-10 19:06:52 +01:00
if ( CMAKE_GENERATOR STREQUAL "Xcode" )
# File with used entitlements
set ( XCODE_CODE_SIGN_ENTITLEMENTS "${CMAKE_SOURCE_DIR}/misc/macos/entitlements/release.entitlements" CACHE FILEPATH "Path to entitlements file to be used with Xcode signing" )
set ( EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/build" )
set ( CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/build" )
target_sources ( ${ PROJECT_NAME } PUBLIC ${ client_RESOURCES } )
add_dependencies ( ${ PROJECT_NAME } translations )
set_target_properties ( ${ PROJECT_NAME } PROPERTIES
M A C O S X _ B U N D L E T R U E
M A C O S X _ B U N D L E _ I N F O _ P L I S T " $ { C M A K E _ B I N A R Y _ D I R } / I n f o . p l i s t "
R E S O U R C E " $ { c l i e n t _ R E S O U R C E S } "
X C O D E _ A T T R I B U T E _ P R O D U C T _ B U N D L E _ I D E N T I F I E R " o r g . l u a n t i . l u a n t i "
X C O D E _ A T T R I B U T E _ E N A B L E _ H A R D E N E D _ R U N T I M E " Y E S "
X C O D E _ A T T R I B U T E _ I N S T A L L _ P A T H " / A p p l i c a t i o n s "
X C O D E _ A T T R I B U T E _ S K I P _ I N S T A L L " N O "
X C O D E _ A T T R I B U T E _ D E B U G _ I N F O R M A T I O N _ F O R M A T " d w a r f - w i t h - d s y m "
X C O D E _ A T T R I B U T E _ G C C _ G E N E R A T E _ D E B U G G I N G _ S Y M B O L S " Y E S "
X C O D E _ A T T R I B U T E _ C O N F I G U R A T I O N _ B U I L D _ D I R " $ ( i n h e r i t e d ) "
X C O D E _ A T T R I B U T E _ C O D E _ S I G N _ E N T I T L E M E N T S " $ { X C O D E _ C O D E _ S I G N _ E N T I T L E M E N T S } "
)
# Prinv env variables to file, for debugging purposes
#add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E env bash ${CMAKE_SOURCE_DIR}/util/xcode/capture_env.sh ${CMAKE_BINARY_DIR}/post_env.log
#)
add_custom_command ( TARGET ${ PROJECT_NAME } POST_BUILD
C O M M A N D $ { C M A K E _ C O M M A N D } - P $ { C M A K E _ S O U R C E _ D I R } / u t i l / x c o d e / i n s t a l l _ r e s o u r c e s . c m a k e
- D T A R G E T _ D I R = $ < T A R G E T _ F I L E _ D I R : $ { P R O J E C T _ N A M E } >
- D B I N A R Y _ D I R = $ { C M A K E _ B I N A R Y _ D I R }
- D P R O J E C T _ N A M E = $ { P R O J E C T _ N A M E }
C O M M E N T " C h e c k i n g I N S T A L L _ R O O T a n d c o p y i n g r e s o u r c e s "
)
endif ( )
2024-09-06 17:12:33 +02:00
list ( SORT client_SRCS )
target_sources ( ${ PROJECT_NAME } PRIVATE
$ < T A R G E T _ O B J E C T S : E n g i n e C o m m o n >
$ { c l i e n t _ S R C S }
$ { e x t r a _ w i n d o w s _ S R C S }
)
2021-01-29 17:35:29 +01:00
target_link_libraries (
2015-04-27 16:17:10 +02:00
$ { P R O J E C T _ N A M E }
2011-01-08 16:34:25 +01:00
$ { Z L I B _ L I B R A R I E S }
2021-07-27 19:11:27 +02:00
I r r l i c h t M t : : I r r l i c h t M t
2021-09-01 02:32:31 +02:00
$ { Z S T D _ L I B R A R Y }
2012-03-25 03:03:51 +02:00
$ { S O U N D _ L I B R A R I E S }
2011-07-19 20:02:31 +02:00
$ { S Q L I T E 3 _ L I B R A R Y }
2011-11-10 20:45:45 +01:00
$ { L U A _ L I B R A R Y }
2015-04-12 06:18:48 +02:00
$ { G M P _ L I B R A R Y }
2014-05-25 01:14:47 +02:00
$ { J S O N _ L I B R A R Y }
2021-11-26 19:31:05 +01:00
$ { L U A _ B I T _ L I B R A R Y }
2023-03-25 21:40:17 +01:00
s h a 2 5 6
2022-01-08 14:53:25 +01:00
$ { F R E E T Y P E _ L I B R A R Y }
2011-09-23 07:48:58 +02:00
$ { P L A T F O R M _ L I B S }
2024-10-27 14:04:51 +01:00
# on Android, Luanti depends on SDL2 directly
2024-03-25 23:06:51 +01:00
# on other platforms, only IrrlichtMt depends on SDL2
" $ < $ < P L A T F O R M _ I D : A n d r o i d > : $ { S D L 2 _ L I B R A R I E S } > "
2011-01-08 16:34:25 +01:00
)
2024-10-15 15:47:23 +02:00
target_compile_definitions ( ${ PROJECT_NAME } PRIVATE "MT_BUILDTARGET=1" )
2021-01-29 17:35:29 +01:00
if ( NOT USE_LUAJIT )
set_target_properties ( ${ PROJECT_NAME } PROPERTIES
# This is necessary for dynamic Lua modules
# to work when Lua is statically linked (issue #10806)
E N A B L E _ E X P O R T S 1
)
endif ( )
2019-03-02 10:56:01 +01:00
if ( USE_GETTEXT )
target_link_libraries (
$ { P R O J E C T _ N A M E }
$ { G E T T E X T _ L I B R A R Y }
)
endif ( )
2012-12-14 12:30:17 +01:00
if ( USE_CURL )
target_link_libraries (
2015-04-27 16:17:10 +02:00
$ { P R O J E C T _ N A M E }
2012-12-14 12:30:17 +01:00
$ { C U R L _ L I B R A R Y }
)
2015-02-28 00:05:29 +01:00
endif ( )
2022-01-08 14:53:25 +01:00
if ( FREETYPE_PKGCONFIG_FOUND )
set_target_properties ( ${ PROJECT_NAME }
P R O P E R T I E S
C O M P I L E _ F L A G S " $ { F R E E T Y P E _ C F L A G S _ S T R } "
)
2015-02-28 00:05:29 +01:00
endif ( )
2015-07-25 07:43:32 +02:00
if ( USE_CURSES )
target_link_libraries ( ${ PROJECT_NAME } ${ CURSES_LIBRARIES } )
endif ( )
2016-05-14 11:00:42 +02:00
if ( USE_POSTGRESQL )
2019-04-07 18:45:25 +02:00
target_link_libraries ( ${ PROJECT_NAME } ${ PostgreSQL_LIBRARIES } )
2016-05-14 11:00:42 +02:00
endif ( )
2012-10-22 23:18:44 +02:00
if ( USE_LEVELDB )
2015-04-27 16:17:10 +02:00
target_link_libraries ( ${ PROJECT_NAME } ${ LEVELDB_LIBRARY } )
2015-02-28 00:05:29 +01:00
endif ( )
2014-04-08 21:39:21 +02:00
if ( USE_REDIS )
2015-04-27 16:17:10 +02:00
target_link_libraries ( ${ PROJECT_NAME } ${ REDIS_LIBRARY } )
2015-02-28 00:05:29 +01:00
endif ( )
2020-04-27 08:31:37 +02:00
if ( USE_PROMETHEUS )
target_link_libraries ( ${ PROJECT_NAME } ${ PROMETHEUS_LIBRARIES } )
endif ( )
2015-07-11 02:24:00 +02:00
if ( USE_SPATIAL )
target_link_libraries ( ${ PROJECT_NAME } ${ SPATIAL_LIBRARY } )
endif ( )
2024-05-22 18:39:53 +02:00
if ( BUILD_UNITTESTS OR BUILD_BENCHMARKS )
target_link_libraries ( ${ PROJECT_NAME } Catch2::Catch2 )
2022-05-06 22:17:16 +02:00
endif ( )
2024-09-15 13:47:45 +02:00
if ( BUILD_WITH_TRACY )
target_link_libraries ( ${ PROJECT_NAME } Tracy::TracyClient )
endif ( )
2023-03-25 23:19:05 +01:00
if ( PRECOMPILE_HEADERS )
target_precompile_headers ( ${ PROJECT_NAME } PRIVATE ${ PRECOMPILED_HEADERS_LIST } )
endif ( )
2011-01-08 16:34:25 +01:00
endif ( BUILD_CLIENT )
2011-01-09 16:28:31 +01:00
2015-02-28 00:05:29 +01:00
2011-01-08 16:34:25 +01:00
if ( BUILD_SERVER )
2024-09-06 17:12:33 +02:00
# server target
add_executable ( ${ PROJECT_NAME } server )
list ( SORT server_SRCS )
target_sources ( ${ PROJECT_NAME } server PRIVATE
$ < T A R G E T _ O B J E C T S : E n g i n e C o m m o n >
$ { s e r v e r _ S R C S }
$ { e x t r a _ w i n d o w s _ S R C S }
)
2021-07-27 19:11:27 +02:00
2024-09-06 17:12:33 +02:00
# don't link the irrlicht library
2021-07-27 19:11:27 +02:00
get_target_property (
I R R L I C H T _ I N C L U D E S I r r l i c h t M t : : I r r l i c h t M t I N T E R F A C E _ I N C L U D E _ D I R E C T O R I E S )
target_include_directories ( ${ PROJECT_NAME } server PRIVATE ${ IRRLICHT_INCLUDES } )
2011-01-08 16:34:25 +01:00
target_link_libraries (
2015-04-27 16:17:10 +02:00
$ { P R O J E C T _ N A M E } s e r v e r
2011-01-08 16:34:25 +01:00
$ { Z L I B _ L I B R A R I E S }
2021-09-01 02:32:31 +02:00
$ { Z S T D _ L I B R A R Y }
2011-07-19 20:02:31 +02:00
$ { S Q L I T E 3 _ L I B R A R Y }
2013-02-21 23:00:44 +01:00
$ { J S O N _ L I B R A R Y }
2011-11-10 20:45:45 +01:00
$ { L U A _ L I B R A R Y }
2021-11-26 19:31:05 +01:00
$ { L U A _ B I T _ L I B R A R Y }
2023-03-25 21:40:17 +01:00
s h a 2 5 6
2015-04-12 06:18:48 +02:00
$ { G M P _ L I B R A R Y }
2011-09-23 07:48:58 +02:00
$ { P L A T F O R M _ L I B S }
2011-01-08 16:34:25 +01:00
)
2024-10-15 15:47:23 +02:00
target_compile_definitions ( ${ PROJECT_NAME } server PRIVATE "MT_BUILDTARGET=2" )
2021-01-29 17:35:29 +01:00
if ( NOT USE_LUAJIT )
set_target_properties ( ${ PROJECT_NAME } server PROPERTIES
# This is necessary for dynamic Lua modules
# to work when Lua is statically linked (issue #10806)
E N A B L E _ E X P O R T S 1
)
endif ( )
2019-03-02 10:56:01 +01:00
if ( USE_GETTEXT )
target_link_libraries ( ${ PROJECT_NAME } server ${ GETTEXT_LIBRARY } )
endif ( )
2015-07-25 07:43:32 +02:00
if ( USE_CURSES )
target_link_libraries ( ${ PROJECT_NAME } server ${ CURSES_LIBRARIES } )
endif ( )
2016-05-14 11:00:42 +02:00
if ( USE_POSTGRESQL )
2019-04-07 18:45:25 +02:00
target_link_libraries ( ${ PROJECT_NAME } server ${ PostgreSQL_LIBRARIES } )
2016-05-14 11:00:42 +02:00
endif ( )
2012-10-22 23:18:44 +02:00
if ( USE_LEVELDB )
2015-04-27 16:17:10 +02:00
target_link_libraries ( ${ PROJECT_NAME } server ${ LEVELDB_LIBRARY } )
2015-02-28 00:05:29 +01:00
endif ( )
2014-04-08 21:39:21 +02:00
if ( USE_REDIS )
2015-04-27 16:17:10 +02:00
target_link_libraries ( ${ PROJECT_NAME } server ${ REDIS_LIBRARY } )
2015-02-28 00:05:29 +01:00
endif ( )
2020-04-27 08:31:37 +02:00
if ( USE_PROMETHEUS )
target_link_libraries ( ${ PROJECT_NAME } server ${ PROMETHEUS_LIBRARIES } )
endif ( )
2015-07-11 02:24:00 +02:00
if ( USE_SPATIAL )
target_link_libraries ( ${ PROJECT_NAME } server ${ SPATIAL_LIBRARY } )
endif ( )
2013-02-21 23:00:44 +01:00
if ( USE_CURL )
target_link_libraries (
2015-04-27 16:17:10 +02:00
$ { P R O J E C T _ N A M E } s e r v e r
2013-02-21 23:00:44 +01:00
$ { C U R L _ L I B R A R Y }
)
2015-02-28 00:05:29 +01:00
endif ( )
2024-05-22 18:39:53 +02:00
if ( BUILD_UNITTESTS OR BUILD_BENCHMARKS )
target_link_libraries ( ${ PROJECT_NAME } server Catch2::Catch2 )
2022-05-06 22:17:16 +02:00
endif ( )
2024-09-15 13:47:45 +02:00
if ( BUILD_WITH_TRACY )
target_link_libraries ( ${ PROJECT_NAME } server Tracy::TracyClient )
endif ( )
2023-03-25 23:19:05 +01:00
if ( PRECOMPILE_HEADERS )
target_precompile_headers ( ${ PROJECT_NAME } server PRIVATE ${ PRECOMPILED_HEADERS_LIST } )
endif ( )
2011-01-08 16:34:25 +01:00
endif ( BUILD_SERVER )
2011-01-08 02:10:20 +01:00
2023-10-05 17:29:02 +02:00
# See issue #4638
FILE ( READ "${CMAKE_SOURCE_DIR}/src/unsupported_language_list.txt" GETTEXT_BLACKLISTED_LOCALES )
STRING ( REGEX REPLACE "\n" ";" GETTEXT_BLACKLISTED_LOCALES "${GETTEXT_BLACKLISTED_LOCALES}" )
2016-12-21 14:15:48 +01:00
2021-07-20 17:53:28 +02:00
option ( APPLY_LOCALE_BLACKLIST "Use a blacklist to avoid known broken locales" TRUE )
2016-12-21 14:15:48 +01:00
2020-04-29 12:49:55 +02:00
if ( GETTEXTLIB_FOUND AND APPLY_LOCALE_BLACKLIST )
2016-12-21 14:15:48 +01:00
set ( GETTEXT_USED_LOCALES "" )
foreach ( LOCALE ${ GETTEXT_AVAILABLE_LOCALES } )
2021-01-29 17:35:29 +01:00
if ( NOT "${LOCALE}" IN_LIST GETTEXT_BLACKLISTED_LOCALES )
2016-12-21 14:15:48 +01:00
list ( APPEND GETTEXT_USED_LOCALES ${ LOCALE } )
endif ( )
endforeach ( )
message ( STATUS "Locale blacklist applied; Locales used: ${GETTEXT_USED_LOCALES}" )
2021-07-20 17:53:28 +02:00
elseif ( GETTEXTLIB_FOUND )
set ( GETTEXT_USED_LOCALES ${ GETTEXT_AVAILABLE_LOCALES } )
2016-12-21 14:15:48 +01:00
endif ( )
2013-02-21 23:00:44 +01:00
2011-01-08 16:34:25 +01:00
# Set some optimizations and tweaks
2020-04-08 20:14:08 +02:00
include ( CheckCSourceCompiles )
2024-01-17 20:51:49 +01:00
2022-09-26 16:05:00 +02:00
set ( CMAKE_REQUIRED_INCLUDES ${ LUA_INCLUDE_DIR } )
if ( USE_LUAJIT )
2024-04-05 14:11:49 +02:00
# libm usually required if statically linking
set ( CMAKE_REQUIRED_LIBRARIES ${ LUA_LIBRARY } m )
2022-09-26 16:05:00 +02:00
# LuaJIT provides exactly zero ways to determine how recent it is (the version
# is unchanged since 2017), however it happens that string buffers were added
# after the changes which we care about so that works as an indicator.
# (https://github.com/LuaJIT/LuaJIT/commit/4c6b669 March 2021)
2024-04-05 14:11:49 +02:00
# Note: This is no longer true as of August 2023, but we're keeping the old check.
2022-09-26 16:05:00 +02:00
unset ( HAVE_RECENT_LJ CACHE )
check_symbol_exists ( luaopen_string_buffer "lualib.h" HAVE_RECENT_LJ )
if ( NOT HAVE_RECENT_LJ )
string ( CONCAT explanation_msg
" Y o u a r e u s i n g a r e l a t i v e l y o l d v e r s i o n o f L u a J I T . W e r e c o m m e n d "
" r u n n i n g a r e c e n t version ( from git ) a s o l d e r o n e s a r e k n o w n n o t "
" t o b u i l d / w o r k c o r r e c t l y i n a l l c a s e s . \ n "
" T H I S A P P L I E S E S P E C I A L L Y O N m a c O S O R L i n u x / a a r c h 6 4 ! " )
message ( WARNING ${ explanation_msg } )
endif ( )
2022-10-15 12:02:02 +02:00
elseif ( NOT MSVC )
2022-09-26 16:05:00 +02:00
set ( CMAKE_REQUIRED_LIBRARIES "" )
2022-09-26 15:26:34 +02:00
unset ( HAVE_ATCCALL CACHE )
# Note: we need to check the function without having the library
# available for linking, so check_symbol_exists won't work.
2022-10-15 12:02:02 +02:00
# Incidentally this doesn't seem to work on MSVC...
2022-09-26 15:26:34 +02:00
check_c_source_compiles ( "#include <lua.h>\nint main(){return sizeof(lua_atccall);}" HAVE_ATCCALL )
if ( NOT HAVE_ATCCALL )
string ( CONCAT explanation_msg
2024-10-27 14:04:51 +01:00
" I t l o o k s l i k e y o u ' r e t r y i n g t o b u i l d $ { P R O J E C T _ N A M E _ C A P I T A L I Z E D } u s i n g a s y s t e m - w i d e "
2022-09-26 15:26:34 +02:00
" L u a i n s t a l l a t i o n . T h i s i s n o l o n g e r s u p p o r t e d b e c a u s e P U C L u a "
" c a n n o t i n t e r o p e r a t e w i t h C + + c o r r e c t l y . R e a d s r c / u n i t t e s t / t e s t _ l u a . c p p "
" f o r t e c h n i c a l d e t a i l s . " )
message ( FATAL_ERROR ${ explanation_msg } )
endif ( )
endif ( )
2011-01-08 23:49:32 +01:00
if ( MSVC )
# Visual Studio
2024-08-31 20:47:29 +02:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D _WIN32_WINNT=0x0601 /D WIN32_LEAN_AND_MEAN /D _CRT_SECURE_NO_WARNINGS" )
2011-01-08 23:49:32 +01:00
# EHa enables SEH exceptions (used for catching segfaults)
2020-09-29 19:39:53 +02:00
set ( CMAKE_CXX_FLAGS_RELEASE "/EHa /Ox /MD /GS- /Zi /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0" )
2017-06-27 11:54:40 +02:00
if ( CMAKE_SIZEOF_VOID_P EQUAL 4 )
set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:SSE" )
endif ( )
2017-04-07 07:14:39 +02:00
2020-09-29 19:39:53 +02:00
set ( CMAKE_EXE_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup" )
2011-01-23 16:29:15 +01:00
2015-02-01 09:08:04 +01:00
set ( CMAKE_CXX_FLAGS_SEMIDEBUG "/MDd /Zi /Ob0 /O1 /RTC1" )
2015-01-19 04:30:11 +01:00
2011-01-23 16:29:15 +01:00
# Debug build doesn't catch exceptions by itself
# Add some optimizations because otherwise it's VERY slow
2015-02-01 09:08:04 +01:00
set ( CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1" )
2011-10-14 08:55:39 +02:00
# Flags for C files (sqlite)
2018-10-26 21:37:51 +02:00
# /MD = dynamically link to MSVCRxxx.dll
set ( CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MD" )
2020-09-29 19:39:53 +02:00
# Flags that cannot be shared between cl and clang-cl
# https://clang.llvm.org/docs/UsersManual.html#clang-cl
2021-03-10 14:48:53 +01:00
if ( CMAKE_CXX_COMPILER_ID STREQUAL "Clang" )
2020-09-29 19:39:53 +02:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=lld" )
# Disable pragma-pack warning
set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wno-pragma-pack" )
else ( )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP" )
set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /TP /FD /GL" )
set ( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
endif ( )
2011-01-08 23:49:32 +01:00
else ( )
2020-01-22 21:41:03 +01:00
# GCC or compatible compilers such as Clang
2024-10-27 20:41:25 +01:00
set ( WARNING_FLAGS "-Wall -Wextra -Wno-unused-parameter -Werror=vla" )
2011-01-08 23:49:32 +01:00
if ( WARN_ALL )
2022-04-28 20:26:54 +02:00
set ( RELEASE_WARNING_FLAGS "${WARNING_FLAGS}" )
2011-01-08 23:49:32 +01:00
else ( )
2011-06-02 01:59:30 +02:00
set ( RELEASE_WARNING_FLAGS "" )
2011-01-08 23:49:32 +01:00
endif ( )
2020-04-08 20:14:08 +02:00
2012-04-02 20:01:58 +02:00
if ( MINGW )
2024-01-02 15:56:13 +01:00
if ( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
set ( OTHER_FLAGS "${OTHER_FLAGS} -mthreads" )
endif ( )
2023-05-03 12:54:42 +02:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WIN32_WINNT=0x0601 -DWIN32_LEAN_AND_MEAN" )
2012-04-02 20:01:58 +02:00
endif ( )
2020-04-16 10:23:48 +02:00
# Use a safe subset of flags to speed up math calculations:
# - we don't need errno or math exceptions
2022-10-03 18:13:35 +02:00
# - we don't deal with signed zero
set ( MATH_FLAGS "-fno-math-errno -fno-trapping-math -fno-signed-zeros" )
2020-04-16 10:23:48 +02:00
2021-12-28 14:06:24 +01:00
# Enable SSE for floating point math on 32-bit x86 by default
# reasoning see minetest issue #11810 and https://gcc.gnu.org/wiki/FloatingPointMath
if ( CMAKE_SIZEOF_VOID_P EQUAL 4 )
check_c_source_compiles ( "#ifndef __i686__\n#error\n#endif\nint main(){}" IS_I686 )
if ( IS_I686 )
message ( STATUS "Detected Intel x86: using SSE instead of x87 FPU" )
set ( OTHER_FLAGS "${OTHER_FLAGS} -mfpmath=sse -msse" )
endif ( )
endif ( )
2023-01-05 12:03:45 +01:00
set ( CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${OTHER_FLAGS} -pipe -funroll-loops -O3 -fomit-frame-pointer" )
if ( CMAKE_SYSTEM_NAME STREQUAL "Linux"
A N D C M A K E _ C X X _ C O M P I L E R _ I D S T R E Q U A L " C l a n g "
A N D C M A K E _ C X X _ C O M P I L E R _ V E R S I O N M A T C H E S " ^ 9 \ \ . " )
# Clang 9 has broken -ffast-math on glibc
2014-06-26 20:30:22 +02:00
else ( )
2023-01-05 12:03:45 +01:00
set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MATH_FLAGS}" )
2021-03-10 14:48:53 +01:00
endif ( )
2022-04-28 20:26:54 +02:00
set ( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -g" )
set ( CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 ${WARNING_FLAGS} ${OTHER_FLAGS}" )
set ( CMAKE_CXX_FLAGS_DEBUG "-g -O0 ${WARNING_FLAGS} ${OTHER_FLAGS}" )
2011-02-15 15:11:24 +01:00
2022-07-17 12:07:57 +02:00
if ( UNIX )
# enable assertions for libstdc++ or libc++
set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wp,-D_GLIBCXX_ASSERTIONS -Wp,-D_LIBCPP_ENABLE_ASSERTIONS=1" )
endif ( )
2011-02-15 15:11:24 +01:00
if ( USE_GPROF )
set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg" )
endif ( )
2022-04-03 21:44:22 +02:00
if ( MINGW )
2024-01-02 15:56:13 +01:00
set ( CMAKE_EXE_LINKER_FLAGS_RELEASE "-mwindows" )
2022-04-03 21:44:22 +02:00
endif ( )
2011-01-08 23:49:32 +01:00
endif ( )
2011-01-08 16:34:25 +01:00
# Installation
2015-02-28 00:05:29 +01:00
2012-03-25 21:50:09 +02:00
if ( WIN32 )
2021-10-25 22:33:13 +02:00
if ( EXTRA_DLL )
install ( FILES ${ EXTRA_DLL } DESTINATION ${ BINDIR } )
endif ( )
2019-06-10 03:56:55 +02:00
if ( VCPKG_APPLOCAL_DEPS )
# Collect the dll's from the output path
install ( DIRECTORY ${ EXECUTABLE_OUTPUT_PATH } /Release/
2019-09-29 13:41:13 +02:00
D E S T I N A T I O N $ { B I N D I R }
2019-06-10 03:56:55 +02:00
C O N F I G U R A T I O N S R e l e a s e
F I L E S _ M A T C H I N G P A T T E R N " * . d l l " )
install ( DIRECTORY ${ EXECUTABLE_OUTPUT_PATH } /Debug/
D E S T I N A T I O N $ { B I N D I R }
C O N F I G U R A T I O N S D e b u g
F I L E S _ M A T C H I N G P A T T E R N " * . d l l " )
install ( DIRECTORY ${ EXECUTABLE_OUTPUT_PATH } /RelWithDebInfo/
D E S T I N A T I O N $ { B I N D I R }
C O N F I G U R A T I O N S R e l W i t h D e b I n f o
F I L E S _ M A T C H I N G P A T T E R N " * . d l l " )
install ( DIRECTORY ${ EXECUTABLE_OUTPUT_PATH } /MinSizeRel/
D E S T I N A T I O N $ { B I N D I R }
2020-01-22 21:41:03 +01:00
C O N F I G U R A T I O N S M i n S i z e R e l
2019-06-10 03:56:55 +02:00
F I L E S _ M A T C H I N G P A T T E R N " * . d l l " )
else ( )
# Use the old-style way to install dll's
2021-03-10 14:48:53 +01:00
if ( BUILD_CLIENT AND USE_SOUND )
2019-06-10 03:56:55 +02:00
if ( OPENAL_DLL )
install ( FILES ${ OPENAL_DLL } DESTINATION ${ BINDIR } )
endif ( )
if ( OGG_DLL )
install ( FILES ${ OGG_DLL } DESTINATION ${ BINDIR } )
endif ( )
if ( VORBIS_DLL )
install ( FILES ${ VORBIS_DLL } DESTINATION ${ BINDIR } )
endif ( )
2012-03-25 21:50:09 +02:00
endif ( )
2024-04-15 16:16:15 +02:00
if ( BUILD_CLIENT )
if ( PNG_DLL )
install ( FILES ${ PNG_DLL } DESTINATION ${ BINDIR } )
endif ( )
if ( JPEG_DLL )
install ( FILES ${ JPEG_DLL } DESTINATION ${ BINDIR } )
endif ( )
if ( SDL2_DLL )
install ( FILES ${ SDL2_DLL } DESTINATION ${ BINDIR } )
endif ( )
if ( FREETYPE_DLL )
install ( FILES ${ FREETYPE_DLL } DESTINATION ${ BINDIR } )
endif ( )
endif ( )
2019-06-10 03:56:55 +02:00
if ( CURL_DLL )
install ( FILES ${ CURL_DLL } DESTINATION ${ BINDIR } )
2012-03-25 21:50:09 +02:00
endif ( )
2019-06-10 03:56:55 +02:00
if ( ZLIB_DLL )
install ( FILES ${ ZLIB_DLL } DESTINATION ${ BINDIR } )
2012-03-25 21:50:09 +02:00
endif ( )
2021-09-01 02:32:31 +02:00
if ( ZSTD_DLL )
install ( FILES ${ ZSTD_DLL } DESTINATION ${ BINDIR } )
endif ( )
2019-06-10 03:56:55 +02:00
if ( SQLITE3_DLL )
install ( FILES ${ SQLITE3_DLL } DESTINATION ${ BINDIR } )
endif ( )
if ( LEVELDB_DLL )
install ( FILES ${ LEVELDB_DLL } DESTINATION ${ BINDIR } )
endif ( )
if ( LUA_DLL )
install ( FILES ${ LUA_DLL } DESTINATION ${ BINDIR } )
2012-12-17 20:57:30 +01:00
endif ( )
2021-03-10 14:48:53 +01:00
if ( BUILD_CLIENT AND USE_GETTEXT AND GETTEXT_DLL )
install ( FILES ${ GETTEXT_DLL } DESTINATION ${ BINDIR } )
endif ( )
2017-07-18 21:29:23 +02:00
endif ( )
2012-03-25 21:50:09 +02:00
endif ( )
2011-01-08 16:34:25 +01:00
2024-10-27 14:04:51 +01:00
macro ( CreateLegacyAlias _cmake_target _old_path _new_name )
add_custom_target ( "${_cmake_target}" ALL
C O M M A N D " $ { C M A K E _ C O M M A N D } " - E c r e a t e _ s y m l i n k " $ { _ n e w _ n a m e } " " $ { _ o l d _ p a t h } "
W O R K I N G _ D I R E C T O R Y " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } " )
add_dependencies ( "${_cmake_target}" "${_new_name}" )
install ( PROGRAMS "${_old_path}" DESTINATION ${ BINDIR } )
endmacro ( )
2023-05-26 15:21:23 +02:00
if ( BUILD_CLIENT AND NOT ANDROID )
2015-04-27 16:17:10 +02:00
install ( TARGETS ${ PROJECT_NAME }
2015-03-10 18:29:13 +01:00
R U N T I M E D E S T I N A T I O N $ { B I N D I R }
L I B R A R Y D E S T I N A T I O N $ { B I N D I R }
A R C H I V E D E S T I N A T I O N $ { B I N D I R }
B U N D L E D E S T I N A T I O N .
)
2024-10-27 14:04:51 +01:00
if ( UNIX )
CreateLegacyAlias ( minetest_alias "${EXECUTABLE_OUTPUT_PATH}/minetest" ${ PROJECT_NAME } )
endif ( )
2015-03-10 18:29:13 +01:00
if ( APPLE )
install ( CODE "
set ( BU_CHMOD_BUNDLE_ITEMS ON )
include ( BundleUtilities )
fixup_bundle ( \"\${CMAKE_INSTALL_PREFIX}/${BUNDLE_PATH}\" \"\" \"\${CMAKE_INSTALL_PREFIX}/${BINDIR}\")
" C O M P O N E N T R u n t i m e )
endif ( )
2011-01-08 16:34:25 +01:00
2011-07-24 13:58:51 +02:00
if ( USE_GETTEXT )
2016-12-21 14:15:48 +01:00
foreach ( LOCALE ${ GETTEXT_USED_LOCALES } )
2011-07-22 09:36:17 +02:00
set_mo_paths ( MO_BUILD_PATH MO_DEST_PATH ${ LOCALE } )
2015-04-27 16:17:10 +02:00
set ( MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo" )
2011-07-22 09:36:17 +02:00
install ( FILES ${ MO_BUILD_PATH } DESTINATION ${ MO_DEST_PATH } )
2015-02-28 00:05:29 +01:00
endforeach ( )
2011-07-21 14:46:14 +02:00
endif ( )
2022-01-08 14:53:25 +01:00
install ( DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}"
F I L E S _ M A T C H I N G P A T T E R N " * . t t f " P A T T E R N " * . t x t " )
2023-05-26 15:21:23 +02:00
endif ( )
2011-01-08 16:34:25 +01:00
if ( BUILD_SERVER )
2015-04-27 16:17:10 +02:00
install ( TARGETS ${ PROJECT_NAME } server DESTINATION ${ BINDIR } )
2024-10-27 14:04:51 +01:00
if ( UNIX )
CreateLegacyAlias ( minetestserver_alias "${EXECUTABLE_OUTPUT_PATH}/minetestserver" ${ PROJECT_NAME } server )
endif ( )
2015-02-28 00:05:29 +01:00
endif ( )
2011-01-08 16:34:25 +01:00
2023-05-26 15:21:23 +02:00
if ( ANDROID )
# Android does this manually in app/build.gradle -> prepareAssets
# for now!
elseif ( USE_GETTEXT )
2011-07-22 09:36:17 +02:00
set ( MO_FILES )
2011-07-22 10:55:05 +02:00
2016-12-21 14:15:48 +01:00
foreach ( LOCALE ${ GETTEXT_USED_LOCALES } )
2015-04-27 16:17:10 +02:00
set ( PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/${PROJECT_NAME}.po" )
2011-07-24 10:19:31 +02:00
set_mo_paths ( MO_BUILD_PATH MO_DEST_PATH ${ LOCALE } )
2015-04-27 16:17:10 +02:00
set ( MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo" )
2011-07-24 10:19:31 +02:00
add_custom_command ( OUTPUT ${ MO_BUILD_PATH }
C O M M A N D $ { C M A K E _ C O M M A N D } - E m a k e _ d i r e c t o r y $ { M O _ B U I L D _ P A T H }
C O M M E N T " m o - u p d a t e [ $ { L O C A L E } ] : C r e a t i n g l o c a l e d i r e c t o r y . " )
add_custom_command (
O U T P U T $ { M O _ F I L E _ P A T H }
C O M M A N D $ { G E T T E X T _ M S G F M T } - o $ { M O _ F I L E _ P A T H } $ { P O _ F I L E _ P A T H }
D E P E N D S $ { M O _ B U I L D _ P A T H } $ { P O _ F I L E _ P A T H }
W O R K I N G _ D I R E C T O R Y " $ { G E T T E X T _ P O _ P A T H } / $ { L O C A L E } "
C O M M E N T " m o - u p d a t e [ $ { L O C A L E } ] : C r e a t i n g m o f i l e . "
)
2011-07-22 10:55:05 +02:00
2011-07-24 10:19:31 +02:00
set ( MO_FILES ${ MO_FILES } ${ MO_FILE_PATH } )
2015-02-28 00:05:29 +01:00
endforeach ( )
2011-07-22 09:36:17 +02:00
add_custom_target ( translations ALL COMMENT "mo update" DEPENDS ${ MO_FILES } )
2015-02-28 00:05:29 +01:00
endif ( )