ossrv_pub/boost_apis/boost/wave/wave_config.hpp
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 /*=============================================================================
       
     2     Boost.Wave: A Standard compliant C++ preprocessor library
       
     3 
       
     4     Global application configuration
       
     5     
       
     6     http://www.boost.org/
       
     7 
       
     8     Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
       
     9     Software License, Version 1.0. (See accompanying file
       
    10     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       
    11 =============================================================================*/
       
    12 
       
    13 #if !defined(WAVE_CONFIG_HPP_F143F90A_A63F_4B27_AC41_9CA4F14F538D_INCLUDED)
       
    14 #define WAVE_CONFIG_HPP_F143F90A_A63F_4B27_AC41_9CA4F14F538D_INCLUDED
       
    15 
       
    16 #include <boost/config.hpp>
       
    17 #include <boost/detail/workaround.hpp>
       
    18 #include <boost/version.hpp>
       
    19 #include <boost/spirit/version.hpp>
       
    20 #include <boost/wave/wave_version.hpp>
       
    21 
       
    22 ///////////////////////////////////////////////////////////////////////////////
       
    23 //  Define the maximal include nesting depth allowed. If this value isn't 
       
    24 //  defined it defaults to 1024
       
    25 //
       
    26 //  To define a new initial include nesting define the following constant 
       
    27 //  before including this file.
       
    28 //
       
    29 #if !defined(BOOST_WAVE_MAX_INCLUDE_LEVEL_DEPTH)
       
    30 #define BOOST_WAVE_MAX_INCLUDE_LEVEL_DEPTH 1024
       
    31 #endif
       
    32 
       
    33 ///////////////////////////////////////////////////////////////////////////////
       
    34 //  Decide, whether to support variadics and placemarkers
       
    35 //
       
    36 //  To implement support variadics and placemarkers define the following to 
       
    37 //  something not equal to zero.
       
    38 //
       
    39 #if !defined(BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS)
       
    40 #define BOOST_WAVE_SUPPORT_VARIADICS_PLACEMARKERS 1
       
    41 #endif
       
    42 
       
    43 ///////////////////////////////////////////////////////////////////////////////
       
    44 //  Decide, whether to implement a #warning directive as an extension to the 
       
    45 //  C++ Standard (same as #error, but emits a warning, not an error)
       
    46 //
       
    47 //  To disable the implementation of #warning directives, define the following 
       
    48 //  constant as zero before including this file.
       
    49 //
       
    50 #if !defined(BOOST_WAVE_SUPPORT_WARNING_DIRECTIVE)
       
    51 #define BOOST_WAVE_SUPPORT_WARNING_DIRECTIVE 1
       
    52 #endif
       
    53 
       
    54 ///////////////////////////////////////////////////////////////////////////////
       
    55 //  Decide, whether to implement #pragma once 
       
    56 //
       
    57 //  To disable the implementation of #pragma once, define the following 
       
    58 //  constant as zero before including this file.
       
    59 //
       
    60 #if !defined(BOOST_WAVE_SUPPORT_PRAGMA_ONCE)
       
    61 #define BOOST_WAVE_SUPPORT_PRAGMA_ONCE 1
       
    62 #endif
       
    63 
       
    64 ///////////////////////////////////////////////////////////////////////////////
       
    65 //  Decide, whether to implement #pragma message("") 
       
    66 //
       
    67 //  To disable the implementation of #pragma message(""), define the following 
       
    68 //  constant as zero before including this file.
       
    69 //
       
    70 #if !defined(BOOST_WAVE_SUPPORT_PRAGMA_MESSAGE)
       
    71 #define BOOST_WAVE_SUPPORT_PRAGMA_MESSAGE 1
       
    72 #endif
       
    73 
       
    74 ///////////////////////////////////////////////////////////////////////////////
       
    75 //  Decide, whether to implement #include_next
       
    76 //  Please note, that this is an extension to the C++ Standard.
       
    77 //
       
    78 //  To disable the implementation of #include_next, define the following 
       
    79 //  constant as zero before including this file.
       
    80 //
       
    81 #if !defined(BOOST_WAVE_SUPPORT_INCLUDE_NEXT)
       
    82 #define BOOST_WAVE_SUPPORT_INCLUDE_NEXT 1
       
    83 #endif
       
    84 
       
    85 ///////////////////////////////////////////////////////////////////////////////
       
    86 //  Undefine the following, to enable some MS specific language extensions:
       
    87 //  __int8, __int16, __int32, __int64, __based, __declspec, __cdecl, 
       
    88 //  __fastcall, __stdcall, __try, __except, __finally, __leave, __inline,
       
    89 //  __asm, #region, #endregion
       
    90 //
       
    91 //  Note: By default this is enabled for Windows based systems, otherwise it's 
       
    92 //        disabled.
       
    93 #if !defined(BOOST_WAVE_SUPPORT_MS_EXTENSIONS)
       
    94 #if defined(BOOST_WINDOWS)
       
    95 #define BOOST_WAVE_SUPPORT_MS_EXTENSIONS 1
       
    96 #else
       
    97 #define BOOST_WAVE_SUPPORT_MS_EXTENSIONS 0
       
    98 #endif
       
    99 #endif
       
   100 
       
   101 ///////////////////////////////////////////////////////////////////////////////
       
   102 //  Allow the message body of the #error and #warning directives to be 
       
   103 //  preprocessed before the diagnostic is issued.
       
   104 //
       
   105 //  To disable preprocessing of the body of #error and #warning directives, 
       
   106 //  define the following constant as zero before including this file.
       
   107 //
       
   108 #if !defined(BOOST_WAVE_PREPROCESS_ERROR_MESSAGE_BODY)
       
   109 #define BOOST_WAVE_PREPROCESS_ERROR_MESSAGE_BODY 1
       
   110 #endif
       
   111 
       
   112 ///////////////////////////////////////////////////////////////////////////////
       
   113 //  Allow the #pragma directives to be returned to the caller (optionally after 
       
   114 //  preprocessing the body) 
       
   115 //
       
   116 //  To disable the library to emit unknown #pragma directives, define the 
       
   117 //  following constant as zero before including this file.
       
   118 //
       
   119 #if !defined(BOOST_WAVE_EMIT_PRAGMA_DIRECTIVES)
       
   120 #define BOOST_WAVE_EMIT_PRAGMA_DIRECTIVES 1
       
   121 #endif
       
   122 
       
   123 ///////////////////////////////////////////////////////////////////////////////
       
   124 //  Allow the body of a #pragma directive to be preprocessed before the 
       
   125 //  directive is returned to the caller.
       
   126 //
       
   127 //  To disable the preprocessing of the body of #pragma directives, define the 
       
   128 //  following constant as zero before including this file.
       
   129 //
       
   130 #if !defined(BOOST_WAVE_PREPROCESS_PRAGMA_BODY)
       
   131 #define BOOST_WAVE_PREPROCESS_PRAGMA_BODY 1
       
   132 #endif
       
   133 
       
   134 ///////////////////////////////////////////////////////////////////////////////
       
   135 //  Allow to define macros with the command line syntax (-DMACRO(x)=definition)
       
   136 //
       
   137 //  To disable the the possibility to define macros based on the command line 
       
   138 //  syntax, define the following constant as zero before including this file.
       
   139 //
       
   140 #if !defined(BOOST_WAVE_ENABLE_COMMANDLINE_MACROS)
       
   141 #define BOOST_WAVE_ENABLE_COMMANDLINE_MACROS 1
       
   142 #endif
       
   143 
       
   144 ///////////////////////////////////////////////////////////////////////////////
       
   145 //  Define the pragma keyword to be used by the library to recognize its own
       
   146 //  pragma's. If nothing else is defined, then 'wave' will be used as the 
       
   147 //  default keyword, i.e. the library recognizes all 
       
   148 //
       
   149 //      #pragma wave option [(argument)]
       
   150 //
       
   151 //  and dispatches the handling to the interpret_pragma() preprocessing hook 
       
   152 //  function (see file: preprocessing_hooks.hpp). The arguments part of the
       
   153 //  pragma is optional.
       
   154 //  The BOOST_WAVE_PRAGMA_KEYWORD constant needs to be defined to
       
   155 //  resolve as a string literal value.
       
   156 #if !defined(BOOST_WAVE_PRAGMA_KEYWORD)
       
   157 #define BOOST_WAVE_PRAGMA_KEYWORD "wave"
       
   158 #endif 
       
   159 
       
   160 ///////////////////////////////////////////////////////////////////////////////
       
   161 //  Define the string type to be used to store the token values and the file 
       
   162 //  names inside a file_position template class
       
   163 //
       
   164 #if !defined(BOOST_WAVE_STRINGTYPE)
       
   165 
       
   166 #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || \
       
   167     BOOST_WORKAROUND(__MWERKS__, < 0x3200) || \
       
   168     (defined(__DECCXX) && defined(__alpha)) || \
       
   169     defined(BOOST_WAVE_STRINGTYPE_USE_STDSTRING)
       
   170     
       
   171 // VC7 isn't able to compile the flex_string class, fall back to std::string 
       
   172 // CW up to 8.3 chokes as well *sigh*
       
   173 // Tru64/CXX has linker problems when using flex_string
       
   174 #define BOOST_WAVE_STRINGTYPE std::string
       
   175 #if !defined(BOOST_WAVE_STRINGTYPE_USE_STDSTRING)
       
   176 #define BOOST_WAVE_STRINGTYPE_USE_STDSTRING 1
       
   177 #endif
       
   178 
       
   179 #else
       
   180 // use the following, if you have a fast std::allocator<char>
       
   181 #define BOOST_WAVE_STRINGTYPE boost::wave::util::flex_string< \
       
   182         char, std::char_traits<char>, std::allocator<char>, \
       
   183         boost::wave::util::CowString</*char, */\
       
   184             boost::wave::util::AllocatorStringStorage<char> \
       
   185         > \
       
   186     > \
       
   187     /**/
       
   188     
       
   189 /* #define BOOST_WAVE_STRINGTYPE boost::wave::util::flex_string< \
       
   190         char, std::char_traits<char>, boost::fast_pool_allocator<char>, \
       
   191         boost::wave::util::CowString<char, \
       
   192             boost::wave::util::AllocatorStringStorage<char, \
       
   193               boost::fast_pool_allocator<char> \
       
   194             > \
       
   195         > \
       
   196     > \
       
   197 */    /**/
       
   198     
       
   199 //  This include is needed for the flex_string class used in the 
       
   200 //  BOOST_WAVE_STRINGTYPE above.
       
   201 #include <boost/wave/util/flex_string.hpp>
       
   202 
       
   203 //  This include is needed for the boost::fast_allocator class used in the 
       
   204 //  BOOST_WAVE_STRINGTYPE above.
       
   205 //  Configure Boost.Pool thread support (for now: no thread support at all)
       
   206 //#define BOOST_NO_MT
       
   207 //#include <boost/pool/pool_alloc.hpp>
       
   208 
       
   209 // Use the following, if you want to incorporate Maxim Yegorushkin's
       
   210 // const_string library (http://sourceforge.net/projects/conststring/), which
       
   211 // may be even faster, than using the flex_string class from above
       
   212 //#define BOOST_WAVE_STRINGTYPE boost::const_string<char>
       
   213 //
       
   214 //#include <boost/const_string/const_string.hpp>
       
   215 //#include <boost/const_string/io.hpp>
       
   216 //#include <boost/const_string/concatenation.hpp>
       
   217 
       
   218 #endif // BOOST_WORKAROUND(_MSC_VER, <= 1300)
       
   219 #endif
       
   220 
       
   221 ///////////////////////////////////////////////////////////////////////////////
       
   222 //  The following definition forces the Spirit tree code to use list's instead
       
   223 //  of vectors, which may be more efficient on some platforms
       
   224 // #define BOOST_SPIRIT_USE_LIST_FOR_TREES
       
   225 
       
   226 ///////////////////////////////////////////////////////////////////////////////
       
   227 //  The following definition forces the Spirit tree code to use boost pool 
       
   228 //  allocators in stead of the std::allocator for the vector/list's.
       
   229 // #define BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES
       
   230 
       
   231 ///////////////////////////////////////////////////////////////////////////////
       
   232 //  Uncomment the following, if you need debug output, the 
       
   233 //  BOOST_SPIRIT_DEBUG_FLAGS_CPP constants below help to fine control the 
       
   234 //  amount of the generated debug output.
       
   235 //#define BOOST_SPIRIT_DEBUG
       
   236 
       
   237 ///////////////////////////////////////////////////////////////////////////////
       
   238 //  Debug flags for the Wave library, possible flags specified below.
       
   239 //
       
   240 //  Note: These flags take effect only if the BOOST_SPIRIT_DEBUG constant
       
   241 //        above is defined as well.
       
   242 #define BOOST_SPIRIT_DEBUG_FLAGS_CPP_GRAMMAR            0x0001
       
   243 #define BOOST_SPIRIT_DEBUG_FLAGS_TIME_CONVERSION        0x0002
       
   244 #define BOOST_SPIRIT_DEBUG_FLAGS_CPP_EXPR_GRAMMAR       0x0004
       
   245 #define BOOST_SPIRIT_DEBUG_FLAGS_INTLIT_GRAMMAR         0x0008
       
   246 #define BOOST_SPIRIT_DEBUG_FLAGS_CHLIT_GRAMMAR          0x0010
       
   247 #define BOOST_SPIRIT_DEBUG_FLAGS_DEFINED_GRAMMAR        0x0020
       
   248 #define BOOST_SPIRIT_DEBUG_FLAGS_PREDEF_MACROS_GRAMMAR  0x0040
       
   249 
       
   250 #if !defined(BOOST_SPIRIT_DEBUG_FLAGS_CPP)
       
   251 #define BOOST_SPIRIT_DEBUG_FLAGS_CPP    0    // default is no debugging
       
   252 #endif 
       
   253 
       
   254 ///////////////////////////////////////////////////////////////////////////////
       
   255 //
       
   256 //  For all recognized preprocessor statements the output parse trees 
       
   257 //  formatted as xml are printed. The formatted parse trees are streamed to the 
       
   258 //  std::ostream defined by the WAVE_DUMP_PARSE_TREE_OUT constant.
       
   259 //
       
   260 //  To enable the output of these parse trees, define the following constant 
       
   261 //  as zero something not equal to zero before including this file. 
       
   262 //
       
   263 #if !defined(BOOST_WAVE_DUMP_PARSE_TREE)
       
   264 #define BOOST_WAVE_DUMP_PARSE_TREE 0
       
   265 #endif
       
   266 #if BOOST_WAVE_DUMP_PARSE_TREE != 0 && !defined(BOOST_WAVE_DUMP_PARSE_TREE_OUT)
       
   267 #define BOOST_WAVE_DUMP_PARSE_TREE_OUT std::cerr
       
   268 #endif
       
   269 
       
   270 ///////////////////////////////////////////////////////////////////////////////
       
   271 //
       
   272 //  For all #if and #elif directives the preprocessed expressions are printed.
       
   273 //  These expressions are streamed to the std::ostream defined by the 
       
   274 //  BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS_OUT constant.
       
   275 //
       
   276 //  To enable the output of the preprocessed expressions, define the following 
       
   277 //  constant as something not equal to zero before including this file.
       
   278 //
       
   279 #if !defined(BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS)
       
   280 #define BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS 0
       
   281 #endif
       
   282 #if BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS != 0 && \
       
   283    !defined(BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS_OUT)
       
   284 #define BOOST_WAVE_DUMP_CONDITIONAL_EXPRESSIONS_OUT std::cerr
       
   285 #endif
       
   286 
       
   287 ///////////////////////////////////////////////////////////////////////////////
       
   288 //  Decide, whether to use the separate compilation model for the instantiation 
       
   289 //  of the C++ lexer objects.
       
   290 //
       
   291 //  If this is defined, you should explicitly instantiate the C++ lexer
       
   292 //  template with the correct parameters in a separate compilation unit of
       
   293 //  your program (see the file instantiate_re2c_lexer.cpp). 
       
   294 //
       
   295 //  To use the lexer inclusion model, define the following constant as 
       
   296 //  something not equal to zero before including this file.
       
   297 //
       
   298 #if !defined(BOOST_WAVE_SEPARATE_LEXER_INSTANTIATION)
       
   299 #define BOOST_WAVE_SEPARATE_LEXER_INSTANTIATION 1
       
   300 #endif
       
   301 
       
   302 ///////////////////////////////////////////////////////////////////////////////
       
   303 //  Decide, whether to use the separate compilation model for the instantiation 
       
   304 //  of the grammar objects.
       
   305 //
       
   306 //  If this is defined, you should explicitly instantiate the grammar
       
   307 //  templates with the correct parameters in a separate compilation unit of
       
   308 //  your program (see the files instantiate_cpp_grammar.cpp et.al.). 
       
   309 //
       
   310 //  To use the grammar inclusion model, define the following constant as 
       
   311 //  something not equal to zero before including this file.
       
   312 //
       
   313 #if !defined(BOOST_WAVE_SEPARATE_GRAMMAR_INSTANTIATION)
       
   314 #define BOOST_WAVE_SEPARATE_GRAMMAR_INSTANTIATION 1
       
   315 #endif
       
   316 
       
   317 ///////////////////////////////////////////////////////////////////////////////
       
   318 //  Decide whether to use a strict C++ lexer.
       
   319 //  
       
   320 //  If this is defined to something != 0, then the C++ lexers recognize the 
       
   321 //  strict C99/C++ basic source character set. If it is not defined or defined 
       
   322 //  to zero, the C++ lexers recognize the '$' character as part of identifiers.
       
   323 //
       
   324 //  The default is to recognize the '$' character as part of identifiers.
       
   325 //
       
   326 #if !defined(BOOST_WAVE_USE_STRICT_LEXER)
       
   327 #define BOOST_WAVE_USE_STRICT_LEXER 0
       
   328 #endif
       
   329 
       
   330 ///////////////////////////////////////////////////////////////////////////////
       
   331 //  Decide, whether the serialization of the wave::context class should be 
       
   332 //  supported
       
   333 //
       
   334 //  If this is defined to something not equal to zero the generated code will
       
   335 //  expose routines allowing to store and reload the internal state of the 
       
   336 //  wave::context object.
       
   337 //
       
   338 //  To enable the availability of the serialization functionality, define the 
       
   339 //  following constant as something not equal to zero before including this file.
       
   340 //
       
   341 #if !defined(BOOST_WAVE_SERIALIZATION)
       
   342 #define BOOST_WAVE_SERIALIZATION 0
       
   343 #endif
       
   344 
       
   345 ///////////////////////////////////////////////////////////////////////////////
       
   346 //  configure Boost.Pool thread support (for now: no thread support at all)
       
   347 #if !defined(BOOST_NO_MT)
       
   348 #define BOOST_NO_MT
       
   349 #endif // !defined(BOOST_NO_MT)
       
   350 
       
   351 //#if !defined(BOOST_DISABLE_THREADS)
       
   352 //#define BOOST_DISABLE_THREADS
       
   353 //#endif // !defined(BOOST_DISABLE_THREADS)
       
   354 
       
   355 ///////////////////////////////////////////////////////////////////////////////
       
   356 //  Wave needs at least 4 parameters for phoenix actors
       
   357 #if !defined(PHOENIX_LIMIT)
       
   358 #define PHOENIX_LIMIT 6
       
   359 #endif
       
   360 #if PHOENIX_LIMIT < 6
       
   361 #error "Boost.Wave: the constant PHOENIX_LIMIT must be at least defined to 4" \
       
   362        " to compile the library."
       
   363 #endif
       
   364 
       
   365 ///////////////////////////////////////////////////////////////////////////////
       
   366 //  Set up dll import/export options
       
   367 #if defined(BOOST_HAS_DECLSPEC) && \
       
   368     (defined(BOOST_WAVE_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && \
       
   369     !defined(BOOST_WAVE_STATIC_LINK)
       
   370     
       
   371 #if defined(BOOST_WAVE_SOURCE)
       
   372 #define BOOST_WAVE_DECL __declspec(dllexport)
       
   373 #define BOOST_WAVE_BUILD_DLL
       
   374 #else
       
   375 #define BOOST_WAVE_DECL __declspec(dllimport)
       
   376 #endif
       
   377 
       
   378 #endif // building a shared library
       
   379 
       
   380 #ifndef BOOST_WAVE_DECL
       
   381 #define BOOST_WAVE_DECL
       
   382 #endif
       
   383 
       
   384 ///////////////////////////////////////////////////////////////////////////////
       
   385 //  Auto library naming
       
   386 #if BOOST_VERSION >= 103100   
       
   387 // auto link features work beginning from Boost V1.31.0
       
   388 #if !defined(BOOST_WAVE_SOURCE) && !defined(BOOST_ALL_NO_LIB) && \
       
   389     !defined(BOOST_WAVE_NO_LIB)
       
   390 
       
   391 #define BOOST_LIB_NAME boost_wave
       
   392 
       
   393 // tell the auto-link code to select a dll when required:
       
   394 #if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_WAVE_DYN_LINK)
       
   395 #define BOOST_DYN_LINK
       
   396 #endif
       
   397 
       
   398 #include <boost/config/auto_link.hpp>
       
   399 
       
   400 #endif  // auto-linking disabled
       
   401 #endif  // BOOST_VERSION
       
   402 
       
   403 #endif // !defined(WAVE_CONFIG_HPP_F143F90A_A63F_4B27_AC41_9CA4F14F538D_INCLUDED)