]> git.lizzy.rs Git - dragonfireclient.git/blob - src/CMakeLists.txt
Omnicleanup: header cleanup, add ModApiUtil shared between game and mainmenu
[dragonfireclient.git] / src / CMakeLists.txt
1 project(minetest)
2 cmake_minimum_required( VERSION 2.6 )
3
4 # Set some random things default to not being visible in the GUI
5 mark_as_advanced(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
6 mark_as_advanced(JTHREAD_INCLUDE_DIR JTHREAD_LIBRARY)
7 mark_as_advanced(SQLITE3_INCLUDE_DIR SQLITE3_LIBRARY)
8 mark_as_advanced(JSON_INCLUDE_DIR JSON_LIBRARY)
9
10 option(ENABLE_CURL "Enable cURL support for fetching media" 1)
11
12 if (NOT ENABLE_CURL)
13         mark_as_advanced(CLEAR CURL_LIBRARY CURL_INCLUDE_DIR)
14 endif(NOT ENABLE_CURL)
15
16 if( ENABLE_CURL )
17         find_package(CURL)
18 endif( ENABLE_CURL )
19 set(USE_CURL 0)
20 if (CURL_FOUND AND ENABLE_CURL)
21         message(STATUS "cURL support enabled")
22         set(USE_CURL 1)
23 endif(CURL_FOUND AND ENABLE_CURL)
24
25 # user-visible option to enable/disable gettext usage
26 OPTION(ENABLE_GETTEXT "Use GetText for internationalization" 0)
27
28 # this is only set to 1 if gettext is enabled _and_ available
29 set(USE_GETTEXT 0)
30
31 if(ENABLE_GETTEXT)
32         find_package(GettextLib)
33 else()
34         MARK_AS_ADVANCED(GETTEXT_ICONV_DLL GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT)
35 endif()
36
37 if(GETTEXT_FOUND AND ENABLE_GETTEXT)
38         message(STATUS "gettext include path: ${GETTEXT_INCLUDE_DIR}")
39         message(STATUS "gettext msgfmt path: ${GETTEXT_MSGFMT}")
40         if(WIN32)
41                 message(STATUS "gettext library: ${GETTEXT_LIBRARY}")
42                 message(STATUS "gettext dll: ${GETTEXT_DLL}")
43                 message(STATUS "gettext iconv dll: ${GETTEXT_ICONV_DLL}")
44         endif()
45         set(USE_GETTEXT 1)
46         message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}")
47 elseif(GETTEXT_FOUND AND NOT ENABLE_GETTEXT)
48         MESSAGE(STATUS "GetText found but disabled;")
49 else(GETTEXT_FOUND AND ENABLE_GETTEXT)
50         message(STATUS "GetText disabled")
51 endif(GETTEXT_FOUND AND ENABLE_GETTEXT)
52
53 # user visible option to enable/disable sound
54 OPTION(ENABLE_SOUND "Enable sound" ON)
55
56 # this is only set to 1 if sound is enabled _and_ available
57 set(USE_SOUND 0)
58 set(SOUND_PROBLEM 0)
59
60 if(ENABLE_SOUND AND BUILD_CLIENT)
61         # Sound libraries
62         find_package(OpenAL)
63         find_package(Vorbis)
64         if(NOT OPENAL_FOUND)
65                 message(STATUS "Sound enabled, but OpenAL not found!")
66                 set(SOUND_PROBLEM 1)
67                 MARK_AS_ADVANCED(CLEAR OPENAL_LIBRARY OPENAL_INCLUDE_DIR)
68         endif()
69         if(NOT VORBIS_FOUND)
70                 message(STATUS "Sound enabled, but Vorbis libraries not found!")
71                 set(SOUND_PROBLEM 1)
72                 MARK_AS_ADVANCED(CLEAR OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY)
73         endif()
74         if(OPENAL_FOUND AND VORBIS_FOUND)
75                 set(USE_SOUND 1)
76                 message(STATUS "Sound enabled")
77         endif()
78 endif(ENABLE_SOUND AND BUILD_CLIENT)
79
80 if(SOUND_PROBLEM)
81         message(FATAL_ERROR "Sound enabled, but cannot be used.\n"
82                 "To continue, either fill in the required paths or disable sound. (-DENABLE_SOUND=0)")
83 endif()
84 if(USE_SOUND)
85         set(sound_SRCS sound_openal.cpp)
86         set(SOUND_INCLUDE_DIRS
87                 ${OPENAL_INCLUDE_DIR}
88                 ${VORBIS_INCLUDE_DIR}
89                 ${OGG_INCLUDE_DIR}
90                 )
91         set(SOUND_LIBRARIES
92                 ${OPENAL_LIBRARY}
93                 ${VORBIS_LIBRARIES}
94                 )
95 endif()
96
97 option(ENABLE_FREETYPE "Enable freetype2 (truetype fonts and basic unicode support)" OFF)
98 set(USE_FREETYPE 0)
99 if(ENABLE_FREETYPE)
100         set(USE_FREETYPE 1)
101 endif(ENABLE_FREETYPE)
102
103 if(NOT MSVC)
104         set(USE_GPROF 0 CACHE BOOL "Use -pg flag for g++")
105 endif()
106
107 # Use cmake_config.h
108 add_definitions ( -DUSE_CMAKE_CONFIG_H )
109
110 if(WIN32)
111         # Windows
112         if(MSVC) # MSVC Specifics
113                 # Surpress some useless warnings
114                 add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
115         else() # Probably MinGW = GCC
116                 set(PLATFORM_LIBS ws2_32.lib)
117         endif()
118         # Zlib stuff
119         set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
120                         CACHE PATH "Zlib include directory")
121         set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
122                         CACHE FILEPATH "Path to zlibwapi.lib")
123         set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll"
124                         CACHE FILEPATH "Path to zlibwapi.dll (for installation)")
125         set(IRRLICHT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../../irrlicht-1.7.2"
126                         CACHE PATH "irrlicht dir")
127         if(USE_FREETYPE)
128                 set(FREETYPE_INCLUDE_DIR_ft2build "${PROJECT_SOURCE_DIR}/../../freetype2/include/"
129                                 CACHE PATH "freetype include dir")
130                 set(FREETYPE_INCLUDE_DIR_freetype2 "${PROJECT_SOURCE_DIR}/../../freetype2/include/freetype"
131                                 CACHE PATH "freetype include dir")
132                 set(FREETYPE_LIBRARY "${PROJECT_SOURCE_DIR}/../../freetype2/objs/win32/vc2005/freetype247.lib"
133                                 CACHE FILEPATH "Path to freetype247.lib")
134         endif(USE_FREETYPE)
135         set(MINGWM10_DLL ""
136                         CACHE FILEPATH "Path to mingwm10.dll (for installation)")
137         if(ENABLE_SOUND)
138                 set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)")
139                 set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)")
140                 set(VORBIS_DLL "" CACHE FILEPATH "Path to libvorbis.dll for installation (optional)")
141                 set(VORBISFILE_DLL "" CACHE FILEPATH "Path to libvorbisfile.dll for installation (optional)")
142         endif()
143 else()
144         # Unix probably
145         if(BUILD_CLIENT)
146                 find_package(X11 REQUIRED)
147                 find_package(OpenGL REQUIRED)
148                 find_package(JPEG REQUIRED)
149                 find_package(BZip2 REQUIRED)
150                 find_package(PNG REQUIRED)
151                 if(APPLE)
152                         FIND_LIBRARY(CARBON_LIB Carbon)
153                         FIND_LIBRARY(COCOA_LIB Cocoa)
154                         FIND_LIBRARY(IOKIT_LIB IOKit)
155                         mark_as_advanced(
156                                 CARBON_LIB
157                                 COCOA_LIB
158                                 IOKIT_LIB
159                         )
160                         SET(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${CARBON_LIB} ${COCOA_LIB} ${IOKIT_LIB})
161                 endif(APPLE)
162         endif(BUILD_CLIENT)
163         find_package(ZLIB REQUIRED)
164         set(PLATFORM_LIBS -lpthread -lrt ${CMAKE_DL_LIBS})
165         #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
166         # This way Xxf86vm is found on OpenBSD too
167         find_library(XXF86VM_LIBRARY Xxf86vm)
168         mark_as_advanced(XXF86VM_LIBRARY)
169         set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
170 endif()
171
172 find_package(Jthread REQUIRED)
173 find_package(Sqlite3 REQUIRED)
174 find_package(Json REQUIRED)
175 find_package(OpenGLES2)
176
177 if(USE_FREETYPE)
178         find_package(Freetype REQUIRED)
179         set(CGUITTFONT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cguittfont")
180         set(CGUITTFONT_LIBRARY cguittfont)
181 endif(USE_FREETYPE)
182
183
184 find_library(LUA_LIBRARY luajit
185                 NAMES luajit-5.1)
186 find_path(LUA_INCLUDE_DIR luajit.h
187         NAMES luajit.h
188         PATH_SUFFIXES luajit-2.0)
189 message (STATUS "LuaJIT library: ${LUA_LIBRARY}")
190 message (STATUS "LuaJIT headers: ${LUA_INCLUDE_DIR}")
191
192 if(LUA_LIBRARY AND LUA_INCLUDE_DIR) 
193         message (STATUS "LuaJIT found.")
194 else(LUA_LIBRARY AND LUA_INCLUDE_DIR)
195         message (STATUS "LuaJIT not found, using bundled Lua.")
196         set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
197         set(LUA_LIBRARY "lua")
198         add_subdirectory(lua)
199 endif(LUA_LIBRARY AND LUA_INCLUDE_DIR)
200
201 mark_as_advanced(LUA_LIBRARY)
202 mark_as_advanced(LUA_INCLUDE_DIR)
203
204 configure_file(
205         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
206         "${PROJECT_BINARY_DIR}/cmake_config.h"
207 )
208
209 add_subdirectory(script)
210 add_subdirectory(util)
211
212 set(common_SRCS
213         rollback_interface.cpp
214         rollback.cpp
215         genericobject.cpp
216         voxelalgorithms.cpp
217         sound.cpp
218         quicktune.cpp
219         subgame.cpp
220         inventorymanager.cpp
221         mods.cpp
222         content_abm.cpp
223         craftdef.cpp
224         nameidmapping.cpp
225         itemdef.cpp
226         nodedef.cpp
227         object_properties.cpp
228         log.cpp
229         content_sao.cpp
230         emerge.cpp
231         mapgen.cpp
232         mapgen_v6.cpp
233         mapgen_v7.cpp
234         mapgen_indev.cpp
235         mapgen_singlenode.cpp
236         mapgen_math.cpp
237         treegen.cpp
238         dungeongen.cpp
239         cavegen.cpp
240         content_nodemeta.cpp
241         content_mapnode.cpp
242         collision.cpp
243         nodemetadata.cpp
244         nodetimer.cpp
245         serverobject.cpp
246         noise.cpp
247         porting.cpp
248         tool.cpp
249         defaultsettings.cpp
250         mapnode.cpp
251         voxel.cpp
252         inventory.cpp
253         debug.cpp
254         serialization.cpp
255         light.cpp
256         filesys.cpp
257         connection.cpp
258         environment.cpp
259         server.cpp
260         socket.cpp
261         mapblock.cpp
262         mapsector.cpp
263         map.cpp
264         player.cpp
265         test.cpp
266         sha1.cpp
267         base64.cpp
268         ban.cpp
269         biome.cpp
270         staticobject.cpp
271         serverlist.cpp
272         pathfinder.cpp
273         convert_json.cpp
274         ${common_SCRIPT_SRCS}
275         ${UTIL_SRCS}
276 )
277
278 # This gives us the icon
279 if(WIN32)
280         set(WINRESOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../misc/winresource.rc)
281         if(MINGW)
282                 if(NOT CMAKE_RC_COMPILER)
283                         set(CMAKE_RC_COMPILER "windres.exe")
284                 endif()
285                 ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
286                         COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR}
287                         -i${WINRESOURCE_FILE}
288                         -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
289                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
290                 SET(common_SRCS ${common_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
291         else(MINGW) # Probably MSVC
292                 set(common_SRCS ${common_SRCS} ${WINRESOURCE_FILE})
293         endif(MINGW)
294 endif()
295
296 # Client sources
297 set(minetest_SRCS
298         ${common_SRCS}
299         ${sound_SRCS}
300         localplayer.cpp
301         sky.cpp
302         clientmap.cpp
303         content_cso.cpp
304         content_mapblock.cpp
305         content_cao.cpp
306         mesh.cpp
307         mapblock_mesh.cpp
308         keycode.cpp
309         camera.cpp
310         clouds.cpp
311         particles.cpp
312         clientobject.cpp
313         chat.cpp
314         hud.cpp
315         guiKeyChangeMenu.cpp
316         guiMessageMenu.cpp
317         guiTextInputMenu.cpp
318         guiFormSpecMenu.cpp
319         guiPauseMenu.cpp
320         guiPasswordChange.cpp
321         guiVolumeChange.cpp
322         guiDeathScreen.cpp
323         guiChatConsole.cpp
324         client.cpp
325         filecache.cpp
326         tile.cpp
327         shader.cpp
328         game.cpp
329         main.cpp
330         guiEngine.cpp
331         guiFileSelectMenu.cpp
332         convert_json.cpp
333         ${minetest_SCRIPT_SRCS}
334 )
335
336 if(USE_FREETYPE)
337         set(minetest_SRCS
338                 ${minetest_SRCS}
339                 intlGUIEditBox.cpp
340         )
341 endif(USE_FREETYPE)
342
343 list(SORT minetest_SRCS)
344
345 # Server sources
346 set(minetestserver_SRCS
347         ${common_SRCS}
348         main.cpp
349 )
350 list(SORT minetestserver_SRCS)
351
352 include_directories(
353         ${PROJECT_BINARY_DIR}
354         ${PROJECT_SOURCE_DIR}
355         ${IRRLICHT_INCLUDE_DIR}
356         ${ZLIB_INCLUDE_DIR}
357         ${CMAKE_BUILD_TYPE}
358         ${PNG_INCLUDE_DIR}
359         ${GETTEXT_INCLUDE_DIR}
360         ${SOUND_INCLUDE_DIRS}
361         ${JTHREAD_INCLUDE_DIR}
362         ${SQLITE3_INCLUDE_DIR}
363         ${LUA_INCLUDE_DIR}
364         ${JSON_INCLUDE_DIR}
365         ${PROJECT_SOURCE_DIR}/script
366 )
367
368 if(USE_FREETYPE)
369         include_directories(
370                 ${FREETYPE_INCLUDE_DIRS}
371                 ${CGUITTFONT_INCLUDE_DIR}
372         )
373 endif(USE_FREETYPE)
374
375 if(USE_CURL)
376         include_directories(
377                 ${CURL_INCLUDE_DIR}
378         )
379 endif(USE_CURL)
380
381 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
382
383 if(BUILD_CLIENT)
384         add_executable(${PROJECT_NAME} ${minetest_SRCS})
385         target_link_libraries(
386                 ${PROJECT_NAME}
387                 ${ZLIB_LIBRARIES}
388                 ${IRRLICHT_LIBRARY}
389                 ${OPENGL_LIBRARIES}
390                 ${JPEG_LIBRARIES}
391                 ${BZIP2_LIBRARIES}
392                 ${PNG_LIBRARIES}
393                 ${X11_LIBRARIES}
394                 ${GETTEXT_LIBRARY}
395                 ${SOUND_LIBRARIES}
396                 ${JTHREAD_LIBRARY}
397                 ${SQLITE3_LIBRARY}
398                 ${LUA_LIBRARY}
399                 ${JSON_LIBRARY}
400                 ${OPENGLES2_LIBRARIES}
401                 ${PLATFORM_LIBS}
402                 ${CLIENT_PLATFORM_LIBS}
403         )
404         if(USE_CURL)
405                 target_link_libraries(
406                         ${PROJECT_NAME}
407                         ${CURL_LIBRARY}
408                 )
409         endif(USE_CURL)
410         if(USE_FREETYPE)
411                 target_link_libraries(
412                         ${PROJECT_NAME}
413                         ${FREETYPE_LIBRARY}
414                         ${CGUITTFONT_LIBRARY}
415                 )
416         endif(USE_FREETYPE)
417 endif(BUILD_CLIENT)
418
419 if(BUILD_SERVER)
420         add_executable(${PROJECT_NAME}server ${minetestserver_SRCS})
421         target_link_libraries(
422                 ${PROJECT_NAME}server
423                 ${ZLIB_LIBRARIES}
424                 ${JTHREAD_LIBRARY}
425                 ${SQLITE3_LIBRARY}
426                 ${JSON_LIBRARY}
427                 ${GETTEXT_LIBRARY}
428                 ${LUA_LIBRARY}
429                 ${PLATFORM_LIBS}
430         )
431         if(USE_CURL)
432                 target_link_libraries(
433                         ${PROJECT_NAME}server
434                         ${CURL_LIBRARY}
435                 )
436         endif(USE_CURL)
437 endif(BUILD_SERVER)
438
439
440 #
441 # Set some optimizations and tweaks
442 #
443
444 include(CheckCXXCompilerFlag)
445
446 if(MSVC)
447         # Visual Studio
448
449         # EHa enables SEH exceptions (used for catching segfaults)
450         set(CMAKE_CXX_FLAGS_RELEASE "/EHa /O2 /Ob2 /Oi /Ot /Oy /GL /FD /MT /GS- /arch:SSE /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0 /TP")
451         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
452         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
453
454         # Debug build doesn't catch exceptions by itself
455         # Add some optimizations because otherwise it's VERY slow
456         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
457
458         # Flags for C files (sqlite)
459         # /MT = Link statically with standard library stuff
460         set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")
461         
462         if(BUILD_SERVER)
463                 set_target_properties(${PROJECT_NAME}server PROPERTIES
464                                 COMPILE_DEFINITIONS "SERVER")
465         endif(BUILD_SERVER)
466
467 else()
468         # Probably GCC
469         
470         if(WARN_ALL)
471                 set(RELEASE_WARNING_FLAGS "-Wall")
472         else()
473                 set(RELEASE_WARNING_FLAGS "")
474         endif()
475         
476         if(NOT APPLE AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
477                 CHECK_CXX_COMPILER_FLAG("-Wno-unused-but-set-variable" HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
478                 if(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
479                         set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
480                 endif(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
481         endif()
482
483         if(MINGW)
484                 set(OTHER_FLAGS "-mthreads -fexceptions")
485         endif()
486
487         if(APPLE)
488                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
489                 set(ARCH i386)
490         endif()
491
492         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
493         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
494
495         if(USE_GPROF)
496                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
497         endif()
498         
499         if(BUILD_SERVER)
500                 set_target_properties(${PROJECT_NAME}server PROPERTIES
501                                 COMPILE_DEFINITIONS "SERVER")
502         endif(BUILD_SERVER)
503
504 endif()
505
506 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
507 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
508
509 #
510 # Installation
511 #
512 if(WIN32)
513         if(MINGWM10_DLL)
514                 install(FILES ${MINGWM10_DLL} DESTINATION ${BINDIR})
515         endif()
516         if(DEFINED ZLIB_DLL)
517                 install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
518         endif()
519         if(USE_SOUND)
520                 if(OPENAL_DLL)
521                         install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR})
522                 endif()
523                 if(OGG_DLL)
524                         install(FILES ${OGG_DLL} DESTINATION ${BINDIR})
525                 endif()
526                 if(VORBIS_DLL)
527                         install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR})
528                 endif()
529                 if(VORBISFILE_DLL)
530                         install(FILES ${VORBISFILE_DLL} DESTINATION ${BINDIR})
531                 endif()
532                 if(CURL_DLL)
533                         install(FILES ${CURL_DLL} DESTINATION ${BINDIR})
534                 endif()
535         endif()
536 endif()
537
538 if(BUILD_CLIENT)
539         install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
540
541         if(USE_GETTEXT)
542                 foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
543                         set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
544                         set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
545                         install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
546                 endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
547         endif()
548
549         if(WIN32)
550                 if(DEFINED IRRLICHT_DLL)
551                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
552                 endif()
553                 if(USE_GETTEXT)
554                         if(DEFINED GETTEXT_DLL)
555                                 install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
556                         endif()
557                         if(DEFINED GETTEXT_ICONV_DLL)
558                                 install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
559                         endif()
560                 endif(USE_GETTEXT)
561         endif()
562 endif(BUILD_CLIENT)
563
564 if(BUILD_SERVER)
565         install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR})
566 endif(BUILD_SERVER)
567
568 if (USE_GETTEXT)
569         set(MO_FILES)
570
571         foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
572                 set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po")
573                 set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
574                 set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
575
576                 add_custom_command(OUTPUT ${MO_BUILD_PATH}
577                         COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
578                         COMMENT "mo-update [${LOCALE}]: Creating locale directory.")
579
580                 add_custom_command(
581                         OUTPUT ${MO_FILE_PATH}
582                         COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
583                         DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
584                         WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
585                         COMMENT "mo-update [${LOCALE}]: Creating mo file."
586                         )
587
588                 set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
589         endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
590
591         add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
592 endif(USE_GETTEXT)
593
594 # Subdirectories
595
596 if (JTHREAD_FOUND)
597 else (JTHREAD_FOUND)
598         add_subdirectory(jthread)
599 endif (JTHREAD_FOUND)
600
601 if (SQLITE3_FOUND)
602 else (SQLITE3_FOUND)
603         add_subdirectory(sqlite)
604 endif (SQLITE3_FOUND)
605
606 if (BUILD_CLIENT AND USE_FREETYPE)
607         add_subdirectory(cguittfont)
608 endif (BUILD_CLIENT AND USE_FREETYPE)
609
610 if (JSON_FOUND)
611 else (JSON_FOUND)
612         add_subdirectory(json)
613 endif (JSON_FOUND)
614
615 #end