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