1 /*------------------------------------------------------------------------------
2 * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
3 *
4 * Distributable under the terms of either the Apache License (Version 2.0) or
5 * the GNU Lesser General Public License, as specified in the COPYING file.
6 ------------------------------------------------------------------------------*/
7 #if !defined(lucene_compiler_h)
8 #define lucene_compiler_h
9 
10 #if defined(_MBCS) || defined(_ASCII)
11 #undef _ASCII
12 #undef _UCS2
13 #define _ASCII
14 #elif defined(_UNICODE)
15 #define _UCS2
16 #elif !defined(_UCS2)
17 #define _UCS2
18 #endif
19 
20 //msvc needs unicode define so that it uses unicode library
21 #ifdef _UCS2
22 #undef _UNICODE
23 #define _UNICODE
24 #undef _ASCII
25 #else
26 #undef _UNICODE
27 #undef _UCS2
28 #endif
29 
30 
31 ////////////////////////////////////////////////////////////////////
32 //  Figure out what compiler we are using
33 ////////////////////////////////////////////////////////////////////
34 
35 #if defined(_MSC_VER) && !defined(__MWERKS__) && !defined (__COMO__)
36 #define _CLCOMPILER_MSVC _MSC_VER
37 #endif
38 
39 #if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__)
40 #include "CLucene/config/CompilerGcc.h"
41 
42 #elif defined(_CLCOMPILER_MSVC)
43 /* Microsoft Visual C++ */
44 #include "CLucene/config/CompilerMsvc.h"
45 
46 #elif defined (__BORLANDC__)
47 #include "CLucene/config/CompilerBcb.h"
48 
49 #elif defined (__HP_aCC)
50 #include "CLucene/config/CompilerAcc.h"
51 
52 #else
53     //Unable to identify the compiler, issue error diagnostic.
54     //Edit <CLucene/config/LuceneMycomp.h> to set STLport up for your compiler.
55     //Uncomment this next line
56 #error "Unable to identify the compiler, issue error diagnostic. Edit <CLucene/config/CompilerMycomp.h> to set Lucene up for your compiler."
57 #include "CLucene/config/LuceneMycomp.h"
58 #endif /* end of compiler choice */
59 ////////////////////////////////////////////////////////////////////
60 
61 
62 
63 ////////////////////////////////////////////////////////////////////
64 //   Now include platform specific definitions
65 ////////////////////////////////////////////////////////////////////
66 
67 /* Operating system recognition (basic) */
68 #if defined (__unix) || defined (__linux__) || defined (__QNX__) || defined (_AIX) || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__Lynx__) || defined(hpux) || defined(__hpux)
69 #undef  _UNIX
70 #define _UNIX 1
71 #include "CLucene/config/PlatformUnix.h"
72 
73 #elif defined(macintosh) || defined (_MAC) || defined(__APPLE__)
74 #undef _MAC
75 #define _MAC  1
76 #include "CLucene/config/PlatformMac.h"
77 
78 #elif defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__)
79 #undef _WIN32
80 #define _WIN32
81 #include "CLucene/config/PlatformWin32.h"
82 
83 #elif defined (__WIN16) || defined (WIN16) || defined (_WIN16)
84 #undef _WIN16
85 #define _WIN16
86 #error "CLucene has not been tested on this platform. Please send a report to the lucene administrators if you are able to successfully compile"
87 #else
88 #error "CLucene could not identify the platform."
89 #endif /* platforms */
90 
91 
92 
93 ////////////////////////////////////////////////////////////////////
94 //   Now we take all that we have learnt, and define some things
95 ////////////////////////////////////////////////////////////////////
96 
97 //lets just say that we can always do unicode! :)
98 #ifdef CL_CHARSET_GUESS
99 #define _UCS2
100 #endif
101 
102 #if defined(_ASCII)
103 #undef _UCS2
104 #elif defined(_UCS2)
105 #undef _ASCII
106 #endif
107 
108 #ifndef  _LUCENE_NO_NEW_STYLE_CASTS
109 #define __CONST_CAST(typ,var) const_cast<typ>(var)
110 #define __REINTERPRET_CAST(typ,var) reinterpret_cast<typ>(var)
111 #else
112 #define __CONST_CAST(typ,var) ((typ)(var))
113 #define __REINTERPRET_CAST,var) ((typ)(var))
114 #endif
115 
116 #ifndef _CL_DEPRECATE_TEXT
117 #define _CL_DEPRECATE_TEXT(_Text)
118 #endif
119 #define _CL_DEPRECATED(_NewItem) _CL_DEPRECATE_TEXT("This function or variable has been superceded by newer library or operating system functionality. Consider using" #_NewItem "instead. See online help for details.")
120 
121 
122 //cnd-debug exit command
123 #ifndef debugFatalExit
124 #define debugFatalExit(ret) exit(ret)
125 #endif
126 
127 #ifndef _CL_ILONG
128 #define _CL_ILONG(x)       x ## L
129 #endif
130 #ifndef _ILONGLONG
131 #define _ILONGLONG(x)   x ## LL
132 #endif
133 
134 //define whats the values of item intergers *should* be. we can check this in a test
135 #define LUCENE_INT64_MAX_SHOULDBE _ILONGLONG(0x7FFFFFFFFFFFFFFF)
136 #define LUCENE_INT32_MAX_SHOULDBE 0x7FFFFFFFL
137 #define LUCENE_UINT8_MAX_SHOULDBE 0xff
138 
139 //maximum path length. only used for buffers that use fullpath.
140 //anything else should use a dynamic length.
141 #if defined(CL_MAX_PATH)
142 //do nothing...
143 #elif defined(PATH_MAX)
144 #define CL_MAX_PATH PATH_MAX
145 #elif defined(MAX_PATH)
146 #define CL_MAX_PATH MAX_PATH
147 #elif defined(_MAX_PATH)
148 #define CL_MAX_PATH _MAX_PATH
149 #else
150  #error "CL_MAX_PATH could not be determined"
151 #endif
152 
153 //this is the max filename... for now its just the same,
154 //but this could change, so we use a different name
155 #define CL_MAX_NAME CL_MAX_PATH
156 //this used to be CL_MAX_NAME * 32, but as Alex Hudson points out, this could come to be 128kb.
157 //the above logic for CL_MAX_NAME should be correct enough to handle all file names
158 #define CL_MAX_DIR CL_MAX_PATH
159 
160 #ifdef _LARGE_FILES
161 #define LUCENE_MAX_FILELENGTH LUCENE_INT64_MAX_SHOULDBE
162 #else
163 #define LUCENE_MAX_FILELENGTH LUCENE_INT32_MAX_SHOULDBE
164 #endif
165 
166 //use the LUCENE_STATIC_CONSTANT_SYNTAX to determine LUCENE_STATIC_CONSTANT
167 #ifndef LUCENE_STATIC_CONSTANT
168 	//autoconf is not properly detecting the correct method for this, and since there's no real big
169 	//harm in always using an enum, we'll probably just make this the default.
170 	/*#if LUCENE_STATIC_CONSTANT_SYNTAX == 1
171 		#define LUCENE_STATIC_CONSTANT(type, assignment) static const type assignment
172 	#elif LUCENE_STATIC_CONSTANT_SYNTAX == 2*/
173 		#define LUCENE_STATIC_CONSTANT(type, assignment) enum { assignment }
174 	/*#else
175 		#error "LUCENE_STATIC_CONSTANT not defined, and/or LUCENE_STATIC_CONSTANT_SYNTAX is not defined to a valid value"
176 	#endif*/
177 #endif
178 
179 //end of lucene_compiler_h
180 #elif !defined(lucene_compiler_h2)
181 #define lucene_compiler_h2
182 //here we include the compiler header again, this gives the header a
183 //second chance at including stuff, after the main inclusions are complete
184 
185 #if defined (__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi)  && defined(__EDG__)
186 #include "CLucene/config/CompilerGcc.h"
187 
188 #elif defined(_CLCOMPILER_MSVC)
189 /* Microsoft Visual C++ */
190 #include "CLucene/config/CompilerMsvc.h"
191 
192 #elif defined __BORLANDC__
193 #include "CLucene/config/CompilerBcb.h"
194 
195 #elif defined (__HP_aCC)
196 #include "CLucene/config/CompilerAcc.h"
197 
198 #else
199 //Unable to identify the compiler, issue error diagnostic.
200 //Edit <CLucene/config/LuceneMycomp.h> to set STLport up for your compiler.
201 //Uncomment this next line
202 #error "Unable to identify the compiler, issue error diagnostic. Edit <CLucene/config/CompilerMycomp.h> to set Lucene up for your compiler."
203 #include "CLucene/config/LuceneMycomp.h"
204 #endif /* end of compiler choice */
205 
206 #ifndef _CL_HAVE_FLOAT_T
207 //#ifdef _CL_HAVE_LONG_DOUBLE
208 // long double's are not working (reported by Mark Ashworth on Solaris 64)
209 //   typedef long double float_t;    /* `float' expressions are evaluated as `long double'.  */
210 //#else
211 //  we are going to use qreal now
212 //  typedef double float_t;
213 //#endif
214 #endif
215 
216 /*todo: but need to define SIZEOF_VOID_P #if (SIZEOF_VOID_P > 4 && SIZEOF_VOID_P <= 8)
217 #ifndef _CL_HAVE_INTPTR_T
218      typedef int64_t intptr_t;
219 #endif
220 #elif (SIZEOF_VOID_P > 2 && SIZEOF_VOID_P <= 4)
221 #    ifndef _CL_HAVE_INTPTR_T
222         typedef int32_t intptr_t;
223 #    endif
224 #else
225 #error "void * is either >8 bytes or <= 2.  In either case, I am confused."
226 #endif*/
227 
228 #ifndef _CL_HAVE_INTPTR_T
229     typedef int intptr_t;
230 #endif
231 
232 //end of lucene_compiler_h2
233 #elif !defined(lucene_compiler_h3)
234 #define lucene_compiler_h3
235 //here we include the compiler header again, this gives the header a
236 //third chance at including stuff, after the main inclusions are complete
237 
238 #if defined (__GNUC__ ) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__)
239 #include "CLucene/config/CompilerGcc.h"
240 
241 #elif defined(_CLCOMPILER_MSVC)
242 /* Microsoft Visual C++ */
243 #include "CLucene/config/CompilerMsvc.h"
244 
245 #elif defined __BORLANDC__
246 #include "CLucene/config/CompilerBcb.h"
247 
248 #elif defined (__HP_aCC)
249 #include "CLucene/config/CompilerAcc.h"
250 
251 #else
252 //Unable to identify the compiler, issue error diagnostic.
253 //Edit <CLucene/config/LuceneMycomp.h> to set STLport up for your compiler.
254 //Uncomment this next line
255 #error "Unable to identify the compiler, issue error diagnostic. Edit <CLucene/config/CompilerMycomp.h> to set Lucene up for your compiler."
256 #include "CLucene/config/LuceneMycomp.h"
257 #endif /* end of compiler choice */
258 
259 #endif
260