/*------------------------------------------------------------------------------ | |
* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team | |
* | |
* Distributable under the terms of either the Apache License (Version 2.0) or | |
* the GNU Lesser General Public License, as specified in the COPYING file. | |
* | |
* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). | |
------------------------------------------------------------------------------*/ | |
#if !defined(_lucene_COMPILER_GCC) | |
#define _lucene_COMPILER_GCC | |
// It is internal CLucene header - DO NOT include it directly | |
#if !defined(_SUPPRESS_MAKE_BASED_CONFIG) | |
#if defined(_BUILD_FOR_QT_) | |
#include "fulltextsearch/qclucene-config_p.h" | |
#else | |
#include "CLucene/clucene-config.h" //make clucene-config.h file | |
#endif | |
#endif | |
#if defined(_ASCII) | |
#undef _UCS2 | |
#elif defined(_UCS2) | |
// | |
#else | |
#define CL_CHARSET_GUESS | |
#endif | |
//dont allow FS_MMAP if mmap is not available | |
#if defined(LUCENE_FS_MMAP) && !defined(_CL_HAVE_MMAP) | |
#error "LUCENE_FS_MMAP is defined and MMap doesn't appear to be available" | |
#endif | |
#ifdef _CL_HAVE_NO_FUNCTION_TRY_BLOCKS | |
#undef _LUCENE_DISABLE_EXCEPTIONS | |
#define _LUCENE_DISABLE_EXCEPTIONS | |
#error "this is bad if you made it here... your compiler seems not to have try/catch blocks." | |
#error "maybe you could implement an alternative solution for us? :)" | |
#endif | |
#ifndef _CL_HAVE_NAMESPACES | |
#define DISABLE_NAMESPACE | |
#endif | |
#define CL_NS_HASHING(func) __gnu_cxx::func | |
#define LUCENE_DISABLE_HASHING //we could enable this, but so far test show that the hashing is slower :( | |
//define the file functions | |
#define fileSeek lseek | |
#define fileSize _filelength | |
#define fileStat stat | |
#define fileHandleStat fstat | |
#ifdef _CL_HAVE_TELL | |
#define fileTell tell | |
#else | |
//ftell (and probably soon ftell64) are POSIX standard functions, but tell and | |
//tell64 are not, so we define fileTell in terms of fileSeek. | |
#define fileTell(fhandle) fileSeek(fhandle, 0, SEEK_CUR) | |
#endif | |
//this is needed early on so that CL_MAX_PATH can be correctly determined | |
//in the StdHeader.h. This was earlier causing problems with macosx. | |
//:: crash was due to realpath() that expects an output arguments that | |
//has at least the size of PATH_MAX (even if the result has a lower size) | |
#include <limits.h> | |
#ifndef _CL_HAVE_WCHAR_T | |
typedef unsigned short wchar_t; | |
#endif | |
#if defined(__CYGWIN__) | |
//cygwin seems to incorrectly define that it has wprintf??? | |
#undef _CL_HAVE_WPRINTF | |
#elif defined(__MINGW32__) | |
#ifndef _CL_HAVE_WINDOWS_H | |
#define _CL_HAVE_WINDOWS_H | |
#endif | |
#endif | |
/////////////////////////////////////////////////////////////////////////////// | |
//end _lucene_COMPILER_GCC1 | |
#elif !defined(_lucene_COMPILER_GCC2) | |
#define _lucene_COMPILER_GCC2 | |
//second inclusion | |
//types | |
#if defined(_CL_HAVE_SYS_TYPES_H) | |
#include <sys/types.h> | |
#endif | |
#if defined(_CL_HAVE_INTTYPES_H) | |
#include <inttypes.h> | |
#elif defined(_CL_HAVE_STDINT_H) | |
#include <stdint.h> | |
#else | |
#if _CL_SIZEOF_UNSIGNED_LONG_LONG==8 | |
typedef unsigned long long uint64_t; | |
typedef long long int64_t; | |
#elif _CL_SIZEOF_UNSIGNED_LONG==8 | |
typedef unsigned long uint64_t; | |
typedef long int64_t; | |
#else | |
#error I do not know what to use for a uint64_t. | |
#endif | |
/* Give us an unsigned 32-bit data type. */ | |
#if _CL_SIZEOF_UNSIGNED_LONG==4 | |
typedef unsigned long uint32_t; | |
typedef long int32_t; | |
#elif _CL_SIZEOF_UNSIGNED_INT==4 | |
typedef unsigned int uint32_t; | |
typedef int int32_t; | |
#else | |
#error I do not know what to use for a uint32_t. | |
#endif | |
/* An unsigned 8-bit data type */ | |
#if _CL_SIZEOF_UNSIGNED_CHAR==1 | |
typedef unsigned char uint8_t; | |
#else | |
#error I do not know what to use for a uint8_t. | |
#endif | |
#endif | |
//second chance to fix default settings | |
//this must be defined later, otherwise it messes up | |
//the standard libraries | |
#if !defined(__MINGW32__) | |
#define _close ::close | |
#define _read ::read | |
#endif | |
//now that int64_t is defined, we can define this... | |
#ifndef _CL_HAVE_FILELENGTH | |
#undef fileSize | |
#define fileSize lucene_filelength | |
int64_t lucene_filelength(int handle); | |
#endif | |
#elif !defined(_lucene_COMPILER_GCC3) | |
#define _lucene_COMPILER_GCC3 | |
//third inclusion | |
#if !defined(__MINGW32__) | |
//define replacements | |
#define O_RANDOM 0 | |
#undef O_BINARY | |
#define O_BINARY 0 | |
#define _S_IREAD 0444 | |
#define _S_IWRITE 0333 // write and execute permissions | |
//some functions that are needed - not charset dependent and not tchar type functions | |
#define _open open | |
#define _write write | |
#define _snprintf snprintf | |
//clucene uses ascii for filename interactions | |
#define _realpath(rel,abs) realpath(rel,abs) | |
#define _mkdir(x) mkdir(x,0777) | |
#define _unlink unlink | |
#else | |
#define _realpath(rel,abs) _fullpath(abs,rel,CL_MAX_PATH) | |
#endif | |
//also required by mingw | |
#define _rename rename | |
#endif | |
#if defined(__GNUC__) && (defined(__sgi) || (defined(Q_OS_SOLARIS) && Q_SOLARIS_VERSION < 10)) | |
#undef _CL_HAVE_FLOAT_T | |
#endif | |
#if defined(__GNUC__) && defined(Q_OS_SOLARIS) && Q_SOLARIS_VERSION < 10 | |
#undef _CL_HAVE_WCSTOLL | |
#endif |