| /*------------------------------------------------------------------------------ |
| * 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. |
| ------------------------------------------------------------------------------*/ |
| #if !defined(lucene_compiler_h) |
| #define lucene_compiler_h |
| |
| #if defined(_MBCS) || defined(_ASCII) |
| #undef _ASCII |
| #undef _UCS2 |
| #define _ASCII |
| #elif defined(_UNICODE) |
| #define _UCS2 |
| #elif !defined(_UCS2) |
| #define _UCS2 |
| #endif |
| |
| //msvc needs unicode define so that it uses unicode library |
| #ifdef _UCS2 |
| #undef _UNICODE |
| #define _UNICODE |
| #undef _ASCII |
| #else |
| #undef _UNICODE |
| #undef _UCS2 |
| #endif |
| |
| |
| //////////////////////////////////////////////////////////////////// |
| // Figure out what compiler we are using |
| //////////////////////////////////////////////////////////////////// |
| |
| #if defined(_MSC_VER) && !defined(__MWERKS__) && !defined (__COMO__) |
| #define _CLCOMPILER_MSVC _MSC_VER |
| #endif |
| |
| #if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__) |
| #include "CLucene/config/CompilerGcc.h" |
| |
| #elif defined(_CLCOMPILER_MSVC) |
| /* Microsoft Visual C++ */ |
| #include "CLucene/config/CompilerMsvc.h" |
| |
| #elif defined (__BORLANDC__) |
| #include "CLucene/config/CompilerBcb.h" |
| |
| #elif defined (__HP_aCC) |
| #include "CLucene/config/CompilerAcc.h" |
| |
| #else |
| //Unable to identify the compiler, issue error diagnostic. |
| //Edit <CLucene/config/LuceneMycomp.h> to set STLport up for your compiler. |
| //Uncomment this next line |
| #error "Unable to identify the compiler, issue error diagnostic. Edit <CLucene/config/CompilerMycomp.h> to set Lucene up for your compiler." |
| #include "CLucene/config/LuceneMycomp.h" |
| #endif /* end of compiler choice */ |
| //////////////////////////////////////////////////////////////////// |
| |
| |
| |
| //////////////////////////////////////////////////////////////////// |
| // Now include platform specific definitions |
| //////////////////////////////////////////////////////////////////// |
| |
| /* Operating system recognition (basic) */ |
| #if defined (__unix) || defined (__linux__) || defined (__QNX__) || defined (_AIX) || defined (__NetBSD__) || defined (__OpenBSD__) || defined (__Lynx__) || defined(hpux) || defined(__hpux) |
| #undef _UNIX |
| #define _UNIX 1 |
| #include "CLucene/config/PlatformUnix.h" |
| |
| #elif defined(macintosh) || defined (_MAC) || defined(__APPLE__) |
| #undef _MAC |
| #define _MAC 1 |
| #include "CLucene/config/PlatformMac.h" |
| |
| #elif defined (_WIN32) || defined (__WIN32) || defined (WIN32) || defined (__WIN32__) |
| #undef _WIN32 |
| #define _WIN32 |
| #include "CLucene/config/PlatformWin32.h" |
| |
| #elif defined (__WIN16) || defined (WIN16) || defined (_WIN16) |
| #undef _WIN16 |
| #define _WIN16 |
| #error "CLucene has not been tested on this platform. Please send a report to the lucene administrators if you are able to successfully compile" |
| #else |
| #error "CLucene could not identify the platform." |
| #endif /* platforms */ |
| |
| |
| |
| //////////////////////////////////////////////////////////////////// |
| // Now we take all that we have learnt, and define some things |
| //////////////////////////////////////////////////////////////////// |
| |
| //lets just say that we can always do unicode! :) |
| #ifdef CL_CHARSET_GUESS |
| #define _UCS2 |
| #endif |
| |
| #if defined(_ASCII) |
| #undef _UCS2 |
| #elif defined(_UCS2) |
| #undef _ASCII |
| #endif |
| |
| #ifndef _LUCENE_NO_NEW_STYLE_CASTS |
| #define __CONST_CAST(typ,var) const_cast<typ>(var) |
| #define __REINTERPRET_CAST(typ,var) reinterpret_cast<typ>(var) |
| #else |
| #define __CONST_CAST(typ,var) ((typ)(var)) |
| #define __REINTERPRET_CAST,var) ((typ)(var)) |
| #endif |
| |
| #ifndef _CL_DEPRECATE_TEXT |
| #define _CL_DEPRECATE_TEXT(_Text) |
| #endif |
| #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.") |
| |
| |
| //cnd-debug exit command |
| #ifndef debugFatalExit |
| #define debugFatalExit(ret) exit(ret) |
| #endif |
| |
| #ifndef _CL_ILONG |
| #define _CL_ILONG(x) x ## L |
| #endif |
| #ifndef _ILONGLONG |
| #define _ILONGLONG(x) x ## LL |
| #endif |
| |
| //define whats the values of item intergers *should* be. we can check this in a test |
| #define LUCENE_INT64_MAX_SHOULDBE _ILONGLONG(0x7FFFFFFFFFFFFFFF) |
| #define LUCENE_INT32_MAX_SHOULDBE 0x7FFFFFFFL |
| #define LUCENE_UINT8_MAX_SHOULDBE 0xff |
| |
| //maximum path length. only used for buffers that use fullpath. |
| //anything else should use a dynamic length. |
| #if defined(CL_MAX_PATH) |
| //do nothing... |
| #elif defined(PATH_MAX) |
| #define CL_MAX_PATH PATH_MAX |
| #elif defined(MAX_PATH) |
| #define CL_MAX_PATH MAX_PATH |
| #elif defined(_MAX_PATH) |
| #define CL_MAX_PATH _MAX_PATH |
| #else |
| #error "CL_MAX_PATH could not be determined" |
| #endif |
| |
| //this is the max filename... for now its just the same, |
| //but this could change, so we use a different name |
| #define CL_MAX_NAME CL_MAX_PATH |
| //this used to be CL_MAX_NAME * 32, but as Alex Hudson points out, this could come to be 128kb. |
| //the above logic for CL_MAX_NAME should be correct enough to handle all file names |
| #define CL_MAX_DIR CL_MAX_PATH |
| |
| #ifdef _LARGE_FILES |
| #define LUCENE_MAX_FILELENGTH LUCENE_INT64_MAX_SHOULDBE |
| #else |
| #define LUCENE_MAX_FILELENGTH LUCENE_INT32_MAX_SHOULDBE |
| #endif |
| |
| //use the LUCENE_STATIC_CONSTANT_SYNTAX to determine LUCENE_STATIC_CONSTANT |
| #ifndef LUCENE_STATIC_CONSTANT |
| //autoconf is not properly detecting the correct method for this, and since there's no real big |
| //harm in always using an enum, we'll probably just make this the default. |
| /*#if LUCENE_STATIC_CONSTANT_SYNTAX == 1 |
| #define LUCENE_STATIC_CONSTANT(type, assignment) static const type assignment |
| #elif LUCENE_STATIC_CONSTANT_SYNTAX == 2*/ |
| #define LUCENE_STATIC_CONSTANT(type, assignment) enum { assignment } |
| /*#else |
| #error "LUCENE_STATIC_CONSTANT not defined, and/or LUCENE_STATIC_CONSTANT_SYNTAX is not defined to a valid value" |
| #endif*/ |
| #endif |
| |
| //end of lucene_compiler_h |
| #elif !defined(lucene_compiler_h2) |
| #define lucene_compiler_h2 |
| //here we include the compiler header again, this gives the header a |
| //second chance at including stuff, after the main inclusions are complete |
| |
| #if defined (__GNUC__) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__) |
| #include "CLucene/config/CompilerGcc.h" |
| |
| #elif defined(_CLCOMPILER_MSVC) |
| /* Microsoft Visual C++ */ |
| #include "CLucene/config/CompilerMsvc.h" |
| |
| #elif defined __BORLANDC__ |
| #include "CLucene/config/CompilerBcb.h" |
| |
| #elif defined (__HP_aCC) |
| #include "CLucene/config/CompilerAcc.h" |
| |
| #else |
| //Unable to identify the compiler, issue error diagnostic. |
| //Edit <CLucene/config/LuceneMycomp.h> to set STLport up for your compiler. |
| //Uncomment this next line |
| #error "Unable to identify the compiler, issue error diagnostic. Edit <CLucene/config/CompilerMycomp.h> to set Lucene up for your compiler." |
| #include "CLucene/config/LuceneMycomp.h" |
| #endif /* end of compiler choice */ |
| |
| #ifndef _CL_HAVE_FLOAT_T |
| //#ifdef _CL_HAVE_LONG_DOUBLE |
| // long double's are not working (reported by Mark Ashworth on Solaris 64) |
| // typedef long double float_t; /* `float' expressions are evaluated as `long double'. */ |
| //#else |
| // we are going to use qreal now |
| // typedef double float_t; |
| //#endif |
| #endif |
| |
| /*todo: but need to define SIZEOF_VOID_P #if (SIZEOF_VOID_P > 4 && SIZEOF_VOID_P <= 8) |
| #ifndef _CL_HAVE_INTPTR_T |
| typedef int64_t intptr_t; |
| #endif |
| #elif (SIZEOF_VOID_P > 2 && SIZEOF_VOID_P <= 4) |
| # ifndef _CL_HAVE_INTPTR_T |
| typedef int32_t intptr_t; |
| # endif |
| #else |
| #error "void * is either >8 bytes or <= 2. In either case, I am confused." |
| #endif*/ |
| |
| #ifndef _CL_HAVE_INTPTR_T |
| typedef int intptr_t; |
| #endif |
| |
| //end of lucene_compiler_h2 |
| #elif !defined(lucene_compiler_h3) |
| #define lucene_compiler_h3 |
| //here we include the compiler header again, this gives the header a |
| //third chance at including stuff, after the main inclusions are complete |
| |
| #if defined (__GNUC__ ) || defined(__SUNPRO_CC) || defined(__xlC__) || defined(__sgi) && defined(__EDG__) |
| #include "CLucene/config/CompilerGcc.h" |
| |
| #elif defined(_CLCOMPILER_MSVC) |
| /* Microsoft Visual C++ */ |
| #include "CLucene/config/CompilerMsvc.h" |
| |
| #elif defined __BORLANDC__ |
| #include "CLucene/config/CompilerBcb.h" |
| |
| #elif defined (__HP_aCC) |
| #include "CLucene/config/CompilerAcc.h" |
| |
| #else |
| //Unable to identify the compiler, issue error diagnostic. |
| //Edit <CLucene/config/LuceneMycomp.h> to set STLport up for your compiler. |
| //Uncomment this next line |
| #error "Unable to identify the compiler, issue error diagnostic. Edit <CLucene/config/CompilerMycomp.h> to set Lucene up for your compiler." |
| #include "CLucene/config/LuceneMycomp.h" |
| #endif /* end of compiler choice */ |
| |
| #endif |