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