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