1# Copyright 2017-2019 Peter Dimov
2# Distributed under the Boost Software License, Version 1.0.
3# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
4
5string(REGEX MATCHALL "[0-9]+" _BOOST_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION})
6
7list(GET _BOOST_COMPILER_VERSION 0 _BOOST_COMPILER_VERSION_MAJOR)
8list(GET _BOOST_COMPILER_VERSION 1 _BOOST_COMPILER_VERSION_MINOR)
9
10if(BORLAND)
11
12  # Borland is unversioned
13
14  set(BOOST_DETECTED_TOOLSET "bcb")
15
16  set(_BOOST_COMPILER_VERSION_MAJOR)
17  set(_BOOST_COMPILER_VERSION_MINOR)
18
19elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
20
21  set(BOOST_DETECTED_TOOLSET "clang-darwin")
22
23elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
24
25  if(MSVC)
26    set(BOOST_DETECTED_TOOLSET "clangw")
27  else()
28    set(BOOST_DETECTED_TOOLSET "clang")
29  endif()
30
31  if(_BOOST_COMPILER_VERSION_MAJOR GREATER 3)
32    set(_BOOST_COMPILER_VERSION_MINOR)
33  endif()
34
35elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
36
37  if(WIN32)
38
39    # Intel-Win is unversioned
40
41    set(BOOST_DETECTED_TOOLSET "iw")
42
43    set(_BOOST_COMPILER_VERSION_MAJOR)
44    set(_BOOST_COMPILER_VERSION_MINOR)
45
46  else()
47
48    set(BOOST_DETECTED_TOOLSET "il")
49
50  endif()
51
52elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MIPSpro")
53
54    set(BOOST_DETECTED_TOOLSET "mp")
55
56elseif(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
57
58    set(BOOST_DETECTED_TOOLSET "sun")
59
60elseif(CMAKE_CXX_COMPILER_ID STREQUAL "IBM XL")
61
62    set(BOOST_DETECTED_TOOLSET "xlc")
63
64elseif(MINGW)
65
66  set(BOOST_DETECTED_TOOLSET "mgw")
67
68  if(_BOOST_COMPILER_VERSION_MAJOR GREATER 4)
69    set(_BOOST_COMPILER_VERSION_MINOR)
70  endif()
71
72elseif(CMAKE_COMPILER_IS_GNUCXX)
73
74  if(APPLE)
75    set(BOOST_DETECTED_TOOLSET "xgcc")
76  else()
77    set(BOOST_DETECTED_TOOLSET "gcc")
78  endif()
79
80  if(_BOOST_COMPILER_VERSION_MAJOR GREATER 4)
81    set(_BOOST_COMPILER_VERSION_MINOR)
82  endif()
83
84elseif(MSVC)
85
86  if((MSVC_VERSION GREATER 1919) AND (MSVC_VERSION LESS 1930))
87
88    set(BOOST_DETECTED_TOOLSET "vc142")
89
90  elseif((MSVC_VERSION GREATER 1909) AND (MSVC_VERSION LESS 1920))
91
92    set(BOOST_DETECTED_TOOLSET "vc141")
93
94  elseif(MSVC_VERSION EQUAL 1900)
95
96    set(BOOST_DETECTED_TOOLSET "vc140")
97
98  elseif(MSVC_VERSION EQUAL 1800)
99
100    set(BOOST_DETECTED_TOOLSET "vc120")
101
102  elseif(MSVC_VERSION EQUAL 1700)
103
104    set(BOOST_DETECTED_TOOLSET "vc110")
105
106  elseif(MSVC_VERSION EQUAL 1600)
107
108    set(BOOST_DETECTED_TOOLSET "vc100")
109
110  elseif(MSVC_VERSION EQUAL 1500)
111
112    set(BOOST_DETECTED_TOOLSET "vc90")
113
114  elseif(MSVC_VERSION EQUAL 1400)
115
116    set(BOOST_DETECTED_TOOLSET "vc80")
117
118  elseif(MSVC_VERSION EQUAL 1310)
119
120    set(BOOST_DETECTED_TOOLSET "vc71")
121
122  elseif(MSVC_VERSION EQUAL 1300)
123
124    set(BOOST_DETECTED_TOOLSET "vc7")
125
126  elseif(MSVC_VERSION EQUAL 1200)
127
128    set(BOOST_DETECTED_TOOLSET "vc6")
129
130  endif()
131
132  set(_BOOST_COMPILER_VERSION_MAJOR)
133  set(_BOOST_COMPILER_VERSION_MINOR)
134
135endif()
136
137# Add version
138
139if(BOOST_DETECTED_TOOLSET)
140  set(BOOST_DETECTED_TOOLSET ${BOOST_DETECTED_TOOLSET}${_BOOST_COMPILER_VERSION_MAJOR}${_BOOST_COMPILER_VERSION_MINOR})
141endif()
142
143unset(_BOOST_COMPILER_VERSION)
144unset(_BOOST_COMPILER_VERSION_MAJOR)
145unset(_BOOST_COMPILER_VERSION_MINOR)
146
147if("${BOOST_DETECTED_TOOLSET}" STREQUAL "")
148
149  # Unknown toolset
150  message(STATUS "Boost toolset is unknown (compiler ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION})")
151
152elseif(Boost_DEBUG)
153
154  message(STATUS "Boost toolset is ${BOOST_DETECTED_TOOLSET} (${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION})")
155
156endif()
157