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