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