os/ossrv/ossrv_pub/boost_apis/boost/regex/config.hpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 /*
     2  *
     3  * Copyright (c) 1998-2002
     4  * John Maddock
     5  *
     6  * Use, modification and distribution are subject to the
     7  * Boost Software License, Version 1.0. (See accompanying file
     8  * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
     9  *
    10  */
    11 
    12  /*
    13   *   LOCATION:    see http://www.boost.org for most recent version.
    14   *   FILE         config.hpp
    15   *   VERSION      see <boost/version.hpp>
    16   *   DESCRIPTION: regex extended config setup.
    17   */
    18 
    19 #ifndef BOOST_REGEX_CONFIG_HPP
    20 #define BOOST_REGEX_CONFIG_HPP
    21 /*
    22  * Borland C++ Fix/error check
    23  * this has to go *before* we include any std lib headers:
    24  */
    25 #if defined(__BORLANDC__)
    26 #  include <boost/regex/config/borland.hpp>
    27 #endif
    28 
    29 /*****************************************************************************
    30  *
    31  *  Include all the headers we need here:
    32  *
    33  ****************************************************************************/
    34 
    35 #ifdef __cplusplus
    36 
    37 #  ifndef BOOST_REGEX_USER_CONFIG
    38 #     define BOOST_REGEX_USER_CONFIG <boost/regex/user.hpp>
    39 #  endif
    40 
    41 #  include BOOST_REGEX_USER_CONFIG
    42 
    43 #  include <boost/config.hpp>
    44 
    45 #else
    46    /*
    47     * C build,
    48     * don't include <boost/config.hpp> because that may
    49     * do C++ specific things in future...
    50     */
    51 #  include <stdlib.h>
    52 #  include <stddef.h>
    53 #  ifdef _MSC_VER
    54 #     define BOOST_MSVC _MSC_VER
    55 #  endif
    56 #endif
    57 
    58 /*****************************************************************************
    59  *
    60  *  Boilerplate regex config options:
    61  *
    62  ****************************************************************************/
    63 
    64 /* Obsolete macro, use BOOST_VERSION instead: */
    65 #define BOOST_RE_VERSION 320
    66 
    67 /* fix: */
    68 #if defined(_UNICODE) && !defined(UNICODE)
    69 #define UNICODE
    70 #endif
    71 
    72 /*
    73  * Fix for gcc prior to 3.4: std::ctype<wchar_t> doesn't allow
    74  * masks to be combined, for example:
    75  * std::use_facet<std::ctype<wchar_t> >.is(std::ctype_base::lower|std::ctype_base::upper, L'a');
    76  * returns *false*.
    77  */
    78 #ifdef __GLIBCPP__
    79 #  define BOOST_REGEX_BUGGY_CTYPE_FACET
    80 #endif
    81 
    82 /*
    83  * Intel C++ before 8.0 ends up with unresolved externals unless we turn off
    84  * extern template support:
    85  */
    86 #if defined(BOOST_INTEL) && defined(__cplusplus) && (BOOST_INTEL <= 800)
    87 #  define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
    88 #endif
    89 
    90 /*
    91  * If there isn't good enough wide character support then there will
    92  * be no wide character regular expressions:
    93  */
    94 #if (defined(BOOST_NO_CWCHAR) || defined(BOOST_NO_CWCTYPE) || defined(BOOST_NO_STD_WSTRING))
    95 #  if !defined(BOOST_NO_WREGEX)
    96 #     define BOOST_NO_WREGEX
    97 #  endif
    98 #else
    99 #  if defined(__sgi) && (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))
   100       /* STLPort on IRIX is misconfigured: <cwctype> does not compile
   101        * as a temporary fix include <wctype.h> instead and prevent inclusion
   102        * of STLPort version of <cwctype> */
   103 #     include <wctype.h>
   104 #     define __STLPORT_CWCTYPE
   105 #     define _STLP_CWCTYPE
   106 #  endif
   107 
   108 #ifdef __cplusplus
   109 #  include <boost/regex/config/cwchar.hpp>
   110 #endif
   111 
   112 #endif
   113 
   114 /*
   115  * If Win32 support has been disabled for boost in general, then
   116  * it is for regex in particular:
   117  */
   118 #if defined(BOOST_DISABLE_WIN32) && !defined(BOOST_REGEX_NO_W32)
   119 #  define BOOST_REGEX_NO_W32
   120 #endif
   121 
   122 /* disable our own file-iterators and mapfiles if we can't
   123  * support them: */
   124 #if !defined(BOOST_HAS_DIRENT_H) && !(defined(_WIN32) && !defined(BOOST_REGEX_NO_W32))
   125 #  define BOOST_REGEX_NO_FILEITER
   126 #endif
   127 
   128 /* backwards compatibitity: */
   129 #if defined(BOOST_RE_NO_LIB)
   130 #  define BOOST_REGEX_NO_LIB
   131 #endif
   132 
   133 #if defined(__GNUC__) && (defined(_WIN32) || defined(__CYGWIN__))
   134 /* gcc on win32 has problems if you include <windows.h>
   135    (sporadically generates bad code). */
   136 #  define BOOST_REGEX_NO_W32
   137 #endif
   138 #if defined(__COMO__) && !defined(BOOST_REGEX_NO_W32) && !defined(_MSC_EXTENSIONS)
   139 #  define BOOST_REGEX_NO_W32
   140 #endif
   141 
   142 /*****************************************************************************
   143  *
   144  *  Wide character workarounds:
   145  *
   146  ****************************************************************************/
   147 
   148 /*
   149  * define BOOST_REGEX_HAS_OTHER_WCHAR_T when wchar_t is a native type, but the users
   150  * code may be built with wchar_t as unsigned short: basically when we're building
   151  * with MSVC and the /Zc:wchar_t option we place some extra unsigned short versions
   152  * of the non-inline functions in the library, so that users can still link to the lib,
   153  * irrespective of whether their own code is built with /Zc:wchar_t.
   154  */
   155 #if defined(__cplusplus) && (defined(BOOST_MSVC) || defined(__ICL)) && !defined(BOOST_NO_INTRINSIC_WCHAR_T) && defined(BOOST_WINDOWS) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION)
   156 #  define BOOST_REGEX_HAS_OTHER_WCHAR_T
   157 #  ifdef BOOST_MSVC
   158 #     pragma warning(push)
   159 #     pragma warning(disable : 4251 4231 4660)
   160 #  endif
   161 #  ifdef _DLL
   162 #     include <string>
   163       extern template class __declspec(dllimport) std::basic_string<unsigned short>;
   164 #  endif
   165 #  ifdef BOOST_MSVC
   166 #     pragma warning(pop)
   167 #  endif
   168 #endif
   169 
   170 
   171 /*****************************************************************************
   172  *
   173  *  Set up dll import/export options:
   174  *
   175  ****************************************************************************/
   176 
   177 #if defined(BOOST_HAS_DECLSPEC) && (defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_REGEX_STATIC_LINK)
   178 #  if defined(BOOST_REGEX_SOURCE)
   179 #     define BOOST_REGEX_DECL __declspec(dllexport)
   180 #     define BOOST_REGEX_BUILD_DLL
   181 #  else
   182 #     define BOOST_REGEX_DECL __declspec(dllimport)
   183 #  endif
   184 #endif
   185 
   186 #ifndef BOOST_REGEX_DECL
   187 #  define BOOST_REGEX_DECL
   188 #endif
   189 
   190 #if !defined(BOOST_REGEX_NO_LIB) && !defined(BOOST_REGEX_SOURCE) && !defined(BOOST_ALL_NO_LIB) && defined(__cplusplus)
   191 #  define BOOST_LIB_NAME boost_regex
   192 #  if defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
   193 #     define BOOST_DYN_LINK
   194 #  endif
   195 #  ifdef BOOST_REGEX_DIAG
   196 #     define BOOST_LIB_DIAGNOSTIC
   197 #  endif
   198 #  include <boost/config/auto_link.hpp>
   199 #endif
   200 
   201 /*****************************************************************************
   202  *
   203  *  Set up function call type:
   204  *
   205  ****************************************************************************/
   206 
   207 #if defined(BOOST_MSVC) && (BOOST_MSVC >= 1200) && defined(_MSC_EXTENSIONS)
   208 #if defined(_DEBUG) || defined(__MSVC_RUNTIME_CHECKS) || defined(_MANAGED)
   209 #  define BOOST_REGEX_CALL __cdecl
   210 #else
   211 #  define BOOST_REGEX_CALL __fastcall
   212 #endif
   213 #  define BOOST_REGEX_CCALL __cdecl
   214 #endif
   215 
   216 #if defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32)
   217 #  define BOOST_REGEX_CALL __fastcall
   218 #  define BOOST_REGEX_CCALL __stdcall
   219 #endif
   220 
   221 #ifndef BOOST_REGEX_CALL
   222 #  define BOOST_REGEX_CALL
   223 #endif
   224 #ifndef BOOST_REGEX_CCALL
   225 #define BOOST_REGEX_CCALL
   226 #endif
   227 
   228 /*****************************************************************************
   229  *
   230  *  Set up localisation model:
   231  *
   232  ****************************************************************************/
   233 
   234 /* backwards compatibility: */
   235 #ifdef BOOST_RE_LOCALE_C
   236 #  define BOOST_REGEX_USE_C_LOCALE
   237 #endif
   238 
   239 #ifdef BOOST_RE_LOCALE_CPP
   240 #  define BOOST_REGEX_USE_CPP_LOCALE
   241 #endif
   242 
   243 /* Win32 defaults to native Win32 locale: */
   244 #if defined(_WIN32) && !defined(BOOST_REGEX_USE_WIN32_LOCALE) && !defined(BOOST_REGEX_USE_C_LOCALE) && !defined(BOOST_REGEX_USE_CPP_LOCALE) && !defined(BOOST_REGEX_NO_W32)
   245 #  define BOOST_REGEX_USE_WIN32_LOCALE
   246 #endif
   247 /* otherwise use C++ locale if supported: */
   248 #if !defined(BOOST_REGEX_USE_WIN32_LOCALE) && !defined(BOOST_REGEX_USE_C_LOCALE) && !defined(BOOST_REGEX_USE_CPP_LOCALE) && !defined(BOOST_NO_STD_LOCALE)
   249 #  define BOOST_REGEX_USE_CPP_LOCALE
   250 #endif
   251 /* otherwise use C+ locale: */
   252 #if !defined(BOOST_REGEX_USE_WIN32_LOCALE) && !defined(BOOST_REGEX_USE_C_LOCALE) && !defined(BOOST_REGEX_USE_CPP_LOCALE)
   253 #  define BOOST_REGEX_USE_C_LOCALE
   254 #endif
   255 
   256 #ifndef BOOST_REGEX_MAX_STATE_COUNT
   257 #  define BOOST_REGEX_MAX_STATE_COUNT 100000000
   258 #endif
   259 
   260 
   261 /*****************************************************************************
   262  *
   263  *  Error Handling for exception free compilers:
   264  *
   265  ****************************************************************************/
   266 
   267 #ifdef BOOST_NO_EXCEPTIONS
   268 /*
   269  * If there are no exceptions then we must report critical-errors
   270  * the only way we know how; by terminating.
   271  */
   272 #include <stdexcept>
   273 #include <string>
   274 #include <boost/throw_exception.hpp>
   275 
   276 #  define BOOST_REGEX_NOEH_ASSERT(x)\
   277 if(0 == (x))\
   278 {\
   279    std::string s("Error: critical regex++ failure in: ");\
   280    s.append(#x);\
   281    std::runtime_error e(s);\
   282    boost::throw_exception(e);\
   283 }
   284 #else
   285 /*
   286  * With exceptions then error handling is taken care of and
   287  * there is no need for these checks:
   288  */
   289 #  define BOOST_REGEX_NOEH_ASSERT(x)
   290 #endif
   291 
   292 
   293 /*****************************************************************************
   294  *
   295  *  Stack protection under MS Windows:
   296  *
   297  ****************************************************************************/
   298 
   299 #if !defined(BOOST_REGEX_NO_W32) && !defined(BOOST_REGEX_V3)
   300 #  if(defined(_WIN32) || defined(_WIN64) || defined(_WINCE)) \
   301         && !defined(__GNUC__) \
   302         && !(defined(__BORLANDC__) && (__BORLANDC__ >= 0x600)) \
   303         && !(defined(__MWERKS__) && (__MWERKS__ <= 0x3003))
   304 #     define BOOST_REGEX_HAS_MS_STACK_GUARD
   305 #  endif
   306 #elif defined(BOOST_REGEX_HAS_MS_STACK_GUARD)
   307 #  undef BOOST_REGEX_HAS_MS_STACK_GUARD
   308 #endif
   309 
   310 #if defined(__cplusplus) && defined(BOOST_REGEX_HAS_MS_STACK_GUARD)
   311 
   312 namespace boost{
   313 namespace re_detail{
   314 
   315 BOOST_REGEX_DECL void BOOST_REGEX_CALL reset_stack_guard_page();
   316 
   317 }
   318 }
   319 
   320 #endif
   321 
   322 
   323 /*****************************************************************************
   324  *
   325  *  Algorithm selection and configuration:
   326  *
   327  ****************************************************************************/
   328 
   329 #if !defined(BOOST_REGEX_RECURSIVE) && !defined(BOOST_REGEX_NON_RECURSIVE)
   330 #  if defined(BOOST_REGEX_HAS_MS_STACK_GUARD) && !defined(_STLP_DEBUG) && !defined(__STL_DEBUG) && !(defined(BOOST_MSVC) && (BOOST_MSVC >= 1400))
   331 #     define BOOST_REGEX_RECURSIVE
   332 #  else
   333 #     define BOOST_REGEX_NON_RECURSIVE
   334 #  endif
   335 #endif
   336 
   337 #ifdef BOOST_REGEX_NON_RECURSIVE
   338 #  ifdef BOOST_REGEX_RECURSIVE
   339 #     error "Can't set both BOOST_REGEX_RECURSIVE and BOOST_REGEX_NON_RECURSIVE"
   340 #  endif
   341 #  ifndef BOOST_REGEX_BLOCKSIZE
   342 #     define BOOST_REGEX_BLOCKSIZE 4096
   343 #  endif
   344 #  if BOOST_REGEX_BLOCKSIZE < 512
   345 #     error "BOOST_REGEX_BLOCKSIZE must be at least 512"
   346 #  endif
   347 #  ifndef BOOST_REGEX_MAX_BLOCKS
   348 #     define BOOST_REGEX_MAX_BLOCKS 1024
   349 #  endif
   350 #  ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
   351 #     undef BOOST_REGEX_HAS_MS_STACK_GUARD
   352 #  endif
   353 #  ifndef BOOST_REGEX_MAX_CACHE_BLOCKS
   354 #     define BOOST_REGEX_MAX_CACHE_BLOCKS 16
   355 #  endif
   356 #endif
   357 
   358 
   359 /*****************************************************************************
   360  *
   361  *  helper memory allocation functions:
   362  *
   363  ****************************************************************************/
   364 
   365 #if defined(__cplusplus) && defined(BOOST_REGEX_NON_RECURSIVE)
   366 namespace boost{ namespace re_detail{
   367 
   368 BOOST_REGEX_DECL void* BOOST_REGEX_CALL get_mem_block();
   369 BOOST_REGEX_DECL void BOOST_REGEX_CALL put_mem_block(void*);
   370 
   371 }} /* namespaces */
   372 #endif
   373 
   374 /*****************************************************************************
   375  *
   376  *  Diagnostics:
   377  *
   378  ****************************************************************************/
   379 
   380 #ifdef BOOST_REGEX_CONFIG_INFO
   381 BOOST_REGEX_DECL void BOOST_REGEX_CALL print_regex_library_info();
   382 #endif
   383 
   384 #if defined(BOOST_REGEX_DIAG)
   385 #  pragma message ("BOOST_REGEX_DECL" BOOST_STRINGIZE(=BOOST_REGEX_DECL))
   386 #  pragma message ("BOOST_REGEX_CALL" BOOST_STRINGIZE(=BOOST_REGEX_CALL))
   387 #  pragma message ("BOOST_REGEX_CCALL" BOOST_STRINGIZE(=BOOST_REGEX_CCALL))
   388 #ifdef BOOST_REGEX_USE_C_LOCALE
   389 #  pragma message ("Using C locale in regex traits class")
   390 #elif BOOST_REGEX_USE_CPP_LOCALE
   391 #  pragma message ("Using C++ locale in regex traits class")
   392 #else
   393 #  pragma message ("Using Win32 locale in regex traits class")
   394 #endif
   395 #if defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
   396 #  pragma message ("Dynamic linking enabled")
   397 #endif
   398 #if defined(BOOST_REGEX_NO_LIB) || defined(BOOST_ALL_NO_LIB)
   399 #  pragma message ("Auto-linking disabled")
   400 #endif
   401 #ifdef BOOST_REGEX_NO_EXTERNAL_TEMPLATES
   402 #  pragma message ("Extern templates disabled")
   403 #endif
   404 
   405 #endif
   406 
   407 #endif
   408 
   409 
   410 
   411