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