/*------------------------------------------------------------------------------ * 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. ------------------------------------------------------------------------------*/ #ifndef lucene_sharedheader_h #define lucene_sharedheader_h /** * This header contains definitions and macros for helping create cross-platform code. * It is primarily for use by the clucene-core library, but is split off so that * other applications such as the demo, test, benchmarks, etc can benefit from the * cross platform code. Cross platform code is not distributed with the clucene-core * and is not available through the shared library. */ #include "CLucene/clucene-config.h" //some early definitions #if defined(_MSC_VER) || defined(__BORLANDC__) #define _LUCENE_PRAGMA_WARNINGS //tell lucene to display warnings using pragmas instead of #warning #endif //////////////////////////////////////////////////////// //Are we in unicode mode? //////////////////////////////////////////////////////// #if defined(_MBCS) || defined(_ASCII) #undef _ASCII #undef _UCS2 #define _ASCII #elif defined(_UNICODE) #ifndef _UCS2 #define _UCS2 #endif #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 //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// //platform includes that MUST be included for the public headers to work... //////////////////////////////////////////////////////// #include //need this for wchar_t, size_t, NULL #ifdef _CL_HAVE_STDINT_H #include //need this for int32_t, etc #endif #include //required for float_t #include //need to include this really early... #ifdef _CL_HAVE_TCHAR_H #include //required for _T and TCHAR #endif //////////////////////////////////////////////////////// //namespace helper //////////////////////////////////////////////////////// #if defined(_LUCENE_DONTIMPLEMENT_NS_MACROS) //do nothing #elif !defined(DISABLE_NAMESPACE) && defined(_CL_HAVE_NAMESPACES) #define CL_NS_DEF(sub) namespace lucene{ namespace sub{ #define CL_NS_DEF2(sub,sub2) namespace lucene{ namespace sub{ namespace sub2 { #define CL_NS_END }} #define CL_NS_END2 }}} #define CL_NS_USE(sub) using namespace lucene::sub; #define CL_NS_USE2(sub,sub2) using namespace lucene::sub::sub2; #define CL_NS(sub) lucene::sub #define CL_NS2(sub,sub2) lucene::sub::sub2 #define CL_STRUCT_DEF(sub,clazz) namespace lucene { namespace sub{ struct clazz; } } #define CL_CLASS_DEF(sub,clazz) namespace lucene { namespace sub{ class clazz; } } #define CL_CLASS_DEF2(sub,sub2, clazz) namespace lucene { namespace sub{ namespace sub2{ class clazz; } } } #define CL_TEMPATE_DEF(sub, clazz, typedefs) namespace lucene { namespace sub{ template class clazz; }} #define CL_TYPE_DEF(sub, clazz, def) namespace lucene { namespace sub{ typedef def clazz; }} #else #define CL_NS_DEF(sub) #define CL_NS_DEF2(sub, sub2) #define CL_NS_END #define CL_NS_END2 #define CL_NS_USE(sub) #define CL_NS_USE2(sub,sub2) #define CL_NS(sub) #define CL_NS2(sub,sub2) #define CL_CLASS_DEF(sub,clazz) class clazz; #define CL_CLASS_DEF2(sub,sub2, clazz) class clazz; #endif #if defined(LUCENE_NO_STDC_NAMESPACE) //todo: haven't actually tested this on a non-stdc compliant compiler #define CL_NS_STD(func) ::func #else #define CL_NS_STD(func) std::func #endif // //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// // EXPORTS definition //////////////////////////////////////////////////////// #if defined(_WIN32) || defined(_WIN64) #define CLUCENE_EXPORT_DECL __declspec(dllexport) #define CLUCENE_IMPORT_DECL __declspec(dllimport) #define CLUCENE_LOCAL_DECL #elif defined(_CL_HAVE_GCCVISIBILITYPATCH) #define CLUCENE_EXPORT_DECL __attribute__ ((visibility("default"))) #define CLUCENE_LOCAL_DECL __attribute__ ((visibility("hidden"))) #define CLUCENE_IMPORT_DECL #else #define CLUCENE_EXPORT_DECL #define CLUCENE_IMPORT_DECL #define CLUCENE_LOCAL_DECL #endif //define for the libraries #if defined(clucene_shared_EXPORTS) #define CLUCENE_SHARED_EXPORT CLUCENE_EXPORT_DECL #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL #elif defined(MAKE_CLUCENE_SHARED_LIB) #define CLUCENE_SHARED_EXPORT //don't export if we are building a static library #else #define CLUCENE_SHARED_EXPORT CLUCENE_IMPORT_DECL #endif #if defined(clucene_core_EXPORTS) #define CLUCENE_EXPORT CLUCENE_EXPORT_DECL #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL #elif defined(MAKE_CLUCENE_CORE_LIB) #define CLUCENE_EXPORT #else #define CLUCENE_EXPORT CLUCENE_IMPORT_DECL #endif #if defined(clucene_contribs_lib_EXPORTS) #define CLUCENE_CONTRIBS_EXPORT CLUCENE_EXPORT_DECL #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL #elif defined(MAKE_CLUCENE_CONTRIBS_LIB) #define CLUCENE_CONTRIBS_EXPORT #else #define CLUCENE_CONTRIBS_EXPORT CLUCENE_IMPORT_DECL #endif #ifndef CLUCENE_LOCAL #define CLUCENE_LOCAL #endif //inline definitions #if defined(__MINGW32__) || defined(_MSC_VER) #define CLUCENE_SHARED_INLINE_EXPORT #define CLUCENE_INLINE_EXPORT #define CLUCENE_CONTRIBS_INLINE_EXPORT #else #define CLUCENE_SHARED_INLINE_EXPORT CLUCENE_SHARED_EXPORT #define CLUCENE_INLINE_EXPORT CLUCENE_EXPORT #define CLUCENE_CONTRIBS_INLINE_EXPORT CLUCENE_CONTRIBS_EXPORT #endif //////////////////////////////////////////////////////// //todo: put this logic in cmake #if defined(_MSC_VER) #if _MSC_FULL_VER >= 140050320 #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text)) #elif _MSC_VER >= 1300 #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated) #else #define _CL_DEPRECATE_TEXT(_Text) #endif #elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) #define _CL_DEPRECATE_TEXT(_Text) __attribute__((__deprecated__)) #else #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.") // //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// // boost stuff //////////////////////////////////////////////////////// #if defined(_MSC_VER) # pragma warning (disable : 4251) // disable exported dll function # endif //////////////////////////////////////////////////////// //Class interfaces //////////////////////////////////////////////////////// #include "CLucene/debug/lucenebase.h" //////////////////////////////////////////////////////// //memory handling macros/functions #include "CLucene/debug/mem.h" #ifdef DMALLOC #include #include #include #endif #endif //lucene_sharedheader_h