Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 3012 was 2925, checked in by rgrieder, 16 years ago

Moving some CMake variables to the advanced section of the cache when using packages under Windows.

  • Property svn:eol-style set to native
File size: 8.3 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(DEPENDENCY_PACKAGE_ENABLE)
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
70    # On Windows, DLLs have to be in the executable folder, install them
71    IF(DEP_BINARY_DIR AND WIN32)
72      # When installing a debug version, we really can't know which libraries
73      # are used in released mode because there might be deps of deps.
74      INSTALL(
75        DIRECTORY ${DEP_BINARY_DIR}/
76        DESTINATION bin
77        CONFIGURATIONS Debug
78        REGEX "^.*\\.pdb$" EXCLUDE
79      )
80
81      # Try to filter out all the debug libraries. If the regex doesn't do the
82      # job anymore, simply adjust it.
83      INSTALL(
84        DIRECTORY ${DEP_BINARY_DIR}/
85        DESTINATION bin
86        CONFIGURATIONS Release RelWithDebInfo MinSizeRel
87        REGEX "_[Dd]\\.[a-zA-Z0-9+-]+$|-mt-gd-|^.*\\.pdb$" EXCLUDE
88      )
89    ENDIF(DEP_BINARY_DIR AND WIN32)
90  ENDIF(NOT DEPENDENCY_PACKAGE_DIR)
91ENDIF(DEPENDENCY_PACKAGE_ENABLE)
92
93# User script
94SET(USER_SCRIPT_LIBRARY_CONFIG "" CACHE FILEPATH
95    "Specify a CMake script if you wish to write your own library path config.
96     See LibraryConfigTardis.cmake or LibraryConfigMinGW.cmake for examples.")
97IF(USER_SCRIPT_LIBRARY_CONFIG)
98  IF(EXISTS ${CMAKE_MODULE_PATH}/${USER_SCRIPT_LIBRARY_CONFIG}.cmake)
99    INCLUDE(${USER_SCRIPT_LIBRARY_CONFIG})
100  ELSEIF(EXISTS ${USER_SCRIPT_LIBRARY_CONFIG})
101    INCLUDE(${USER_SCRIPT_LIBRARY_CONFIG})
102  ELSEIF(EXISTS ${CMAKE_MODULE_PATH}/${USER_SCRIPT_LIBRARY_CONFIG})
103    INCLUDE(${CMAKE_MODULE_PATH}/${USER_SCRIPT_LIBRARY_CONFIG})
104  ENDIF()
105ENDIF(USER_SCRIPT_LIBRARY_CONFIG)
106
107
108############### Library finding #################
109# Performs the search and sets the variables    #
110
111FIND_PACKAGE(OGRE  1.4 EXACT REQUIRED)
112FIND_PACKAGE(ENet  1.1       REQUIRED)
113FIND_PACKAGE(Ogg             REQUIRED)
114FIND_PACKAGE(Vorbis          REQUIRED)
115FIND_PACKAGE(ALUT            REQUIRED)
116FIND_PACKAGE(ZLIB            REQUIRED)
117IF(WIN32)
118  FIND_PACKAGE(DirectX       REQUIRED)
119ENDIF(WIN32)
120
121##### CEGUI #####
122# We make use of the CEGUI script module called CEGUILua.
123# However there is a small issue with that: We use Tolua, a C++ binding
124# generator ourselves. And we also have to use our bindings in the same
125# lua state is CEGUILua's. Unfortunately this implies that both lua runtime
126# version are equal or else you get segmentation faults.
127# In order to match the Lua versions we decided to ship CEGUILua in our
128# repository, mainly because there is no way to determine which version of
129# Lua CEGUILua was linked against (you'd have to specify yourself) and secondly
130# because we can then choose the Lua version. Future plans might involve only
131# accepting Lua 5.1.
132
133# Insert all internally supported CEGUILua versions here
134SET(CEGUILUA_INTERNAL_SUPPORT 0.5.0 0.6.0 0.6.1 0.6.2)
135OPTION(CEGUILUA_USE_EXTERNAL_LIBRARY "Force the use of external CEGUILua library" OFF)
136FIND_PACKAGE(CEGUI 0.5 REQUIRED)
137
138##### Lua #####
139IF(CEGUILUA_USE_EXTERNAL_LIBRARY)
140  COMPARE_VERSION_STRINGS(${CEGUI_VERSION} "0.6" _version_comparison)
141  IF(version_comparison LESS 0)
142    SET(LUA_VERSION_REQUEST 5.0)
143  ELSE()
144    SET(LUA_VERSION_REQUEST 5.1)
145  ENDIF()
146ELSE()
147  SET(LUA_VERSION_REQUEST 5)
148ENDIF()
149FIND_PACKAGE(Lua ${LUA_VERSION_REQUEST} EXACT REQUIRED)
150
151##### OpenAL #####
152FIND_PACKAGE(OpenAL REQUIRED)
153# Also use parent include dir (without AL/) for ALUT
154IF(OPENAL_INCLUDE_DIR MATCHES "/AL$")
155  GET_FILENAME_COMPONENT(ALT_OPENAL_INCLUDE_DIR ${OPENAL_INCLUDE_DIR} PATH)
156ENDIF()
157SET(OPENAL_INCLUDE_DIRS ${OPENAL_INCLUDE_DIR} ${ALT_OPENAL_INCLUDE_DIR})
158# Notfiy user
159FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenAL DEFAULT_MSG OPENAL_LIBRARY OPENAL_INCLUDE_DIR)
160# Hide variables created by the script
161MARK_AS_ADVANCED(OPENAL_INCLUDE_DIR OPENAL_LIBRARY)
162
163##### Tcl #####
164# We only require Tcl, so avoid confusing user about other Tcl stuff by
165# applying a little workaround
166SET(Tclsh_FIND_QUIETLY TRUE)
167FIND_PACKAGE(TCL QUIET)
168# Display messages separately
169SET(TCL_FIND_QUIETLY FALSE)
170FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCL DEFAULT_MSG TCL_LIBRARY TCL_INCLUDE_PATH)
171
172##### Boost #####
173# Expand the next statement if newer boost versions than 1.36.1 are released
174SET(Boost_ADDITIONAL_VERSIONS 1.37 1.37.0)
175# MSVC seems to be the only compiler requiring date_time
176IF(MSVC)
177  FIND_PACKAGE(Boost 1.34 REQUIRED thread filesystem date_time)
178ELSE(MSVC)
179  FIND_PACKAGE(Boost 1.34 REQUIRED thread filesystem)
180ENDIF(MSVC)
181# Boost 1.35 and newer also need the 'System' library
182IF(NOT Boost_VERSION LESS 103500)
183  FIND_PACKAGE(Boost 1.35 REQUIRED system)
184ENDIF()
185# No auto linking, so this option is useless anyway
186MARK_AS_ADVANCED(Boost_LIB_DIAGNOSTIC_DEFINITIONS)
187
188####### Static/Dynamic linking options ##########
189
190# On Windows dynamically linked libraries need some special treatment
191# You may want to edit these settings if you provide your own libraries
192# Note: Default option in the libraries vary, but our default option is dynamic
193IF(WIN32)
194  OPTION(LINK_BOOST_DYNAMIC "Link Boost dynamically on Windows" TRUE)
195  OPTION(LINK_CEGUI_DYNAMIC "Link CEGUI dynamicylly on Windows" TRUE)
196  OPTION(LINK_ENET_DYNAMIC  "Link ENet dynamically on Windows" TRUE)
197  OPTION(LINK_OGRE_DYNAMIC  "Link OGRE dynamically on Windows" TRUE)
198  OPTION(LINK_TCL_DYNAMIC   "Link TCL dynamically on Windows" TRUE)
199  OPTION(LINK_ZLIB_DYNAMIC  "Link ZLib dynamically on Windows" TRUE)
200  COMPARE_VERSION_STRINGS("${LUA_VERSION}" "5.1" _version_comparison)
201  IF(_version_comparison LESS 0)
202    OPTION(LINK_LUA_DYNAMIC "Link Lua dynamically on Windows" FALSE)
203  ELSE(_version_comparison LESS 0)
204    OPTION(LINK_LUA_DYNAMIC "Link Lua dynamically on Windows" TRUE)
205  ENDIF(_version_comparison LESS 0)
206
207  IF(DEPENDENCY_PACKAGE_ENABLE)
208    MARK_AS_ADVANCED(
209      LINK_BOOST_DYNAMIC LINK_CEGUI_DYNAMIC LINK_ENET_DYNAMIC
210      LINK_OGRE_DYNAMIC  LINK_TCL_DYNAMIC   LINK_ZLIB_DYNAMIC
211      LINK_LUA_DYNAMIC
212    )
213  ENDIF()
214ENDIF(WIN32)
Note: See TracBrowser for help on using the repository browser.