source: NonGTP/Boost/boost/regex/config.hpp @ 857

Revision 857, 12.2 KB checked in by igarcia, 18 years ago (diff)
Line 
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)
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)\
277if(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
312namespace boost{
313namespace re_detail{
314
315BOOST_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)
366namespace boost{ namespace re_detail{
367
368BOOST_REGEX_DECL void* BOOST_REGEX_CALL get_mem_block();
369BOOST_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
381BOOST_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
Note: See TracBrowser for help on using the repository browser.