added gettext support
[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 configure_file(
67         "${PROJECT_SOURCE_DIR}/cmake_config.h.in"
68         "${PROJECT_BINARY_DIR}/cmake_config.h"
69 )
70
71 set(common_SRCS
72         content_sao.cpp
73         mapgen.cpp
74         content_inventory.cpp
75         content_nodemeta.cpp
76         content_craft.cpp
77         content_mapblock.cpp
78         content_mapnode.cpp
79         auth.cpp
80         collision.cpp
81         nodemetadata.cpp
82         serverobject.cpp
83         noise.cpp
84         mineral.cpp
85         porting.cpp
86         materials.cpp
87         defaultsettings.cpp
88         mapnode.cpp
89         voxel.cpp
90         mapblockobject.cpp
91         inventory.cpp
92         debug.cpp
93         serialization.cpp
94         light.cpp
95         filesys.cpp
96         connection.cpp
97         environment.cpp
98         server.cpp
99         servercommand.cpp
100         socket.cpp
101         mapblock.cpp
102         mapsector.cpp
103         map.cpp
104         player.cpp
105         utility.cpp
106         test.cpp
107         sha1.cpp
108         base64.cpp
109 )
110
111 # Client sources
112 set(minetest_SRCS
113         ${common_SRCS}
114         content_cao.cpp
115         mapblock_mesh.cpp
116         farmesh.cpp
117         keycode.cpp
118         clouds.cpp
119         clientobject.cpp
120         guiMainMenu.cpp
121         guiKeyChangeMenu.cpp
122         guiMessageMenu.cpp
123         guiTextInputMenu.cpp
124         guiInventoryMenu.cpp
125         guiPauseMenu.cpp
126         guiPasswordChange.cpp
127         client.cpp
128         tile.cpp
129         game.cpp
130         main.cpp
131 )
132
133 # Server sources
134 set(minetestserver_SRCS
135         ${common_SRCS}
136         servermain.cpp
137 )
138
139 include_directories(
140         ${PROJECT_BINARY_DIR}
141         ${IRRLICHT_INCLUDE_DIR}
142         ${ZLIB_INCLUDE_DIR}
143         ${CMAKE_BUILD_TYPE}
144         ${PNG_INCLUDE_DIR}
145         ${GETTEXT_INCLUDE_DIR}
146         "${PROJECT_SOURCE_DIR}/jthread"
147         "${PROJECT_SOURCE_DIR}/sqlite"
148 )
149
150 set(EXECUTABLE_OUTPUT_PATH ../bin)
151
152 if(BUILD_CLIENT)
153         add_executable(minetest ${minetest_SRCS})
154         target_link_libraries(
155                 minetest
156                 ${ZLIB_LIBRARIES}
157                 ${IRRLICHT_LIBRARY}
158                 ${OPENGL_LIBRARIES}
159                 ${JPEG_LIBRARIES}
160                 ${BZIP2_LIBRARIES}
161                 ${PNG_LIBRARIES}
162                 ${X11_LIBRARIES}
163                 ${GETTEXT_LIBRARIES}
164                 ${PLATFORM_LIBS}
165                 ${CLIENT_PLATFORM_LIBS}
166                 jthread
167                 sqlite3
168         )
169 endif(BUILD_CLIENT)
170
171 if(BUILD_SERVER)
172         add_executable(minetestserver ${minetestserver_SRCS})
173         target_link_libraries(
174                 minetestserver
175                 ${ZLIB_LIBRARIES}
176                 ${PLATFORM_LIBS}
177                 jthread
178                 sqlite3
179         )
180 endif(BUILD_SERVER)
181
182 #
183 # Set some optimizations and tweaks
184 #
185
186 if(MSVC)
187         # Visual Studio
188
189         # EHa enables SEH exceptions (used for catching segfaults)
190         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")
191         #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG /NODEFAULTLIB:\"libcmtd.lib\" /NODEFAULTLIB:\"libcmt.lib\"")
192         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/LTCG")
193
194         # Debug build doesn't catch exceptions by itself
195         # Add some optimizations because otherwise it's VERY slow
196         set(CMAKE_CXX_FLAGS_DEBUG "/MDd /Zi /Ob0 /Od /RTC1")
197         
198         if(BUILD_SERVER)
199                 set_target_properties(minetestserver PROPERTIES
200                                 COMPILE_DEFINITIONS "SERVER")
201         endif(BUILD_SERVER)
202
203 else()
204         # Probably GCC
205         
206         if(WARN_ALL)
207                 set(RELEASE_WARNING_FLAGS "-Wall")
208         else()
209                 set(RELEASE_WARNING_FLAGS "")
210         endif()
211         
212         if(NOT APPLE)
213                 set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-unused-but-set-variable")
214         endif()
215         
216         if(APPLE)
217                 set(CMAKE_OSX_ARCHITECTURES i386 CACHE STRING "do not build for 64-bit" FORCE)
218                 set(ARCH i386)
219         endif()
220
221         if(WIN32)
222                 set(CMAKE_EXE_LINKER_FLAGS "-lintl -L ${GETTEXT_BIN_DIR}")
223         endif()
224
225         set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} -O3 -ffast-math -Wall -fomit-frame-pointer -pipe -funroll-loops")
226         set(CMAKE_CXX_FLAGS_DEBUG "-g -O1 -Wall ${WARNING_FLAGS}")
227
228         if(USE_GPROF)
229                 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -pg")
230         endif()
231         
232         if(BUILD_SERVER)
233                 set_target_properties(minetestserver PROPERTIES
234                                 COMPILE_DEFINITIONS "SERVER")
235         endif(BUILD_SERVER)
236
237 endif()
238
239 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}")
240 #MESSAGE(STATUS "CMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}")
241
242 #
243 # Installation
244 #
245
246 # Example configuration file
247 install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../minetest.conf.example" DESTINATION ${EXAMPLE_CONF_DIR})
248
249 if(BUILD_CLIENT)
250         install(TARGETS minetest DESTINATION ${BINDIR})
251
252         file(GLOB images "${CMAKE_CURRENT_SOURCE_DIR}/../data/*.png")
253
254         install(FILES ${images} DESTINATION ${DATADIR})
255
256         install(FILES ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES/minetest-c55.mo DESTINATION locale/de/LC_MESSAGES)
257  
258         if(WIN32)
259                 if(DEFINED IRRLICHT_DLL)
260                         install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
261                 endif()
262                 if(DEFINED ZLIB_DLL)
263                         install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
264                 endif()
265                 if(DEFINED GETTEXT_BIN_DIR)
266                         install(FILES ${GETTEXT_BIN_DIR}/libintl3.dll DESTINATION ${BINDIR})
267                         install(FILES ${GETTEXT_BIN_DIR}/libiconv2.dll DESTINATION ${BINDIR})
268                 endif()
269         endif()
270 endif(BUILD_CLIENT)
271
272 if(BUILD_SERVER)
273         install(TARGETS minetestserver DESTINATION ${BINDIR})
274 endif(BUILD_SERVER)
275
276 if(WIN32)
277         set(GETTEXT_MSGFMT "${GETTEXT_BIN_DIR}/msgfmt" CACHE FILEPATH "path to msgfmt")
278 elseif(APPLE)
279         set(GETTEXT_MSGFMT "${GETTEXT_BIN_DIR}/msgfmt" CACHE FILEPATH "path to msgfmt")
280 else()
281         set(GETTEXT_MSGFMT "msgfmt")
282 endif()
283
284 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.")
285
286 add_custom_command(
287                 OUTPUT ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES/minetest-c55.mo
288                 COMMAND ${GETTEXT_MSGFMT} -o ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES/minetest-c55.mo ${CMAKE_SOURCE_DIR}/po/de/minetest-c55.po 
289                 DEPENDS 
290                         ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES
291                         ${CMAKE_SOURCE_DIR}/po/de/minetest-c55.po
292                 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/po/de
293                 COMMENT "mo-update [de]: Creating mo file."
294                 )
295 add_custom_target(translation_de ALL COMMENT "mo update [de]" DEPENDS ${CMAKE_BINARY_DIR}/locale/de/LC_MESSAGES/minetest-c55.mo)
296
297 # Subdirectories
298
299 add_subdirectory(jthread)
300 add_subdirectory(sqlite)
301
302 #end