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