From 822d09f19bc2f4ea6f42da8e0be83d10ce912ce1 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Tue, 3 Jan 2017 22:07:48 -0600 Subject: [PATCH] Fix Intel C/C++ compiler version specification. Add `BOOST_VERSION_NUMBER_MAJOR`, `BOOST_VERSION_NUMBER_MINOR`, `BOOST_VERSION_NUMBER_PATCH` macros to extract components from valid version numbers. --- doc/history.qbk | 7 +++++++ doc/predef.qbk | 4 ++-- include/boost/predef/compiler/intel.h | 11 +++++++++-- include/boost/predef/version.h | 2 +- include/boost/predef/version_number.h | 21 ++++++++++++++++++++- test/version.cpp | 21 +++++++++++++++++++++ 6 files changed, 60 insertions(+), 6 deletions(-) diff --git a/doc/history.qbk b/doc/history.qbk index 45807e8..f63663d 100644 --- a/doc/history.qbk +++ b/doc/history.qbk @@ -7,6 +7,13 @@ http://www.boost.org/LICENSE_1_0.txt) [section History] +[heading 1.5] + +* Fix Intel C/C++ compiler version specification. +* Add `BOOST_VERSION_NUMBER_MAJOR`, `BOOST_VERSION_NUMBER_MINOR`, + `BOOST_VERSION_NUMBER_PATCH` macros to extract components from valid version + numbers. + [heading 1.4.1] * Small fixes for some redefinition errors, and mispelled macros. diff --git a/doc/predef.qbk b/doc/predef.qbk index b04b807..3c802ac 100644 --- a/doc/predef.qbk +++ b/doc/predef.qbk @@ -1,8 +1,8 @@ [article Boost.Predef [quickbook 1.7] - [version 1.4.1] + [version 1.5] [authors [Rivera, Rene]] - [copyright 2005, 2008-2016 Rene Rivera] + [copyright 2005-2016 Rene Rivera] [copyright 2015 Charly Chevalier] [copyright 2015 Joel Falcou] [purpose Identification and specification of predefined macros.] diff --git a/include/boost/predef/compiler/intel.h b/include/boost/predef/compiler/intel.h index 65bde67..3bd76fe 100644 --- a/include/boost/predef/compiler/intel.h +++ b/include/boost/predef/compiler/intel.h @@ -25,7 +25,8 @@ Version number available as major, minor, and patch. [[`__ICC`] [__predef_detection__]] [[`__ECC`] [__predef_detection__]] - [[`__INTEL_COMPILER`] [V.R.P]] + [[`__INTEL_COMPILER`] [V.R]] + [[`__INTEL_COMPILER` and `__INTEL_COMPILER_UPDATE`] [V.R.P]] ] */ @@ -33,8 +34,14 @@ Version number available as major, minor, and patch. #if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || \ defined(__ECC) +# if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) +# define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER( \ + BOOST_VERSION_NUMBER_MAJOR(BOOST_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)), \ + BOOST_VERSION_NUMBER_MINOR(BOOST_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)), \ + __INTEL_COMPILER_UPDATE) +# endif # if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) -# define BOOST_COMP_INTEL_DETECTION BOOST_PREDEF_MAKE_10_VRP(__INTEL_COMPILER) +# define BOOST_COMP_INTEL_DETECTION BOOST_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER) # endif # if !defined(BOOST_COMP_INTEL_DETECTION) # define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER_AVAILABLE diff --git a/include/boost/predef/version.h b/include/boost/predef/version.h index 8745c94..ebd2b4f 100644 --- a/include/boost/predef/version.h +++ b/include/boost/predef/version.h @@ -10,6 +10,6 @@ http://www.boost.org/LICENSE_1_0.txt) #include -#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,4,1) +#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,5,0) #endif diff --git a/include/boost/predef/version_number.h b/include/boost/predef/version_number.h index 3903a36..4494270 100644 --- a/include/boost/predef/version_number.h +++ b/include/boost/predef/version_number.h @@ -1,5 +1,5 @@ /* -Copyright Rene Rivera 2005, 2008-2013 +Copyright Rene Rivera 2005-2016 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -50,4 +50,23 @@ Defines standard version numbers, with these properties: #define BOOST_VERSION_NUMBER_NOT_AVAILABLE \ BOOST_VERSION_NUMBER_ZERO +/*` +`` +BOOST_VERSION_NUMBER_MAJOR(N), BOOST_VERSION_NUMBER_MINOR(N), BOOST_VERSION_NUMBER_PATCH(N) +`` + +The macros extract the major, minor, and patch portion from a well formed +version number resulting in a preprocessor expression in the range of +\[0,99\] or \[0,99999\] for the major and minor, or patch numbers +respectively. +*/ +#define BOOST_VERSION_NUMBER_MAJOR(N) \ + ( ((N)/10000000)%100 ) + +#define BOOST_VERSION_NUMBER_MINOR(N) \ + ( ((N)/100000)%100 ) + +#define BOOST_VERSION_NUMBER_PATCH(N) \ + ( (N)%100000 ) + #endif diff --git a/test/version.cpp b/test/version.cpp index e86834c..68e724f 100644 --- a/test/version.cpp +++ b/test/version.cpp @@ -34,6 +34,27 @@ void test_BOOST_VERSION_NUMBER() PREDEF_CHECK(BOOST_VERSION_NUMBER(100,99,99999) != 1009999999L); PREDEF_CHECK(BOOST_VERSION_NUMBER(100,99,99999) == 9999999L); PREDEF_CHECK(BOOST_VERSION_NUMBER(100,100,100000) == 0L); + + PREDEF_CHECK( + BOOST_VERSION_NUMBER_MAJOR(BOOST_VERSION_NUMBER(0,0,0)) == 0); + PREDEF_CHECK( + BOOST_VERSION_NUMBER_MAJOR(BOOST_VERSION_NUMBER(3,3,3)) == 3); + PREDEF_CHECK( + BOOST_VERSION_NUMBER_MAJOR(BOOST_VERSION_NUMBER(99,99,99999)) == 99); + + PREDEF_CHECK( + BOOST_VERSION_NUMBER_MINOR(BOOST_VERSION_NUMBER(0,0,0)) == 0); + PREDEF_CHECK( + BOOST_VERSION_NUMBER_MINOR(BOOST_VERSION_NUMBER(3,3,3)) == 3); + PREDEF_CHECK( + BOOST_VERSION_NUMBER_MINOR(BOOST_VERSION_NUMBER(99,99,99999)) == 99); + + PREDEF_CHECK( + BOOST_VERSION_NUMBER_PATCH(BOOST_VERSION_NUMBER(0,0,0)) == 0); + PREDEF_CHECK( + BOOST_VERSION_NUMBER_PATCH(BOOST_VERSION_NUMBER(3,3,3)) == 3); + PREDEF_CHECK( + BOOST_VERSION_NUMBER_PATCH(BOOST_VERSION_NUMBER(99,99,99999)) == 99999); } int main()