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