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