Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/network/cmake/FindBoost.cmake @ 1494

Last change on this file since 1494 was 1494, checked in by rgrieder, 16 years ago
  • set the svn:eol-style property to all files so, that where ever you check out, you'll get the right line endings (had to change every file with mixed endings to windows in order to set the property)
  • Property svn:eol-style set to native
File size: 11.2 KB
Line 
1# THIS FILE HAS BEEN MODIFIED TO WORK ON THE TARDIS INFRASTURUCTURE of THE ETH.
2# use with cation
3# Nicolas Schlumberger <nico AT orxonx DOT net> (C) 2007
4#
5# - Find the Boost includes and libraries.
6# The following variables are set if Boost is found.  If Boost is not
7# found, Boost_FOUND is set to false.
8#  Boost_FOUND                  - True when the Boost include directory is found.
9#  Boost_INCLUDE_DIRS           - the path to where the boost include files are.
10#  Boost_LIBRARY_DIRS           - The path to where the boost library files are.
11#  Boost_LIB_DIAGNOSTIC_DEFINITIONS - Only set if using Windows.
12#  Boost_<library>_FOUND        - True if the Boost <library> is found.
13#  Boost_<library>_INCLUDE_DIRS - The include path for Boost <library>.
14#  Boost_<library>_LIBRARIES    - The libraries to link to to use Boost <library>.
15#  Boost_LIBRARIES              - The libraries to link to to use all Boost libraries.
16#
17# The following variables can be set to configure how Boost is found:
18#  Boost_LIB_PREFIX             - Look for Boost libraries prefixed with this, e.g. "lib"
19#  Boost_LIB_SUFFIX             - Look for Boost libraries ending with this, e.g. "vc80-mt"
20#  Boost_LIB_SUFFIX_DEBUG       - As for Boost_LIB_SUFFIX but for debug builds, e.g. "vs80-mt-gd"
21
22# ----------------------------------------------------------------------------
23# If you have installed Boost in a non-standard location or you have
24# just staged the boost files using bjam then you have three
25# options. In the following comments, it is assumed that <Your Path>
26# points to the root directory of the include directory of Boost. e.g
27# If you have put boost in C:\development\Boost then <Your Path> is
28# "C:/development/Boost" and in this directory there will be two
29# directories called "include" and "lib".
30# 1) After CMake runs, set Boost_INCLUDE_DIR to <Your Path>/include/boost<-version>
31# 2) Use CMAKE_INCLUDE_PATH to set a path to <Your Path>/include. This will allow FIND_PATH()
32#    to locate Boost_INCLUDE_DIR by utilizing the PATH_SUFFIXES option. e.g.
33#    SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "<Your Path>/include")
34# 3) Set an environment variable called ${BOOST_ROOT} that points to the root of where you have
35#    installed Boost, e.g. <Your Path>. It is assumed that there is at least a subdirectory called
36#    include in this path.
37#
38# Note:
39#  1) If you are just using the boost headers, then you do not need to use
40#     Boost_LIBRARY_DIRS in your CMakeLists.txt file.
41#  2) If Boost has not been installed, then when setting Boost_LIBRARY_DIRS
42#     the script will look for /lib first and, if this fails, then for /stage/lib.
43#
44# Usage:
45# In your CMakeLists.txt file do something like this:
46# ...
47# # Boost
48# FIND_PACKAGE(Boost)
49# ...
50# INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
51# LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
52#
53# In Windows, we make the assumption that, if the Boost files are installed, the default directory
54# will be C:\boost.
55
56#
57# TODO:
58#
59# 1) Automatically find the Boost library files and eliminate the need
60#    to use Link Directories.
61#
62
63IF(WIN32)
64# In windows, automatic linking is performed, so you do not have to specify the libraries.
65# If you are linking to a dynamic runtime, then you can choose to link to either a static or a
66# dynamic Boost library, the default is to do a static link.  You can alter this for a specific
67# library "whatever" by defining BOOST_WHATEVER_DYN_LINK to force Boost library "whatever" to
68# be linked dynamically.  Alternatively you can force all Boost libraries to dynamic link by
69# defining BOOST_ALL_DYN_LINK.
70
71# This feature can be disabled for Boost library "whatever" by defining BOOST_WHATEVER_NO_LIB,
72# or for all of Boost by defining BOOST_ALL_NO_LIB.
73
74# If you want to observe which libraries are being linked against then defining
75# BOOST_LIB_DIAGNOSTIC will cause the auto-linking code to emit a #pragma message each time
76# a library is selected for linking.
77  SET(Boost_LIB_DIAGNOSTIC_DEFINITIONS "-DBOOST_LIB_DIAGNOSTIC")
78#  SET(Boost_LIB_PREFIX "lib")
79#  SET(Boost_LIB_SUFFIX "gcc-mt-1_33_1.lib")
80ENDIF(WIN32)
81
82
83SET(BOOST_INCLUDE_PATH_DESCRIPTION "directory containing the boost include files. E.g /usr/local/include/boost-1_33_1 or c:\\boost\\include\\boost-1_33_1")
84
85SET(BOOST_DIR_MESSAGE "Set the Boost_INCLUDE_DIR cmake cache entry to the ${BOOST_INCLUDE_PATH_DESCRIPTION}")
86
87SET(BOOST_DIR_SEARCH $ENV{BOOST_ROOT})
88IF(BOOST_DIR_SEARCH)
89  FILE(TO_CMAKE_PATH ${BOOST_DIR_SEARCH} BOOST_DIR_SEARCH)
90  SET(BOOST_DIR_SEARCH ${BOOST_DIR_SEARCH}/include)
91ENDIF(BOOST_DIR_SEARCH)
92
93IF(WIN32)
94  SET(BOOST_DIR_SEARCH
95    ${BOOST_DIR_SEARCH}
96    C:/boost/include
97    D:/boost/include
98  )
99ENDIF(WIN32)
100
101# Add in some path suffixes. These will have to be updated whenever a new Boost version comes out.
102SET(SUFFIX_FOR_PATH
103 boost
104 boost-1_35_0
105 boost-1_35
106 boost-1_34_1
107 boost-1_34_0
108 boost-1_34
109 boost-1_33_1
110 boost-1_33_0
111)
112
113#
114# Look for an installation.
115#
116IF(WIN32)
117  SET(Boost_INCLUDE_DIR
118#    ../libs/boost_1_33_1
119    ../libs/boost_1_34_1
120#    ../libs/boost_1_35_0
121  )
122ELSE(WIN32)
123  FIND_PATH(Boost_INCLUDE_DIR NAMES boost/config.hpp PATH_SUFFIXES ${SUFFIX_FOR_PATH} PATHS
124
125# Look in other places.
126    ${BOOST_DIR_SEARCH}
127
128# Help the user find it if we cannot.
129    DOC "The ${BOOST_INCLUDE_PATH_DESCRIPTION}"
130  )
131ENDIF(WIN32)
132
133# Assume we didn't find it.
134SET(Boost_FOUND 0)
135
136# Now try to get the include and library path.
137IF(Boost_INCLUDE_DIR)
138
139# Look for the boost library path.
140# Note that the user may not have installed any libraries
141# so it is quite possible the Boost_LIBRARY_PATH may not exist.
142  SET(Boost_LIBRARY_DIR ${Boost_INCLUDE_DIR})
143
144  IF("${Boost_LIBRARY_DIR}" MATCHES "boost-[0-9]+")
145    GET_FILENAME_COMPONENT(Boost_LIBRARY_DIR ${Boost_LIBRARY_DIR} PATH)
146  ENDIF ("${Boost_LIBRARY_DIR}" MATCHES "boost-[0-9]+")
147
148  IF("${Boost_LIBRARY_DIR}" MATCHES "/include$")
149# Strip off the trailing "/include" in the path.
150    GET_FILENAME_COMPONENT(Boost_LIBRARY_DIR ${Boost_LIBRARY_DIR} PATH)
151  ENDIF("${Boost_LIBRARY_DIR}" MATCHES "/include$")
152
153  IF(EXISTS "${Boost_LIBRARY_DIR}/lib")
154    SET (Boost_LIBRARY_DIR ${Boost_LIBRARY_DIR}/lib)
155  ELSEIF(EXISTS "${Boost_LIBRARY_DIR}/bin/boost/libs/thread/build/boost_thread.dll/gcc/release/threading-multi")
156    SET (Boost_LIBRARY_DIR ${Boost_LIBRARY_DIR}/bin/boost/libs/thread/build/boost_thread.dll/gcc/release/threading-multi)
157  ELSE(EXISTS "${Boost_LIBRARY_DIR}/lib")
158    IF(EXISTS "${Boost_LIBRARY_DIR}/stage/lib")
159      SET(Boost_LIBRARY_DIR ${Boost_LIBRARY_DIR}/stage/lib)
160    ELSE(EXISTS "${Boost_LIBRARY_DIR}/stage/lib")
161      IF(EXISTS "${Boost_LIBRARY_DIR}/../../lib")
162        SET(Boost_LIBRARY_DIR "${Boost_LIBRARY_DIR}/../../lib")
163      ELSE(EXISTS "${Boost_LIBRARY_DIR}/../../lib")
164        SET(Boost_LIBRARY_DIR "")
165      ENDIF(EXISTS "${Boost_LIBRARY_DIR}/../../lib")
166    ENDIF(EXISTS "${Boost_LIBRARY_DIR}/stage/lib")
167  ENDIF(EXISTS "${Boost_LIBRARY_DIR}/lib")
168
169
170  IF(EXISTS "${Boost_INCLUDE_DIR}")
171    SET(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR})
172# We have found boost. It is possible that the user has not
173# compiled any libraries so we set Boost_FOUND to be true here.
174    SET(Boost_FOUND 1)
175    MARK_AS_ADVANCED(Boost_INCLUDE_DIR)
176  ENDIF(EXISTS "${Boost_INCLUDE_DIR}")
177
178  IF(Boost_LIBRARY_DIR AND EXISTS "${Boost_LIBRARY_DIR}")
179    SET(Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIR})
180  ENDIF(Boost_LIBRARY_DIR AND EXISTS "${Boost_LIBRARY_DIR}")
181ENDIF(Boost_INCLUDE_DIR)
182
183
184#
185# Find boost libraries
186#
187
188# List of library suffixes to search, e.g. libboost_date_time-gcc
189SET(BOOST_SUFFIX_SEARCH
190  mt
191  gcc41-mt
192  gcc
193  il
194  gcc-1_33_1
195  gcc-mt-1_33_1
196  mgw34-mt-1_34_1
197  mgw34-mt-1_35
198)
199
200# List of all boost libraries
201SET(BOOST_ALL_LIBRARIES
202  date_time
203  filesystem
204  graph
205  iostreams
206  program_options
207  regex
208  serialization
209  signals
210  unit_test_framework
211  thread
212  wave
213)
214
215# Macro to find boost library called name
216MACRO(BOOST_FIND_LIBRARY name)
217
218# User can specify a particular build variant via the variables:
219#   Boost_LIB_PREFIX, Boost_LIB_SUFFIX, Boost_LIB_SUFFIX_DEBUG
220# otherwise we'll search the BOOST_SUFFIX_SEARCH list
221
222  SET(BOOST_LIB_NAMES ${Boost_LIB_PREFIX}boost_${name}-${Boost_LIB_SUFFIX})
223  IF(NOT Boost_LIB_SUFFIX)
224    FOREACH(suffix ${BOOST_SUFFIX_SEARCH})
225      SET(BOOST_LIB_NAMES ${BOOST_LIB_NAMES} ${Boost_LIB_PREFIX}boost_${name}-${suffix})
226    ENDFOREACH(suffix)
227  ENDIF(NOT Boost_LIB_SUFFIX)
228
229# Find the library in the Boost_LIBRARY_DIRS
230  FIND_LIBRARY(Boost_${name}_LIBRARY
231    NAMES ${BOOST_LIB_NAMES}
232    PATHS ${Boost_LIBRARY_DIRS})
233
234# For MSVC builds find debug library
235  IF(WIN32 AND MSVC AND Boost_${name}_LIBRARY)
236    FIND_LIBRARY(Boost_${name}_LIBRARY_DEBUG ${Boost_LIB_PREFIX}boost_${name}-${Boost_LIB_SUFFIX_DEBUG})
237
238    IF(MSVC_IDE)
239      IF(Boost_${name}_LIBRARY AND Boost_${name}_LIBRARY_DEBUG)
240        SET(Boost_${name}_LIBRARIES debug ${Boost_${name}_LIBRARY_DEBUG} optimized ${Boost_${name}_LIBRARY})
241      ELSE(Boost_${name}_LIBRARY AND Boost_${name}_LIBRARY_DEBUG)
242        MESSAGE(FATAL_ERROR "Could not find the debug and release version of Boost ${name} library.")
243      ENDIF(Boost_${name}_LIBRARY AND Boost_${name}_LIBRARY_DEBUG)
244    ELSE(MSVC_IDE)
245      STRING(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_TOLOWER)
246      IF(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug)
247        SET(Boost_${name}_LIBRARIES ${Boost_${name}_LIBRARY_DEBUG})
248      ELSE(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug)
249        SET(Boost_${name}_LIBRARIES ${Boost_${name}_LIBRARY})
250      ENDIF(CMAKE_BUILD_TYPE_TOLOWER MATCHES debug)
251    ENDIF(MSVC_IDE)
252  ELSE(WIN32 AND MSVC AND Boost_${name}_LIBRARY)
253    SET(Boost_${name}_LIBRARIES ${Boost_${name}_LIBRARY})
254  ENDIF(WIN32 AND MSVC AND Boost_${name}_LIBRARY)
255
256# If we've got it setup appropriate variables or issue error message
257  IF(Boost_${name}_LIBRARY)
258    SET(Boost_${name}_FOUND 1)
259    SET(Boost_${name}_INCLUDE_DIRS ${Boost_INCLUDE_DIR})
260    MARK_AS_ADVANCED(Boost_${name}_LIBRARY Boost_${name}_LIBRARY_DEBUG)
261  ELSE(Boost_${name}_LIBRARY)
262    MESSAGE(STATUS "sdfds")
263    IF(NOT Boost_FIND_QUIETLY)
264      MESSAGE(STATUS "Boost ${name} library was not found.")
265    ELSE(NOT Boost_FIND_QUIETLY)
266      IF(Boost_FIND_REQUIRED_${name})
267        MESSAGE(FATAL_ERROR "Could NOT find required Boost ${name} library.")
268      ENDIF(Boost_FIND_REQUIRED_${name})
269    ENDIF(NOT Boost_FIND_QUIETLY)
270  ENDIF(Boost_${name}_LIBRARY)
271ENDMACRO(BOOST_FIND_LIBRARY)
272
273IF(Boost_LIBRARY_DIRS)
274
275# If the user specified required components e.g. via
276# FIND_PACKAGE(Boost REQUIRED date_time regex)
277# find (just) those libraries. Otherwise find all libraries.
278  IF(Boost_FIND_COMPONENTS)
279    SET(Boost_FIND_LIBRARIES ${Boost_FIND_COMPONENTS})
280  ELSE(Boost_FIND_COMPONENTS)
281    SET(Boost_FIND_LIBRARIES ${BOOST_ALL_LIBRARIES})
282  ENDIF(Boost_FIND_COMPONENTS)
283
284  SET(Boost_LIBRARIES)
285  FOREACH(library ${Boost_FIND_LIBRARIES})
286    BOOST_FIND_LIBRARY(${library})
287    IF(Boost_${library}_FOUND)
288      SET(Boost_LIBRARIES ${Boost_LIBRARIES} ${Boost_${library}_LIBRARIES})
289      MESSAGE(STATUS "Found BoostLibrary: ${library}")
290    ENDIF(Boost_${library}_FOUND)
291  ENDFOREACH(library)
292ENDIF(Boost_LIBRARY_DIRS)
293
294IF(NOT Boost_FOUND)
295  IF(NOT Boost_FIND_QUIETLY)
296    MESSAGE(STATUS "Boost was not found. ${BOOST_DIR_MESSAGE}")
297  ELSE(NOT Boost_FIND_QUIETLY)
298    IF(Boost_FIND_REQUIRED)
299      MESSAGE(FATAL_ERROR "Boost was not found. ${BOOST_DIR_MESSAGE}")
300    ENDIF(Boost_FIND_REQUIRED)
301  ENDIF(NOT Boost_FIND_QUIETLY)
302ENDIF(NOT Boost_FOUND)
Note: See TracBrowser for help on using the repository browser.