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