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