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