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