1 #ifndef INC_config_hpp__
2 #define INC_config_hpp__
3 
4 /* ANTLR Translator Generator
5  * Project led by Terence Parr at http://www.jGuru.com
6  * Software rights: http://www.antlr.org/license.html
7  *
8  * $Id: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/antlr/config.hpp#2 $
9  */
10 
11 /*
12  * Just a simple configuration file to differentiate between the
13  * various compilers used and reconfigure stuff for any oddities of the
14  * compiler in question.
15  *
16  * These are the defaults. Per compiler these are amended.
17  */
18 #define ANTLR_USE_NAMESPACE(_x_) _x_::
19 #define ANTLR_USING_NAMESPACE(_x_) using namespace _x_;
20 #define ANTLR_CXX_SUPPORTS_NAMESPACE 1
21 #define ANTLR_C_USING(_x_)
22 #define ANTLR_API
23 #ifndef CUSTOM_API
24 # define CUSTOM_API
25 #endif
26 #define ANTLR_IOS_BASE ios_base
27 /** define if cctype functions/macros need a std:: prefix. A lot of compilers
28  * define these as macros, in which case something barfs.
29  */
30 #define ANTLR_CCTYPE_NEEDS_STD
31 
32 /// Define if C++ compiler supports std::uncaught_exception
33 #define ANTLR_CXX_SUPPORTS_UNCAUGHT_EXCEPTION
34 
35 #define ANTLR_ATOI_IN_STD
36 
37 /******************************************************************************/
38 /*{{{ Microsoft Visual C++ */
39 // NOTE: If you provide patches for a specific MSVC version guard them for
40 // the specific version!!!!
41 // _MSC_VER == 1100 for Microsoft Visual C++ 5.0
42 // _MSC_VER == 1200 for Microsoft Visual C++ 6.0
43 // _MSC_VER == 1300 for Microsoft Visual C++ 7.0
44 #if defined(_MSC_VER)
45 
46 # if _MSC_VER < 1300
47 #	define NOMINMAX
48 #	pragma warning(disable : 4786)
49 #	define min _cpp_min
50 # endif
51 
52 // This warning really gets on my nerves.
53 // It's the one about symbol longer than 256 chars, and it happens
54 // all the time with STL.
55 # pragma warning( disable : 4786 4231 )
56 // this shuts up some DLL interface warnings for STL
57 # pragma warning( disable : 4251 )
58 
59 # ifdef ANTLR_CXX_USE_STLPORT
60 #	undef ANTLR_CXX_SUPPORTS_UNCAUGHT_EXCEPTION
61 # endif
62 
63 # if ( _MSC_VER < 1300 ) && ( defined(ANTLR_EXPORTS) || defined(ANTLR_IMPORTS) )
64 #	error "DLL Build not supported on these MSVC versions."
65 // see comment in lib/cpp/src/dll.cpp
66 # endif
67 
68 // For the DLL support originally contributed by Stephen Naughton
69 // If you are building statically leave ANTLR_EXPORTS/ANTLR_IMPORTS undefined
70 // If you are building the DLL define ANTLR_EXPORTS
71 // If you are compiling code to be used with the DLL define ANTLR_IMPORTS
72 # ifdef ANTLR_EXPORTS
73 #	undef ANTLR_API
74 #	define ANTLR_API __declspec(dllexport)
75 # endif
76 
77 # ifdef ANTLR_IMPORTS
78 #	undef ANTLR_API
79 #	define ANTLR_API __declspec(dllimport)
80 # endif
81 
82 # if ( _MSC_VER < 1200 )
83 // supposedly only for MSVC5 and before...
84 // Using vector<XXX> requires operator<(X,X) to be defined
85 #	define NEEDS_OPERATOR_LESS_THAN
86 # endif
87 
88 // VC6
89 # if ( _MSC_VER == 1200 )
90 #	undef ANTLR_ATOI_IN_STD
91 # endif
92 
93 # if ( _MSC_VER < 1310 )
94 // Supposedly only for MSVC7 and before...
95 // Not allowed to put 'static const int XXX=20;' in a class definition
96 #	define NO_STATIC_CONSTS
97 #	define NO_TEMPLATE_PARTS
98 # endif
99 
100 // No strcasecmp in the C library (so use stricmp instead)
101 // - Anyone know which is in which standard?
102 # define NO_STRCASECMP
103 # undef ANTLR_CCTYPE_NEEDS_STD
104 #	define NO_STATIC_CONSTS
105 #endif	// End of Microsoft Visual C++
106 
107 /*}}}*/
108 /******************************************************************************/
109 /*{{{ SunPro Compiler (Using OBJECTSPACE STL)
110  *****************************************************************************/
111 #ifdef __SUNPRO_CC
112 
113 # if (__SUNPRO_CC >= 0x500)
114 
115 #	define NEEDS_OPERATOR_LESS_THAN
116 #	define NO_TEMPLATE_PARTS
117 
118 # else
119 
120 #	undef namespace
121 #	define namespace
122 
123 #	if (__SUNPRO_CC == 0x420)
124 
125 /* This code is specif to SunWspro Compiler 4.2, and will compile with
126  the objectspace 2.1 toolkit for Solaris2.6 */
127 #	 define HAS_NOT_CASSERT_H
128 #	 define HAS_NOT_CSTRING_H
129 #	 define HAS_NOT_CCTYPE_H
130 #	 define HAS_NOT_CSTDIO_H
131 #	 define HAS_OSTREAM_H
132 
133 /* #define OS_SOLARIS_2_6
134  #define OS_NO_WSTRING
135  #define OS_NO_ALLOCATORS
136  #define OS_MULTI_THREADED
137  #define OS_SOLARIS_NATIVE
138  #define OS_REALTIME
139  #define __OSVERSION__=5
140  #define SVR4
141  */
142 
143 // ObjectSpace + some specific templates constructions with stl.
144 /* #define OS_NO_ALLOCATOR */
145 
146 // This great compiler does not have the namespace feature.
147 #	 undef  ANTLR_USE_NAMESPACE
148 #	 define ANTLR_USE_NAMESPACE(_x_)
149 #	 undef ANTLR_USING_NAMESPACE
150 #	 define ANTLR_USING_NAMESPACE(_x_)
151 #	 undef ANTLR_CXX_SUPPORTS_NAMESPACE
152 #	endif		// End __SUNPRO_CC == 0x420
153 
154 #	undef explicit
155 #	define explicit
156 
157 #	define exception os_exception
158 #	define bad_exception os_bad_exception
159 
160 // Not allowed to put 'static const int XXX=20;' in a class definition
161 #	define NO_STATIC_CONSTS
162 // Using vector<XXX> requires operator<(X,X) to be defined
163 #	define NEEDS_OPERATOR_LESS_THAN
164 
165 # endif
166 
167 # undef ANTLR_CCTYPE_NEEDS_STD
168 
169 #endif	// end __SUNPRO_CC
170 /*}}}*/
171 /*****************************************************************************/
172 /*{{{ Inprise C++ Builder 3.0
173  *****************************************************************************/
174 #ifdef __BCPLUSPLUS__
175 # define NO_TEMPLATE_PARTS
176 # define NO_STRCASECMP
177 # undef ANTLR_CCTYPE_NEEDS_STD
178 #endif	// End of C++ Builder 3.0
179 /*}}}*/
180 /*****************************************************************************/
181 /*{{{ IBM VisualAge C++ ( which includes the Dinkumware C++ Library )
182  *****************************************************************************/
183 #ifdef __IBMCPP__
184 
185 // No strcasecmp in the C library (so use stricmp instead)
186 // - Anyone know which is in which standard?
187 #if (defined(_AIX) && (__IBMCPP__ >= 600))
188 # define NO_STATIC_CONSTS
189 #else
190 # define NO_STRCASECMP
191 # undef ANTLR_CCTYPE_NEEDS_STD
192 #endif
193 
194 #endif	// end IBM VisualAge C++
195 /*}}}*/
196 /*****************************************************************************/
197 /*{{{ Metrowerks Codewarrior
198  *****************************************************************************/
199 #ifdef __MWERKS__
200 # if (__MWERKS__ <= 0x2201)
201 #	define NO_TEMPLATE_PARTS
202 # endif
203 
204 // CW 6.0 and 7.0 still do not have it.
205 # define ANTLR_REALLY_NO_STRCASECMP
206 
207 # undef ANTLR_C_USING
208 # define ANTLR_C_USING(_x_)   using std:: ## _x_;
209 
210 # define ANTLR_CCTYPE_NEEDS_STD
211 # undef ANTLR_CXX_SUPPORTS_UNCAUGHT_EXCEPTION
212 
213 #endif	// End of Metrowerks Codewarrior
214 /*}}}*/
215 /*****************************************************************************/
216 /*{{{ SGI Irix 6.5.10 MIPSPro compiler
217  *****************************************************************************/
218 // (contributed by Anna Winkler)
219 // Note: you can't compile ANTLR with the MIPSPro compiler on
220 // anything < 6.5.10 because SGI just fixed a big bug dealing with
221 // namespaces in that release.
222 #ifdef __sgi
223 # define HAS_NOT_CCTYPE_H
224 # define HAS_NOT_CSTRING_H
225 # define HAS_NOT_CSTDIO_H
226 # undef ANTLR_CCTYPE_NEEDS_STD
227 #endif // End IRIX MIPSPro
228 /*}}}*/
229 /*****************************************************************************/
230 /*{{{ G++ in various incarnations
231  *****************************************************************************/
232 // With the gcc-2.95 and 3.0 being in the near future we should start handling
233 // incompatabilities between the various libstdc++'s.
234 #if defined(__GNUC__) || defined(__GNUG__)
235 // gcc 2 branch..
236 # if (__GNUC__ == 2 )
237 #	if (__GNUC_MINOR__ <= 8 )
238 #	 undef ANTLR_USE_NAMESPACE
239 #	 define ANTLR_USE_NAMESPACE(_x_)
240 #	 undef ANTLR_USING_NAMESPACE
241 #	 define ANTLR_USING_NAMESPACE(_x_)
242 #	 undef ANTLR_CXX_SUPPORTS_NAMESPACE
243 #	endif
244 #	if (__GNUC_MINOR__ > 8 && __GNUC_MINOR__ <= 95 )
245 #	  undef ANTLR_IOS_BASE
246 #	  define ANTLR_IOS_BASE ios
247 #	  undef ANTLR_CCTYPE_NEEDS_STD
248 // compiling with -ansi ?
249 #	  ifdef __STRICT_ANSI__
250 #		undef ANTLR_REALLY_NO_STRCASECMP
251 #		define ANTLR_REALLY_NO_STRCASECMP
252 #	  endif
253 #	else
254 // experimental .96 .97 branches..
255 #	 undef ANTLR_CCTYPE_NEEDS_STD
256 #	endif
257 # endif
258 #endif // ! __GNUC__
259 /*}}}*/
260 /*****************************************************************************/
261 /*{{{ Digital CXX (Tru64)
262  *****************************************************************************/
263 #ifdef __DECCXX
264 #define __USE_STD_IOSTREAM
265 #endif
266 /*}}}*/
267 /*****************************************************************************/
268 #ifdef __BORLANDC__
269 # if  __BORLANDC__ >= 560
270 #	include <ctype>
271 #	include <stdlib>
272 #	define ANTLR_CCTYPE_NEEDS_STD
273 # else
274 #	error "sorry, compiler is too old - consider an update."
275 # endif
276 #endif
277 
278 // Redefine these for backwards compatability..
279 #undef ANTLR_BEGIN_NAMESPACE
280 #undef ANTLR_END_NAMESPACE
281 
282 #if ANTLR_CXX_SUPPORTS_NAMESPACE == 1
283 # define ANTLR_BEGIN_NAMESPACE(_x_) namespace _x_ {
284 # define ANTLR_END_NAMESPACE }
285 #else
286 # define ANTLR_BEGIN_NAMESPACE(_x_)
287 # define ANTLR_END_NAMESPACE
288 #endif
289 
290 #endif //INC_config_hpp__
291