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 * Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). 8 ------------------------------------------------------------------------------*/ 9 #if !defined(_lucene_COMPILER_GCC) 10 #define _lucene_COMPILER_GCC 11 12 // It is internal CLucene header - DO NOT include it directly 13 #if !defined(_SUPPRESS_MAKE_BASED_CONFIG) 14 #if defined(_BUILD_FOR_QT_) 15 #include "fulltextsearch/qclucene-config_p.h" 16 #else 17 #include "CLucene/clucene-config.h" //make clucene-config.h file 18 #endif 19 #endif 20 21 #if defined(_ASCII) 22 #undef _UCS2 23 #elif defined(_UCS2) 24 // 25 #else 26 #define CL_CHARSET_GUESS 27 #endif 28 29 //dont allow FS_MMAP if mmap is not available 30 #if defined(LUCENE_FS_MMAP) && !defined(_CL_HAVE_MMAP) 31 #error "LUCENE_FS_MMAP is defined and MMap doesn't appear to be available" 32 #endif 33 34 #ifdef _CL_HAVE_NO_FUNCTION_TRY_BLOCKS 35 #undef _LUCENE_DISABLE_EXCEPTIONS 36 #define _LUCENE_DISABLE_EXCEPTIONS 37 38 #error "this is bad if you made it here... your compiler seems not to have try/catch blocks." 39 #error "maybe you could implement an alternative solution for us? :)" 40 #endif 41 42 #ifndef _CL_HAVE_NAMESPACES 43 #define DISABLE_NAMESPACE 44 #endif 45 46 #define CL_NS_HASHING(func) __gnu_cxx::func 47 #define LUCENE_DISABLE_HASHING //we could enable this, but so far test show that the hashing is slower :( 48 49 //define the file functions 50 #define fileSeek lseek 51 #define fileSize _filelength 52 #define fileStat stat 53 #define fileHandleStat fstat 54 #ifdef _CL_HAVE_TELL 55 #define fileTell tell 56 #else 57 //ftell (and probably soon ftell64) are POSIX standard functions, but tell and 58 //tell64 are not, so we define fileTell in terms of fileSeek. 59 #define fileTell(fhandle) fileSeek(fhandle, 0, SEEK_CUR) 60 #endif 61 62 //this is needed early on so that CL_MAX_PATH can be correctly determined 63 //in the StdHeader.h. This was earlier causing problems with macosx. 64 //:: crash was due to realpath() that expects an output arguments that 65 //has at least the size of PATH_MAX (even if the result has a lower size) 66 #include <limits.h> 67 68 #ifndef _CL_HAVE_WCHAR_T 69 typedef unsigned short wchar_t; 70 #endif 71 72 #if defined(__CYGWIN__) 73 //cygwin seems to incorrectly define that it has wprintf??? 74 #undef _CL_HAVE_WPRINTF 75 #elif defined(__MINGW32__) 76 #ifndef _CL_HAVE_WINDOWS_H 77 #define _CL_HAVE_WINDOWS_H 78 #endif 79 #endif 80 81 82 /////////////////////////////////////////////////////////////////////////////// 83 //end _lucene_COMPILER_GCC1 84 #elif !defined(_lucene_COMPILER_GCC2) 85 #define _lucene_COMPILER_GCC2 86 //second inclusion 87 88 //types 89 #if defined(_CL_HAVE_SYS_TYPES_H) 90 #include <sys/types.h> 91 #endif 92 #if defined(_CL_HAVE_INTTYPES_H) 93 #include <inttypes.h> 94 #elif defined(_CL_HAVE_STDINT_H) 95 #include <stdint.h> 96 #else 97 #if _CL_SIZEOF_UNSIGNED_LONG_LONG==8 98 typedef unsigned long long uint64_t; 99 typedef long long int64_t; 100 #elif _CL_SIZEOF_UNSIGNED_LONG==8 101 typedef unsigned long uint64_t; 102 typedef long int64_t; 103 #else 104 #error I do not know what to use for a uint64_t. 105 #endif 106 107 /* Give us an unsigned 32-bit data type. */ 108 #if _CL_SIZEOF_UNSIGNED_LONG==4 109 typedef unsigned long uint32_t; 110 typedef long int32_t; 111 #elif _CL_SIZEOF_UNSIGNED_INT==4 112 typedef unsigned int uint32_t; 113 typedef int int32_t; 114 #else 115 #error I do not know what to use for a uint32_t. 116 #endif 117 118 /* An unsigned 8-bit data type */ 119 #if _CL_SIZEOF_UNSIGNED_CHAR==1 120 typedef unsigned char uint8_t; 121 #else 122 #error I do not know what to use for a uint8_t. 123 #endif 124 #endif 125 126 //second chance to fix default settings 127 //this must be defined later, otherwise it messes up 128 //the standard libraries 129 #if !defined(__MINGW32__) 130 #define _close ::close 131 #define _read ::read 132 #endif 133 134 //now that int64_t is defined, we can define this... 135 #ifndef _CL_HAVE_FILELENGTH 136 #undef fileSize 137 #define fileSize lucene_filelength 138 int64_t lucene_filelength(int handle); 139 #endif 140 141 #elif !defined(_lucene_COMPILER_GCC3) 142 #define _lucene_COMPILER_GCC3 143 //third inclusion 144 145 #if !defined(__MINGW32__) 146 //define replacements 147 #define O_RANDOM 0 148 #undef O_BINARY 149 #define O_BINARY 0 150 #define _S_IREAD 0444 151 #define _S_IWRITE 0333 // write and execute permissions 152 153 //some functions that are needed - not charset dependent and not tchar type functions 154 #define _open open 155 #define _write write 156 #define _snprintf snprintf 157 158 //clucene uses ascii for filename interactions 159 #define _realpath(rel,abs) realpath(rel,abs) 160 #define _mkdir(x) mkdir(x,0777) 161 #define _unlink unlink 162 #else 163 #define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH) 164 #endif 165 //also required by mingw 166 #define _rename rename 167 #endif 168 169 #if defined(__GNUC__) && (defined(__sgi) || (defined(Q_OS_SOLARIS) && Q_SOLARIS_VERSION < 10)) 170 #undef _CL_HAVE_FLOAT_T 171 #endif 172 173 #if defined(__GNUC__) && defined(Q_OS_SOLARIS) && Q_SOLARIS_VERSION < 10 174 #undef _CL_HAVE_WCSTOLL 175 #endif 176