Freeze-melt adjust
[oweals/minetest.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         clientserver.cpp
271         staticobject.cpp
272         serverlist.cpp
273         pathfinder.cpp
274         convert_json.cpp
275         ${SCRIPT_SRCS}
276         ${UTIL_SRCS}
277 )
278
279 # This gives us the icon
280 if(WIN32)
281         set(WINRESOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../misc/winresource.rc)
282         if(MINGW)
283                 if(NOT CMAKE_RC_COMPILER)
284                         set(CMAKE_RC_COMPILER "windres.exe")
285                 endif()
286                 ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
287                         COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR}
288                         -i${WINRESOURCE_FILE}
289                         -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
290                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
291                 SET(common_SRCS ${common_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
292         else(MINGW) # Probably MSVC
293                 set(common_SRCS ${common_SRCS} ${WINRESOURCE_FILE})
294         endif(MINGW)
295 endif()
296
297 # Client sources
298 set(minetest_SRCS
299         ${common_SRCS}
300         ${sound_SRCS}
301         localplayer.cpp
302         sky.cpp
303         clientmap.cpp
304         content_cso.cpp
305         content_mapblock.cpp
306         content_cao.cpp
307         mesh.cpp
308         mapblock_mesh.cpp
309         farmesh.cpp
310         keycode.cpp
311         camera.cpp
312         clouds.cpp
313         particles.cpp
314         clientobject.cpp
315         chat.cpp
316         hud.cpp
317         guiKeyChangeMenu.cpp
318         guiMessageMenu.cpp
319         guiTextInputMenu.cpp
320         guiFormSpecMenu.cpp
321         guiPauseMenu.cpp
322         guiPasswordChange.cpp
323         guiVolumeChange.cpp
324         guiDeathScreen.cpp
325         guiChatConsole.cpp
326         client.cpp
327         filecache.cpp
328         tile.cpp
329         shader.cpp
330         game.cpp
331         main.cpp
332         guiEngine.cpp
333         guiLuaApi.cpp
334         guiFileSelectMenu.cpp
335         convert_json.cpp
336 )
337
338 if(USE_FREETYPE)
339         set(minetest_SRCS
340                 ${minetest_SRCS}
341                 intlGUIEditBox.cpp
342         )
343 endif(USE_FREETYPE)
344
345 # Server sources
346 set(minetestserver_SRCS
347         ${common_SRCS}
348         main.cpp
349 )
350
351 include_directories(
352         ${PROJECT_BINARY_DIR}
353         ${PROJECT_SOURCE_DIR}
354         ${IRRLICHT_INCLUDE_DIR}
355         ${ZLIB_INCLUDE_DIR}
356         ${CMAKE_BUILD_TYPE}
357         ${PNG_INCLUDE_DIR}
358         ${GETTEXT_INCLUDE_DIR}
359         ${SOUND_INCLUDE_DIRS}
360         ${JTHREAD_INCLUDE_DIR}
361         ${SQLITE3_INCLUDE_DIR}
362         ${LUA_INCLUDE_DIR}
363         ${JSON_INCLUDE_DIR}
364         ${PROJECT_SOURCE_DIR}/script
365 )
366
367 if(USE_FREETYPE)
368         include_directories(
369                 ${FREETYPE_INCLUDE_DIRS}
370                 ${CGUITTFONT_INCLUDE_DIR}
371         )
372 endif(USE_FREETYPE)
373
374 if(USE_CURL)
375         include_directories(
376                 ${CURL_INCLUDE_DIR}
377         )
378 endif(USE_CURL)
379
380 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
381
382 if(BUILD_CLIENT)
383         add_executable(${PROJECT_NAME} ${minetest_SRCS})
384         target_link_libraries(
385                 ${PROJECT_NAME}
386                 ${ZLIB_LIBRARIES}
387                 ${IRRLICHT_LIBRARY}
388                 ${OPENGL_LIBRARIES}
389                 ${JPEG_LIBRARIES}
390                 ${BZIP2_LIBRARIES}
391                 ${PNG_LIBRARIES}
392                 ${X11_LIBRARIES}
393                 ${GETTEXT_LIBRARY}
394                 ${SOUND_LIBRARIES}
395                 ${JTHREAD_LIBRARY}
396                 ${SQLITE3_LIBRARY}
397                 ${LUA_LIBRARY}
398                 ${JSON_LIBRARY}
399                 ${OPENGLES2_LIBRARIES}
400                 ${PLATFORM_LIBS}
401                 ${CLIENT_PLATFORM_LIBS}
402         )
403         if(USE_CURL)
404                 target_link_libraries(
405                         ${PROJECT_NAME}
406                         ${CURL_LIBRARY}
407                 )
408         endif(USE_CURL)
409         if(USE_FREETYPE)
410                 target_link_libraries(
411                         ${PROJECT_NAME}
412                         ${FREETYPE_LIBRARY}
413                         ${CGUITTFONT_LIBRARY}
414                 )
415         endif(USE_FREETYPE)
416 endif(BUILD_CLIENT)
417
418 if(BUILD_SERVER)
419         add_executable(${PROJECT_NAME}server ${minetestserver_SRCS})
420         target_link_libraries(
421                 ${PROJECT_NAME}server
422                 ${ZLIB_LIBRARIES}
423                 ${JTHREAD_LIBRARY}
424                 ${SQLITE3_LIBRARY}
425                 ${JSON_LIBRARY}
426                 ${GETTEXT_LIBRARY}
427                 ${LUA_LIBRARY}
428                 ${PLATFORM_LIBS}
429         )
430         if(USE_CURL)
431                 target_link_libraries(
432                         ${PROJECT_NAME}server
433                         ${CURL_LIBRARY}
434                 )
435         endif(USE_CURL)
436 endif(BUILD_SERVER)
437
438
439 #
440 # Set some optimizations and tweaks
441 #
442
443 include(CheckCXXCompilerFlag)
444
445 if(MSVC)
446         # Visual Studio
447
448         # EHa enables SEH exceptions (used for catching segfaults)
449         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")
450         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
451         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
452
453         # Debug build doesn't catch exceptions by itself
454         # Add some optimizations because otherwise it's VERY slow
455         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
456
457         # Flags for C files (sqlite)
458         # /MT = Link statically with standard library stuff
459         set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")
460         
461         if(BUILD_SERVER)
462                 set_target_properties(${PROJECT_NAME}server PROPERTIES
463                                 COMPILE_DEFINITIONS "SERVER")
464         endif(BUILD_SERVER)
465
466 else()
467         # Probably GCC
468         
469         if(WARN_ALL)
470                 set(RELEASE_WARNING_FLAGS "-Wall")
471         else()
472                 set(RELEASE_WARNING_FLAGS "")
473         endif()
474         
475         if(NOT APPLE AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
476                 CHECK_CXX_COMPILER_FLAG("-Wno-unused-but-set-variable" HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
477                 if(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
478                         set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
479                 endif(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
480         endif()
481
482         if(MINGW)
483                 set(OTHER_FLAGS "-mthreads -fexceptions")
484         endif()
485
486         if(APPLE)
487                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
488                 set(ARCH i386)
489         endif()
490
491         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
492         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
493
494         if(USE_GPROF)
495                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
496         endif()
497         
498         if(BUILD_SERVER)
499                 set_target_properties(${PROJECT_NAME}server PROPERTIES
500                                 COMPILE_DEFINITIONS "SERVER")
501         endif(BUILD_SERVER)
502
503 endif()
504
505 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
506 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
507
508 #
509 # Installation
510 #
511 if(WIN32)
512         if(MINGWM10_DLL)
513                 install(FILES ${MINGWM10_DLL} DESTINATION ${BINDIR})
514         endif()
515         if(DEFINED ZLIB_DLL)
516                 install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
517         endif()
518         if(USE_SOUND)
519                 if(OPENAL_DLL)
520                         install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR})
521                 endif()
522                 if(OGG_DLL)
523                         install(FILES ${OGG_DLL} DESTINATION ${BINDIR})
524                 endif()
525                 if(VORBIS_DLL)
526                         install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR})
527                 endif()
528                 if(VORBISFILE_DLL)
529                         install(FILES ${VORBISFILE_DLL} DESTINATION ${BINDIR})
530                 endif()
531                 if(CURL_DLL)
532                         install(FILES ${CURL_DLL} DESTINATION ${BINDIR})
533                 endif()
534         endif()
535 endif()
536
537 if(BUILD_CLIENT)
538         install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
539
540         if(USE_GETTEXT)
541                 foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
542                         set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
543                         set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
544                         install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
545                 endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
546         endif()
547
548         if(WIN32)
549                 if(DEFINED IRRLICHT_DLL)
550                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
551                 endif()
552                 if(USE_GETTEXT)
553                         if(DEFINED GETTEXT_DLL)
554                                 install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
555                         endif()
556                         if(DEFINED GETTEXT_ICONV_DLL)
557                                 install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
558                         endif()
559                 endif(USE_GETTEXT)
560         endif()
561 endif(BUILD_CLIENT)
562
563 if(BUILD_SERVER)
564         install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR})
565 endif(BUILD_SERVER)
566
567 if (USE_GETTEXT)
568         set(MO_FILES)
569
570         foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
571                 set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po")
572                 set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
573                 set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
574
575                 add_custom_command(OUTPUT ${MO_BUILD_PATH}
576                         COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
577                         COMMENT "mo-update [${LOCALE}]: Creating locale directory.")
578
579                 add_custom_command(
580                         OUTPUT ${MO_FILE_PATH}
581                         COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
582                         DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
583                         WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
584                         COMMENT "mo-update [${LOCALE}]: Creating mo file."
585                         )
586
587                 set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
588         endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
589
590         add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
591 endif(USE_GETTEXT)
592
593 # Subdirectories
594
595 if (JTHREAD_FOUND)
596 else (JTHREAD_FOUND)
597         add_subdirectory(jthread)
598 endif (JTHREAD_FOUND)
599
600 if (SQLITE3_FOUND)
601 else (SQLITE3_FOUND)
602         add_subdirectory(sqlite)
603 endif (SQLITE3_FOUND)
604
605 if (BUILD_CLIENT AND USE_FREETYPE)
606         add_subdirectory(cguittfont)
607 endif (BUILD_CLIENT AND USE_FREETYPE)
608
609 if (JSON_FOUND)
610 else (JSON_FOUND)
611         add_subdirectory(json)
612 endif (JSON_FOUND)
613
614 #end