]> git.lizzy.rs Git - minetest.git/blob - src/CMakeLists.txt
0f8396c02103acb5837af56163e723f7614427dd
[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 ${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
176 if(USE_FREETYPE)
177         find_package(Freetype REQUIRED)
178         set(CGUITTFONT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cguittfont")
179         set(CGUITTFONT_LIBRARY cguittfont)
180 endif(USE_FREETYPE)
181
182 # Do not use system-wide installation of Lua, because it'll likely be a
183 # different version and/or has different build options.
184 set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
185 set(LUA_LIBRARY "lua")
186
187 configure_file(
188         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
189         "${PROJECT_BINARY_DIR}/cmake_config.h"
190 )
191
192 set(common_SRCS
193         rollback_interface.cpp
194         rollback.cpp
195         genericobject.cpp
196         voxelalgorithms.cpp
197         sound.cpp
198         quicktune.cpp
199         subgame.cpp
200         inventorymanager.cpp
201         mods.cpp
202         content_abm.cpp
203         craftdef.cpp
204         nameidmapping.cpp
205         itemdef.cpp
206         nodedef.cpp
207         object_properties.cpp
208         scriptapi_types.cpp
209         scriptapi_common.cpp
210         scriptapi_content.cpp
211         scriptapi_craft.cpp
212         scriptapi_node.cpp
213         scriptapi_item.cpp
214         scriptapi_env.cpp
215         scriptapi_nodetimer.cpp
216         scriptapi_noise.cpp
217         scriptapi_entity.cpp
218         scriptapi_object.cpp
219         scriptapi_nodemeta.cpp
220         scriptapi_inventory.cpp
221         scriptapi.cpp
222         script.cpp
223         log.cpp
224         content_sao.cpp
225         emerge.cpp
226         mapgen.cpp
227         mapgen_v6.cpp
228         mapgen_indev.cpp
229         treegen.cpp
230         dungeongen.cpp
231         content_nodemeta.cpp
232         content_mapnode.cpp
233         collision.cpp
234         nodemetadata.cpp
235         nodetimer.cpp
236         serverobject.cpp
237         noise.cpp
238         porting.cpp
239         tool.cpp
240         defaultsettings.cpp
241         mapnode.cpp
242         voxel.cpp
243         inventory.cpp
244         debug.cpp
245         serialization.cpp
246         light.cpp
247         filesys.cpp
248         connection.cpp
249         environment.cpp
250         server.cpp
251         socket.cpp
252         mapblock.cpp
253         mapsector.cpp
254         map.cpp
255         player.cpp
256         test.cpp
257         sha1.cpp
258         base64.cpp
259         ban.cpp
260         biome.cpp
261         clientserver.cpp
262         staticobject.cpp
263         serverlist.cpp
264         util/serialize.cpp
265         util/directiontables.cpp
266         util/numeric.cpp
267         util/pointedthing.cpp
268         util/string.cpp
269         util/timetaker.cpp
270 )
271
272 # This gives us the icon
273 if(WIN32)
274         set(WINRESOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../misc/winresource.rc)
275         if(MINGW)
276                 if(NOT CMAKE_RC_COMPILER)
277                         set(CMAKE_RC_COMPILER "windres.exe")
278                 endif()
279                 ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
280                         COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR}
281                         -i${WINRESOURCE_FILE}
282                         -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
283                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
284                 SET(common_SRCS ${common_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
285         else(MINGW) # Probably MSVC
286                 set(common_SRCS ${common_SRCS} ${WINRESOURCE_FILE})
287         endif(MINGW)
288 endif()
289
290 # Client sources
291 set(minetest_SRCS
292         ${common_SRCS}
293         ${sound_SRCS}
294         localplayer.cpp
295         sky.cpp
296         clientmap.cpp
297         content_cso.cpp
298         content_mapblock.cpp
299         content_cao.cpp
300         mesh.cpp
301         mapblock_mesh.cpp
302         farmesh.cpp
303         keycode.cpp
304         camera.cpp
305         clouds.cpp
306         particles.cpp
307         clientobject.cpp
308         chat.cpp
309         guiMainMenu.cpp
310         guiKeyChangeMenu.cpp
311         guiMessageMenu.cpp
312         guiTextInputMenu.cpp
313         guiFormSpecMenu.cpp
314         guiPauseMenu.cpp
315         guiPasswordChange.cpp
316         guiVolumeChange.cpp
317         guiDeathScreen.cpp
318         guiChatConsole.cpp
319         guiCreateWorld.cpp
320         guiConfigureWorld.cpp
321         guiConfirmMenu.cpp
322         client.cpp
323         filecache.cpp
324         tile.cpp
325         shader.cpp
326         game.cpp
327         main.cpp
328 )
329
330 if(USE_FREETYPE)
331         set(minetest_SRCS
332                 ${minetest_SRCS}
333                 intlGUIEditBox.cpp
334         )
335 endif(USE_FREETYPE)
336
337 # Server sources
338 set(minetestserver_SRCS
339         ${common_SRCS}
340         main.cpp
341 )
342
343 include_directories(
344         ${PROJECT_BINARY_DIR}
345         ${IRRLICHT_INCLUDE_DIR}
346         ${ZLIB_INCLUDE_DIR}
347         ${CMAKE_BUILD_TYPE}
348         ${PNG_INCLUDE_DIR}
349         ${GETTEXT_INCLUDE_DIR}
350         ${SOUND_INCLUDE_DIRS}
351         ${JTHREAD_INCLUDE_DIR}
352         ${SQLITE3_INCLUDE_DIR}
353         ${LUA_INCLUDE_DIR}
354         ${JSON_INCLUDE_DIR}
355 )
356
357 if(USE_FREETYPE)
358         include_directories(
359                 ${FREETYPE_INCLUDE_DIRS}
360                 ${CGUITTFONT_INCLUDE_DIR}
361         )
362 endif(USE_FREETYPE)
363
364 if(USE_CURL)
365         include_directories(
366                 ${CURL_INCLUDE_DIR}
367         )
368 endif(USE_CURL)
369
370 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
371
372 if(BUILD_CLIENT)
373         add_executable(${PROJECT_NAME} ${minetest_SRCS})
374         target_link_libraries(
375                 ${PROJECT_NAME}
376                 ${ZLIB_LIBRARIES}
377                 ${IRRLICHT_LIBRARY}
378                 ${OPENGL_LIBRARIES}
379                 ${JPEG_LIBRARIES}
380                 ${BZIP2_LIBRARIES}
381                 ${PNG_LIBRARIES}
382                 ${X11_LIBRARIES}
383                 ${GETTEXT_LIBRARY}
384                 ${SOUND_LIBRARIES}
385                 ${JTHREAD_LIBRARY}
386                 ${SQLITE3_LIBRARY}
387                 ${LUA_LIBRARY}
388                 ${JSON_LIBRARY}
389                 ${PLATFORM_LIBS}
390                 ${CLIENT_PLATFORM_LIBS}
391         )
392         if(USE_CURL)
393                 target_link_libraries(
394                         ${PROJECT_NAME}
395                         ${CURL_LIBRARY}
396                 )
397         endif(USE_CURL)
398         if(USE_FREETYPE)
399                 target_link_libraries(
400                         ${PROJECT_NAME}
401                         ${FREETYPE_LIBRARY}
402                         ${CGUITTFONT_LIBRARY}
403                 )
404         endif(USE_FREETYPE)
405 endif(BUILD_CLIENT)
406
407 if(BUILD_SERVER)
408         add_executable(${PROJECT_NAME}server ${minetestserver_SRCS})
409         target_link_libraries(
410                 ${PROJECT_NAME}server
411                 ${ZLIB_LIBRARIES}
412                 ${JTHREAD_LIBRARY}
413                 ${SQLITE3_LIBRARY}
414                 ${JSON_LIBRARY}
415                 ${GETTEXT_LIBRARY}
416                 ${LUA_LIBRARY}
417                 ${PLATFORM_LIBS}
418         )
419         if(USE_CURL)
420                 target_link_libraries(
421                         ${PROJECT_NAME}server
422                         ${CURL_LIBRARY}
423                 )
424         endif(USE_CURL)
425 endif(BUILD_SERVER)
426
427
428 #
429 # Set some optimizations and tweaks
430 #
431
432 include(CheckCXXCompilerFlag)
433
434 if(MSVC)
435         # Visual Studio
436
437         # EHa enables SEH exceptions (used for catching segfaults)
438         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")
439         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
440         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
441
442         # Debug build doesn't catch exceptions by itself
443         # Add some optimizations because otherwise it's VERY slow
444         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
445
446         # Flags for C files (sqlite)
447         # /MT = Link statically with standard library stuff
448         set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")
449         
450         if(BUILD_SERVER)
451                 set_target_properties(${PROJECT_NAME}server PROPERTIES
452                                 COMPILE_DEFINITIONS "SERVER")
453         endif(BUILD_SERVER)
454
455 else()
456         # Probably GCC
457         
458         if(WARN_ALL)
459                 set(RELEASE_WARNING_FLAGS "-Wall")
460         else()
461                 set(RELEASE_WARNING_FLAGS "")
462         endif()
463         
464         if(NOT APPLE AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
465                 CHECK_CXX_COMPILER_FLAG("-Wno-unused-but-set-variable" HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
466                 if(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
467                         set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
468                 endif(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
469         endif()
470
471         if(MINGW)
472                 set(OTHER_FLAGS "-mthreads -fexceptions")
473         endif()
474
475         if(APPLE)
476                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
477                 set(ARCH i386)
478         endif()
479
480         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
481         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
482
483         if(USE_GPROF)
484                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
485         endif()
486         
487         if(BUILD_SERVER)
488                 set_target_properties(${PROJECT_NAME}server PROPERTIES
489                                 COMPILE_DEFINITIONS "SERVER")
490         endif(BUILD_SERVER)
491
492 endif()
493
494 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
495 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
496
497 #
498 # Installation
499 #
500 if(WIN32)
501         if(MINGWM10_DLL)
502                 install(FILES ${MINGWM10_DLL} DESTINATION ${BINDIR})
503         endif()
504         if(DEFINED ZLIB_DLL)
505                 install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
506         endif()
507         if(USE_SOUND)
508                 if(OPENAL_DLL)
509                         install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR})
510                 endif()
511                 if(OGG_DLL)
512                         install(FILES ${OGG_DLL} DESTINATION ${BINDIR})
513                 endif()
514                 if(VORBIS_DLL)
515                         install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR})
516                 endif()
517                 if(VORBISFILE_DLL)
518                         install(FILES ${VORBISFILE_DLL} DESTINATION ${BINDIR})
519                 endif()
520                 if(CURL_DLL)
521                         install(FILES ${CURL_DLL} DESTINATION ${BINDIR})
522                 endif()
523         endif()
524 endif()
525
526 if(BUILD_CLIENT)
527         install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
528
529         if(USE_GETTEXT)
530                 foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
531                         set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
532                         set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
533                         install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
534                 endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
535         endif()
536
537         if(WIN32)
538                 if(DEFINED IRRLICHT_DLL)
539                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
540                 endif()
541                 if(USE_GETTEXT)
542                         if(DEFINED GETTEXT_DLL)
543                                 install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
544                         endif()
545                         if(DEFINED GETTEXT_ICONV_DLL)
546                                 install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
547                         endif()
548                 endif(USE_GETTEXT)
549         endif()
550 endif(BUILD_CLIENT)
551
552 if(BUILD_SERVER)
553         install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR})
554 endif(BUILD_SERVER)
555
556 if (USE_GETTEXT)
557         set(MO_FILES)
558
559         foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
560                 set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po")
561                 set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
562                 set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
563
564                 add_custom_command(OUTPUT ${MO_BUILD_PATH}
565                         COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
566                         COMMENT "mo-update [${LOCALE}]: Creating locale directory.")
567
568                 add_custom_command(
569                         OUTPUT ${MO_FILE_PATH}
570                         COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
571                         DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
572                         WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
573                         COMMENT "mo-update [${LOCALE}]: Creating mo file."
574                         )
575
576                 set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
577         endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
578
579         add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
580 endif(USE_GETTEXT)
581
582 # Subdirectories
583
584 if (JTHREAD_FOUND)
585 else (JTHREAD_FOUND)
586         add_subdirectory(jthread)
587 endif (JTHREAD_FOUND)
588
589 if (SQLITE3_FOUND)
590 else (SQLITE3_FOUND)
591         add_subdirectory(sqlite)
592 endif (SQLITE3_FOUND)
593
594 if (BUILD_CLIENT AND USE_FREETYPE)
595         add_subdirectory(cguittfont)
596 endif (BUILD_CLIENT AND USE_FREETYPE)
597
598 if (LUA_FOUND)
599 else (LUA_FOUND)
600         add_subdirectory(lua)
601 endif (LUA_FOUND)
602
603 if (JSON_FOUND)
604 else (JSON_FOUND)
605         add_subdirectory(json)
606 endif (JSON_FOUND)
607
608 #end