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