CMakeLists.txt

code/Cmakelist.txt - erdongchen, 08/22/2011 09:49 am

Download (8.8 kB)

 
1
#-----------------------------------------------------------------------------
2
#
3
# NeL
4
#  Authors: Nevrax and the NeL Community
5
#  Version: 0.8.0
6
#
7
# Notes:
8
#   * Changing install location: add -DCMAKE_INSTALL_PREFIX:PATH=/my/new/path
9
#   * Changing specific install location variables:
10
#       * NL_ETC_PREFIX (default: $CMAKE_INSTALL_PREFIX/etc)
11
#       * NL_SHARE_PREFIX (default: $CMAKE_INSTALL_PREFIX/share)
12
#       * NL_BIN_PREFIX (default: $CMAKE_INSTALL_PREFIX/bin)
13
#       * NL_SBIN_PREFIX  (default: $CMAKE_INSTALL_PREFIX/sbin)
14
#       * NL_LIB_PREFIX  (default: $CMAKE_INSTALL_PREFIX/lib)
15
#       * NL_DRIVER_PREFIX  (default: $CMAKE_INSTALL_PREFIX/lib (windows) or $CMAKE_INSTALL_PREFIX/lib/nel)
16
#   * Enable building of documentation: add -DBUILD_DOCUMENTATION:BOOL=ON - new make target: DoxygenDoc
17
#   * Updating version: update header (above) but also update NL_VERSION below.
18
#   * To build binary archive, use the 'package' target.
19
#     To build source archive, use the 'package_source' target.
20

21
#-----------------------------------------------------------------------------
22
# Load some macros.
23
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
24
#-----------------------------------------------------------------------------
25
# Set CMake 2.6 Policies.
26
IF(COMMAND cmake_policy)
27
  # Works around warnings libraries linked against that don't
28
  # have absolute paths (e.g. -lpthread)
29
  cmake_policy(SET CMP0003 NEW)
30

31
  # Works around warnings about escaped quotes in ADD_DEFINITIONS
32
  # statements
33
  cmake_policy(SET CMP0005 OLD)
34
ENDIF(COMMAND cmake_policy)
35

36
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/nel.cmake)
37
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/ConfigureChecks.cmake)
38
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/CheckDepends.cmake)
39
INCLUDE(${CMAKE_ROOT}/Modules/Documentation.cmake OPTIONAL)
40

41
# Force out of source builds.
42
CHECK_OUT_OF_SOURCE()
43

44
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
45
PROJECT(RyzomCore CXX C)
46
SET(NL_VERSION_MAJOR 0)
47
SET(NL_VERSION_MINOR 8)
48
SET(NL_VERSION_PATCH 0)
49
SET(NL_VERSION "${NL_VERSION_MAJOR}.${NL_VERSION_MINOR}.${NL_VERSION_PATCH}")
50

51
NL_SETUP_BUILD()
52
NL_SETUP_BUILD_FLAGS()
53

54
#-----------------------------------------------------------------------------
55
# Redirect output files
56
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
57
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
58

59
# DLL should be in the same directory as EXE under Windows
60
IF(WIN32)
61
  SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
62
ELSE(WIN32)
63
  SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
64
ENDIF(WIN32)
65

66
IF(WIN32)
67
  IF(WITH_MFC)
68
    FIND_PACKAGE(MFC QUIET)
69
  ENDIF(WITH_MFC)
70

71
  IF(NOT DEFINED ENV{QTDIR})
72
    SET(ENV{QTDIR} "c:/qt/4.6.3")
73
  ENDIF(NOT DEFINED ENV{QTDIR})
74
ENDIF(WIN32)
75

76
#-----------------------------------------------------------------------------
77
# Set default config options
78
#
79
NL_SETUP_DEFAULT_OPTIONS()
80
NL_SETUP_NEL_DEFAULT_OPTIONS()
81
NL_SETUP_NELNS_DEFAULT_OPTIONS()
82
NL_SETUP_RYZOM_DEFAULT_OPTIONS()
83
NL_SETUP_SNOWBALLS_DEFAULT_OPTIONS()
84

85
NL_SETUP_PREFIX_PATHS()
86
RYZOM_SETUP_PREFIX_PATHS()
87

88
NL_CONFIGURE_CHECKS()
89

90
#-----------------------------------------------------------------------------
91
#Platform specifics
92

93
SETUP_EXTERNAL()
94

95
IF(WIN32)
96
  SET(WINSOCK2_LIB ws2_32.lib)
97

98
  IF(WITH_MFC)
99
    FIND_PACKAGE(CustomMFC REQUIRED)
100
  ENDIF(WITH_MFC)
101
ENDIF(WIN32)
102

103
FIND_PACKAGE(Threads REQUIRED)
104
FIND_PACKAGE(LibXml2 REQUIRED)
105
FIND_PACKAGE(PNG REQUIRED)
106
FIND_PACKAGE(Jpeg)
107

108
IF(WITH_STATIC)
109
  # libxml2 could need winsock2 library
110
  SET(LIBXML2_DEFINITIONS ${LIBXML2_DEFINITIONS} -DLIBXML_STATIC)
111
  SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${WINSOCK2_LIB})
112

113
  # on Mac OS X libxml2 requieres iconv
114
  IF(APPLE)
115
    FIND_PACKAGE(Iconv REQUIRED)
116
    SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${ICONV_LIBRARIES})
117
    INCLUDE_DIRECTORIES(${ICONV_INCLUDE_DIR})
118
  ENDIF(APPLE)
119
ENDIF(WITH_STATIC)
120

121
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/PCHSupport.cmake)
122

123
IF(FINAL_VERSION)
124
  ADD_DEFINITIONS(-DFINAL_VERSION=1)
125
ENDIF(FINAL_VERSION)
126

127
IF(WITH_QT)
128
  FIND_PACKAGE(Qt4 COMPONENTS QtCore QtGui QtXml REQUIRED)
129
ENDIF(WITH_QT)
130

131
IF(WITH_NEL)
132
  IF(WITH_NEL_TESTS)
133
    FIND_PACKAGE(CppTest)
134
  ENDIF(WITH_NEL_TESTS)
135

136
  INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/nel/include ${LIBXML2_INCLUDE_DIR})
137
  ADD_DEFINITIONS(${LIBXML2_DEFINITIONS})
138
  ADD_SUBDIRECTORY(nel)
139
ENDIF(WITH_NEL)
140

141
IF(WITH_RYZOM)
142
  ADD_SUBDIRECTORY(ryzom)
143
ENDIF(WITH_RYZOM)
144

145
IF(WITH_NELNS)
146
#  ADD_SUBDIRECTORY(nelns)
147
	ADD_SUBDIRECTORY(nelns)
148
ENDIF(WITH_NELNS)
149

150
IF(WITH_SNOWBALLS)
151
#  ADD_SUBDIRECTORY(snowballs2)
152
	ADD_SUBDIRECTORY(snowballs2)
153
ENDIF(WITH_SNOWBALLS)
154

155
IF(WITH_TOOLS)
156
  ADD_SUBDIRECTORY(tool)
157
ENDIF(WITH_TOOLS)
158

159
# To build the documention, you will have to enable it
160
# and then do the equivalent of "make DoxygenDoc".
161
IF(BUILD_DOCUMENTATION)
162
    IF(DOT)
163
        SET(HAVE_DOT YES)
164
    ELSE(DOT)
165
        SET(HAVE_DOT NO)
166
    ENDIF(DOT)
167
    # This processes our Doxyfile.in and substitutes paths to generate
168
    # a final Doxyfile
169
    CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doc/Doxyfile.cmake.in ${CMAKE_BINARY_DIR}/doc/Doxyfile)
170

171
    ADD_CUSTOM_TARGET(DoxygenDoc ${DOXYGEN} ${CMAKE_BINARY_DIR}/doc/Doxyfile)
172
ENDIF(BUILD_DOCUMENTATION)
173

174
IF(WITH_NEL_TESTS)
175
  ENABLE_TESTING()
176
  ADD_TEST(nel_unit_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/nel_unit_test --html)
177
  IF(BUILD_DASHBOARD)
178
    INCLUDE(Dart)
179
    SET(SVNCOMMAND svn)
180
    SET(SVNSOURCEDIR http://dev.ryzom.com/svn/trunk/nel)
181
    SET(GENERATELOGS svn2cl)
182
  ENDIF(BUILD_DASHBOARD)
183
ENDIF(WITH_NEL_TESTS)
184

185
# packaging information
186
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "NeL MMORPG Framework")
187
SET(CPACK_PACKAGE_VENDOR "NeL")
188
SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README)
189
SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/COPYING)
190
SET(CPACK_PACKAGE_VERSION_MAJOR "${NL_VERSION_MAJOR}")
191
SET(CPACK_PACKAGE_VERSION_MINOR "${NL_VERSION_MINOR}")
192
SET(CPACK_PACKAGE_VERSION_PATCH "${NL_VERSION_PATCH}")
193
SET(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_BINARY_DIR};NeL;ALL;/")
194
SET(CPACK_PACKAGE_EXECUTABLES "nel${NL_VERSION}" "nel")
195

196
# NSIS Specific Packing Setup
197
SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "NeL")
198
SET(CPACK_NSIS_MODIFY_PATH "ON")
199
SET(CPACK_NSIS_MUI_ICON ${CMAKE_SOURCE_DIR}/resources/nevraxpill.ico)
200
SET(CPACK_NSIS_MUI_UNIICON ${CMAKE_SOURCE_DIR}/resources/nevraxpill.ico)
201
SET(CPACK_PACKAGE_ICON ${CMAKE_SOURCE_DIR}/resources\\\\nel.bmp)
202
SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} NeL")
203
SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\dev.ryzom.com")
204
SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\dev.ryzom.com\\\\projects\\\\nel\\\\wiki")
205
SET(CPACK_NSIS_CONTACT "[email protected]")
206

207
## Source Packages
208
SET(CPACK_PACKAGE_FILE_NAME "nel-${NL_VERSION}")
209
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "nel-${NL_VERSION}")
210
IF(WIN32)
211
  #SET(CPACK_GENERATOR "NSIS")
212
  SET(CPACK_GENERATOR "NSIS;ZIP")
213
  SET(CPACK_SOURCE_GENERATOR "ZIP")
214
ELSE(WIN32)
215
  SET(CPACK_GENERATOR "TGZ")
216
  SET(CPACK_SOURCE_GENERATOR "TGZ")
217
ENDIF(WIN32)
218
set(CPACK_SOURCE_IGNORE_FILES
219
	"~$"
220
	"\\\\.cvsignore$"
221
	"^${CMAKE_SOURCE_DIR}.*/CVS/"
222
	"^${CMAKE_SOURCE_DIR}.*/\\\\.svn/"
223
	"^${CMAKE_SOURCE_DIR}/debian/"
224
	"^${CMAKE_SOURCE_DIR}/old/")
225
IF(WIN32)
226
  IF(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
227
    SET(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE)
228
    IF(WITH_QT)
229
      INCLUDE(${QT_USE_FILE})
230
      INSTALL(FILES
231
        "${QT_LIBRARY_DIR}/../bin/QtGuid4.dll"
232
        "${QT_LIBRARY_DIR}/../bin/QtXmld4.dll"
233
        "${QT_LIBRARY_DIR}/../bin/QtCored4.dll"
234
        DESTINATION bin)
235
    ENDIF(WITH_QT)
236
  ELSE(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
237
    IF(WITH_QT)
238
      INCLUDE(${QT_USE_FILE})
239
      INSTALL(FILES
240
        "${QT_LIBRARY_DIR}/../bin/QtGui4.dll"
241
        "${QT_LIBRARY_DIR}/../bin/QtXml4.dll"
242
        "${QT_LIBRARY_DIR}/../bin/QtCore4.dll"
243
        DESTINATION bin)
244
    ENDIF(WITH_QT)
245
  ENDIF(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
246

247
  # Install CEGUI and its dependencies.
248
  IF(WITH_NEL_CEGUI)
249
    INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIBase.dll" DESTINATION bin)
250
    INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIDevilImageCodec.dll" DESTINATION bin)
251
    INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIExpatParser.dll" DESTINATION bin)
252
    INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIFalagardWRBase.dll" DESTINATION bin)
253
    INSTALL(FILES "${CEGUI_LIB_DIR}/Devil.dll" DESTINATION bin)
254
    INSTALL(FILES "${CEGUI_LIB_DIR}/ILU.dll" DESTINATION bin)
255
  ENDIF(WITH_NEL_CEGUI)
256

257
  # Only the tools require MFC.
258
  IF(WITH_TOOLS)
259
    SET(CMAKE_INSTALL_MFC_LIBRARIES TRUE)
260
  ENDIF(WITH_TOOLS)
261
  INCLUDE(InstallRequiredSystemLibraries)
262
ENDIF(WIN32)
263

264
INCLUDE(CPack)
265

266
INCLUDE(CMakePackaging.txt)
267

268
## Debian Packages
269
#INCLUDE(UseDebian)
270
#IF(DEBIAN_FOUND)
271
#  ADD_DEBIAN_TARGETS(nel)
272
#ENDIF(DEBIAN_FOUND)