]> git.lizzy.rs Git - minetest.git/blob - src/CMakeLists.txt
World creation button and dialog and functionality
[minetest.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 # TODO: Create proper find script for Lua
88 set(LUA_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/lua/src")
89 set(LUA_LIBRARY "lua")
90
91 configure_file(
92         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
93         "${PROJECT_BINARY_DIR}/cmake_config.h"
94 )
95
96 set(common_SRCS
97         quicktune.cpp
98         subgame.cpp
99         inventorymanager.cpp
100         mods.cpp
101         serverremoteplayer.cpp
102         content_abm.cpp
103         craftdef.cpp
104         nameidmapping.cpp
105         itemdef.cpp
106         nodedef.cpp
107         luaentity_common.cpp
108         scriptapi.cpp
109         script.cpp
110         log.cpp
111         content_sao.cpp
112         mapgen.cpp
113         content_nodemeta.cpp
114         content_mapnode.cpp
115         auth.cpp
116         collision.cpp
117         nodemetadata.cpp
118         serverobject.cpp
119         noise.cpp
120         porting.cpp
121         tool.cpp
122         defaultsettings.cpp
123         mapnode.cpp
124         voxel.cpp
125         inventory.cpp
126         debug.cpp
127         serialization.cpp
128         light.cpp
129         filesys.cpp
130         connection.cpp
131         environment.cpp
132         server.cpp
133         servercommand.cpp
134         socket.cpp
135         mapblock.cpp
136         mapsector.cpp
137         map.cpp
138         player.cpp
139         utility.cpp
140         test.cpp
141         sha1.cpp
142         base64.cpp
143         ban.cpp
144 )
145
146 # This gives us the icon
147 if(WIN32)
148         if(MINGW)
149                 ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o
150                         COMMAND windres.exe -I${CMAKE_CURRENT_SOURCE_DIR}
151                         -i${CMAKE_CURRENT_SOURCE_DIR}/winresource.rc
152                         -o ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
153                 SET(common_SRCS ${common_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/winresource_rc.o)
154         else(MINGW) # Probably MSVC
155                 set(common_SRCS ${common_SRCS} winresource.rc)
156         endif(MINGW)
157 endif()
158
159 # Client sources
160 set(minetest_SRCS
161         ${common_SRCS}
162         content_cso.cpp
163         content_mapblock.cpp
164         content_cao.cpp
165         mesh.cpp
166         mapblock_mesh.cpp
167         farmesh.cpp
168         keycode.cpp
169         camera.cpp
170         clouds.cpp
171         clientobject.cpp
172         chat.cpp
173         guiMainMenu.cpp
174         guiKeyChangeMenu.cpp
175         guiMessageMenu.cpp
176         guiTextInputMenu.cpp
177         guiInventoryMenu.cpp
178         guiPauseMenu.cpp
179         guiPasswordChange.cpp
180         guiDeathScreen.cpp
181         guiChatConsole.cpp
182         guiCreateWorld.cpp
183         client.cpp
184         tile.cpp
185         game.cpp
186         main.cpp
187 )
188
189 # Server sources
190 set(minetestserver_SRCS
191         ${common_SRCS}
192         main.cpp
193 )
194
195 include_directories(
196         ${PROJECT_BINARY_DIR}
197         ${IRRLICHT_INCLUDE_DIR}
198         ${ZLIB_INCLUDE_DIR}
199         ${CMAKE_BUILD_TYPE}
200         ${PNG_INCLUDE_DIR}
201         ${GETTEXT_INCLUDE_DIR}
202         ${JTHREAD_INCLUDE_DIR}
203         ${SQLITE3_INCLUDE_DIR}
204         ${LUA_INCLUDE_DIR}
205 )
206
207 set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
208
209 if(BUILD_CLIENT)
210         add_executable(${PROJECT_NAME} ${minetest_SRCS})
211         target_link_libraries(
212                 ${PROJECT_NAME}
213                 ${ZLIB_LIBRARIES}
214                 ${IRRLICHT_LIBRARY}
215                 ${OPENGL_LIBRARIES}
216                 ${JPEG_LIBRARIES}
217                 ${BZIP2_LIBRARIES}
218                 ${PNG_LIBRARIES}
219                 ${X11_LIBRARIES}
220                 ${GETTEXT_LIBRARY}
221                 ${JTHREAD_LIBRARY}
222                 ${SQLITE3_LIBRARY}
223                 ${LUA_LIBRARY}
224                 ${PLATFORM_LIBS}
225                 ${CLIENT_PLATFORM_LIBS}
226         )
227 endif(BUILD_CLIENT)
228
229 if(BUILD_SERVER)
230         add_executable(${PROJECT_NAME}server ${minetestserver_SRCS})
231         target_link_libraries(
232                 ${PROJECT_NAME}server
233                 ${ZLIB_LIBRARIES}
234                 ${JTHREAD_LIBRARY}
235                 ${SQLITE3_LIBRARY}
236                 ${LUA_LIBRARY}
237                 ${PLATFORM_LIBS}
238         )
239 endif(BUILD_SERVER)
240
241 #
242 # Set some optimizations and tweaks
243 #
244
245 include(CheckCXXCompilerFlag)
246
247 if(MSVC)
248         # Visual Studio
249
250         # EHa enables SEH exceptions (used for catching segfaults)
251         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")
252         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
253         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
254
255         # Debug build doesn't catch exceptions by itself
256         # Add some optimizations because otherwise it's VERY slow
257         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
258
259         # Flags for C files (sqlite)
260         # /MT = Link statically with standard library stuff
261         set(CMAKE_C_FLAGS_RELEASE "/O2 /Ob2 /MT")
262         
263         if(BUILD_SERVER)
264                 set_target_properties(${PROJECT_NAME}server PROPERTIES
265                                 COMPILE_DEFINITIONS "SERVER")
266         endif(BUILD_SERVER)
267
268 else()
269         # Probably GCC
270         
271         if(WARN_ALL)
272                 set(RELEASE_WARNING_FLAGS "-Wall")
273         else()
274                 set(RELEASE_WARNING_FLAGS "")
275         endif()
276         
277         if(NOT APPLE AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
278                 CHECK_CXX_COMPILER_FLAG("-Wno-unused-but-set-variable" HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
279                 if(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
280                         set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
281                 endif(HAS_UNUSED_BUT_SET_VARIABLE_WARNING)
282         endif()
283         
284         if(APPLE)
285                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
286                 set(ARCH i386)
287         endif()
288
289         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
290         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS}")
291
292         if(USE_GPROF)
293                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
294         endif()
295         
296         if(BUILD_SERVER)
297                 set_target_properties(${PROJECT_NAME}server PROPERTIES
298                                 COMPILE_DEFINITIONS "SERVER")
299         endif(BUILD_SERVER)
300
301 endif()
302
303 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
304 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
305
306 #
307 # Installation
308 #
309
310 # Example configuration file
311 # NOTE: Install is handled elsewhere
312 #install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
313
314 if(BUILD_CLIENT)
315         install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
316
317         #file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/textures/*.png")
318         #install(FILES ${images} DESTINATION ${DATADIR}/textures)
319         #file(GLOB datasubstuff "${CMAKE_CURRENT_SOURCE_DIR}/../data/*")
320         #install(DIRECTORY "${datasubstuff}" DESTINATION ${DATADIR})
321         install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../data/" DESTINATION ${DATADIR})
322
323         if(USE_GETTEXT)
324                 foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
325                         set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
326                         set(MO_BUILD_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
327                         install(FILES ${MO_BUILD_PATH} DESTINATION ${MO_DEST_PATH})
328                 endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
329         endif()
330
331         if(WIN32)
332                 if(DEFINED IRRLICHT_DLL)
333                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
334                 endif()
335                 if(DEFINED ZLIB_DLL)
336                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
337                 endif()
338                 if(USE_GETTEXT)
339                         if(DEFINED GETTEXT_DLL)
340                                 install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
341                         endif()
342                         if(DEFINED GETTEXT_ICONV_DLL)
343                                 install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
344                         endif()
345                 endif(USE_GETTEXT)
346         endif()
347 endif(BUILD_CLIENT)
348
349 if(BUILD_SERVER)
350         install(TARGETS ${PROJECT_NAME}server DESTINATION ${BINDIR})
351 endif(BUILD_SERVER)
352
353 if (USE_GETTEXT)
354         set(MO_FILES)
355
356         foreach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
357                 set(PO_FILE_PATH "${GETTEXT_PO_PATH}/${LOCALE}/minetest.po")
358                 set_mo_paths(MO_BUILD_PATH MO_DEST_PATH ${LOCALE})
359                 set(MO_FILE_PATH "${MO_BUILD_PATH}/${PROJECT_NAME}.mo")
360
361                 add_custom_command(OUTPUT ${MO_BUILD_PATH}
362                         COMMAND ${CMAKE_COMMAND} -E make_directory ${MO_BUILD_PATH}
363                         COMMENT "mo-update [${LOCALE}]: Creating locale directory.")
364
365                 add_custom_command(
366                         OUTPUT ${MO_FILE_PATH}
367                         COMMAND ${GETTEXT_MSGFMT} -o ${MO_FILE_PATH} ${PO_FILE_PATH}
368                         DEPENDS ${MO_BUILD_PATH} ${PO_FILE_PATH}
369                         WORKING_DIRECTORY "${GETTEXT_PO_PATH}/${LOCALE}"
370                         COMMENT "mo-update [${LOCALE}]: Creating mo file."
371                         )
372
373                 set(MO_FILES ${MO_FILES} ${MO_FILE_PATH})
374         endforeach(LOCALE ${GETTEXT_AVAILABLE_LOCALES})
375
376         add_custom_target(translations ALL COMMENT "mo update" DEPENDS ${MO_FILES})
377 endif(USE_GETTEXT)
378
379 # Subdirectories
380
381 if (JTHREAD_FOUND)
382 else (JTHREAD_FOUND)
383         add_subdirectory(jthread)
384 endif (JTHREAD_FOUND)
385
386 if (SQLITE3_FOUND)
387 else (SQLITE3_FOUND)
388         add_subdirectory(sqlite)
389 endif (SQLITE3_FOUND)
390
391 if (LUA_FOUND)
392 else (LUA_FOUND)
393         add_subdirectory(lua)
394 endif (LUA_FOUND)
395
396 #end