Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/cmake/LibraryConfig.cmake @ 7224

Last change on this file since 7224 was 7224, checked in by rgrieder, 14 years ago

Adjusted CMake code to accept the new v5 dependencies that requires the POCO library.

  • Property svn:eol-style set to native
File size: 7.8 KB
Line 
1 #
2 #             ORXONOX - the hottest 3D action shooter ever to exist
3 #                             > www.orxonox.net <
4 #
5 #        This program is free software; you can redistribute it and/or
6 #         modify it under the terms of the GNU General Public License
7 #        as published by the Free Software Foundation; either version 2
8 #            of the License, or (at your option) any later version.
9 #
10 #       This program is distributed in the hope that it will be useful,
11 #        but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #                 GNU General Public License for more details.
14 #
15 #   You should have received a copy of the GNU General Public License along
16 #      with this program; if not, write to the Free Software Foundation,
17 #     Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18 #
19 #
20 #  Author:
21 #    Reto Grieder
22 #  Description:
23 #    Configures the external libraries. Whenever possible, the find scripts
24 #    from the CMake module path are used, but that required some adjustments
25 #    for certain libraries (Boost, OpenAL, TCL)
26 #
27
28INCLUDE(CompareVersionStrings)
29INCLUDE(FindPackageHandleStandardArgs)
30
31# Prevent CMake from finding libraries in the installation folder on Windows.
32# There might already be an installation from another compiler
33IF(WIN32)
34  LIST(REMOVE_ITEM CMAKE_SYSTEM_PREFIX_PATH  "${CMAKE_INSTALL_PREFIX}")
35  LIST(REMOVE_ITEM CMAKE_SYSTEM_LIBRARY_PATH "${CMAKE_INSTALL_PREFIX}/bin")
36ENDIF()
37
38############## Platform Scripts #################
39
40# On Windows using a package causes way less problems
41SET(_option_msg "Set this to true to use precompiled dependecy archives")
42IF(WIN32)
43  OPTION(DEPENDENCY_PACKAGE_ENABLE "${_option_msg}" ON)
44ELSE(WIN32)
45  OPTION(DEPENDENCY_PACKAGE_ENABLE "${_option_msg}" FALSE)
46ENDIF(WIN32)
47
48# Scripts for specific library and CMake config
49INCLUDE(LibraryConfigTardis)
50INCLUDE(LibraryConfigApple)
51
52IF(DEPENDENCY_PACKAGE_ENABLE)
53  GET_FILENAME_COMPONENT(_dep_dir_1 ${CMAKE_SOURCE_DIR}/../dependencies ABSOLUTE)
54  GET_FILENAME_COMPONENT(_dep_dir_2 ${CMAKE_SOURCE_DIR}/../lib_dist/dependencies ABSOLUTE)
55  FIND_PATH(DEPENDENCY_PACKAGE_DIR
56    NAMES include
57    PATHS
58      ${CMAKE_SOURCE_DIR}/dependencies
59      ${_dep_dir_1}
60      ${_dep_dir_2}
61    NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH
62  )
63  IF(NOT DEPENDENCY_PACKAGE_DIR)
64    MESSAGE(STATUS "Warning: Could not find dependency directory."
65                   "Disable LIBRARY_USE_PACKAGE if you have none intalled.")
66  ELSE()
67    INCLUDE(PackageConfigMinGW)
68    INCLUDE(PackageConfigMSVC)
69    INCLUDE(PackageConfig) # For both msvc and mingw
70  ENDIF()
71ENDIF(DEPENDENCY_PACKAGE_ENABLE)
72
73# User script
74SET(LIBRARY_CONFIG_USER_SCRIPT "" CACHE FILEPATH
75    "Specify a CMake script if you wish to write your own library path config.
76     See LibraryConfigTardis.cmake for an example.")
77IF(LIBRARY_CONFIG_USER_SCRIPT)
78  IF(EXISTS ${CMAKE_MODULE_PATH}/${LIBRARY_CONFIG_USER_SCRIPT})
79    INCLUDE(${CMAKE_MODULE_PATH}/${LIBRARY_CONFIG_USER_SCRIPT})
80  ENDIF()
81ENDIF(LIBRARY_CONFIG_USER_SCRIPT)
82
83
84############### Library finding #################
85# Performs the search and sets the variables    #
86
87FIND_PACKAGE(OGRE  1.4       REQUIRED)
88FIND_PACKAGE(ENet  1.1       REQUIRED)
89FIND_PACKAGE(Ogg             REQUIRED)
90FIND_PACKAGE(Vorbis          REQUIRED)
91FIND_PACKAGE(ALUT            REQUIRED)
92FIND_PACKAGE(ZLIB            REQUIRED)
93IF(POCO_REQUIRED)
94  FIND_PACKAGE(POCO          REQUIRED)
95ENDIF()
96IF(WIN32)
97  FIND_PACKAGE(DirectX       REQUIRED)
98ENDIF()
99
100##### CEGUI #####
101# We make use of the CEGUI script module called CEGUILua.
102# However there is a small issue with that: We use Tolua, a C++ binding
103# generator ourselves. And we also have to use our bindings in the same
104# lua state is CEGUILua's. Unfortunately this implies that both lua runtime
105# version are equal or else you get segmentation faults.
106# In order to match the Lua versions we decided to ship CEGUILua in our
107# repository, mainly because there is no way to determine which version of
108# Lua CEGUILua was linked against (you'd have to specify yourself) and secondly
109# because we can then choose the Lua version. Future plans might involve only
110# accepting Lua 5.1.
111
112# Insert all internally supported CEGUILua versions here
113SET(CEGUILUA_INTERNAL_SUPPORT 0.5.0 0.6.0 0.6.1 0.6.2)
114OPTION(CEGUILUA_USE_EXTERNAL_LIBRARY "Force the use of external CEGUILua library" OFF)
115FIND_PACKAGE(CEGUI 0.5 REQUIRED)
116
117##### Lua #####
118IF(CEGUILUA_USE_EXTERNAL_LIBRARY)
119  COMPARE_VERSION_STRINGS(${CEGUI_VERSION} "0.6" _version_comparison)
120  IF(version_comparison LESS 0)
121    SET(LUA_VERSION_REQUEST 5.0)
122  ELSE()
123    SET(LUA_VERSION_REQUEST 5.1)
124  ENDIF()
125ELSE()
126  SET(LUA_VERSION_REQUEST 5)
127ENDIF()
128FIND_PACKAGE(Lua ${LUA_VERSION_REQUEST} EXACT REQUIRED)
129
130##### OpenAL #####
131FIND_PACKAGE(OpenAL REQUIRED)
132# Also use parent include dir (without AL/) for ALUT
133IF(OPENAL_INCLUDE_DIR MATCHES "/AL$")
134  GET_FILENAME_COMPONENT(ALT_OPENAL_INCLUDE_DIR ${OPENAL_INCLUDE_DIR} PATH)
135ENDIF()
136SET(OPENAL_INCLUDE_DIRS ${OPENAL_INCLUDE_DIR} ${ALT_OPENAL_INCLUDE_DIR})
137# Notfiy user
138FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenAL DEFAULT_MSG OPENAL_LIBRARY OPENAL_INCLUDE_DIR)
139# Hide variables created by the script
140MARK_AS_ADVANCED(OPENAL_INCLUDE_DIR OPENAL_LIBRARY)
141
142##### Tcl #####
143# We only require Tcl, so avoid confusing user about other Tcl stuff by
144# applying a little workaround
145SET(Tclsh_FIND_QUIETLY TRUE)
146FIND_PACKAGE(TCL QUIET)
147# Display messages separately
148SET(TCL_FIND_QUIETLY FALSE)
149FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCL DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH)
150
151##### Boost #####
152# Expand the next statement if newer boost versions than 1.36.1 are released
153SET(Boost_ADDITIONAL_VERSIONS 1.37 1.37.0 1.38 1.38.0 1.39 1.39.0 1.40 1.40.0)
154IF( NOT TARDIS )
155  FIND_PACKAGE(Boost 1.35 REQUIRED thread filesystem system date_time)
156ENDIF()
157# No auto linking, so this option is useless anyway
158MARK_AS_ADVANCED(Boost_LIB_DIAGNOSTIC_DEFINITIONS)
159
160
161####### Static/Dynamic linking options ##########
162
163# On Windows dynamically linked libraries need some special treatment
164# You may want to edit these settings if you provide your own libraries
165# Note: Default option in the libraries vary, but our default option is dynamic
166IF(WIN32)
167  OPTION(LINK_BOOST_DYNAMIC "Link Boost dynamically on Windows" TRUE)
168  OPTION(LINK_CEGUI_DYNAMIC "Link CEGUI dynamicylly on Windows" TRUE)
169  OPTION(LINK_ENET_DYNAMIC  "Link ENet dynamically on Windows" TRUE)
170  OPTION(LINK_OGRE_DYNAMIC  "Link OGRE dynamically on Windows" TRUE)
171  OPTION(LINK_TCL_DYNAMIC   "Link TCL dynamically on Windows" TRUE)
172  OPTION(LINK_ZLIB_DYNAMIC  "Link ZLib dynamically on Windows" TRUE)
173  COMPARE_VERSION_STRINGS("${LUA_VERSION}" "5.1" _version_comparison)
174  IF(_version_comparison LESS 0)
175    OPTION(LINK_LUA_DYNAMIC "Link Lua dynamically on Windows" FALSE)
176  ELSE(_version_comparison LESS 0)
177    OPTION(LINK_LUA_DYNAMIC "Link Lua dynamically on Windows" TRUE)
178  ENDIF(_version_comparison LESS 0)
179
180  IF(DEPENDENCY_PACKAGE_ENABLE)
181    MARK_AS_ADVANCED(
182      LINK_BOOST_DYNAMIC LINK_CEGUI_DYNAMIC LINK_ENET_DYNAMIC
183      LINK_OGRE_DYNAMIC  LINK_TCL_DYNAMIC   LINK_ZLIB_DYNAMIC
184      LINK_LUA_DYNAMIC
185    )
186  ENDIF()
187ENDIF(WIN32)
188
189
190################# OGRE Plugins ##################
191
192# More plugins: Plugin_BSPSceneManager, Plugin_OctreeSceneManager
193SET(OGRE_PLUGINS_INT "Plugin_ParticleFX;Plugin_BSPSceneManager")
194IF(WIN32)
195  # CG program manager is probably DirectX related (not available under unix)
196  LIST(APPEND OGRE_PLUGINS_INT Plugin_CgProgramManager)
197ENDIF(WIN32)
198SET(OGRE_PLUGINS ${OGRE_PLUGINS_INT} CACHE STRING
199   "Specify which OGRE plugins to load. Existance check is performed.")
200
201# Check the plugins and determine the plugin folder
202# You can give a hint by setting the environment variable ENV{OGRE_PLUGIN_DIR}
203INCLUDE(CheckOGREPlugins)
204CHECK_OGRE_PLUGINS(${OGRE_PLUGINS})
205
Note: See TracBrowser for help on using the repository browser.