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