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