Add new build-time configuration feature.

This commit is contained in:
jzmaddock
2014-06-05 18:55:12 +01:00
parent 23cf56a53f
commit dad7bc5b30
15 changed files with 1421 additions and 9 deletions

373
checks/Jamfile.v2 Normal file
View File

@ -0,0 +1,373 @@
#
# *** DO NOT EDIT THIS FILE BY HAND ***
# This file was automatically generated on Thu Jun 05 18:54:37 2014
# by libs/config/tools/generate.cpp
# Copyright John Maddock.
# Use, modification and distribution are subject to 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)
import modules ;
import path ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TWO_ARG_USE_FACET : two_arg_use_facet ;
explicit two_arg_use_facet ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_BETHREADS : bethreads ;
explicit bethreads ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_CLOCK_GETTIME : clock_gettime ;
explicit clock_gettime ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_DIRENT_H : dirent_h ;
explicit dirent_h ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_EXPM1 : expm1 ;
explicit expm1 ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_FTIME : ftime ;
explicit ftime ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_GETSYSTEMTIMEASFILETIME : getsystemtimeasfiletime ;
explicit getsystemtimeasfiletime ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_GETTIMEOFDAY : gettimeofday ;
explicit gettimeofday ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_HASH : hash ;
explicit hash ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_INT128 : int128 ;
explicit int128 ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_LOG1P : log1p ;
explicit log1p ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_LONG_LONG : long_long ;
explicit long_long ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_MACRO_USE_FACET : macro_use_facet ;
explicit macro_use_facet ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_MS_INT64 : ms_int64 ;
explicit ms_int64 ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_NANOSLEEP : nanosleep ;
explicit nanosleep ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_NL_TYPES_H : nl_types_h ;
explicit nl_types_h ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_NRVO : nrvo ;
explicit nrvo ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_PARTIAL_STD_ALLOCATOR : partial_std_allocator ;
explicit partial_std_allocator ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_PTHREADS : pthreads ;
explicit pthreads ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_PTHREAD_DELAY_NP : pthread_delay_np ;
explicit pthread_delay_np ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE : pthread_mutexattr_settype ;
explicit pthread_mutexattr_settype ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_PTHREAD_YIELD : pthread_yield ;
explicit pthread_yield ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_RVALUE_REFS : rvalue_refs ;
explicit rvalue_refs ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_SCHED_YIELD : sched_yield ;
explicit sched_yield ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_SGI_TYPE_TRAITS : sgi_type_traits ;
explicit sgi_type_traits ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_SIGACTION : sigaction ;
explicit sigaction ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_SLIST : slist ;
explicit slist ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_STATIC_ASSERT : static_assert ;
explicit static_assert ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_STDINT_H : stdint_h ;
explicit stdint_h ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_STLP_USE_FACET : stlp_use_facet ;
explicit stlp_use_facet ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_ARRAY : tr1_array ;
explicit tr1_array ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_BIND : tr1_bind ;
explicit tr1_bind ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_COMPLEX_OVERLOADS : tr1_complex_overloads ;
explicit tr1_complex_overloads ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG : tr1_complex_inverse_trig ;
explicit tr1_complex_inverse_trig ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_FUNCTION : tr1_function ;
explicit tr1_function ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_HASH : tr1_hash ;
explicit tr1_hash ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_MEM_FN : tr1_mem_fn ;
explicit tr1_mem_fn ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_RANDOM : tr1_random ;
explicit tr1_random ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_REFERENCE_WRAPPER : tr1_reference_wrapper ;
explicit tr1_reference_wrapper ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_REGEX : tr1_regex ;
explicit tr1_regex ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_RESULT_OF : tr1_result_of ;
explicit tr1_result_of ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_SHARED_PTR : tr1_shared_ptr ;
explicit tr1_shared_ptr ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_TUPLE : tr1_tuple ;
explicit tr1_tuple ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_TYPE_TRAITS : tr1_type_traits ;
explicit tr1_type_traits ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_UNORDERED_MAP : tr1_unordered_map ;
explicit tr1_unordered_map ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_UNORDERED_SET : tr1_unordered_set ;
explicit tr1_unordered_set ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_TR1_UTILITY : tr1_utility ;
explicit tr1_utility ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_UNISTD_H : unistd_h ;
explicit unistd_h ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_VARIADIC_TMPL : variadic_tmpl ;
explicit variadic_tmpl ;
run test_case.cpp : : : <define>TEST_BOOST_MSVC6_MEMBER_TEMPLATES : boost_msvc6_member_templates ;
explicit boost_msvc6_member_templates ;
run test_case.cpp : : : <define>TEST_BOOST_MSVC_STD_ITERATOR : boost_msvc_std_iterator ;
explicit boost_msvc_std_iterator ;
run test_case.cpp : : : <define>TEST_BOOST_HAS_WINTHREADS : winthreads ;
explicit winthreads ;
run test_case.cpp : : : <define>TEST_BOOST_NO_ADL_BARRIER : adl_barrier ;
explicit adl_barrier ;
run test_case.cpp : : : <define>TEST_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP : argument_dependent_lookup ;
explicit argument_dependent_lookup ;
run test_case.cpp : : : <define>TEST_BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS : array_type_specializations ;
explicit array_type_specializations ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_AUTO_DECLARATIONS : cxx11_auto_declarations ;
explicit cxx11_auto_declarations ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS : cxx11_auto_multideclarations ;
explicit cxx11_auto_multideclarations ;
run test_case.cpp : : : <define>TEST_BOOST_NO_AUTO_PTR : auto_ptr ;
explicit auto_ptr ;
run test_case.cpp : : : <define>TEST_BOOST_BCB_PARTIAL_SPECIALIZATION_BUG : boost_bcb_partial_specialization_bug ;
explicit boost_bcb_partial_specialization_bug ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_CHAR16_T : cxx11_char16_t ;
explicit cxx11_char16_t ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_CHAR32_T : cxx11_char32_t ;
explicit cxx11_char32_t ;
run test_case.cpp : : : <define>TEST_BOOST_NO_COMPLETE_VALUE_INITIALIZATION : complete_value_initialization ;
explicit complete_value_initialization ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_CONSTEXPR : cxx11_constexpr ;
explicit cxx11_constexpr ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CTYPE_FUNCTIONS : ctype_functions ;
explicit ctype_functions ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CV_SPECIALIZATIONS : cv_specializations ;
explicit cv_specializations ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CV_VOID_SPECIALIZATIONS : cv_void_specializations ;
explicit cv_void_specializations ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CWCHAR : cwchar ;
explicit cwchar ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CWCTYPE : cwctype ;
explicit cwctype ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_ADDRESSOF : cxx11_addressof ;
explicit cxx11_addressof ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_ALIGNAS : cxx11_alignas ;
explicit cxx11_alignas ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_ALLOCATOR : cxx11_allocator ;
explicit cxx11_allocator ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_ATOMIC_SMART_PTR : cxx11_atomic_smart_ptr ;
explicit cxx11_atomic_smart_ptr ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_ARRAY : cxx11_hdr_array ;
explicit cxx11_hdr_array ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_ATOMIC : cxx11_hdr_atomic ;
explicit cxx11_hdr_atomic ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_CHRONO : cxx11_hdr_chrono ;
explicit cxx11_hdr_chrono ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_CODECVT : cxx11_hdr_codecvt ;
explicit cxx11_hdr_codecvt ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_CONDITION_VARIABLE : cxx11_hdr_condition_variable ;
explicit cxx11_hdr_condition_variable ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_FORWARD_LIST : cxx11_hdr_forward_list ;
explicit cxx11_hdr_forward_list ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_FUTURE : cxx11_hdr_future ;
explicit cxx11_hdr_future ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_INITIALIZER_LIST : cxx11_hdr_initializer_list ;
explicit cxx11_hdr_initializer_list ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_MUTEX : cxx11_hdr_mutex ;
explicit cxx11_hdr_mutex ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_RANDOM : cxx11_hdr_random ;
explicit cxx11_hdr_random ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_RATIO : cxx11_hdr_ratio ;
explicit cxx11_hdr_ratio ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_REGEX : cxx11_hdr_regex ;
explicit cxx11_hdr_regex ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_SYSTEM_ERROR : cxx11_hdr_system_error ;
explicit cxx11_hdr_system_error ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_THREAD : cxx11_hdr_thread ;
explicit cxx11_hdr_thread ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_TUPLE : cxx11_hdr_tuple ;
explicit cxx11_hdr_tuple ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_TYPEINDEX : cxx11_hdr_typeindex ;
explicit cxx11_hdr_typeindex ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_TYPE_TRAITS : cxx11_hdr_type_traits ;
explicit cxx11_hdr_type_traits ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_UNORDERED_MAP : cxx11_hdr_unordered_map ;
explicit cxx11_hdr_unordered_map ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_UNORDERED_SET : cxx11_hdr_unordered_set ;
explicit cxx11_hdr_unordered_set ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_INLINE_NAMESPACES : cxx11_inline_namespaces ;
explicit cxx11_inline_namespaces ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_NUMERIC_LIMITS : cxx11_numeric_limits ;
explicit cxx11_numeric_limits ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_REF_QUALIFIERS : cxx11_ref_qualifiers ;
explicit cxx11_ref_qualifiers ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_SMART_PTR : cxx11_smart_ptr ;
explicit cxx11_smart_ptr ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_STD_ALIGN : cxx11_std_align ;
explicit cxx11_std_align ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_TRAILING_RESULT_TYPES : cxx11_trailing_result_types ;
explicit cxx11_trailing_result_types ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_USER_DEFINED_LITERALS : cxx11_user_defined_literals ;
explicit cxx11_user_defined_literals ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_HDR_FUNCTIONAL : cxx11_hdr_functional ;
explicit cxx11_hdr_functional ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_DECLTYPE : cxx11_decltype ;
explicit cxx11_decltype ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_DECLTYPE_N3276 : cxx11_decltype_n3276 ;
explicit cxx11_decltype_n3276 ;
run test_case.cpp : : : <define>TEST_BOOST_DEDUCED_TYPENAME : boost_deduced_typename ;
explicit boost_deduced_typename ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_DEFAULTED_FUNCTIONS : cxx11_defaulted_functions ;
explicit cxx11_defaulted_functions ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_DELETED_FUNCTIONS : cxx11_deleted_functions ;
explicit cxx11_deleted_functions ;
run test_case.cpp : : : <define>TEST_BOOST_NO_DEPENDENT_NESTED_DERIVATIONS : dependent_nested_derivations ;
explicit dependent_nested_derivations ;
run test_case.cpp : : : <define>TEST_BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS : dependent_types_in_template_value_parameters ;
explicit dependent_types_in_template_value_parameters ;
run test_case.cpp : : : <define>TEST_BOOST_NO_EXCEPTIONS : exceptions ;
explicit exceptions ;
run test_case.cpp : : : <define>TEST_BOOST_NO_EXCEPTION_STD_NAMESPACE : exception_std_namespace ;
explicit exception_std_namespace ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS : cxx11_explicit_conversion_operators ;
explicit cxx11_explicit_conversion_operators ;
run test_case.cpp : : : <define>TEST_BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS : explicit_function_template_arguments ;
explicit explicit_function_template_arguments ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_EXTERN_TEMPLATE : cxx11_extern_template ;
explicit cxx11_extern_template ;
run test_case.cpp : : : <define>TEST_BOOST_NO_FENV_H : fenv_h ;
explicit fenv_h ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS : cxx11_function_template_default_args ;
explicit cxx11_function_template_default_args ;
run test_case.cpp : : : <define>TEST_BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS : function_type_specializations ;
explicit function_type_specializations ;
run test_case.cpp : : : <define>TEST_BOOST_NO_FUNCTION_TEMPLATE_ORDERING : function_template_ordering ;
explicit function_template_ordering ;
run test_case.cpp : : : <define>TEST_BOOST_NO_MS_INT64_NUMERIC_LIMITS : ms_int64_numeric_limits ;
explicit ms_int64_numeric_limits ;
run test_case.cpp : : : <define>TEST_BOOST_NO_INCLASS_MEMBER_INITIALIZATION : inclass_member_initialization ;
explicit inclass_member_initialization ;
run test_case.cpp : : : <define>TEST_BOOST_NO_INTEGRAL_INT64_T : integral_int64_t ;
explicit integral_int64_t ;
run test_case.cpp : : : <define>TEST_BOOST_NO_IOSFWD : iosfwd ;
explicit iosfwd ;
run test_case.cpp : : : <define>TEST_BOOST_NO_IOSTREAM : iostream ;
explicit iostream ;
run test_case.cpp : : : <define>TEST_BOOST_NO_IS_ABSTRACT : is_abstract ;
explicit is_abstract ;
run test_case.cpp : : : <define>TEST_BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS : templated_iterator_constructors ;
explicit templated_iterator_constructors ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_LAMBDAS : cxx11_lambdas ;
explicit cxx11_lambdas ;
run test_case.cpp : : : <define>TEST_BOOST_NO_LIMITS : limits ;
explicit limits ;
run test_case.cpp : : : <define>TEST_BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS : limits_compile_time_constants ;
explicit limits_compile_time_constants ;
run test_case.cpp : : : <define>TEST_BOOST_NO_LONG_LONG_NUMERIC_LIMITS : long_long_numeric_limits ;
explicit long_long_numeric_limits ;
run test_case.cpp : : : <define>TEST_BOOST_NO_LONG_LONG : long_long ;
explicit long_long ;
run test_case.cpp : : : <define>TEST_BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS : member_function_specializations ;
explicit member_function_specializations ;
run test_case.cpp : : : <define>TEST_BOOST_NO_MEMBER_TEMPLATES : member_templates ;
explicit member_templates ;
run test_case.cpp : : : <define>TEST_BOOST_NO_MEMBER_TEMPLATE_FRIENDS : member_template_friends ;
explicit member_template_friends ;
run test_case.cpp : : : <define>TEST_BOOST_NO_MEMBER_TEMPLATE_KEYWORD : member_template_keyword ;
explicit member_template_keyword ;
run test_case.cpp : : : <define>TEST_BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS : pointer_to_member_template_parameters ;
explicit pointer_to_member_template_parameters ;
run test_case.cpp : : : <define>TEST_BOOST_NO_NESTED_FRIENDSHIP : nested_friendship ;
explicit nested_friendship ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_NOEXCEPT : cxx11_noexcept ;
explicit cxx11_noexcept ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_NULLPTR : cxx11_nullptr ;
explicit cxx11_nullptr ;
run test_case.cpp : : : <define>TEST_BOOST_NO_OPERATORS_IN_NAMESPACE : operators_in_namespace ;
explicit operators_in_namespace ;
run test_case.cpp : : : <define>TEST_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION : template_partial_specialization ;
explicit template_partial_specialization ;
run test_case.cpp : : : <define>TEST_BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS : partial_specialization_implicit_default_args ;
explicit partial_specialization_implicit_default_args ;
run test_case.cpp : : : <define>TEST_BOOST_NO_PRIVATE_IN_AGGREGATE : private_in_aggregate ;
explicit private_in_aggregate ;
run test_case.cpp : : : <define>TEST_BOOST_NO_POINTER_TO_MEMBER_CONST : pointer_to_member_const ;
explicit pointer_to_member_const ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_RANGE_BASED_FOR : cxx11_range_based_for ;
explicit cxx11_range_based_for ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_RAW_LITERALS : cxx11_raw_literals ;
explicit cxx11_raw_literals ;
run test_case.cpp : : : <define>TEST_BOOST_NO_UNREACHABLE_RETURN_DETECTION : unreachable_return_detection ;
explicit unreachable_return_detection ;
run test_case.cpp : : : <define>TEST_BOOST_NO_RTTI : rtti ;
explicit rtti ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_RVALUE_REFERENCES : cxx11_rvalue_references ;
explicit cxx11_rvalue_references ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_SCOPED_ENUMS : cxx11_scoped_enums ;
explicit cxx11_scoped_enums ;
run test_case.cpp : : : <define>TEST_BOOST_NO_SFINAE : sfinae ;
explicit sfinae ;
run test_case.cpp : : : <define>TEST_BOOST_NO_SFINAE_EXPR : sfinae_expr ;
explicit sfinae_expr ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STRINGSTREAM : stringstream ;
explicit stringstream ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_STATIC_ASSERT : cxx11_static_assert ;
explicit cxx11_static_assert ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STDC_NAMESPACE : stdc_namespace ;
explicit stdc_namespace ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_ALLOCATOR : std_allocator ;
explicit std_allocator ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_DISTANCE : std_distance ;
explicit std_distance ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_ITERATOR : std_iterator ;
explicit std_iterator ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_ITERATOR_TRAITS : std_iterator_traits ;
explicit std_iterator_traits ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_LOCALE : std_locale ;
explicit std_locale ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_MESSAGES : std_messages ;
explicit std_messages ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_MIN_MAX : std_min_max ;
explicit std_min_max ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN : std_output_iterator_assign ;
explicit std_output_iterator_assign ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_TYPEINFO : std_typeinfo ;
explicit std_typeinfo ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_USE_FACET : std_use_facet ;
explicit std_use_facet ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_WSTREAMBUF : std_wstreambuf ;
explicit std_wstreambuf ;
run test_case.cpp : : : <define>TEST_BOOST_NO_STD_WSTRING : std_wstring ;
explicit std_wstring ;
run test_case.cpp : : : <define>TEST_BOOST_NO_SWPRINTF : swprintf ;
explicit swprintf ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_TEMPLATE_ALIASES : cxx11_template_aliases ;
explicit cxx11_template_aliases ;
run test_case.cpp : : : <define>TEST_BOOST_NO_TEMPLATED_IOSTREAMS : templated_iostreams ;
explicit templated_iostreams ;
run test_case.cpp : : : <define>TEST_BOOST_NO_TEMPLATE_TEMPLATES : template_templates ;
explicit template_templates ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS : cxx11_local_class_template_parameters ;
explicit cxx11_local_class_template_parameters ;
run test_case.cpp : : : <define>TEST_BOOST_NO_TWO_PHASE_NAME_LOOKUP : two_phase_name_lookup ;
explicit two_phase_name_lookup ;
run test_case.cpp : : : <define>TEST_BOOST_NO_TYPEID : typeid ;
explicit typeid ;
run test_case.cpp : : : <define>TEST_BOOST_NO_TYPENAME_WITH_CTOR : typename_with_ctor ;
explicit typename_with_ctor ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_UNICODE_LITERALS : cxx11_unicode_literals ;
explicit cxx11_unicode_literals ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX : cxx11_unified_initialization_syntax ;
explicit cxx11_unified_initialization_syntax ;
run test_case.cpp : : : <define>TEST_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL : boost_function_scope_using_declaration_breaks_adl ;
explicit boost_function_scope_using_declaration_breaks_adl ;
run test_case.cpp : : : <define>TEST_BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE : using_declaration_overloads_from_typename_base ;
explicit using_declaration_overloads_from_typename_base ;
run test_case.cpp : : : <define>TEST_BOOST_NO_USING_TEMPLATE : using_template ;
explicit using_template ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_VARIADIC_MACROS : cxx11_variadic_macros ;
explicit cxx11_variadic_macros ;
run test_case.cpp : : : <define>TEST_BOOST_NO_CXX11_VARIADIC_TEMPLATES : cxx11_variadic_templates ;
explicit cxx11_variadic_templates ;
run test_case.cpp : : : <define>TEST_BOOST_NO_VOID_RETURNS : void_returns ;
explicit void_returns ;
run test_case.cpp : : : <define>TEST_BOOST_NO_INTRINSIC_WCHAR_T : intrinsic_wchar_t ;
explicit intrinsic_wchar_t ;

26
checks/config.jam Normal file
View File

@ -0,0 +1,26 @@
#
# *** DO NOT EDIT THIS FILE BY HAND ***
# This file was automatically generated on Wed Jun 04 18:22:48 2014
# by libs/config/tools/generate.cpp
# Copyright John Maddock.
# Use, modification and distribution are subject to 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)
import modules ;
import testing ;
import configure ;
import project ;
rule requires ( names + )
{
local result ;
for name in $(names)
{
local msg = "Boost.Config Feature Check: " ;
msg += $(name) ;
result += [ check-target-builds $(__name__:D)//$(name) $(msg:J=) : : <build>no ] ;
}
return $(result) ;
}

737
checks/test_case.cpp Normal file
View File

@ -0,0 +1,737 @@
// This file was automatically generated on Thu Jun 05 18:54:37 2014
// by libs/config/tools/generate.cpp
// Copyright John Maddock 2002-4.
// Use, modification and distribution are subject to 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)
// See http://www.boost.org/libs/config for the most recent version.//
// Revision $Id$
//
#ifdef TEST_BOOST_HAS_TWO_ARG_USE_FACET
# include "../test/boost_has_2arg_use_facet.ipp"
namespace test = boost_has_two_arg_use_facet;
#endif
#ifdef TEST_BOOST_HAS_BETHREADS
# include "../test/boost_has_bethreads.ipp"
namespace test = boost_has_bethreads;
#endif
#ifdef TEST_BOOST_HAS_CLOCK_GETTIME
# include "../test/boost_has_clock_gettime.ipp"
namespace test = boost_has_clock_gettime;
#endif
#ifdef TEST_BOOST_HAS_DIRENT_H
# include "../test/boost_has_dirent_h.ipp"
namespace test = boost_has_dirent_h;
#endif
#ifdef TEST_BOOST_HAS_EXPM1
# include "../test/boost_has_expm1.ipp"
namespace test = boost_has_expm1;
#endif
#ifdef TEST_BOOST_HAS_FTIME
# include "../test/boost_has_ftime.ipp"
namespace test = boost_has_ftime;
#endif
#ifdef TEST_BOOST_HAS_GETSYSTEMTIMEASFILETIME
# include "../test/boost_has_getsystemtimeasfiletime.ipp"
namespace test = boost_has_getsystemtimeasfiletime;
#endif
#ifdef TEST_BOOST_HAS_GETTIMEOFDAY
# include "../test/boost_has_gettimeofday.ipp"
namespace test = boost_has_gettimeofday;
#endif
#ifdef TEST_BOOST_HAS_HASH
# include "../test/boost_has_hash.ipp"
namespace test = boost_has_hash;
#endif
#ifdef TEST_BOOST_HAS_INT128
# include "../test/boost_has_int128.ipp"
namespace test = boost_has_int128;
#endif
#ifdef TEST_BOOST_HAS_LOG1P
# include "../test/boost_has_log1p.ipp"
namespace test = boost_has_log1p;
#endif
#ifdef TEST_BOOST_HAS_LONG_LONG
# include "../test/boost_has_long_long.ipp"
namespace test = boost_has_long_long;
#endif
#ifdef TEST_BOOST_HAS_MACRO_USE_FACET
# include "../test/boost_has_macro_use_facet.ipp"
namespace test = boost_has_macro_use_facet;
#endif
#ifdef TEST_BOOST_HAS_MS_INT64
# include "../test/boost_has_ms_int64.ipp"
namespace test = boost_has_ms_int64;
#endif
#ifdef TEST_BOOST_HAS_NANOSLEEP
# include "../test/boost_has_nanosleep.ipp"
namespace test = boost_has_nanosleep;
#endif
#ifdef TEST_BOOST_HAS_NL_TYPES_H
# include "../test/boost_has_nl_types_h.ipp"
namespace test = boost_has_nl_types_h;
#endif
#ifdef TEST_BOOST_HAS_NRVO
# include "../test/boost_has_nrvo.ipp"
namespace test = boost_has_nrvo;
#endif
#ifdef TEST_BOOST_HAS_PARTIAL_STD_ALLOCATOR
# include "../test/boost_has_part_alloc.ipp"
namespace test = boost_has_partial_std_allocator;
#endif
#ifdef TEST_BOOST_HAS_PTHREADS
# include "../test/boost_has_pthreads.ipp"
namespace test = boost_has_pthreads;
#endif
#ifdef TEST_BOOST_HAS_PTHREAD_DELAY_NP
# include "../test/boost_has_pthread_delay_np.ipp"
namespace test = boost_has_pthread_delay_np;
#endif
#ifdef TEST_BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE
# include "../test/boost_has_pthread_ma_st.ipp"
namespace test = boost_has_pthread_mutexattr_settype;
#endif
#ifdef TEST_BOOST_HAS_PTHREAD_YIELD
# include "../test/boost_has_pthread_yield.ipp"
namespace test = boost_has_pthread_yield;
#endif
#ifdef TEST_BOOST_HAS_RVALUE_REFS
# include "../test/boost_has_rvalue_refs.ipp"
namespace test = boost_has_rvalue_refs;
#endif
#ifdef TEST_BOOST_HAS_SCHED_YIELD
# include "../test/boost_has_sched_yield.ipp"
namespace test = boost_has_sched_yield;
#endif
#ifdef TEST_BOOST_HAS_SGI_TYPE_TRAITS
# include "../test/boost_has_sgi_type_traits.ipp"
namespace test = boost_has_sgi_type_traits;
#endif
#ifdef TEST_BOOST_HAS_SIGACTION
# include "../test/boost_has_sigaction.ipp"
namespace test = boost_has_sigaction;
#endif
#ifdef TEST_BOOST_HAS_SLIST
# include "../test/boost_has_slist.ipp"
namespace test = boost_has_slist;
#endif
#ifdef TEST_BOOST_HAS_STATIC_ASSERT
# include "../test/boost_has_static_assert.ipp"
namespace test = boost_has_static_assert;
#endif
#ifdef TEST_BOOST_HAS_STDINT_H
# include "../test/boost_has_stdint_h.ipp"
namespace test = boost_has_stdint_h;
#endif
#ifdef TEST_BOOST_HAS_STLP_USE_FACET
# include "../test/boost_has_stlp_use_facet.ipp"
namespace test = boost_has_stlp_use_facet;
#endif
#ifdef TEST_BOOST_HAS_TR1_ARRAY
# include "../test/boost_has_tr1_array.ipp"
namespace test = boost_has_tr1_array;
#endif
#ifdef TEST_BOOST_HAS_TR1_BIND
# include "../test/boost_has_tr1_bind.ipp"
namespace test = boost_has_tr1_bind;
#endif
#ifdef TEST_BOOST_HAS_TR1_COMPLEX_OVERLOADS
# include "../test/boost_has_tr1_complex_over.ipp"
namespace test = boost_has_tr1_complex_overloads;
#endif
#ifdef TEST_BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG
# include "../test/boost_has_tr1_complex_trig.ipp"
namespace test = boost_has_tr1_complex_inverse_trig;
#endif
#ifdef TEST_BOOST_HAS_TR1_FUNCTION
# include "../test/boost_has_tr1_function.ipp"
namespace test = boost_has_tr1_function;
#endif
#ifdef TEST_BOOST_HAS_TR1_HASH
# include "../test/boost_has_tr1_hash.ipp"
namespace test = boost_has_tr1_hash;
#endif
#ifdef TEST_BOOST_HAS_TR1_MEM_FN
# include "../test/boost_has_tr1_mem_fn.ipp"
namespace test = boost_has_tr1_mem_fn;
#endif
#ifdef TEST_BOOST_HAS_TR1_RANDOM
# include "../test/boost_has_tr1_random.ipp"
namespace test = boost_has_tr1_random;
#endif
#ifdef TEST_BOOST_HAS_TR1_REFERENCE_WRAPPER
# include "../test/boost_has_tr1_ref_wrap.ipp"
namespace test = boost_has_tr1_reference_wrapper;
#endif
#ifdef TEST_BOOST_HAS_TR1_REGEX
# include "../test/boost_has_tr1_regex.ipp"
namespace test = boost_has_tr1_regex;
#endif
#ifdef TEST_BOOST_HAS_TR1_RESULT_OF
# include "../test/boost_has_tr1_result_of.ipp"
namespace test = boost_has_tr1_result_of;
#endif
#ifdef TEST_BOOST_HAS_TR1_SHARED_PTR
# include "../test/boost_has_tr1_shared_ptr.ipp"
namespace test = boost_has_tr1_shared_ptr;
#endif
#ifdef TEST_BOOST_HAS_TR1_TUPLE
# include "../test/boost_has_tr1_tuple.ipp"
namespace test = boost_has_tr1_tuple;
#endif
#ifdef TEST_BOOST_HAS_TR1_TYPE_TRAITS
# include "../test/boost_has_tr1_type_traits.ipp"
namespace test = boost_has_tr1_type_traits;
#endif
#ifdef TEST_BOOST_HAS_TR1_UNORDERED_MAP
# include "../test/boost_has_tr1_unordered_map.ipp"
namespace test = boost_has_tr1_unordered_map;
#endif
#ifdef TEST_BOOST_HAS_TR1_UNORDERED_SET
# include "../test/boost_has_tr1_unordered_set.ipp"
namespace test = boost_has_tr1_unordered_set;
#endif
#ifdef TEST_BOOST_HAS_TR1_UTILITY
# include "../test/boost_has_tr1_utility.ipp"
namespace test = boost_has_tr1_utility;
#endif
#ifdef TEST_BOOST_HAS_UNISTD_H
# include "../test/boost_has_unistd_h.ipp"
namespace test = boost_has_unistd_h;
#endif
#ifdef TEST_BOOST_HAS_VARIADIC_TMPL
# include "../test/boost_has_variadic_tmpl.ipp"
namespace test = boost_has_variadic_tmpl;
#endif
#ifdef TEST_BOOST_MSVC6_MEMBER_TEMPLATES
# include "../test/boost_has_vc6_mem_templ.ipp"
namespace test = boost_msvc6_member_templates;
#endif
#ifdef TEST_BOOST_MSVC_STD_ITERATOR
# include "../test/boost_has_vc_iterator.ipp"
namespace test = boost_msvc_std_iterator;
#endif
#ifdef TEST_BOOST_HAS_WINTHREADS
# include "../test/boost_has_winthreads.ipp"
namespace test = boost_has_winthreads;
#endif
#ifdef TEST_BOOST_NO_ADL_BARRIER
# include "../test/boost_no_adl_barrier.ipp"
namespace test = boost_no_adl_barrier;
#endif
#ifdef TEST_BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
# include "../test/boost_no_arg_dep_lookup.ipp"
namespace test = boost_no_argument_dependent_lookup;
#endif
#ifdef TEST_BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS
# include "../test/boost_no_array_type_spec.ipp"
namespace test = boost_no_array_type_specializations;
#endif
#ifdef TEST_BOOST_NO_CXX11_AUTO_DECLARATIONS
# include "../test/boost_no_auto_declarations.ipp"
namespace test = boost_no_cxx11_auto_declarations;
#endif
#ifdef TEST_BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
# include "../test/boost_no_auto_multidecl.ipp"
namespace test = boost_no_cxx11_auto_multideclarations;
#endif
#ifdef TEST_BOOST_NO_AUTO_PTR
# include "../test/boost_no_auto_ptr.ipp"
namespace test = boost_no_auto_ptr;
#endif
#ifdef TEST_BOOST_BCB_PARTIAL_SPECIALIZATION_BUG
# include "../test/boost_no_bcb_partial_spec.ipp"
namespace test = boost_bcb_partial_specialization_bug;
#endif
#ifdef TEST_BOOST_NO_CXX11_CHAR16_T
# include "../test/boost_no_char16_t.ipp"
namespace test = boost_no_cxx11_char16_t;
#endif
#ifdef TEST_BOOST_NO_CXX11_CHAR32_T
# include "../test/boost_no_char32_t.ipp"
namespace test = boost_no_cxx11_char32_t;
#endif
#ifdef TEST_BOOST_NO_COMPLETE_VALUE_INITIALIZATION
# include "../test/boost_no_com_value_init.ipp"
namespace test = boost_no_complete_value_initialization;
#endif
#ifdef TEST_BOOST_NO_CXX11_CONSTEXPR
# include "../test/boost_no_constexpr.ipp"
namespace test = boost_no_cxx11_constexpr;
#endif
#ifdef TEST_BOOST_NO_CTYPE_FUNCTIONS
# include "../test/boost_no_ctype_functions.ipp"
namespace test = boost_no_ctype_functions;
#endif
#ifdef TEST_BOOST_NO_CV_SPECIALIZATIONS
# include "../test/boost_no_cv_spec.ipp"
namespace test = boost_no_cv_specializations;
#endif
#ifdef TEST_BOOST_NO_CV_VOID_SPECIALIZATIONS
# include "../test/boost_no_cv_void_spec.ipp"
namespace test = boost_no_cv_void_specializations;
#endif
#ifdef TEST_BOOST_NO_CWCHAR
# include "../test/boost_no_cwchar.ipp"
namespace test = boost_no_cwchar;
#endif
#ifdef TEST_BOOST_NO_CWCTYPE
# include "../test/boost_no_cwctype.ipp"
namespace test = boost_no_cwctype;
#endif
#ifdef TEST_BOOST_NO_CXX11_ADDRESSOF
# include "../test/boost_no_cxx11_addressof.ipp"
namespace test = boost_no_cxx11_addressof;
#endif
#ifdef TEST_BOOST_NO_CXX11_ALIGNAS
# include "../test/boost_no_cxx11_alignas.ipp"
namespace test = boost_no_cxx11_alignas;
#endif
#ifdef TEST_BOOST_NO_CXX11_ALLOCATOR
# include "../test/boost_no_cxx11_allocator.ipp"
namespace test = boost_no_cxx11_allocator;
#endif
#ifdef TEST_BOOST_NO_CXX11_ATOMIC_SMART_PTR
# include "../test/boost_no_cxx11_atomic_sp.ipp"
namespace test = boost_no_cxx11_atomic_smart_ptr;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_ARRAY
# include "../test/boost_no_cxx11_hdr_array.ipp"
namespace test = boost_no_cxx11_hdr_array;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_ATOMIC
# include "../test/boost_no_cxx11_hdr_atomic.ipp"
namespace test = boost_no_cxx11_hdr_atomic;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_CHRONO
# include "../test/boost_no_cxx11_hdr_chrono.ipp"
namespace test = boost_no_cxx11_hdr_chrono;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_CODECVT
# include "../test/boost_no_cxx11_hdr_codecvt.ipp"
namespace test = boost_no_cxx11_hdr_codecvt;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
# include "../test/boost_no_cxx11_hdr_condition_variable.ipp"
namespace test = boost_no_cxx11_hdr_condition_variable;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_FORWARD_LIST
# include "../test/boost_no_cxx11_hdr_forward_list.ipp"
namespace test = boost_no_cxx11_hdr_forward_list;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_FUTURE
# include "../test/boost_no_cxx11_hdr_future.ipp"
namespace test = boost_no_cxx11_hdr_future;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_INITIALIZER_LIST
# include "../test/boost_no_cxx11_hdr_initializer_list.ipp"
namespace test = boost_no_cxx11_hdr_initializer_list;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_MUTEX
# include "../test/boost_no_cxx11_hdr_mutex.ipp"
namespace test = boost_no_cxx11_hdr_mutex;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_RANDOM
# include "../test/boost_no_cxx11_hdr_random.ipp"
namespace test = boost_no_cxx11_hdr_random;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_RATIO
# include "../test/boost_no_cxx11_hdr_ratio.ipp"
namespace test = boost_no_cxx11_hdr_ratio;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_REGEX
# include "../test/boost_no_cxx11_hdr_regex.ipp"
namespace test = boost_no_cxx11_hdr_regex;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_SYSTEM_ERROR
# include "../test/boost_no_cxx11_hdr_system_error.ipp"
namespace test = boost_no_cxx11_hdr_system_error;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_THREAD
# include "../test/boost_no_cxx11_hdr_thread.ipp"
namespace test = boost_no_cxx11_hdr_thread;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_TUPLE
# include "../test/boost_no_cxx11_hdr_tuple.ipp"
namespace test = boost_no_cxx11_hdr_tuple;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_TYPEINDEX
# include "../test/boost_no_cxx11_hdr_typeindex.ipp"
namespace test = boost_no_cxx11_hdr_typeindex;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_TYPE_TRAITS
# include "../test/boost_no_cxx11_hdr_type_traits.ipp"
namespace test = boost_no_cxx11_hdr_type_traits;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_UNORDERED_MAP
# include "../test/boost_no_cxx11_hdr_unordered_map.ipp"
namespace test = boost_no_cxx11_hdr_unordered_map;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_UNORDERED_SET
# include "../test/boost_no_cxx11_hdr_unordered_set.ipp"
namespace test = boost_no_cxx11_hdr_unordered_set;
#endif
#ifdef TEST_BOOST_NO_CXX11_INLINE_NAMESPACES
# include "../test/boost_no_cxx11_inline_namespaces.ipp"
namespace test = boost_no_cxx11_inline_namespaces;
#endif
#ifdef TEST_BOOST_NO_CXX11_NUMERIC_LIMITS
# include "../test/boost_no_cxx11_numeric_limits.ipp"
namespace test = boost_no_cxx11_numeric_limits;
#endif
#ifdef TEST_BOOST_NO_CXX11_REF_QUALIFIERS
# include "../test/boost_no_cxx11_ref_qualifiers.ipp"
namespace test = boost_no_cxx11_ref_qualifiers;
#endif
#ifdef TEST_BOOST_NO_CXX11_SMART_PTR
# include "../test/boost_no_cxx11_smart_ptr.ipp"
namespace test = boost_no_cxx11_smart_ptr;
#endif
#ifdef TEST_BOOST_NO_CXX11_STD_ALIGN
# include "../test/boost_no_cxx11_std_align.ipp"
namespace test = boost_no_cxx11_std_align;
#endif
#ifdef TEST_BOOST_NO_CXX11_TRAILING_RESULT_TYPES
# include "../test/boost_no_cxx11_trailing_result_types.ipp"
namespace test = boost_no_cxx11_trailing_result_types;
#endif
#ifdef TEST_BOOST_NO_CXX11_USER_DEFINED_LITERALS
# include "../test/boost_no_cxx11_user_lit.ipp"
namespace test = boost_no_cxx11_user_defined_literals;
#endif
#ifdef TEST_BOOST_NO_CXX11_HDR_FUNCTIONAL
# include "../test/boost_no_cxx_hdr_functional.ipp"
namespace test = boost_no_cxx11_hdr_functional;
#endif
#ifdef TEST_BOOST_NO_CXX11_DECLTYPE
# include "../test/boost_no_decltype.ipp"
namespace test = boost_no_cxx11_decltype;
#endif
#ifdef TEST_BOOST_NO_CXX11_DECLTYPE_N3276
# include "../test/boost_no_decltype_n3276.ipp"
namespace test = boost_no_cxx11_decltype_n3276;
#endif
#ifdef TEST_BOOST_DEDUCED_TYPENAME
# include "../test/boost_no_ded_typename.ipp"
namespace test = boost_deduced_typename;
#endif
#ifdef TEST_BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
# include "../test/boost_no_defaulted_functions.ipp"
namespace test = boost_no_cxx11_defaulted_functions;
#endif
#ifdef TEST_BOOST_NO_CXX11_DELETED_FUNCTIONS
# include "../test/boost_no_deleted_functions.ipp"
namespace test = boost_no_cxx11_deleted_functions;
#endif
#ifdef TEST_BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
# include "../test/boost_no_dep_nested_class.ipp"
namespace test = boost_no_dependent_nested_derivations;
#endif
#ifdef TEST_BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS
# include "../test/boost_no_dep_val_param.ipp"
namespace test = boost_no_dependent_types_in_template_value_parameters;
#endif
#ifdef TEST_BOOST_NO_EXCEPTIONS
# include "../test/boost_no_exceptions.ipp"
namespace test = boost_no_exceptions;
#endif
#ifdef TEST_BOOST_NO_EXCEPTION_STD_NAMESPACE
# include "../test/boost_no_excep_std.ipp"
namespace test = boost_no_exception_std_namespace;
#endif
#ifdef TEST_BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
# include "../test/boost_no_explicit_cvt_ops.ipp"
namespace test = boost_no_cxx11_explicit_conversion_operators;
#endif
#ifdef TEST_BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
# include "../test/boost_no_exp_func_tem_arg.ipp"
namespace test = boost_no_explicit_function_template_arguments;
#endif
#ifdef TEST_BOOST_NO_CXX11_EXTERN_TEMPLATE
# include "../test/boost_no_extern_template.ipp"
namespace test = boost_no_cxx11_extern_template;
#endif
#ifdef TEST_BOOST_NO_FENV_H
# include "../test/boost_no_fenv_h.ipp"
namespace test = boost_no_fenv_h;
#endif
#ifdef TEST_BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
# include "../test/boost_no_function_template_default_args.ipp"
namespace test = boost_no_cxx11_function_template_default_args;
#endif
#ifdef TEST_BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS
# include "../test/boost_no_function_type_spec.ipp"
namespace test = boost_no_function_type_specializations;
#endif
#ifdef TEST_BOOST_NO_FUNCTION_TEMPLATE_ORDERING
# include "../test/boost_no_func_tmp_order.ipp"
namespace test = boost_no_function_template_ordering;
#endif
#ifdef TEST_BOOST_NO_MS_INT64_NUMERIC_LIMITS
# include "../test/boost_no_i64_limits.ipp"
namespace test = boost_no_ms_int64_numeric_limits;
#endif
#ifdef TEST_BOOST_NO_INCLASS_MEMBER_INITIALIZATION
# include "../test/boost_no_inline_memb_init.ipp"
namespace test = boost_no_inclass_member_initialization;
#endif
#ifdef TEST_BOOST_NO_INTEGRAL_INT64_T
# include "../test/boost_no_integral_int64_t.ipp"
namespace test = boost_no_integral_int64_t;
#endif
#ifdef TEST_BOOST_NO_IOSFWD
# include "../test/boost_no_iosfwd.ipp"
namespace test = boost_no_iosfwd;
#endif
#ifdef TEST_BOOST_NO_IOSTREAM
# include "../test/boost_no_iostream.ipp"
namespace test = boost_no_iostream;
#endif
#ifdef TEST_BOOST_NO_IS_ABSTRACT
# include "../test/boost_no_is_abstract.ipp"
namespace test = boost_no_is_abstract;
#endif
#ifdef TEST_BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS
# include "../test/boost_no_iter_construct.ipp"
namespace test = boost_no_templated_iterator_constructors;
#endif
#ifdef TEST_BOOST_NO_CXX11_LAMBDAS
# include "../test/boost_no_lambdas.ipp"
namespace test = boost_no_cxx11_lambdas;
#endif
#ifdef TEST_BOOST_NO_LIMITS
# include "../test/boost_no_limits.ipp"
namespace test = boost_no_limits;
#endif
#ifdef TEST_BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS
# include "../test/boost_no_limits_const_exp.ipp"
namespace test = boost_no_limits_compile_time_constants;
#endif
#ifdef TEST_BOOST_NO_LONG_LONG_NUMERIC_LIMITS
# include "../test/boost_no_ll_limits.ipp"
namespace test = boost_no_long_long_numeric_limits;
#endif
#ifdef TEST_BOOST_NO_LONG_LONG
# include "../test/boost_no_long_long.ipp"
namespace test = boost_no_long_long;
#endif
#ifdef TEST_BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS
# include "../test/boost_no_mem_func_spec.ipp"
namespace test = boost_no_member_function_specializations;
#endif
#ifdef TEST_BOOST_NO_MEMBER_TEMPLATES
# include "../test/boost_no_mem_templates.ipp"
namespace test = boost_no_member_templates;
#endif
#ifdef TEST_BOOST_NO_MEMBER_TEMPLATE_FRIENDS
# include "../test/boost_no_mem_templ_frnds.ipp"
namespace test = boost_no_member_template_friends;
#endif
#ifdef TEST_BOOST_NO_MEMBER_TEMPLATE_KEYWORD
# include "../test/boost_no_mem_tem_keyword.ipp"
namespace test = boost_no_member_template_keyword;
#endif
#ifdef TEST_BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS
# include "../test/boost_no_mem_tem_pnts.ipp"
namespace test = boost_no_pointer_to_member_template_parameters;
#endif
#ifdef TEST_BOOST_NO_NESTED_FRIENDSHIP
# include "../test/boost_no_nested_friendship.ipp"
namespace test = boost_no_nested_friendship;
#endif
#ifdef TEST_BOOST_NO_CXX11_NOEXCEPT
# include "../test/boost_no_noexcept.ipp"
namespace test = boost_no_cxx11_noexcept;
#endif
#ifdef TEST_BOOST_NO_CXX11_NULLPTR
# include "../test/boost_no_nullptr.ipp"
namespace test = boost_no_cxx11_nullptr;
#endif
#ifdef TEST_BOOST_NO_OPERATORS_IN_NAMESPACE
# include "../test/boost_no_ops_in_namespace.ipp"
namespace test = boost_no_operators_in_namespace;
#endif
#ifdef TEST_BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
# include "../test/boost_no_partial_spec.ipp"
namespace test = boost_no_template_partial_specialization;
#endif
#ifdef TEST_BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS
# include "../test/boost_no_part_spec_def_args.ipp"
namespace test = boost_no_partial_specialization_implicit_default_args;
#endif
#ifdef TEST_BOOST_NO_PRIVATE_IN_AGGREGATE
# include "../test/boost_no_priv_aggregate.ipp"
namespace test = boost_no_private_in_aggregate;
#endif
#ifdef TEST_BOOST_NO_POINTER_TO_MEMBER_CONST
# include "../test/boost_no_ptr_mem_const.ipp"
namespace test = boost_no_pointer_to_member_const;
#endif
#ifdef TEST_BOOST_NO_CXX11_RANGE_BASED_FOR
# include "../test/boost_no_range_based_for.ipp"
namespace test = boost_no_cxx11_range_based_for;
#endif
#ifdef TEST_BOOST_NO_CXX11_RAW_LITERALS
# include "../test/boost_no_raw_literals.ipp"
namespace test = boost_no_cxx11_raw_literals;
#endif
#ifdef TEST_BOOST_NO_UNREACHABLE_RETURN_DETECTION
# include "../test/boost_no_ret_det.ipp"
namespace test = boost_no_unreachable_return_detection;
#endif
#ifdef TEST_BOOST_NO_RTTI
# include "../test/boost_no_rtti.ipp"
namespace test = boost_no_rtti;
#endif
#ifdef TEST_BOOST_NO_CXX11_RVALUE_REFERENCES
# include "../test/boost_no_rvalue_references.ipp"
namespace test = boost_no_cxx11_rvalue_references;
#endif
#ifdef TEST_BOOST_NO_CXX11_SCOPED_ENUMS
# include "../test/boost_no_scoped_enums.ipp"
namespace test = boost_no_cxx11_scoped_enums;
#endif
#ifdef TEST_BOOST_NO_SFINAE
# include "../test/boost_no_sfinae.ipp"
namespace test = boost_no_sfinae;
#endif
#ifdef TEST_BOOST_NO_SFINAE_EXPR
# include "../test/boost_no_sfinae_expr.ipp"
namespace test = boost_no_sfinae_expr;
#endif
#ifdef TEST_BOOST_NO_STRINGSTREAM
# include "../test/boost_no_sstream.ipp"
namespace test = boost_no_stringstream;
#endif
#ifdef TEST_BOOST_NO_CXX11_STATIC_ASSERT
# include "../test/boost_no_static_assert.ipp"
namespace test = boost_no_cxx11_static_assert;
#endif
#ifdef TEST_BOOST_NO_STDC_NAMESPACE
# include "../test/boost_no_stdc_namespace.ipp"
namespace test = boost_no_stdc_namespace;
#endif
#ifdef TEST_BOOST_NO_STD_ALLOCATOR
# include "../test/boost_no_std_allocator.ipp"
namespace test = boost_no_std_allocator;
#endif
#ifdef TEST_BOOST_NO_STD_DISTANCE
# include "../test/boost_no_std_distance.ipp"
namespace test = boost_no_std_distance;
#endif
#ifdef TEST_BOOST_NO_STD_ITERATOR
# include "../test/boost_no_std_iterator.ipp"
namespace test = boost_no_std_iterator;
#endif
#ifdef TEST_BOOST_NO_STD_ITERATOR_TRAITS
# include "../test/boost_no_std_iter_traits.ipp"
namespace test = boost_no_std_iterator_traits;
#endif
#ifdef TEST_BOOST_NO_STD_LOCALE
# include "../test/boost_no_std_locale.ipp"
namespace test = boost_no_std_locale;
#endif
#ifdef TEST_BOOST_NO_STD_MESSAGES
# include "../test/boost_no_std_messages.ipp"
namespace test = boost_no_std_messages;
#endif
#ifdef TEST_BOOST_NO_STD_MIN_MAX
# include "../test/boost_no_std_min_max.ipp"
namespace test = boost_no_std_min_max;
#endif
#ifdef TEST_BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN
# include "../test/boost_no_std_oi_assign.ipp"
namespace test = boost_no_std_output_iterator_assign;
#endif
#ifdef TEST_BOOST_NO_STD_TYPEINFO
# include "../test/boost_no_std_typeinfo.ipp"
namespace test = boost_no_std_typeinfo;
#endif
#ifdef TEST_BOOST_NO_STD_USE_FACET
# include "../test/boost_no_std_use_facet.ipp"
namespace test = boost_no_std_use_facet;
#endif
#ifdef TEST_BOOST_NO_STD_WSTREAMBUF
# include "../test/boost_no_std_wstreambuf.ipp"
namespace test = boost_no_std_wstreambuf;
#endif
#ifdef TEST_BOOST_NO_STD_WSTRING
# include "../test/boost_no_std_wstring.ipp"
namespace test = boost_no_std_wstring;
#endif
#ifdef TEST_BOOST_NO_SWPRINTF
# include "../test/boost_no_swprintf.ipp"
namespace test = boost_no_swprintf;
#endif
#ifdef TEST_BOOST_NO_CXX11_TEMPLATE_ALIASES
# include "../test/boost_no_template_aliases.ipp"
namespace test = boost_no_cxx11_template_aliases;
#endif
#ifdef TEST_BOOST_NO_TEMPLATED_IOSTREAMS
# include "../test/boost_no_template_streams.ipp"
namespace test = boost_no_templated_iostreams;
#endif
#ifdef TEST_BOOST_NO_TEMPLATE_TEMPLATES
# include "../test/boost_no_template_template.ipp"
namespace test = boost_no_template_templates;
#endif
#ifdef TEST_BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
# include "../test/boost_no_tem_local_classes.ipp"
namespace test = boost_no_cxx11_local_class_template_parameters;
#endif
#ifdef TEST_BOOST_NO_TWO_PHASE_NAME_LOOKUP
# include "../test/boost_no_two_phase_lookup.ipp"
namespace test = boost_no_two_phase_name_lookup;
#endif
#ifdef TEST_BOOST_NO_TYPEID
# include "../test/boost_no_typeid.ipp"
namespace test = boost_no_typeid;
#endif
#ifdef TEST_BOOST_NO_TYPENAME_WITH_CTOR
# include "../test/boost_no_typename_with_ctor.ipp"
namespace test = boost_no_typename_with_ctor;
#endif
#ifdef TEST_BOOST_NO_CXX11_UNICODE_LITERALS
# include "../test/boost_no_unicode_literals.ipp"
namespace test = boost_no_cxx11_unicode_literals;
#endif
#ifdef TEST_BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
# include "../test/boost_no_unified_init.ipp"
namespace test = boost_no_cxx11_unified_initialization_syntax;
#endif
#ifdef TEST_BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL
# include "../test/boost_no_using_breaks_adl.ipp"
namespace test = boost_function_scope_using_declaration_breaks_adl;
#endif
#ifdef TEST_BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
# include "../test/boost_no_using_decl_overld.ipp"
namespace test = boost_no_using_declaration_overloads_from_typename_base;
#endif
#ifdef TEST_BOOST_NO_USING_TEMPLATE
# include "../test/boost_no_using_template.ipp"
namespace test = boost_no_using_template;
#endif
#ifdef TEST_BOOST_NO_CXX11_VARIADIC_MACROS
# include "../test/boost_no_variadic_macros.ipp"
namespace test = boost_no_cxx11_variadic_macros;
#endif
#ifdef TEST_BOOST_NO_CXX11_VARIADIC_TEMPLATES
# include "../test/boost_no_variadic_templates.ipp"
namespace test = boost_no_cxx11_variadic_templates;
#endif
#ifdef TEST_BOOST_NO_VOID_RETURNS
# include "../test/boost_no_void_returns.ipp"
namespace test = boost_no_void_returns;
#endif
#ifdef TEST_BOOST_NO_INTRINSIC_WCHAR_T
# include "../test/boost_no_wchar_t.ipp"
namespace test = boost_no_intrinsic_wchar_t;
#endif
int main( int, char *[] )
{
return test::test();
}

65
doc/build_time.qbk Normal file
View File

@ -0,0 +1,65 @@
[section:build_config Build Time Configuration]
There are times when you want to control whether a build target gets built or not, based
on what features the compiler supports. For example, suppose you have a test file
"test_constexpr_128.cpp" which requires three key features in order to build:
* The `constexpr` keyword as detected by BOOST_NO_CXX11_CONSTEXPR.
* User defined literals, as detected by BOOST_NO_CXX11_USER_DEFINED_LITERALS.
* The `__int128` data type, as detected by BOOST_HAS_INT128.
Clearly we know that if these features are not supported by the compiler, then
there's simply no point in even trying to build the test program. The main advantages being:
* Faster compile times - build configuration uses lightweight tests the results of which are also cached.
* Less noise in build output - there's no reason to be faced with pages of template
instantiation backtrace if we know the file can never compile anyway.
* Less noise in the online test results - the test will show up as blank, rather than as a fail
in the online test matrix.
* A better experience for end users building all of Boost, if those libraries which can not be built
for the current target compiler are simply skipped, rather than generating pages of error output.
Returning to our example, the test case is probably executed in it's Jamfile via the "run" rule:
run test_constexpr_128.cpp ;
We now need to make this target conditional on the necessary features.
We can do that by first importing the necessary rule at the start of the Jamfile:
import path-to-config-lib/checks/config : requires ;
Assuming that the test case is in the usual directory:
libs/yourlib/test
then the import rule will actually be:
import ../../config/checks/config : requires ;
Then add a "requires" rule invocation to the requirements section of the target:
run test_constexpr_128.cpp
: : : #requirements:
[ requires cxx11_constexpr cxx11_user_defined_literals int128 ] ;
Notice that multiple arguments can be added to the requires rule, and that these are
always the same as the Boost.Config macro name, but in lower case and with the ['boost_no_]
or ['boost_has_] prefix removed.
When building the above example, you will see at the start of the build process the results
of the configuration, for example GCC in C++11 mode gives:
- Boost.Config Feature Check: int128 : yes
- Boost.Config Feature Check: cxx11_constexpr : yes
- Boost.Config Feature Check: cxx11_user_defined_literals : yes
That's all there is to this handy feature, should at any time you be unsure of the feature-test
names you can pass to the "requires" rule, then search for the Boost.Config macro of interest in
libs/config/checks/Jamfiles.v2, and the name of the feature check will follow it.
And finally, this feature is built around the Boost.Build built in rule ['check-target-builds]
which can be used to perform more generalized build-time feature testing. The checks in this
library are provided as a convenient shorthand without the need for you to write the test cases yourself.
[endsect]

View File

@ -50,6 +50,7 @@ Distributed under the Boost Software License, Version 1.0.
[include configuring_boost.qbk] [include configuring_boost.qbk]
[include macro_reference.qbk] [include macro_reference.qbk]
[include build_time.qbk]
[include cstdint.qbk] [include cstdint.qbk]
[include guidelines.qbk] [include guidelines.qbk]
[include rationale.qbk] [include rationale.qbk]

View File

@ -7,7 +7,7 @@
<link rel="home" href="../index.html" title="Boost.Config"> <link rel="home" href="../index.html" title="Boost.Config">
<link rel="up" href="../index.html" title="Boost.Config"> <link rel="up" href="../index.html" title="Boost.Config">
<link rel="prev" href="../index.html" title="Boost.Config"> <link rel="prev" href="../index.html" title="Boost.Config">
<link rel="next" href="cstdint.html" title="Standard Integer Types"> <link rel="next" href="build_config.html" title="Build Time Configuration">
</head> </head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr> <table cellpadding="2" width="100%"><tr>
@ -20,7 +20,7 @@
</tr></table> </tr></table>
<hr> <hr>
<div class="spirit-nav"> <div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cstdint.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> <a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="build_config.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div> </div>
<div class="section"> <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both"> <div class="titlepage"><div><div><h2 class="title" style="clear: both">
@ -5613,7 +5613,7 @@
</tr></table> </tr></table>
<hr> <hr>
<div class="spirit-nav"> <div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cstdint.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> <a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="build_config.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div> </div>
</body> </body>
</html> </html>

View File

@ -0,0 +1,144 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Build Time Configuration</title>
<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="Boost.Config">
<link rel="up" href="../index.html" title="Boost.Config">
<link rel="prev" href="boost_macro_reference.html" title="Boost Macro Reference">
<link rel="next" href="cstdint.html" title="Standard Integer Types">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="boost_macro_reference.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cstdint.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="boost_config.build_config"></a><a class="link" href="build_config.html" title="Build Time Configuration">Build Time Configuration</a>
</h2></div></div></div>
<p>
There are times when you want to control whether a build target gets built
or not, based on what features the compiler supports. For example, suppose
you have a test file "test_constexpr_128.cpp" which requires three
key features in order to build:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
The <code class="computeroutput"><span class="keyword">constexpr</span></code> keyword as detected
by BOOST_NO_CXX11_CONSTEXPR.
</li>
<li class="listitem">
User defined literals, as detected by BOOST_NO_CXX11_USER_DEFINED_LITERALS.
</li>
<li class="listitem">
The <code class="computeroutput"><span class="identifier">__int128</span></code> data type,
as detected by BOOST_HAS_INT128.
</li>
</ul></div>
<p>
Clearly we know that if these features are not supported by the compiler, then
there's simply no point in even trying to build the test program. The main
advantages being:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
Faster compile times - build configuration uses lightweight tests the results
of which are also cached.
</li>
<li class="listitem">
Less noise in build output - there's no reason to be faced with pages of
template instantiation backtrace if we know the file can never compile
anyway.
</li>
<li class="listitem">
Less noise in the online test results - the test will show up as blank,
rather than as a fail in the online test matrix.
</li>
<li class="listitem">
A better experience for end users building all of Boost, if those libraries
which can not be built for the current target compiler are simply skipped,
rather than generating pages of error output.
</li>
</ul></div>
<p>
Returning to our example, the test case is probably executed in it's Jamfile
via the "run" rule:
</p>
<pre class="programlisting"><span class="identifier">run</span> <span class="identifier">test_constexpr_128</span><span class="special">.</span><span class="identifier">cpp</span> <span class="special">;</span>
</pre>
<p>
We now need to make this target conditional on the necessary features. We can
do that by first importing the necessary rule at the start of the Jamfile:
</p>
<pre class="programlisting"><span class="identifier">import</span> <span class="identifier">path</span><span class="special">-</span><span class="identifier">to</span><span class="special">-</span><span class="identifier">config</span><span class="special">-</span><span class="identifier">lib</span><span class="special">/</span><span class="identifier">checks</span><span class="special">/</span><span class="identifier">config</span> <span class="special">:</span> <span class="identifier">requires</span> <span class="special">;</span>
</pre>
<p>
Assuming that the test case is in the usual directory:
</p>
<pre class="programlisting"><span class="identifier">libs</span><span class="special">/</span><span class="identifier">yourlib</span><span class="special">/</span><span class="identifier">test</span>
</pre>
<p>
then the import rule will actually be:
</p>
<pre class="programlisting"><span class="identifier">import</span> <span class="special">../../</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">checks</span><span class="special">/</span><span class="identifier">config</span> <span class="special">:</span> <span class="identifier">requires</span> <span class="special">;</span>
</pre>
<p>
Then add a "requires" rule invocation to the requirements section
of the target:
</p>
<pre class="programlisting"><span class="identifier">run</span> <span class="identifier">test_constexpr_128</span><span class="special">.</span><span class="identifier">cpp</span>
<span class="special">:</span> <span class="special">:</span> <span class="special">:</span> <span class="special">#</span><span class="identifier">requirements</span><span class="special">:</span>
<span class="special">[</span> <span class="identifier">requires</span> <span class="identifier">cxx11_constexpr</span> <span class="identifier">cxx11_user_defined_literals</span> <span class="identifier">int128</span> <span class="special">]</span> <span class="special">;</span>
</pre>
<p>
Notice that multiple arguments can be added to the requires rule, and that
these are always the same as the Boost.Config macro name, but in lower case
and with the <span class="emphasis"><em>boost_no_</em></span> or <span class="emphasis"><em>boost_has_</em></span>
prefix removed.
</p>
<p>
When building the above example, you will see at the start of the build process
the results of the configuration, for example GCC in C++11 mode gives:
</p>
<pre class="programlisting"><span class="special">-</span> <span class="identifier">Boost</span><span class="special">.</span><span class="identifier">Config</span> <span class="identifier">Feature</span> <span class="identifier">Check</span><span class="special">:</span> <span class="identifier">int128</span> <span class="special">:</span> <span class="identifier">yes</span>
<span class="special">-</span> <span class="identifier">Boost</span><span class="special">.</span><span class="identifier">Config</span> <span class="identifier">Feature</span> <span class="identifier">Check</span><span class="special">:</span> <span class="identifier">cxx11_constexpr</span> <span class="special">:</span> <span class="identifier">yes</span>
<span class="special">-</span> <span class="identifier">Boost</span><span class="special">.</span><span class="identifier">Config</span> <span class="identifier">Feature</span> <span class="identifier">Check</span><span class="special">:</span> <span class="identifier">cxx11_user_defined_literals</span> <span class="special">:</span> <span class="identifier">yes</span>
</pre>
<p>
That's all there is to this handy feature, should at any time you be unsure
of the feature-test names you can pass to the "requires" rule, then
search for the Boost.Config macro of interest in libs/config/checks/Jamfiles.v2,
and the name of the feature check will follow it.
</p>
<p>
And finally, this feature is built around the Boost.Build built in rule <span class="emphasis"><em>check-target-builds</em></span>
which can be used to perform more generalized build-time feature testing. The
checks in this library are provided as a convenient shorthand without the need
for you to write the test cases yourself.
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2001-2007 Beman Dawes, Vesa Karvonen, John
Maddock<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="boost_macro_reference.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="cstdint.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> <meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="Boost.Config"> <link rel="home" href="../index.html" title="Boost.Config">
<link rel="up" href="../index.html" title="Boost.Config"> <link rel="up" href="../index.html" title="Boost.Config">
<link rel="prev" href="boost_macro_reference.html" title="Boost Macro Reference"> <link rel="prev" href="build_config.html" title="Build Time Configuration">
<link rel="next" href="guidelines_for_boost_authors.html" title="Guidelines for Boost Authors"> <link rel="next" href="guidelines_for_boost_authors.html" title="Guidelines for Boost Authors">
</head> </head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@ -20,7 +20,7 @@
</tr></table> </tr></table>
<hr> <hr>
<div class="spirit-nav"> <div class="spirit-nav">
<a accesskey="p" href="boost_macro_reference.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="guidelines_for_boost_authors.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> <a accesskey="p" href="build_config.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="guidelines_for_boost_authors.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div> </div>
<div class="section"> <div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both"> <div class="titlepage"><div><div><h2 class="title" style="clear: both">
@ -283,7 +283,7 @@
</tr></table> </tr></table>
<hr> <hr>
<div class="spirit-nav"> <div class="spirit-nav">
<a accesskey="p" href="boost_macro_reference.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="guidelines_for_boost_authors.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> <a accesskey="p" href="build_config.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="guidelines_for_boost_authors.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div> </div>
</body> </body>
</html> </html>

View File

@ -77,6 +77,7 @@
<dt><span class="section"><a href="boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code">Macros <dt><span class="section"><a href="boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code">Macros
for libraries with separate source code</a></span></dt> for libraries with separate source code</a></span></dt>
</dl></dd> </dl></dd>
<dt><span class="section"><a href="boost_config/build_config.html">Build Time Configuration</a></span></dt>
<dt><span class="section"><a href="boost_config/cstdint.html">Standard Integer Types</a></span></dt> <dt><span class="section"><a href="boost_config/cstdint.html">Standard Integer Types</a></span></dt>
<dd><dl> <dd><dl>
<dt><span class="section"><a href="boost_config/cstdint.html#boost_config.cstdint.overview">Overview</a></span></dt> <dt><span class="section"><a href="boost_config/cstdint.html#boost_config.cstdint.overview">Overview</a></span></dt>
@ -967,7 +968,7 @@
</div> </div>
</div> </div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"><p><small>Last revised: June 01, 2014 at 09:50:01 GMT</small></p></td> <td align="left"><p><small>Last revised: June 05, 2014 at 17:41:22 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td> <td align="right"><div class="copyright-footer"></div></td>
</tr></table> </tr></table>
<hr> <hr>

View File

@ -15,6 +15,7 @@ project
import modules ; import modules ;
import ../checks/config : requires ;
local is_unix = [ modules.peek : UNIX ] ; local is_unix = [ modules.peek : UNIX ] ;
@ -69,6 +70,7 @@ test-suite config
[ run cstdint_test.cpp : : : <warnings>all <toolset>gcc:<cxxflags>"-Wno-long-long -Wextra" <toolset>darwin:<cxxflags>-Wno-long-long ] [ run cstdint_test.cpp : : : <warnings>all <toolset>gcc:<cxxflags>"-Wno-long-long -Wextra" <toolset>darwin:<cxxflags>-Wno-long-long ]
[ run cstdint_test2.cpp : : : <warnings>all <toolset>gcc:<cxxflags>"-Wno-long-long -Wextra" <toolset>darwin:<cxxflags>-Wno-long-long ] [ run cstdint_test2.cpp : : : <warnings>all <toolset>gcc:<cxxflags>"-Wno-long-long -Wextra" <toolset>darwin:<cxxflags>-Wno-long-long ]
[ compile cstdint_include_test.cpp : <warnings>all <toolset>gcc:<cxxflags>-Wextra ] [ compile cstdint_include_test.cpp : <warnings>all <toolset>gcc:<cxxflags>-Wextra ]
[ run config_build_check.cpp : : : [ requires int128 cxx11_constexpr cxx11_user_defined_literals ] ]
; ;
obj has_clang_implicit_fallthrough : cmd_line_check.cpp : obj has_clang_implicit_fallthrough : cmd_line_check.cpp :

View File

@ -1,7 +1,7 @@
# #
# Regression test Jamfile for boost configuration setup. # Regression test Jamfile for boost configuration setup.
# *** DO NOT EDIT THIS FILE BY HAND *** # *** DO NOT EDIT THIS FILE BY HAND ***
# This file was automatically generated on Wed May 28 17:13:04 2014 # This file was automatically generated on Thu Jun 05 18:54:37 2014
# by libs/config/tools/generate.cpp # by libs/config/tools/generate.cpp
# Copyright John Maddock. # Copyright John Maddock.
# Use, modification and distribution are subject to the # Use, modification and distribution are subject to the

View File

@ -0,0 +1,18 @@
// Copyright John Maddock 2014.
// Use, modification and distribution are subject to 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)
// See http://www.boost.org/libs/config for the most recent version.//
// Revision $Id$
//
# include "../test/boost_has_int128.ipp"
# include "../test/boost_no_constexpr.ipp"
# include "../test/boost_no_cxx11_user_lit.ipp"
int main( int, char *[] )
{
return boost_has_int128::test() || boost_no_cxx11_constexpr::test() || boost_no_cxx11_user_defined_literals::test();
}

View File

@ -1119,6 +1119,13 @@ void print_boost_macros()
// END GENERATED BLOCK // END GENERATED BLOCK
PRINT_MACRO(BOOST_INTEL); PRINT_MACRO(BOOST_INTEL);

View File

@ -1,4 +1,4 @@
// This file was automatically generated on Wed May 28 17:13:04 2014 // This file was automatically generated on Thu Jun 05 18:54:37 2014
// by libs/config/tools/generate.cpp // by libs/config/tools/generate.cpp
// Copyright John Maddock 2002-4. // Copyright John Maddock 2002-4.
// Use, modification and distribution are subject to the // Use, modification and distribution are subject to the

View File

@ -38,6 +38,8 @@ std::stringstream config_test1a;
std::stringstream config_test2; std::stringstream config_test2;
std::stringstream jamfile; std::stringstream jamfile;
std::stringstream jamfile_v2; std::stringstream jamfile_v2;
std::stringstream build_config_test;
std::stringstream build_config_jamfile;
std::set<std::string> macro_list; std::set<std::string> macro_list;
@ -184,6 +186,31 @@ void write_test_file(const fs::path& file,
} }
} }
void write_build_tests()
{
fs::ofstream ofs(config_path / ".." / "checks" / "test_case.cpp");
time_t t = std::time(0);
ofs << "// This file was automatically generated on " << std::ctime(&t);
ofs << "// by libs/config/tools/generate.cpp\n" << copyright << std::endl;
ofs << build_config_test.str() << std::endl;
ofs << "int main( int, char *[] )\n{\n" << " return test::test();\n}\n\n";
}
void write_build_check_jamfile()
{
fs::ofstream ofs(config_path / ".." / "checks" / "Jamfile.v2");
time_t t = std::time(0);
ofs << "#\n# *** DO NOT EDIT THIS FILE BY HAND ***\n"
"# This file was automatically generated on " << std::ctime(&t);
ofs << "# by libs/config/tools/generate.cpp\n"
"# Copyright John Maddock.\n"
"# Use, modification and distribution are subject to the \n"
"# Boost Software License, Version 1.0. (See accompanying file \n"
"# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n\n"
"import modules ;\nimport path ; \n\n";
ofs << build_config_jamfile.str() << std::endl;
}
void process_ipp_file(const fs::path& file, bool positive_test) void process_ipp_file(const fs::path& file, bool positive_test)
{ {
std::cout << "Info: Scanning file: " << file.string() << std::endl; std::cout << "Info: Scanning file: " << file.string() << std::endl;
@ -250,6 +277,15 @@ void process_ipp_file(const fs::path& file, bool positive_test)
"[ run ../" << positive_file.leaf().string() << " ]\n" "[ run ../" << positive_file.leaf().string() << " ]\n"
"[ compile-fail ../" << negative_file.leaf().string() << " ] ;\n"; "[ compile-fail ../" << negative_file.leaf().string() << " ] ;\n";
// Generate data for the Build-checks test file:
build_config_test << "#ifdef TEST_" << macro_name << std::endl;
build_config_test << "# include \"../test/" << file.leaf().string() << "\"\n";
build_config_test << "namespace test = " << namespace_name << ";\n#endif\n";
// Generate data for the build-checks Jamfile:
static const boost::regex feature_regex("boost_(?:no|has)_(.*)");
std::string feature_name = boost::regex_replace(namespace_name, feature_regex, "\\1");
build_config_jamfile << "run test_case.cpp : : : <define>TEST_" << macro_name << " : " << feature_name << " ;\nexplicit " << feature_name << " ;\n";
} }
int cpp_main(int argc, char* argv[]) int cpp_main(int argc, char* argv[])
@ -285,6 +321,8 @@ int cpp_main(int argc, char* argv[])
write_config_test(); write_config_test();
write_jamfile_v2(); write_jamfile_v2();
write_config_info(); write_config_info();
write_build_tests();
write_build_check_jamfile();
return 0; return 0;
} }