]> git.lizzy.rs Git - dragonfireclient.git/blob - src/CMakeLists.txt
Handle death and respawn better
[dragonfireclient.git] / src / CMakeLists.txt
1 project(minetest)
2 cmake_minimum_required( VERSION 2.6 )
3
4 if(RUN_IN_PLACE)
5         add_definitions ( -DRUN_IN_PLACE )
6 endif(RUN_IN_PLACE)
7
8 # user-visible option to enable/disable gettext usage
9 OPTION(ENABLE_GETTEXT "Use GetText for internationalization" ON)
10
11 # this is only set to 1 if gettext is enabled _and_ available
12 set(USE_GETTEXT 0)
13
14 find_package(GettextLib)
15
16 if(GETTEXT_FOUND AND ENABLE_GETTEXT)
17         message(STATUS "gettext include path: ${GETTEXT_INCLUDE_DIR}")
18         message(STATUS "gettext msgfmt path: ${GETTEXT_MSGFMT}")
19         if(WIN32)
20                 message(STATUS "gettext library: ${GETTEXT_LIBRARY}")
21                 message(STATUS "gettext dll: ${GETTEXT_DLL}")
22                 message(STATUS "gettext iconv dll: ${GETTEXT_ICONV_DLL}")
23         endif()
24         set(USE_GETTEXT 1)
25         message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}")
26 elseif(GETTEXT_FOUND AND NOT ENABLE_GETTEXT)
27         MESSAGE(STATUS "GetText found but disabled;")
28 else(GETTEXT_FOUND AND ENABLE_GETTEXT)
29         message(STATUS "GetText disabled")
30 endif(GETTEXT_FOUND AND ENABLE_GETTEXT)
31
32 if(NOT MSVC)
33         set(USE_GPROF 0 CACHE BOOL "Use -pg flag for g++")
34 endif()
35
36 # Use cmake_config.h
37 add_definitions ( -DUSE_CMAKE_CONFIG_H )
38
39 if(WIN32)
40         # Windows
41         if(MSVC) # MSVC Specifics
42                 # Surpress some useless warnings
43                 add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
44         else() # Probably MinGW = GCC
45                 set(PLATFORM_LIBS ws2_32.lib)
46         endif()
47         # Zlib stuff
48         set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
49                         CACHE PATH "Zlib include directory")
50         set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
51                         CACHE FILEPATH "Path to zlibwapi.lib")
52         set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll"
53                         CACHE FILEPATH "Path to zlibwapi.dll (for installation)")
54         set(IRRLICHT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../../irrlicht-1.7.2"
55                         CACHE PATH "irrlicht dir")
56 else()
57         # Unix probably
58         if(BUILD_CLIENT)
59                 find_package(X11 REQUIRED)
60                 find_package(OpenGL REQUIRED)
61                 find_package(JPEG REQUIRED)
62                 find_package(BZip2 REQUIRED)
63                 find_package(PNG REQUIRED)
64                 if(APPLE)
65                         FIND_LIBRARY(CARBON_LIB Carbon)
66                         FIND_LIBRARY(COCOA_LIB Cocoa)
67                         FIND_LIBRARY(IOKIT_LIB IOKit)
68                         mark_as_advanced(
69                                 CARBON_LIB
70                                 COCOA_LIB
71                                 IOKIT_LIB
72                         )
73                         SET(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${CARBON_LIB} ${COCOA_LIB} ${IOKIT_LIB})
74                 endif(APPLE)
75         endif(BUILD_CLIENT)
76         find_package(ZLIB REQUIRED)
77         set(PLATFORM_LIBS -lpthread ${CMAKE_DL_LIBS})
78         #set(CLIENT_PLATFORM_LIBS -lXxf86vm)
79         # This way Xxf86vm is found on OpenBSD too
80         find_library(XXF86VM_LIBRARY Xxf86vm)
81         set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY})
82 endif()
83
84 find_package(Jthread REQUIRED)
85 find_package(Sqlite3 REQUIRED)
86
87 configure_file(
88         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
89         "${PROJECT_BINARY_DIR}/cmake_config.h"
90 )
91
92 set(common_SRCS
93         content_sao.cpp
94         mapgen.cpp
95         content_inventory.cpp
96         content_nodemeta.cpp
97         content_craft.cpp
98         content_mapnode.cpp
99         auth.cpp
100         collision.cpp
101         nodemetadata.cpp
102         serverobject.cpp
103         noise.cpp
104         mineral.cpp
105         porting.cpp
106         materials.cpp
107         defaultsettings.cpp
108         mapnode.cpp
109         voxel.cpp
110         inventory.cpp
111         debug.cpp
112         serialization.cpp
113         light.cpp
114         filesys.cpp
115         connection.cpp
116         environment.cpp
117         server.cpp
118         servercommand.cpp
119         socket.cpp
120         mapblock.cpp
121         mapsector.cpp
122         map.cpp
123         player.cpp
124         utility.cpp
125         test.cpp
126         sha1.cpp
127         base64.cpp
128         ban.cpp
129 )
130
131 # This gives us the icon
132 if(WIN32 AND MSVC)
133         set(common_SRCS ${common_SRCS} winresource.rc)
134 endif()
135
136 # Client sources
137 set(minetest_SRCS
138         ${common_SRCS}
139         MyBillboardSceneNode.cpp
140         content_mapblock.cpp
141         content_cao.cpp
142         mapblock_mesh.cpp
143         farmesh.cpp
144         keycode.cpp
145         camera.cpp
146         clouds.cpp
147         clientobject.cpp
148         guiMainMenu.cpp
149         guiKeyChangeMenu.cpp
150         guiMessageMenu.cpp
151         guiTextInputMenu.cpp
152         guiInventoryMenu.cpp
153         guiPauseMenu.cpp
154         guiPasswordChange.cpp
155         guiDeathScreen.cpp
156         client.cpp
157         tile.cpp
158         game.cpp
159         main.cpp
160 )
161
162 # Server sources
163 set(minetestserver_SRCS
164         ${common_SRCS}
165         servermain.cpp
166 )
167
168 include_directories(
169         ${PROJECT_BINARY_DIR}
170         ${IRRLICHT_INCLUDE_DIR}
171         ${ZLIB_INCLUDE_DIR}
172         ${CMAKE_BUILD_TYPE}
173         ${PNG_INCLUDE_DIR}
174         ${GETTEXT_INCLUDE_DIR}
175         ${JTHREAD_INCLUDE_DIR}
176         ${SQLITE3_INCLUDE_DIR}
177 )
178
179 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
180
181 if(BUILD_CLIENT)
182         add_executable(${PROJECT_NAME} ${minetest_SRCS})
183         target_link_libraries(
184                 ${PROJECT_NAME}
185                 ${ZLIB_LIBRARIES}
186                 ${IRRLICHT_LIBRARY}
187                 ${OPENGL_LIBRARIES}
188                 ${JPEG_LIBRARIES}
189                 ${BZIP2_LIBRARIES}
190                 ${PNG_LIBRARIES}
191                 ${X11_LIBRARIES}
192                 ${GETTEXT_LIBRARY}
193                 ${JTHREAD_LIBRARY}
194                 ${SQLITE3_LIBRARY}
195                 ${PLATFORM_LIBS}
196                 ${CLIENT_PLATFORM_LIBS}
197         )
198 endif(BUILD_CLIENT)
199
200 if(BUILD_SERVER)
201         add_executable(${PROJECT_NAME}server ${minetestserver_SRCS})
202         target_link_libraries(
203                 ${PROJECT_NAME}server
204                 ${ZLIB_LIBRARIES}
205                 ${JTHREAD_LIBRARY}
206                 ${SQLITE3_LIBRARY}
207                 ${PLATFORM_LIBS}
208         )
209 endif(BUILD_SERVER)
210
211 #
212 # Set some optimizations and tweaks
213 #
214
215 include(CheckCXXCompilerFlag)
216
217 if(MSVC)
218         # Visual Studio
219
220         # EHa enables SEH exceptions (used for catching segfaults)
221         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")
222         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
223         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
224
225         # Debug build doesn't catch exceptions by itself
226         # Add some optimizations because otherwise it's VERY slow
227         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
228
229         # Flags for C files (sqlite)
230         # /MT = Link statically with standard library stuff
231         set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")
232         
233         if(BUILD_SERVER)
234                 set_target_properties(${PROJECT_NAME}server PROPERTIES
235                                 COMPILE_DEFINITIONS "SERVER")
236         endif(BUILD_SERVER)
237
238 else()
239         # Probably GCC
240         
241         if(WARN_ALL)
242                 set(RELEASE_WARNING_FLAGS "-Wall")
243         else()
244                 set(RELEASE_WARNING_FLAGS "")
245         endif()
246         
247         if(NOT APPLE AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
248                 CHECK_CXX_COMPILER_FLAG("-Wno-unused-but-set-variable" HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
249                 if(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
250                         set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
251                 endif(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
252         endif()
253         
254         if(APPLE)
255                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
256                 set(ARCH i386)
257         endif()
258
259         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
260         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS}")
261
262         if(USE_GPROF)
263                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
264         endif()
265         
266         if(BUILD_SERVER)
267                 set_target_properties(${PROJECT_NAME}server PROPERTIES
268                                 COMPILE_DEFINITIONS "SERVER")
269         endif(BUILD_SERVER)
270
271 endif()
272
273 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
274 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
275
276 #
277 # Installation
278 #
279
280 # Example configuration file
281 install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
282
283 if(BUILD_CLIENT)
284         install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
285
286         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
287
288         install(FILES ${images} DESTINATION ${DATADIR})
289
290         if(USE_GETTEXT)
291                 foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
292                         set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
293                         set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
294                         install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
295                 endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
296         endif()
297
298         if(WIN32)
299                 if(DEFINED IRRLICHT_DLL)
300                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
301                 endif()
302                 if(DEFINED ZLIB_DLL)
303                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
304                 endif()
305                 if(USE_GETTEXT)
306                         if(DEFINED GETTEXT_DLL)
307                                 install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
308                         endif()
309                         if(DEFINED GETTEXT_ICONV_DLL)
310                                 install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
311                         endif()
312                 endif(USE_GETTEXT)
313         endif()
314 endif(BUILD_CLIENT)
315
316 if(BUILD_SERVER)
317         install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR})
318 endif(BUILD_SERVER)
319
320 if (USE_GETTEXT)
321         set(MO_FILES)
322
323         foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
324                 set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po")
325                 set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
326                 set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
327
328                 add_custom_command(OUTPUT ${MO_BUILD_PATH}
329                         COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
330                         COMMENT "mo-update [${LOCALE}]: Creating locale directory.")
331
332                 add_custom_command(
333                         OUTPUT ${MO_FILE_PATH}
334                         COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
335                         DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
336                         WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
337                         COMMENT "mo-update [${LOCALE}]: Creating mo file."
338                         )
339
340                 set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
341         endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
342
343         add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
344 endif(USE_GETTEXT)
345
346 # Subdirectories
347
348 if (JTHREAD_FOUND)
349 else (JTHREAD_FOUND)
350         add_subdirectory(jthread)
351 endif (JTHREAD_FOUND)
352
353 if (SQLITE3_FOUND)
354 else (SQLITE3_FOUND)
355 add_subdirectory(sqlite)
356 endif (SQLITE3_FOUND)
357
358 #end