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