Merge remote-tracking branch 'origin/develop'

This commit is contained in:
Rene Rivera
2017-06-27 21:21:56 -05:00
17 changed files with 390 additions and 20 deletions

View File

@ -61,11 +61,23 @@ matrix:
- env: TOOLSET=clang-3.7 - env: TOOLSET=clang-3.7
- env: TOOLSET=clang-3.8 - env: TOOLSET=clang-3.8
- env: TOOLSET=clang-3.9 - env: TOOLSET=clang-3.9
- env: TOOLSET=clang-4.0 CXXFLAGS=-std=c++03
- env: TOOLSET=clang-4.0 CXXFLAGS=-std=c++11
- env: TOOLSET=clang-4.0 CXXFLAGS=-std=c++14
- env: TOOLSET=clang-4.0 CXXFLAGS=-std=c++1z
- env: TOOLSET=gcc-4.7 - env: TOOLSET=gcc-4.7
- env: TOOLSET=gcc-4.8 - env: TOOLSET=gcc-4.8
- env: TOOLSET=gcc-4.9 - env: TOOLSET=gcc-4.9
- env: TOOLSET=gcc-5 - env: TOOLSET=gcc-5
- env: TOOLSET=gcc-6 - env: TOOLSET=gcc-6
- env: TOOLSET=gcc-7 CXXFLAGS=-std=c++03
- env: TOOLSET=gcc-7 CXXFLAGS=-std=c++11
- env: TOOLSET=gcc-7 CXXFLAGS=-std=c++14
- env: TOOLSET=gcc-7 CXXFLAGS=-std=c++1z
- env: TOOLSET=gcc-7 CXXFLAGS=-std=gnu++03
- env: TOOLSET=gcc-7 CXXFLAGS=-std=gnu++11
- env: TOOLSET=gcc-7 CXXFLAGS=-std=gnu++14
- env: TOOLSET=gcc-7 CXXFLAGS=-std=gnu++1z
- env: TOOLSET=xcode-6.1 - env: TOOLSET=xcode-6.1
os: osx os: osx
- env: TOOLSET=xcode-6.4 - env: TOOLSET=xcode-6.4
@ -74,9 +86,18 @@ matrix:
- env: TOOLSET=xcode-7.3 - env: TOOLSET=xcode-7.3
os: osx os: osx
osx_image: xcode7.3 osx_image: xcode7.3
- env: TOOLSET=xcode-8.0 - env: TOOLSET=xcode-8.3 CXXFLAGS=-std=c++03
os: osx os: osx
osx_image: xcode8 osx_image: xcode8.3
- env: TOOLSET=xcode-8.3 CXXFLAGS=-std=c++11
os: osx
osx_image: xcode8.3
- env: TOOLSET=xcode-8.3 CXXFLAGS=-std=c++14
os: osx
osx_image: xcode8.3
- env: TOOLSET=xcode-8.3 CXXFLAGS=-std=c++1z
os: osx
osx_image: xcode8.3
# These are the standard steps to bootstrap the Boost CI scripts # These are the standard steps to bootstrap the Boost CI scripts
# and to forward the actions to the scripts. # and to forward the actions to the scripts.

View File

@ -27,18 +27,45 @@ environment:
matrix: matrix:
- TOOLSET: vs-2008 - TOOLSET: vs-2008
platform: 32 platform: 32
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLSET: vs-2010 - TOOLSET: vs-2010
platform: 32 platform: 32
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLSET: vs-2012 - TOOLSET: vs-2012
platform: 32 platform: 32
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLSET: vs-2013 - TOOLSET: vs-2013
platform: 32 platform: 32
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLSET: vs-2013 - TOOLSET: vs-2013
platform: 64 platform: 64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLSET: vs-2015 - TOOLSET: vs-2015
platform: 32 platform: 32
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLSET: vs-2015 - TOOLSET: vs-2015
platform: 64 platform: 64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLSET: vs-2017
platform: 32
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
- TOOLSET: vs-2017
platform: 64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
- TOOLSET: vs-2017
CXXFLAGS: /std:c++14
platform: 64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
- TOOLSET: vs-2017
CXXFLAGS: /std:c++latest
platform: 64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
- TOOLSET: mingw-5
platform: 32
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
- TOOLSET: mingw64-6
platform: 64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
# We can also set up configurations for testing which map to # We can also set up configurations for testing which map to
# the b2 build variants. # the b2 build variants.
@ -64,9 +91,3 @@ after_test: python ../ci_boost_library_test.py after_test
on_success: python ../ci_boost_library_test.py on_success on_success: python ../ci_boost_library_test.py on_success
on_failure: python ../ci_boost_library_test.py on_failure on_failure: python ../ci_boost_library_test.py on_failure
on_finish: python ../ci_boost_library_test.py on_finish on_finish: python ../ci_boost_library_test.py on_finish
# We cache the boost repo, which is cleaned before caching.
# This saves some time as cloning the git submodules fresh
# takes a few minutes on Windows.
cache:
- C:\projects\boostorg\boost -> appveyor.yml

View File

@ -7,6 +7,16 @@ http://www.boost.org/LICENSE_1_0.txt)
[section History] [section History]
[heading 1.6]
* Fix Intel C/C++ version 9999 detection to be 12.1.0.
* Addition of `BOOST_PREDEF_WORKAROUND` and `BOOST_PREDEF_TESTED_AT` macros
for defect workarounds and detection.
* Add ARM64 MSVC SIMD detection. (from Minmin Gong)
* Add detection of iOS simulator vs device as a platform choice. (from Ruslan
Baratov)
* Fix MinGW incorrect header guard. (from Ruslan Baratov)
[heading 1.5] [heading 1.5]
* Fix Intel C/C++ compiler version specification. * Fix Intel C/C++ compiler version specification.

View File

@ -1,6 +1,6 @@
[article Boost.Predef [article Boost.Predef
[quickbook 1.7] [quickbook 1.7]
[version 1.5] [version 1.6]
[authors [Rivera, Rene]] [authors [Rivera, Rene]]
[copyright 2005-2016 Rene Rivera] [copyright 2005-2016 Rene Rivera]
[copyright 2015 Charly Chevalier] [copyright 2015 Charly Chevalier]
@ -114,12 +114,8 @@ done:
* Additionally, even if there is no auto-configure style option.. It would be * Additionally, even if there is no auto-configure style option.. It would be
good to add optionally included headers so that user can get consistent good to add optionally included headers so that user can get consistent
version number definitions for libraries they use. version number definitions for libraries they use.
* Having a consistent set of version number definitions opens the door to
improving the user level syntax of libraries that do checks against version
numbers. Specifically Boost Config's `BOOST_WORKAROUND` macro would benefit
from a more readable syntax. As would the `BOOST_TESTED_AT` detail macro.
* And obviously there's lots of work to do in reformulating the existing * And obviously there's lots of work to do in reformulating the existing
Boost libraries to use the Predef library once it's accepted. Boost libraries to use the Predef library.
* And there's the continuing work of adding definitions for present and * And there's the continuing work of adding definitions for present and
future compilers, platforms, architectures, languages, and libraries. future compilers, platforms, architectures, languages, and libraries.

View File

@ -1,5 +1,5 @@
[/ [/
Copyright 2014 Rene Rivera Copyright 2014-2017 Rene Rivera
Distributed under the Boost Software License, Version 1.0. Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt) http://www.boost.org/LICENSE_1_0.txt)
@ -8,6 +8,5 @@ http://www.boost.org/LICENSE_1_0.txt)
[section To Do] [section To Do]
* Improve reference documentation. * Improve reference documentation.
* Provide BOOST_WORKAROUND style macros for public use.
[endsect] [endsect]

View File

@ -27,11 +27,13 @@ http://www.boost.org/LICENSE_1_0.txt)
[[`__TARGET_ARCH_ARM`] [__predef_detection__]] [[`__TARGET_ARCH_ARM`] [__predef_detection__]]
[[`__TARGET_ARCH_THUMB`] [__predef_detection__]] [[`__TARGET_ARCH_THUMB`] [__predef_detection__]]
[[`_M_ARM`] [__predef_detection__]] [[`_M_ARM`] [__predef_detection__]]
[[`_M_ARM64`] [__predef_detection__]]
[[`__arm64`] [8.0.0]] [[`__arm64`] [8.0.0]]
[[`__TARGET_ARCH_ARM`] [V.0.0]] [[`__TARGET_ARCH_ARM`] [V.0.0]]
[[`__TARGET_ARCH_THUMB`] [V.0.0]] [[`__TARGET_ARCH_THUMB`] [V.0.0]]
[[`_M_ARM`] [V.0.0]] [[`_M_ARM`] [V.0.0]]
[[`_M_ARM64`] [8.0.0]]
] ]
*/ */
@ -39,7 +41,7 @@ http://www.boost.org/LICENSE_1_0.txt)
#if defined(__arm__) || defined(__arm64) || defined(__thumb__) || \ #if defined(__arm__) || defined(__arm64) || defined(__thumb__) || \
defined(__TARGET_ARCH_ARM) || defined(__TARGET_ARCH_THUMB) || \ defined(__TARGET_ARCH_ARM) || defined(__TARGET_ARCH_THUMB) || \
defined(_M_ARM) defined(_M_ARM) || defined(_M_ARM64)
# undef BOOST_ARCH_ARM # undef BOOST_ARCH_ARM
# if !defined(BOOST_ARCH_ARM) && defined(__arm64) # if !defined(BOOST_ARCH_ARM) && defined(__arm64)
# define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(8,0,0) # define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(8,0,0)
@ -50,6 +52,9 @@ http://www.boost.org/LICENSE_1_0.txt)
# if !defined(BOOST_ARCH_ARM) && defined(__TARGET_ARCH_THUMB) # if !defined(BOOST_ARCH_ARM) && defined(__TARGET_ARCH_THUMB)
# define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(__TARGET_ARCH_THUMB,0,0) # define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(__TARGET_ARCH_THUMB,0,0)
# endif # endif
# if !defined(BOOST_ARCH_ARM) && defined(_M_ARM64)
# define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(8,0,0)
# endif
# if !defined(BOOST_ARCH_ARM) && defined(_M_ARM) # if !defined(BOOST_ARCH_ARM) && defined(_M_ARM)
# define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(_M_ARM,0,0) # define BOOST_ARCH_ARM BOOST_VERSION_NUMBER(_M_ARM,0,0)
# endif # endif

View File

@ -1,5 +1,5 @@
/* /*
Copyright Rene Rivera 2008-2015 Copyright Rene Rivera 2008-2017
Distributed under the Boost Software License, Version 1.0. Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt) http://www.boost.org/LICENSE_1_0.txt)
@ -34,6 +34,13 @@ Version number available as major, minor, and patch.
#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || \ #if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || \
defined(__ECC) defined(__ECC)
/*`
[note Because of an Intel mistake in the release version numbering when
`__INTEL_COMPILER` is `9999` it is detected as version 12.1.0.]
*/
# if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) && (__INTEL_COMPILER == 9999)
# define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER(12,1,0)
# endif
# if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) # if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)
# define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER( \ # define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER( \
BOOST_VERSION_NUMBER_MAJOR(BOOST_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)), \ BOOST_VERSION_NUMBER_MAJOR(BOOST_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)), \

View File

@ -24,6 +24,7 @@ http://www.boost.org/LICENSE_1_0.txt)
[[`__ARM_NEON__`] [__predef_detection__]] [[`__ARM_NEON__`] [__predef_detection__]]
[[`__aarch64__`] [__predef_detection__]] [[`__aarch64__`] [__predef_detection__]]
[[`_M_ARM`] [__predef_detection__]] [[`_M_ARM`] [__predef_detection__]]
[[`_M_ARM64`] [__predef_detection__]]
] ]
[table [table
@ -32,6 +33,7 @@ http://www.boost.org/LICENSE_1_0.txt)
[[`__ARM_NEON__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]] [[`__ARM_NEON__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
[[`__aarch64__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]] [[`__aarch64__`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
[[`_M_ARM`] [BOOST_HW_SIMD_ARM_NEON_VERSION]] [[`_M_ARM`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
[[`_M_ARM64`] [BOOST_HW_SIMD_ARM_NEON_VERSION]]
] ]
*/ */
@ -39,7 +41,7 @@ http://www.boost.org/LICENSE_1_0.txt)
#define BOOST_HW_SIMD_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE #define BOOST_HW_SIMD_ARM BOOST_VERSION_NUMBER_NOT_AVAILABLE
#undef BOOST_HW_SIMD_ARM #undef BOOST_HW_SIMD_ARM
#if !defined(BOOST_HW_SIMD_ARM) && (defined(__ARM_NEON__) || defined(__aarch64__) || defined (_M_ARM)) #if !defined(BOOST_HW_SIMD_ARM) && (defined(__ARM_NEON__) || defined(__aarch64__) || defined (_M_ARM) || defined (_M_ARM64))
# define BOOST_HW_SIMD_ARM BOOST_HW_SIMD_ARM_NEON_VERSION # define BOOST_HW_SIMD_ARM BOOST_HW_SIMD_ARM_NEON_VERSION
#endif #endif

View File

@ -0,0 +1,87 @@
/*
Copyright Rene Rivera 2017
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)
*/
#ifndef BOOST_PREDEF_WORKAROUND_H
#define BOOST_PREDEF_WORKAROUND_H
/*`
[heading `BOOST_PREDEF_WORKAROUND`]
``
BOOST_PREDEF_WORKAROUND(symbol,comp,major,minor,patch)
``
Usage:
``
#if BOOST_PREDEF_WORKAROUND(BOOST_COMP_CLANG,<,3,0,0)
// Workaround for old clang compilers..
#endif
``
Defines a comparison against two version numbers that depends on the definion
of `BOOST_STRICT_CONFIG`. When `BOOST_STRICT_CONFIG` is defined this will expand
to a value convertible to `false`. Which has the effect of disabling all code
conditionally guarded by `BOOST_PREDEF_WORKAROUND`. When `BOOST_STRICT_CONFIG`
is undefine this expand to test the given `symbol` version value with the
`comp` comparison against `BOOST_VERSION_NUMBER(major,minor,patch)`.
*/
#ifdef BOOST_STRICT_CONFIG
# define BOOST_PREDEF_WORKAROUND(symbol, comp, major, minor, patch) (0)
#else
# include <boost/predef/version_number.h>
# define BOOST_PREDEF_WORKAROUND(symbol, comp, major, minor, patch) \
( (symbol) != (0) ) && \
( (symbol) comp (BOOST_VERSION_NUMBER( (major) , (minor) , (patch) )) )
#endif
/*`
[heading `BOOST_PREDEF_TESTED_AT`]
``
BOOST_PREDEF_TESTED_AT(symbol,major,minor,patch)
``
Usage:
``
#if BOOST_PREDEF_TESTED_AT(BOOST_COMP_CLANG,3,5,0)
// Needed for clang, and last checked for 3.5.0.
#endif
``
Defines a comparison against two version numbers that depends on the definion
of `BOOST_STRICT_CONFIG` and `BOOST_DETECT_OUTDATED_WORKAROUNDS`.
When `BOOST_STRICT_CONFIG` is defined this will expand to a value convertible
to `false`. Which has the effect of disabling all code
conditionally guarded by `BOOST_PREDEF_TESTED_AT`. When `BOOST_STRICT_CONFIG`
is undefined this expand to either:
* A value convertible to `true` when `BOOST_DETECT_OUTDATED_WORKAROUNDS` is not
defined.
* A value convertible `true` when the expansion of
`BOOST_PREDEF_WORKAROUND(symbol, <=, major, minor, patch)` is `true` and
`BOOST_DETECT_OUTDATED_WORKAROUNDS` is defined.
* A compile error when the expansion of
`BOOST_PREDEF_WORKAROUND(symbol, >, major, minor, patch)` is true and
`BOOST_DETECT_OUTDATED_WORKAROUNDS` is defined.
*/
#ifdef BOOST_STRICT_CONFIG
# define BOOST_PREDEF_TESTED_AT(symbol, major, minor, patch) (0)
#else
# ifdef BOOST_DETECT_OUTDATED_WORKAROUNDS
# define BOOST_PREDEF_TESTED_AT(symbol, major, minor, patch) ( \
BOOST_PREDEF_WORKAROUND(symbol, <=, major, minor, patch) \
? 1 \
: (1%0) )
# else
# define BOOST_PREDEF_TESTED_AT(symbol, major, minor, patch) \
( (symbol) >= BOOST_VERSION_NUMBER_AVAILABLE )
# endif
#endif
#endif

View File

@ -16,6 +16,7 @@ http://www.boost.org/LICENSE_1_0.txt)
#include <boost/predef/platform/windows_store.h> #include <boost/predef/platform/windows_store.h>
#include <boost/predef/platform/windows_phone.h> #include <boost/predef/platform/windows_phone.h>
#include <boost/predef/platform/windows_runtime.h> #include <boost/predef/platform/windows_runtime.h>
#include <boost/predef/platform/ios.h>
/*#include <boost/predef/platform/.h>*/ /*#include <boost/predef/platform/.h>*/
#endif #endif

View File

@ -0,0 +1,58 @@
/*
Copyright Ruslan Baratov 2017
Copyright Rene Rivera 2017
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)
*/
#ifndef BOOST_PREDEF_PLAT_IOS_H
#define BOOST_PREDEF_PLAT_IOS_H
#include <boost/predef/os/ios.h> // BOOST_OS_IOS
#include <boost/predef/version_number.h> // BOOST_VERSION_NUMBER_NOT_AVAILABLE
/*`
[heading `BOOST_PLAT_IOS_DEVICE`]
[heading `BOOST_PLAT_IOS_SIMULATOR`]
[table
[[__predef_symbol__] [__predef_version__]]
[[`TARGET_IPHONE_SIMULATOR`] [__predef_detection__]]
]
*/
#define BOOST_PLAT_IOS_DEVICE BOOST_VERSION_NUMBER_NOT_AVAILABLE
#define BOOST_PLAT_IOS_SIMULATOR BOOST_VERSION_NUMBER_NOT_AVAILABLE
// https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h
#if BOOST_OS_IOS
# include <TargetConditionals.h>
# if TARGET_IPHONE_SIMULATOR == 1
# undef BOOST_PLAT_IOS_SIMULATOR
# define BOOST_PLAT_IOS_SIMULATOR BOOST_VERSION_NUMBER_AVAILABLE
# else
# undef BOOST_PLAT_IOS_DEVICE
# define BOOST_PLAT_IOS_DEVICE BOOST_VERSION_NUMBER_AVAILABLE
# endif
#endif
#if BOOST_PLAT_IOS_SIMULATOR
# define BOOST_PLAT_IOS_SIMULATOR_AVAILABLE
# include <boost/predef/detail/platform_detected.h>
#endif
#if BOOST_PLAT_IOS_DEVICE
# define BOOST_PLAT_IOS_DEVICE_AVAILABLE
# include <boost/predef/detail/platform_detected.h>
#endif
#define BOOST_PLAT_IOS_SIMULATOR_NAME "iOS Simulator"
#define BOOST_PLAT_IOS_DEVICE_NAME "iOS Device"
#endif // BOOST_PREDEF_PLAT_IOS_H
#include <boost/predef/detail/test.h>
BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_IOS_SIMULATOR,BOOST_PLAT_IOS_SIMULATOR_NAME)
BOOST_PREDEF_DECLARE_TEST(BOOST_PLAT_IOS_DEVICE,BOOST_PLAT_IOS_DEVICE_NAME)

View File

@ -10,6 +10,6 @@ http://www.boost.org/LICENSE_1_0.txt)
#include <boost/predef/version_number.h> #include <boost/predef/version_number.h>
#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,5,0) #define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,6,0)
#endif #endif

View File

@ -59,6 +59,10 @@ test-suite predef :
[ compile macos_vs_bsd.c : [ predef-require "BOOST_OS_MACOS" : cpp ] ] [ compile macos_vs_bsd.c : [ predef-require "BOOST_OS_MACOS" : cpp ] ]
[ run check_value.cpp : : : <test-info>always_show_run_output [ run check_value.cpp : : : <test-info>always_show_run_output
[ predef-check "BOOST_COMP_CLANG > 0.0.0" "BOOST_OS_LINUX == 0" : : <cxxflags>-DCHECK_VALUE=true ] ] [ predef-check "BOOST_COMP_CLANG > 0.0.0" "BOOST_OS_LINUX == 0" : : <cxxflags>-DCHECK_VALUE=true ] ]
[ run workaround.cpp ]
[ compile workaround_strict_config.cpp ]
[ run tested_at.cpp ]
[ compile-fail tested_at_outdated.cpp : <test-info>always_show_run_output ]
; ;
# Minimal testing done for predef for CI. Since # Minimal testing done for predef for CI. Since

62
test/tested_at.cpp Normal file
View File

@ -0,0 +1,62 @@
/*
Copyright Rene Rivera 2011-2017
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)
*/
#include <boost/predef/version_number.h>
#include <boost/predef/other/workaround.h>
#include <exception>
#include <vector>
#include <string>
#include <iostream>
namespace
{
struct test_info
{
std::string value;
bool passed;
test_info(std::string const & v, bool p) : value(v), passed(p) {}
test_info(test_info const & o) : value(o.value), passed(o.passed) {}
};
std::vector<test_info> test_results;
}
#define PREDEF_CHECK(X) test_results.push_back(test_info(#X,(X)))
void test_BOOST_PREDEF_TESTED_AT()
{
PREDEF_CHECK(BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER(15,15,15),0xF,0xF,0xF));
PREDEF_CHECK(BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER(1,0,0),1,0,0));
PREDEF_CHECK(BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER(0,9,0),1,0,0));
PREDEF_CHECK(BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER(2,0,0),1,0,0));
PREDEF_CHECK(!BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER_NOT_AVAILABLE,1,0,0));
}
int main()
{
test_BOOST_PREDEF_TESTED_AT();
unsigned fail_count = 0;
std::vector<test_info>::iterator i = test_results.begin();
std::vector<test_info>::iterator e = test_results.end();
for (; i != e; ++i)
{
std::cout
<< (i->passed ? "[passed]" : "[failed]")
<< " " << i->value
<< std::endl;
fail_count += i->passed ? 0 : 1;
}
std::cout
<< std::endl
<< "TOTAL: "
<< "passed " << (test_results.size()-fail_count) << ", "
<< "failed " << (fail_count) << ", "
<< "of " << (test_results.size())
<< std::endl;
return fail_count;
}

View File

@ -0,0 +1,18 @@
/*
Copyright Rene Rivera 2011-2017
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)
*/
#include <boost/predef/version_number.h>
#define BOOST_DETECT_OUTDATED_WORKAROUNDS
#include <boost/predef/other/workaround.h>
int main()
{
#if BOOST_PREDEF_TESTED_AT(BOOST_VERSION_NUMBER(2,0,0),1,0,0)
return 1;
#else
return 0;
#endif
}

62
test/workaround.cpp Normal file
View File

@ -0,0 +1,62 @@
/*
Copyright Rene Rivera 2011-2017
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)
*/
#include <boost/predef/version_number.h>
#include <boost/predef/other/workaround.h>
#include <exception>
#include <vector>
#include <string>
#include <iostream>
namespace
{
struct test_info
{
std::string value;
bool passed;
test_info(std::string const & v, bool p) : value(v), passed(p) {}
test_info(test_info const & o) : value(o.value), passed(o.passed) {}
};
std::vector<test_info> test_results;
}
#define PREDEF_CHECK(X) test_results.push_back(test_info(#X,(X)))
void test_BOOST_PREDEF_WORKAROUND()
{
PREDEF_CHECK(BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER(15,15,15),==,0xF,0xF,0xF));
PREDEF_CHECK(BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER(0,9,0),<,1,0,0));
PREDEF_CHECK(BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER(0,9,0),!=,1,0,0));
PREDEF_CHECK(BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER_MIN,<,1,0,0));
PREDEF_CHECK(BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER_MIN,>,0,0,0));
}
int main()
{
test_BOOST_PREDEF_WORKAROUND();
unsigned fail_count = 0;
std::vector<test_info>::iterator i = test_results.begin();
std::vector<test_info>::iterator e = test_results.end();
for (; i != e; ++i)
{
std::cout
<< (i->passed ? "[passed]" : "[failed]")
<< " " << i->value
<< std::endl;
fail_count += i->passed ? 0 : 1;
}
std::cout
<< std::endl
<< "TOTAL: "
<< "passed " << (test_results.size()-fail_count) << ", "
<< "failed " << (fail_count) << ", "
<< "of " << (test_results.size())
<< std::endl;
return fail_count;
}

View File

@ -0,0 +1,17 @@
/*
Copyright Rene Rivera 2011-2017
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)
*/
#include <boost/predef/version_number.h>
#define BOOST_STRICT_CONFIG
#include <boost/predef/other/workaround.h>
int main()
{
#if BOOST_PREDEF_WORKAROUND(BOOST_VERSION_NUMBER_AVAILABLE,==,0,0,1)
fail();
#endif
return 0;
}