]> git.lizzy.rs Git - minetest.git/blob - src/CMakeLists.txt
Show git hash in version string at top left corner of window
[minetest.git] / src / CMakeLists.txt
1 project(minetest)
2 cmake_minimum_required( VERSION 2.6 )
3
4 # Set some random things default to not being visible in the GUI
5 mark_as_advanced(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH)
6 mark_as_advanced(SQLITE3_INCLUDE_DIR SQLITE3_LIBRARY)
7 mark_as_advanced(JSON_INCLUDE_DIR JSON_LIBRARY)
8
9 option(ENABLE_CURL "Enable cURL support for fetching media" 1)
10
11 if (NOT ENABLE_CURL)
12         mark_as_advanced(CLEAR CURL_LIBRARY CURL_INCLUDE_DIR)
13 endif(NOT ENABLE_CURL)
14
15 if( ENABLE_CURL )
16         find_package(CURL)
17 endif( ENABLE_CURL )
18 set(USE_CURL 0)
19 if (CURL_FOUND AND ENABLE_CURL)
20         message(STATUS "cURL support enabled")
21         set(USE_CURL 1)
22 endif(CURL_FOUND AND ENABLE_CURL)
23
24 # user-visible option to enable/disable gettext usage
25 OPTION(ENABLE_GETTEXT "Use GetText for internationalization" 0)
26
27 # this is only set to 1 if gettext is enabled _and_ available
28 set(USE_GETTEXT 0)
29
30 if(ENABLE_GETTEXT)
31         find_package(GettextLib)
32 else()
33         MARK_AS_ADVANCED(GETTEXT_ICONV_DLL GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT)
34 endif()
35
36 if(GETTEXT_FOUND AND ENABLE_GETTEXT)
37         message(STATUS "gettext include path: ${GETTEXT_INCLUDE_DIR}")
38         message(STATUS "gettext msgfmt path: ${GETTEXT_MSGFMT}")
39         if(WIN32)
40                 message(STATUS "gettext library: ${GETTEXT_LIBRARY}")
41                 message(STATUS "gettext dll: ${GETTEXT_DLL}")
42                 message(STATUS "gettext iconv dll: ${GETTEXT_ICONV_DLL}")
43         endif()
44         set(USE_GETTEXT 1)
45         message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}")
46 elseif(GETTEXT_FOUND AND NOT ENABLE_GETTEXT)
47         MESSAGE(STATUS "GetText found but disabled;")
48 else(GETTEXT_FOUND AND ENABLE_GETTEXT)
49         message(STATUS "GetText disabled")
50 endif(GETTEXT_FOUND AND ENABLE_GETTEXT)
51
52 # user visible option to enable/disable sound
53 OPTION(ENABLE_SOUND "Enable sound" ON)
54
55 # this is only set to 1 if sound is enabled _and_ available
56 set(USE_SOUND 0)
57 set(SOUND_PROBLEM 0)
58
59 if(ENABLE_SOUND AND BUILD_CLIENT)
60         # Sound libraries
61         find_package(OpenAL)
62         find_package(Vorbis)
63         if(NOT OPENAL_FOUND)
64                 message(STATUS "Sound enabled, but OpenAL not found!")
65                 set(SOUND_PROBLEM 1)
66                 MARK_AS_ADVANCED(CLEAR OPENAL_LIBRARY OPENAL_INCLUDE_DIR)
67         endif()
68         if(NOT VORBIS_FOUND)
69                 message(STATUS "Sound enabled, but Vorbis libraries not found!")
70                 set(SOUND_PROBLEM 1)
71                 MARK_AS_ADVANCED(CLEAR OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY)
72         endif()
73         if(OPENAL_FOUND AND VORBIS_FOUND)
74                 set(USE_SOUND 1)
75                 message(STATUS "Sound enabled")
76         endif()
77 endif(ENABLE_SOUND AND BUILD_CLIENT)
78
79 if(SOUND_PROBLEM)
80         message(FATAL_ERROR "Sound enabled, but cannot be used.\n"
81                 "To continue, either fill in the required paths or disable sound. (-DENABLE_SOUND=0)")
82 endif()
83 if(USE_SOUND)
84         set(sound_SRCS sound_openal.cpp)
85         set(SOUND_INCLUDE_DIRS
86                 ${OPENAL_INCLUDE_DIR}
87                 ${VORBIS_INCLUDE_DIR}
88                 ${OGG_INCLUDE_DIR}
89                 )
90         set(SOUND_LIBRARIES
91                 ${OPENAL_LIBRARY}
92                 ${VORBIS_LIBRARIES}
93                 )
94 endif()
95
96 option(ENABLE_FREETYPE "Enable freetype2 (truetype fonts and basic unicode support)" OFF)
97 set(USE_FREETYPE 0)
98 if(ENABLE_FREETYPE)
99         set(USE_FREETYPE 1)
100 endif(ENABLE_FREETYPE)
101
102 if(NOT MSVC)
103         set(USE_GPROF 0 CACHE BOOL "Use -pg flag for g++")
104 endif()
105
106 # Use cmake_config.h
107 add_definitions ( -DUSE_CMAKE_CONFIG_H )
108
109 if(WIN32)
110         # Windows
111         if(MSVC) # MSVC Specifics
112                 # Surpress some useless warnings
113                 add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
114         else() # Probably MinGW = GCC
115                 set(PLATFORM_LIBS ws2_32.lib)
116         endif()
117         # Zlib stuff
118         set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
119                         CACHE PATH "Zlib include directory")
120         set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
121                         CACHE FILEPATH "Path to zlibwapi.lib")
122         set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll"
123                         CACHE FILEPATH "Path to zlibwapi.dll (for installation)")
124         set(IRRLICHT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../../irrlicht-1.7.2"
125                         CACHE PATH "irrlicht dir")
126         if(USE_FREETYPE)
127                 set(FREETYPE_INCLUDE_DIR_ft2build "${PROJECT_SOURCE_DIR}/../../freetype2/include/"
128                                 CACHE PATH "freetype include dir")
129                 set(FREETYPE_INCLUDE_DIR_freetype2 "${PROJECT_SOURCE_DIR}/../../freetype2/include/freetype"
130                                 CACHE PATH "freetype include dir")
131                 set(FREETYPE_LIBRARY "${PROJECT_SOURCE_DIR}/../../freetype2/objs/win32/vc2005/freetype247.lib"
132                                 CACHE FILEPATH "Path to freetype247.lib")
133         endif(USE_FREETYPE)
134         set(MINGWM10_DLL ""
135                         CACHE FILEPATH "Path to mingwm10.dll (for installation)")
136         if(ENABLE_SOUND)
137                 set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)")
138                 set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)")
139                 set(VORBIS_DLL "" CACHE FILEPATH "Path to libvorbis.dll for installation (optional)")
140                 set(VORBISFILE_DLL "" CACHE FILEPATH "Path to libvorbisfile.dll for installation (optional)")
141         endif()
142 else()
143         # Unix probably
144         if(BUILD_CLIENT)
145                 find_package(X11 REQUIRED)
146                 find_package(OpenGL REQUIRED)
147                 find_package(JPEG REQUIRED)
148                 find_package(BZip2 REQUIRED)
149                 find_package(PNG REQUIRED)
150                 if(APPLE)
151                         FIND_LIBRARY(CARBON_LIB Carbon)
152                         FIND_LIBRARY(COCOA_LIB Cocoa)
153                         FIND_LIBRARY(IOKIT_LIB IOKit)
154                         mark_as_advanced(
155                                 CARBON_LIB
156                                 COCOA_LIB
157                                 IOKIT_LIB
158                         )
159                         SET(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${CARBON_LIB} ${COCOA_LIB} ${IOKIT_LIB})
160                 endif(APPLE)
161         endif(BUILD_CLIENT)
162         find_package(ZLIB REQUIRED)
163         set(PLATFORM_LIBS -lpthread -lrt ${CMAKE_DL_LIBS})
164         #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
165         # This way Xxf86vm is found on OpenBSD too
166         find_library(XXF86VM_LIBRARY Xxf86vm)
167         mark_as_advanced(XXF86VM_LIBRARY)
168         set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
169 endif()
170
171 find_package(Sqlite3 REQUIRED)
172 find_package(Json REQUIRED)
173 find_package(OpenGLES2)
174
175 if(USE_FREETYPE)
176         find_package(Freetype REQUIRED)
177         set(CGUITTFONT_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cguittfont")
178         set(CGUITTFONT_LIBRARY cguittfont)
179 endif(USE_FREETYPE)
180
181
182 find_library(LUA_LIBRARY luajit
183                 NAMES luajit-5.1)
184 find_path(LUA_INCLUDE_DIR luajit.h
185         NAMES luajit.h
186         PATH_SUFFIXES luajit-2.0)
187 message (STATUS "LuaJIT library: ${LUA_LIBRARY}")
188 message (STATUS "LuaJIT headers: ${LUA_INCLUDE_DIR}")
189
190 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         -P "${CMAKE_SOURCE_DIR}/cmake/Modules/GenerateVersion.cmake"
235         WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
236
237 add_subdirectory(jthread)
238 add_subdirectory(script)
239 add_subdirectory(util)
240
241 set(common_SRCS
242         version.cpp
243         rollback_interface.cpp
244         rollback.cpp
245         genericobject.cpp
246         voxelalgorithms.cpp
247         sound.cpp
248         quicktune.cpp
249         subgame.cpp
250         inventorymanager.cpp
251         mods.cpp
252         content_abm.cpp
253         craftdef.cpp
254         nameidmapping.cpp
255         itemdef.cpp
256         nodedef.cpp
257         object_properties.cpp
258         log.cpp
259         content_sao.cpp
260         emerge.cpp
261         mapgen.cpp
262         mapgen_v6.cpp
263         mapgen_v7.cpp
264         mapgen_indev.cpp
265         mapgen_singlenode.cpp
266         mapgen_math.cpp
267         treegen.cpp
268         dungeongen.cpp
269         cavegen.cpp
270         content_nodemeta.cpp
271         content_mapnode.cpp
272         collision.cpp
273         nodemetadata.cpp
274         nodetimer.cpp
275         serverobject.cpp
276         noise.cpp
277         porting.cpp
278         tool.cpp
279         defaultsettings.cpp
280         mapnode.cpp
281         voxel.cpp
282         inventory.cpp
283         debug.cpp
284         serialization.cpp
285         light.cpp
286         filesys.cpp
287         connection.cpp
288         environment.cpp
289         server.cpp
290         socket.cpp
291         mapblock.cpp
292         mapsector.cpp
293         map.cpp
294         database.cpp
295         database-dummy.cpp
296         database-leveldb.cpp
297         database-sqlite3.cpp
298         player.cpp
299         test.cpp
300         sha1.cpp
301         base64.cpp
302         ban.cpp
303         biome.cpp
304         staticobject.cpp
305         serverlist.cpp
306         pathfinder.cpp
307         convert_json.cpp
308         ${JTHREAD_SRCS}
309         ${common_SCRIPT_SRCS}
310         ${UTIL_SRCS}
311 )
312
313 # This gives us the icon
314 if(WIN32)
315         set(WINRESOURCE_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../misc/winresource.rc)
316         if(MINGW)
317                 if(NOT CMAKE_RC_COMPILER)
318                         set(CMAKE_RC_COMPILER "windres.exe")
319                 endif()
320                 ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
321                         COMMAND ${CMAKE_RC_COMPILER} -I${CMAKE_CURRENT_SOURCE_DIR}
322                         -i${WINRESOURCE_FILE}
323                         -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
324                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
325                 SET(common_SRCS ${common_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
326         else(MINGW) # Probably MSVC
327                 set(common_SRCS ${common_SRCS} ${WINRESOURCE_FILE})
328         endif(MINGW)
329 endif()
330
331 # Client sources
332 set(minetest_SRCS
333         ${common_SRCS}
334         ${sound_SRCS}
335         localplayer.cpp
336         sky.cpp
337         clientmap.cpp
338         content_cso.cpp
339         content_mapblock.cpp
340         content_cao.cpp
341         mesh.cpp
342         mapblock_mesh.cpp
343         keycode.cpp
344         camera.cpp
345         clouds.cpp
346         particles.cpp
347         clientobject.cpp
348         chat.cpp
349         hud.cpp
350         guiKeyChangeMenu.cpp
351         guiMessageMenu.cpp
352         guiTextInputMenu.cpp
353         guiFormSpecMenu.cpp
354         guiPauseMenu.cpp
355         guiPasswordChange.cpp
356         guiVolumeChange.cpp
357         guiDeathScreen.cpp
358         guiChatConsole.cpp
359         client.cpp
360         filecache.cpp
361         tile.cpp
362         shader.cpp
363         game.cpp
364         main.cpp
365         guiEngine.cpp
366         guiFileSelectMenu.cpp
367         convert_json.cpp
368         ${minetest_SCRIPT_SRCS}
369 )
370
371 if(USE_FREETYPE)
372         set(minetest_SRCS
373                 ${minetest_SRCS}
374                 intlGUIEditBox.cpp
375         )
376 endif(USE_FREETYPE)
377
378 list(SORT minetest_SRCS)
379
380 # Server sources
381 set(minetestserver_SRCS
382         ${common_SRCS}
383         main.cpp
384 )
385 list(SORT minetestserver_SRCS)
386
387 include_directories(
388         ${PROJECT_BINARY_DIR}
389         ${PROJECT_SOURCE_DIR}
390         ${IRRLICHT_INCLUDE_DIR}
391         ${ZLIB_INCLUDE_DIR}
392         ${CMAKE_BUILD_TYPE}
393         ${PNG_INCLUDE_DIR}
394         ${GETTEXT_INCLUDE_DIR}
395         ${SOUND_INCLUDE_DIRS}
396         ${SQLITE3_INCLUDE_DIR}
397         ${LUA_INCLUDE_DIR}
398         ${JSON_INCLUDE_DIR}
399         ${PROJECT_SOURCE_DIR}/script
400 )
401
402 if(USE_FREETYPE)
403         include_directories(
404                 ${FREETYPE_INCLUDE_DIRS}
405                 ${CGUITTFONT_INCLUDE_DIR}
406         )
407 endif(USE_FREETYPE)
408
409 if(USE_CURL)
410         include_directories(
411                 ${CURL_INCLUDE_DIR}
412         )
413 endif(USE_CURL)
414
415 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
416
417 if(BUILD_CLIENT)
418         add_executable(${PROJECT_NAME} ${minetest_SRCS})
419         add_dependencies(${PROJECT_NAME} GenerateVersion)
420         target_link_libraries(
421                 ${PROJECT_NAME}
422                 ${ZLIB_LIBRARIES}
423                 ${IRRLICHT_LIBRARY}
424                 ${OPENGL_LIBRARIES}
425                 ${JPEG_LIBRARIES}
426                 ${BZIP2_LIBRARIES}
427                 ${PNG_LIBRARIES}
428                 ${X11_LIBRARIES}
429                 ${GETTEXT_LIBRARY}
430                 ${SOUND_LIBRARIES}
431                 ${SQLITE3_LIBRARY}
432                 ${LUA_LIBRARY}
433                 ${JSON_LIBRARY}
434                 ${OPENGLES2_LIBRARIES}
435                 ${PLATFORM_LIBS}
436                 ${CLIENT_PLATFORM_LIBS}
437         )
438         if(USE_CURL)
439                 target_link_libraries(
440                         ${PROJECT_NAME}
441                         ${CURL_LIBRARY}
442                 )
443         endif(USE_CURL)
444         if(USE_FREETYPE)
445                 target_link_libraries(
446                         ${PROJECT_NAME}
447                         ${FREETYPE_LIBRARY}
448                         ${CGUITTFONT_LIBRARY}
449                 )
450         endif(USE_FREETYPE)
451         if (USE_LEVELDB)
452                 target_link_libraries(${PROJECT_NAME} ${LEVELDB_LIBRARY})
453         endif(USE_LEVELDB)
454 endif(BUILD_CLIENT)
455
456 if(BUILD_SERVER)
457         add_executable(${PROJECT_NAME}server ${minetestserver_SRCS})
458         add_dependencies(${PROJECT_NAME}server GenerateVersion)
459         target_link_libraries(
460                 ${PROJECT_NAME}server
461                 ${ZLIB_LIBRARIES}
462                 ${SQLITE3_LIBRARY}
463                 ${JSON_LIBRARY}
464                 ${GETTEXT_LIBRARY}
465                 ${LUA_LIBRARY}
466                 ${PLATFORM_LIBS}
467         )
468         if (USE_LEVELDB)
469                 target_link_libraries(${PROJECT_NAME}server ${LEVELDB_LIBRARY})
470         endif(USE_LEVELDB)
471         if(USE_CURL)
472                 target_link_libraries(
473                         ${PROJECT_NAME}server
474                         ${CURL_LIBRARY}
475                 )
476         endif(USE_CURL)
477 endif(BUILD_SERVER)
478
479
480 #
481 # Set some optimizations and tweaks
482 #
483
484 include(CheckCXXCompilerFlag)
485
486 if(MSVC)
487         # Visual Studio
488
489         # EHa enables SEH exceptions (used for catching segfaults)
490         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")
491         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
492         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
493
494         # Debug build doesn't catch exceptions by itself
495         # Add some optimizations because otherwise it's VERY slow
496         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
497
498         # Flags for C files (sqlite)
499         # /MT = Link statically with standard library stuff
500         set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")
501         
502         if(BUILD_SERVER)
503                 set_target_properties(${PROJECT_NAME}server PROPERTIES
504                                 COMPILE_DEFINITIONS "SERVER")
505         endif(BUILD_SERVER)
506
507 else()
508         # Probably GCC
509         
510         if(WARN_ALL)
511                 set(RELEASE_WARNING_FLAGS "-Wall")
512         else()
513                 set(RELEASE_WARNING_FLAGS "")
514         endif()
515         
516         if(NOT APPLE AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
517                 CHECK_CXX_COMPILER_FLAG("-Wno-unused-but-set-variable" HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
518                 if(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
519                         set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
520                 endif(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
521         endif()
522
523         if(MINGW)
524                 set(OTHER_FLAGS "-mthreads -fexceptions")
525         endif()
526
527         if(APPLE)
528                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
529                 set(ARCH i386)
530         endif()
531
532         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
533         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
534
535         if(USE_GPROF)
536                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
537         endif()
538         
539         if(BUILD_SERVER)
540                 set_target_properties(${PROJECT_NAME}server PROPERTIES
541                                 COMPILE_DEFINITIONS "SERVER")
542         endif(BUILD_SERVER)
543
544 endif()
545
546 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
547 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
548
549 #
550 # Installation
551 #
552 if(WIN32)
553         if(MINGWM10_DLL)
554                 install(FILES ${MINGWM10_DLL} DESTINATION ${BINDIR})
555         endif()
556         if(DEFINED ZLIB_DLL)
557                 install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
558         endif()
559         if(USE_SOUND)
560                 if(OPENAL_DLL)
561                         install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR})
562                 endif()
563                 if(OGG_DLL)
564                         install(FILES ${OGG_DLL} DESTINATION ${BINDIR})
565                 endif()
566                 if(VORBIS_DLL)
567                         install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR})
568                 endif()
569                 if(VORBISFILE_DLL)
570                         install(FILES ${VORBISFILE_DLL} DESTINATION ${BINDIR})
571                 endif()
572                 if(CURL_DLL)
573                         install(FILES ${CURL_DLL} DESTINATION ${BINDIR})
574                 endif()
575         endif()
576 endif()
577
578 if(BUILD_CLIENT)
579         install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
580
581         if(USE_GETTEXT)
582                 foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
583                         set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
584                         set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
585                         install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
586                 endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
587         endif()
588
589         if(WIN32)
590                 if(DEFINED IRRLICHT_DLL)
591                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
592                 endif()
593                 if(USE_GETTEXT)
594                         if(DEFINED GETTEXT_DLL)
595                                 install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
596                         endif()
597                         if(DEFINED GETTEXT_ICONV_DLL)
598                                 install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
599                         endif()
600                 endif(USE_GETTEXT)
601         endif()
602 endif(BUILD_CLIENT)
603
604 if(BUILD_SERVER)
605         install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR})
606 endif(BUILD_SERVER)
607
608 if (USE_GETTEXT)
609         set(MO_FILES)
610
611         foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
612                 set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po")
613                 set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
614                 set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
615
616                 add_custom_command(OUTPUT ${MO_BUILD_PATH}
617                         COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
618                         COMMENT "mo-update [${LOCALE}]: Creating locale directory.")
619
620                 add_custom_command(
621                         OUTPUT ${MO_FILE_PATH}
622                         COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
623                         DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
624                         WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
625                         COMMENT "mo-update [${LOCALE}]: Creating mo file."
626                         )
627
628                 set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
629         endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
630
631         add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
632 endif(USE_GETTEXT)
633
634 # Subdirectories
635
636 if (SQLITE3_FOUND)
637 else (SQLITE3_FOUND)
638         add_subdirectory(sqlite)
639 endif (SQLITE3_FOUND)
640
641 if (BUILD_CLIENT AND USE_FREETYPE)
642         add_subdirectory(cguittfont)
643 endif (BUILD_CLIENT AND USE_FREETYPE)
644
645 if (JSON_FOUND)
646 else (JSON_FOUND)
647         add_subdirectory(json)
648 endif (JSON_FOUND)
649
650 #end