|
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 |