Chris@16
|
1 /*
|
Chris@101
|
2 Copyright Rene Rivera 2008-2014
|
Chris@16
|
3 Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
4 (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
5 http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
6 */
|
Chris@16
|
7
|
Chris@16
|
8 #ifndef BOOST_PREDEF_COMPILER_VISUALC_H
|
Chris@16
|
9 #define BOOST_PREDEF_COMPILER_VISUALC_H
|
Chris@16
|
10
|
Chris@101
|
11 /* Other compilers that emulate this one need to be detected first. */
|
Chris@101
|
12
|
Chris@101
|
13 #include <boost/predef/compiler/clang.h>
|
Chris@101
|
14
|
Chris@16
|
15 #include <boost/predef/version_number.h>
|
Chris@16
|
16 #include <boost/predef/make.h>
|
Chris@16
|
17
|
Chris@16
|
18 /*`
|
Chris@16
|
19 [heading `BOOST_COMP_MSVC`]
|
Chris@16
|
20
|
Chris@16
|
21 [@http://en.wikipedia.org/wiki/Visual_studio Microsoft Visual C/C++] compiler.
|
Chris@16
|
22 Version number available as major, minor, and patch.
|
Chris@16
|
23
|
Chris@16
|
24 [table
|
Chris@16
|
25 [[__predef_symbol__] [__predef_version__]]
|
Chris@16
|
26
|
Chris@16
|
27 [[`_MSC_VER`] [__predef_detection__]]
|
Chris@16
|
28
|
Chris@16
|
29 [[`_MSC_FULL_VER`] [V.R.P]]
|
Chris@16
|
30 [[`_MSC_VER`] [V.R.0]]
|
Chris@16
|
31 ]
|
Chris@16
|
32 */
|
Chris@16
|
33
|
Chris@16
|
34 #define BOOST_COMP_MSVC BOOST_VERSION_NUMBER_NOT_AVAILABLE
|
Chris@16
|
35
|
Chris@16
|
36 #if defined(_MSC_VER)
|
Chris@16
|
37 # if !defined (_MSC_FULL_VER)
|
Chris@16
|
38 # define BOOST_COMP_MSVC_BUILD 0
|
Chris@16
|
39 # else
|
Chris@16
|
40 /* how many digits does the build number have? */
|
Chris@16
|
41 # if _MSC_FULL_VER / 10000 == _MSC_VER
|
Chris@16
|
42 /* four digits */
|
Chris@16
|
43 # define BOOST_COMP_MSVC_BUILD (_MSC_FULL_VER % 10000)
|
Chris@16
|
44 # elif _MSC_FULL_VER / 100000 == _MSC_VER
|
Chris@16
|
45 /* five digits */
|
Chris@16
|
46 # define BOOST_COMP_MSVC_BUILD (_MSC_FULL_VER % 100000)
|
Chris@16
|
47 # else
|
Chris@16
|
48 # error "Cannot determine build number from _MSC_FULL_VER"
|
Chris@16
|
49 # endif
|
Chris@16
|
50 # endif
|
Chris@101
|
51 /*
|
Chris@101
|
52 VS2014 was skipped in the release sequence for MS. Which
|
Chris@101
|
53 means that the compiler and VS product versions are no longer
|
Chris@101
|
54 in sync. Hence we need to use different formulas for
|
Chris@101
|
55 mapping from MSC version to VS product version.
|
Chris@101
|
56 */
|
Chris@101
|
57 # if (_MSC_VER >= 1900)
|
Chris@101
|
58 # define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\
|
Chris@101
|
59 _MSC_VER/100-5,\
|
Chris@101
|
60 _MSC_VER%100,\
|
Chris@101
|
61 BOOST_COMP_MSVC_BUILD)
|
Chris@101
|
62 # else
|
Chris@101
|
63 # define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\
|
Chris@101
|
64 _MSC_VER/100-6,\
|
Chris@101
|
65 _MSC_VER%100,\
|
Chris@101
|
66 BOOST_COMP_MSVC_BUILD)
|
Chris@101
|
67 # endif
|
Chris@16
|
68 #endif
|
Chris@16
|
69
|
Chris@101
|
70 #ifdef BOOST_COMP_MSVC_DETECTION
|
Chris@101
|
71 # if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
|
Chris@101
|
72 # define BOOST_COMP_MSVC_EMULATED BOOST_COMP_MSVC_DETECTION
|
Chris@101
|
73 # else
|
Chris@101
|
74 # undef BOOST_COMP_MSVC
|
Chris@101
|
75 # define BOOST_COMP_MSVC BOOST_COMP_MSVC_DETECTION
|
Chris@101
|
76 # endif
|
Chris@16
|
77 # define BOOST_COMP_MSVC_AVAILABLE
|
Chris@101
|
78 # include <boost/predef/detail/comp_detected.h>
|
Chris@16
|
79 #endif
|
Chris@16
|
80
|
Chris@16
|
81 #define BOOST_COMP_MSVC_NAME "Microsoft Visual C/C++"
|
Chris@16
|
82
|
Chris@16
|
83 #include <boost/predef/detail/test.h>
|
Chris@16
|
84 BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MSVC,BOOST_COMP_MSVC_NAME)
|
Chris@16
|
85
|
Chris@101
|
86 #ifdef BOOST_COMP_MSVC_EMULATED
|
Chris@101
|
87 #include <boost/predef/detail/test.h>
|
Chris@101
|
88 BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MSVC_EMULATED,BOOST_COMP_MSVC_NAME)
|
Chris@101
|
89 #endif
|
Chris@101
|
90
|
Chris@16
|
91
|
Chris@16
|
92 #endif
|