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