8a5212dcabb54a134221727de15bf61df8dc251e
[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(SQLITE3_INCLUDE_DIR SQLITE3_LIBRARY)
7 mark_as_advanced(JSON_INCLUDE_DIR JSON_LIBRARY)
8
9 option(ENABLE_CURL "Enable cURL support for fetching media" 1)
10
11 if (NOT ENABLE_CURL)
12         mark_as_advanced(CLEAR CURL_LIBRARY CURL_INCLUDE_DIR)
13 endif(NOT ENABLE_CURL)
14
15 if( ENABLE_CURL )
16         find_package(CURL)
17 endif( ENABLE_CURL )
18 set(USE_CURL 0)
19 if (CURL_FOUND AND ENABLE_CURL)
20         message(STATUS "cURL support enabled")
21         set(USE_CURL 1)
22 endif(CURL_FOUND AND ENABLE_CURL)
23
24 # user-visible option to enable/disable gettext usage
25 OPTION(ENABLE_GETTEXT "Use GetText for internationalization" 0)
26
27 # this is only set to 1 if gettext is enabled _and_ available
28 set(USE_GETTEXT 0)
29
30 if(ENABLE_GETTEXT)
31         find_package(GettextLib)
32 else()
33         MARK_AS_ADVANCED(GETTEXT_ICONV_DLL GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT)
34 endif()
35
36 if(GETTEXT_FOUND AND ENABLE_GETTEXT)
37         message(STATUS "gettext include path: ${GETTEXT_INCLUDE_DIR}")
38         message(STATUS "gettext msgfmt path: ${GETTEXT_MSGFMT}")
39         if(WIN32)
40                 message(STATUS "gettext library: ${GETTEXT_LIBRARY}")
41                 message(STATUS "gettext dll: ${GETTEXT_DLL}")
42                 message(STATUS "gettext iconv dll: ${GETTEXT_ICONV_DLL}")
43         endif()
44         set(USE_GETTEXT 1)
45         message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}")
46 elseif(GETTEXT_FOUND AND NOT ENABLE_GETTEXT)
47         MESSAGE(STATUS "GetText found but disabled;")
48 else(GETTEXT_FOUND AND ENABLE_GETTEXT)
49         message(STATUS "GetText disabled")
50 endif(GETTEXT_FOUND AND ENABLE_GETTEXT)
51
52 # user visible option to enable/disable sound
53 OPTION(ENABLE_SOUND "Enable sound" ON)
54
55 # this is only set to 1 if sound is enabled _and_ available
56 set(USE_SOUND 0)
57 set(SOUND_PROBLEM 0)
58
59 if(ENABLE_SOUND AND BUILD_CLIENT)
60         # Sound libraries
61         find_package(OpenAL)
62         find_package(Vorbis)
63         if(NOT OPENAL_FOUND)
64                 message(STATUS "Sound enabled, but OpenAL not found!")
65                 set(SOUND_PROBLEM 1)
66                 MARK_AS_ADVANCED(CLEAR OPENAL_LIBRARY OPENAL_INCLUDE_DIR)
67         endif()
68         if(NOT VORBIS_FOUND)
69                 message(STATUS "Sound enabled, but Vorbis libraries not found!")
70                 set(SOUND_PROBLEM 1)
71                 MARK_AS_ADVANCED(CLEAR OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY)
72         endif()
73         if(OPENAL_FOUND AND VORBIS_FOUND)
74                 set(USE_SOUND 1)
75                 message(STATUS "Sound enabled")
76         endif()
77 endif(ENABLE_SOUND AND BUILD_CLIENT)
78
79 if(SOUND_PROBLEM)
80         message(FATAL_ERROR "Sound enabled, but cannot be used.\n"
81                 "To continue, either fill in the required paths or disable sound. (-DENABLE_SOUND=0)")
82 endif()
83 if(USE_SOUND)
84         set(sound_SRCS sound_openal.cpp)
85         set(SOUND_INCLUDE_DIRS
86                 ${OPENAL_INCLUDE_DIR}
87                 ${VORBIS_INCLUDE_DIR}
88                 ${OGG_INCLUDE_DIR}
89                 )
90         set(SOUND_LIBRARIES
91                 ${OPENAL_LIBRARY}
92                 ${VORBIS_LIBRARIES}
93                 )
94 endif()
95
96 option(ENABLE_FREETYPE "Enable freetype2 (truetype fonts and basic unicode support)" OFF)
97 set(USE_FREETYPE 0)
98 if(ENABLE_FREETYPE)
99         set(USE_FREETYPE 1)
100 endif(ENABLE_FREETYPE)
101
102 if(NOT MSVC)
103         set(USE_GPROF 0 CACHE BOOL "Use -pg flag for g++")
104 endif()
105
106 # Use cmake_config.h
107 add_definitions ( -DUSE_CMAKE_CONFIG_H )
108
109 if(WIN32)
110         # Windows
111         if(MSVC) # MSVC Specifics
112                 # Surpress some useless warnings
113                 add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
114         else() # Probably MinGW = GCC
115                 set(PLATFORM_LIBS ws2_32.lib)
116         endif()
117         # Zlib stuff
118         set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
119                         CACHE PATH "Zlib include directory")
120         set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
121                         CACHE FILEPATH "Path to zlibwapi.lib")
122         set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll"
123                         CACHE FILEPATH "Path to zlibwapi.dll (for installation)")
124         set(IRRLICHT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../../irrlicht-1.7.2"
125                         CACHE PATH "irrlicht dir")
126         if(USE_FREETYPE)
127                 set(FREETYPE_INCLUDE_DIR_ft2build "${PROJECT_SOURCE_DIR}/../../freetype2/include/"
128                                 CACHE PATH "freetype include dir")
129                 set(FREETYPE_INCLUDE_DIR_freetype2 "${PROJECT_SOURCE_DIR}/../../freetype2/include/freetype"
130                                 CACHE PATH "freetype include dir")
131                 set(FREETYPE_LIBRARY "${PROJECT_SOURCE_DIR}/../../freetype2/objs/win32/vc2005/freetype247.lib"
132                                 CACHE FILEPATH "Path to freetype247.lib")
133         endif(USE_FREETYPE)
134         set(MINGWM10_DLL ""
135                         CACHE FILEPATH "Path to mingwm10.dll (for installation)")
136         if(ENABLE_SOUND)
137                 set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)")
138                 set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)")
139                 set(VORBIS_DLL "" CACHE FILEPATH "Path to libvorbis.dll for installation (optional)")
140                 set(VORBISFILE_DLL "" CACHE FILEPATH "Path to libvorbisfile.dll for installation (optional)")
141         endif()
142 else()
143         # Unix probably
144         if(BUILD_CLIENT)
145                 find_package(X11 REQUIRED)
146                 find_package(OpenGL REQUIRED)
147                 find_package(JPEG REQUIRED)
148                 find_package(BZip2 REQUIRED)
149                 find_package(PNG REQUIRED)
150                 if(APPLE)
151                         FIND_LIBRARY(CARBON_LIB Carbon)
152                         FIND_LIBRARY(COCOA_LIB Cocoa)
153                         FIND_LIBRARY(IOKIT_LIB IOKit)
154                         mark_as_advanced(
155                                 CARBON_LIB
156                                 COCOA_LIB
157                                 IOKIT_LIB
158                         )
159                         SET(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${CARBON_LIB} ${COCOA_LIB} ${IOKIT_LIB})
160                 endif(APPLE)
161         endif(BUILD_CLIENT)
162         find_package(ZLIB REQUIRED)
163         set(PLATFORM_LIBS -lpthread -lrt ${CMAKE_DL_LIBS})
164         #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
165         # This way Xxf86vm is found on OpenBSD too
166         find_library(XXF86VM_LIBRARY Xxf86vm)
167         mark_as_advanced(XXF86VM_LIBRARY)
168         set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
169 endif()
170
171 find_package(Sqlite3 REQUIRED)
172 find_package(Json REQUIRED)
173 find_package(OpenGLES2)
174
175 if(USE_FREETYPE)
176         find_package(Freetype REQUIRED)
177         set(CGUITTFONT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cguittfont")
178         set(CGUITTFONT_LIBRARY cguittfont)
179 endif(USE_FREETYPE)
180
181
182 find_library(LUA_LIBRARY luajit
183                 NAMES luajit-5.1)
184 find_path(LUA_INCLUDE_DIR luajit.h
185         NAMES luajit.h
186         PATH_SUFFIXES luajit-2.0)
187 message (STATUS "LuaJIT library: ${LUA_LIBRARY}")
188 message (STATUS "LuaJIT headers: ${LUA_INCLUDE_DIR}")
189
190 set(USE_LUAJIT 0)
191 if(LUA_LIBRARY AND LUA_INCLUDE_DIR) 
192         message (STATUS "LuaJIT found.")
193         set(USE_LUAJIT 1)
194 else(LUA_LIBRARY AND LUA_INCLUDE_DIR)
195         message (STATUS "LuaJIT not found, using bundled Lua.")
196         set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
197         set(LUA_LIBRARY "lua")
198         add_subdirectory(lua)
199 endif(LUA_LIBRARY AND LUA_INCLUDE_DIR)
200
201 mark_as_advanced(LUA_LIBRARY)
202 mark_as_advanced(LUA_INCLUDE_DIR)
203
204 set(USE_LEVELDB 0)
205
206 OPTION(ENABLE_LEVELDB "Enable LevelDB backend")
207
208 if(ENABLE_LEVELDB)
209         find_library(LEVELDB_LIBRARY leveldb)
210         find_path(LEVELDB_INCLUDE_DIR db.h PATH_SUFFIXES leveldb)
211         message (STATUS "LevelDB library: ${LEVELDB_LIBRARY}")
212         message (STATUS "LevelDB headers: ${LEVELDB_INCLUDE_DIR}")
213         if(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR)
214                 set(USE_LEVELDB 1)
215                 message(STATUS "LevelDB backend enabled")
216                 include_directories(${LEVELDB_INCLUDE_DIR})
217         else(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR)
218                 set(USE_LEVELDB 0)
219                 message(STATUS "LevelDB not found!")
220         endif(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR)
221 endif(ENABLE_LEVELDB)
222
223 configure_file(
224         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
225         "${PROJECT_BINARY_DIR}/cmake_config.h"
226 )
227
228 add_subdirectory(jthread)
229 add_subdirectory(script)
230 add_subdirectory(util)
231
232 set(common_SRCS
233         rollback_interface.cpp
234         rollback.cpp
235         genericobject.cpp
236         voxelalgorithms.cpp
237         sound.cpp
238         quicktune.cpp
239         subgame.cpp
240         inventorymanager.cpp
241         mods.cpp
242         content_abm.cpp
243         craftdef.cpp
244         nameidmapping.cpp
245         itemdef.cpp
246         nodedef.cpp
247         object_properties.cpp
248         log.cpp
249         content_sao.cpp
250         emerge.cpp
251         mapgen.cpp
252         mapgen_v6.cpp
253         mapgen_v7.cpp
254         mapgen_indev.cpp
255         mapgen_singlenode.cpp
256         mapgen_math.cpp
257         treegen.cpp
258         dungeongen.cpp
259         cavegen.cpp
260         content_nodemeta.cpp
261         content_mapnode.cpp
262         collision.cpp
263         nodemetadata.cpp
264         nodetimer.cpp
265         serverobject.cpp
266         noise.cpp
267         porting.cpp
268         tool.cpp
269         defaultsettings.cpp
270         mapnode.cpp
271         voxel.cpp
272         inventory.cpp
273         debug.cpp
274         serialization.cpp
275         light.cpp
276         filesys.cpp
277         connection.cpp
278         environment.cpp
279         server.cpp
280         socket.cpp
281         mapblock.cpp
282         mapsector.cpp
283         map.cpp
284         database.cpp
285         database-dummy.cpp
286         database-leveldb.cpp
287         database-sqlite3.cpp
288         player.cpp
289         test.cpp
290         sha1.cpp
291         base64.cpp
292         ban.cpp
293         biome.cpp
294         staticobject.cpp
295         serverlist.cpp
296         pathfinder.cpp
297         convert_json.cpp
298         ${JTHREAD_SRCS}
299         ${common_SCRIPT_SRCS}
300         ${UTIL_SRCS}
301 )
302
303 # This gives us the icon
304 if(WIN32)
305         set(WINRESOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../misc/winresource.rc)
306         if(MINGW)
307                 if(NOT CMAKE_RC_COMPILER)
308                         set(CMAKE_RC_COMPILER "windres.exe")
309                 endif()
310                 ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
311                         COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR}
312                         -i${WINRESOURCE_FILE}
313                         -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
314                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
315                 SET(common_SRCS ${common_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
316         else(MINGW) # Probably MSVC
317                 set(common_SRCS ${common_SRCS} ${WINRESOURCE_FILE})
318         endif(MINGW)
319 endif()
320
321 # Client sources
322 set(minetest_SRCS
323         ${common_SRCS}
324         ${sound_SRCS}
325         localplayer.cpp
326         sky.cpp
327         clientmap.cpp
328         content_cso.cpp
329         content_mapblock.cpp
330         content_cao.cpp
331         mesh.cpp
332         mapblock_mesh.cpp
333         keycode.cpp
334         camera.cpp
335         clouds.cpp
336         particles.cpp
337         clientobject.cpp
338         chat.cpp
339         hud.cpp
340         guiKeyChangeMenu.cpp
341         guiMessageMenu.cpp
342         guiTextInputMenu.cpp
343         guiFormSpecMenu.cpp
344         guiPauseMenu.cpp
345         guiPasswordChange.cpp
346         guiVolumeChange.cpp
347         guiDeathScreen.cpp
348         guiChatConsole.cpp
349         client.cpp
350         filecache.cpp
351         tile.cpp
352         shader.cpp
353         game.cpp
354         main.cpp
355         guiEngine.cpp
356         guiFileSelectMenu.cpp
357         convert_json.cpp
358         ${minetest_SCRIPT_SRCS}
359 )
360
361 if(USE_FREETYPE)
362         set(minetest_SRCS
363                 ${minetest_SRCS}
364                 intlGUIEditBox.cpp
365         )
366 endif(USE_FREETYPE)
367
368 list(SORT minetest_SRCS)
369
370 # Server sources
371 set(minetestserver_SRCS
372         ${common_SRCS}
373         main.cpp
374 )
375 list(SORT minetestserver_SRCS)
376
377 include_directories(
378         ${PROJECT_BINARY_DIR}
379         ${PROJECT_SOURCE_DIR}
380         ${IRRLICHT_INCLUDE_DIR}
381         ${ZLIB_INCLUDE_DIR}
382         ${CMAKE_BUILD_TYPE}
383         ${PNG_INCLUDE_DIR}
384         ${GETTEXT_INCLUDE_DIR}
385         ${SOUND_INCLUDE_DIRS}
386         ${SQLITE3_INCLUDE_DIR}
387         ${LUA_INCLUDE_DIR}
388         ${JSON_INCLUDE_DIR}
389         ${PROJECT_SOURCE_DIR}/script
390 )
391
392 if(USE_FREETYPE)
393         include_directories(
394                 ${FREETYPE_INCLUDE_DIRS}
395                 ${CGUITTFONT_INCLUDE_DIR}
396         )
397 endif(USE_FREETYPE)
398
399 if(USE_CURL)
400         include_directories(
401                 ${CURL_INCLUDE_DIR}
402         )
403 endif(USE_CURL)
404
405 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
406
407 if(BUILD_CLIENT)
408         add_executable(${PROJECT_NAME} ${minetest_SRCS})
409         target_link_libraries(
410                 ${PROJECT_NAME}
411                 ${ZLIB_LIBRARIES}
412                 ${IRRLICHT_LIBRARY}
413                 ${OPENGL_LIBRARIES}
414                 ${JPEG_LIBRARIES}
415                 ${BZIP2_LIBRARIES}
416                 ${PNG_LIBRARIES}
417                 ${X11_LIBRARIES}
418                 ${GETTEXT_LIBRARY}
419                 ${SOUND_LIBRARIES}
420                 ${SQLITE3_LIBRARY}
421                 ${LUA_LIBRARY}
422                 ${JSON_LIBRARY}
423                 ${OPENGLES2_LIBRARIES}
424                 ${PLATFORM_LIBS}
425                 ${CLIENT_PLATFORM_LIBS}
426         )
427         if(USE_CURL)
428                 target_link_libraries(
429                         ${PROJECT_NAME}
430                         ${CURL_LIBRARY}
431                 )
432         endif(USE_CURL)
433         if(USE_FREETYPE)
434                 target_link_libraries(
435                         ${PROJECT_NAME}
436                         ${FREETYPE_LIBRARY}
437                         ${CGUITTFONT_LIBRARY}
438                 )
439         endif(USE_FREETYPE)
440         if (USE_LEVELDB)
441                 target_link_libraries(${PROJECT_NAME} ${LEVELDB_LIBRARY})
442         endif(USE_LEVELDB)
443 endif(BUILD_CLIENT)
444
445 if(BUILD_SERVER)
446         add_executable(${PROJECT_NAME}server ${minetestserver_SRCS})
447         target_link_libraries(
448                 ${PROJECT_NAME}server
449                 ${ZLIB_LIBRARIES}
450                 ${SQLITE3_LIBRARY}
451                 ${JSON_LIBRARY}
452                 ${GETTEXT_LIBRARY}
453                 ${LUA_LIBRARY}
454                 ${PLATFORM_LIBS}
455         )
456         if (USE_LEVELDB)
457                 target_link_libraries(${PROJECT_NAME}server ${LEVELDB_LIBRARY})
458         endif(USE_LEVELDB)
459         if(USE_CURL)
460                 target_link_libraries(
461                         ${PROJECT_NAME}server
462                         ${CURL_LIBRARY}
463                 )
464         endif(USE_CURL)
465 endif(BUILD_SERVER)
466
467
468 #
469 # Set some optimizations and tweaks
470 #
471
472 include(CheckCXXCompilerFlag)
473
474 if(MSVC)
475         # Visual Studio
476
477         # EHa enables SEH exceptions (used for catching segfaults)
478         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")
479         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
480         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
481
482         # Debug build doesn't catch exceptions by itself
483         # Add some optimizations because otherwise it's VERY slow
484         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
485
486         # Flags for C files (sqlite)
487         # /MT = Link statically with standard library stuff
488         set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")
489         
490         if(BUILD_SERVER)
491                 set_target_properties(${PROJECT_NAME}server PROPERTIES
492                                 COMPILE_DEFINITIONS "SERVER")
493         endif(BUILD_SERVER)
494
495 else()
496         # Probably GCC
497         
498         if(WARN_ALL)
499                 set(RELEASE_WARNING_FLAGS "-Wall")
500         else()
501                 set(RELEASE_WARNING_FLAGS "")
502         endif()
503         
504         if(NOT APPLE AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
505                 CHECK_CXX_COMPILER_FLAG("-Wno-unused-but-set-variable" HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
506                 if(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
507                         set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
508                 endif(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
509         endif()
510
511         if(MINGW)
512                 set(OTHER_FLAGS "-mthreads -fexceptions")
513         endif()
514
515         if(APPLE)
516                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
517                 set(ARCH i386)
518         endif()
519
520         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
521         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
522
523         if(USE_GPROF)
524                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
525         endif()
526         
527         if(BUILD_SERVER)
528                 set_target_properties(${PROJECT_NAME}server PROPERTIES
529                                 COMPILE_DEFINITIONS "SERVER")
530         endif(BUILD_SERVER)
531
532 endif()
533
534 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
535 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
536
537 #
538 # Installation
539 #
540 if(WIN32)
541         if(MINGWM10_DLL)
542                 install(FILES ${MINGWM10_DLL} DESTINATION ${BINDIR})
543         endif()
544         if(DEFINED ZLIB_DLL)
545                 install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
546         endif()
547         if(USE_SOUND)
548                 if(OPENAL_DLL)
549                         install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR})
550                 endif()
551                 if(OGG_DLL)
552                         install(FILES ${OGG_DLL} DESTINATION ${BINDIR})
553                 endif()
554                 if(VORBIS_DLL)
555                         install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR})
556                 endif()
557                 if(VORBISFILE_DLL)
558                         install(FILES ${VORBISFILE_DLL} DESTINATION ${BINDIR})
559                 endif()
560                 if(CURL_DLL)
561                         install(FILES ${CURL_DLL} DESTINATION ${BINDIR})
562                 endif()
563         endif()
564 endif()
565
566 if(BUILD_CLIENT)
567         install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
568
569         if(USE_GETTEXT)
570                 foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
571                         set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
572                         set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
573                         install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
574                 endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
575         endif()
576
577         if(WIN32)
578                 if(DEFINED IRRLICHT_DLL)
579                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
580                 endif()
581                 if(USE_GETTEXT)
582                         if(DEFINED GETTEXT_DLL)
583                                 install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
584                         endif()
585                         if(DEFINED GETTEXT_ICONV_DLL)
586                                 install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
587                         endif()
588                 endif(USE_GETTEXT)
589         endif()
590 endif(BUILD_CLIENT)
591
592 if(BUILD_SERVER)
593         install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR})
594 endif(BUILD_SERVER)
595
596 if (USE_GETTEXT)
597         set(MO_FILES)
598
599         foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
600                 set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po")
601                 set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
602                 set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
603
604                 add_custom_command(OUTPUT ${MO_BUILD_PATH}
605                         COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
606                         COMMENT "mo-update [${LOCALE}]: Creating locale directory.")
607
608                 add_custom_command(
609                         OUTPUT ${MO_FILE_PATH}
610                         COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
611                         DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
612                         WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
613                         COMMENT "mo-update [${LOCALE}]: Creating mo file."
614                         )
615
616                 set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
617         endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
618
619         add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
620 endif(USE_GETTEXT)
621
622 # Subdirectories
623
624 if (SQLITE3_FOUND)
625 else (SQLITE3_FOUND)
626         add_subdirectory(sqlite)
627 endif (SQLITE3_FOUND)
628
629 if (BUILD_CLIENT AND USE_FREETYPE)
630         add_subdirectory(cguittfont)
631 endif (BUILD_CLIENT AND USE_FREETYPE)
632
633 if (JSON_FOUND)
634 else (JSON_FOUND)
635         add_subdirectory(json)
636 endif (JSON_FOUND)
637
638 #end