From dbbe1886ffc1ca8d22eccfe58c0b4ee51f03c16a Mon Sep 17 00:00:00 2001 From: Peter Zoltan Varga Date: Mon, 15 Oct 2018 15:37:34 +0200 Subject: [PATCH] Make Clucene compilable with MXE This patch is mostly based on the work of GoldenCeetha devs: http://gc.stand2surf.net/mxe.cc/ --- CMakeLists.txt | 2 +- src/core/CLucene/store/FSDirectory.cpp | 4 ++++ src/core/libclucene-core.pc.cmake | 4 ++-- src/shared/CLucene/LuceneThreads.h | 3 +++ src/shared/CLucene/util/Misc.cpp | 3 +++ src/shared/CLucene/util/Misc.h | 4 +++- src/shared/CMakeLists.txt | 4 ++-- src/shared/cmake/MacroCheckGccVisibility.cmake | 2 +- 8 files changed, 19 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4950ddb..349ed75 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -163,7 +163,7 @@ IF ( BUILD_CONTRIBS ) SET(BUILD_CONTRIBS_LIB 1) ENDIF ( BUILD_CONTRIBS ) IF ( BUILD_CONTRIBS_LIB ) - ADD_SUBDIRECTORY (src/contribs-lib EXCLUDE_FROM_ALL) + ADD_SUBDIRECTORY (src/contribs-lib) ENDIF ( BUILD_CONTRIBS_LIB ) diff --git a/src/core/CLucene/store/FSDirectory.cpp b/src/core/CLucene/store/FSDirectory.cpp index 4b520c9..ccd7c8a 100644 --- a/src/core/CLucene/store/FSDirectory.cpp +++ b/src/core/CLucene/store/FSDirectory.cpp @@ -582,7 +582,9 @@ void FSDirectory::FSIndexInput::readInternal(uint8_t* b, const int32_t len) { void FSDirectory::close(){ SCOPED_LOCK_MUTEX(DIRECTORIES_LOCK) { +#if !defined(_CL_DISABLE_MULTITHREADING) THIS_LOCK.lock(); +#endif CND_PRECONDITION(directory[0]!=0,"directory is not open"); @@ -595,7 +597,9 @@ void FSDirectory::FSIndexInput::readInternal(uint8_t* b, const int32_t len) { return; } } +#if !defined(_CL_DISABLE_MULTITHREADING) THIS_LOCK.unlock(); +#endif } } diff --git a/src/core/libclucene-core.pc.cmake b/src/core/libclucene-core.pc.cmake index 0152b25..c3f68e9 100644 --- a/src/core/libclucene-core.pc.cmake +++ b/src/core/libclucene-core.pc.cmake @@ -6,6 +6,6 @@ includedir=${prefix}/include:${prefix}/include/CLucene/ext Name: libclucene Description: CLucene - a C++ search engine, ported from the popular Apache Lucene Version: @CLUCENE_VERSION_MAJOR@.@CLUCENE_VERSION_MINOR@.@CLUCENE_VERSION_REVISION@.@CLUCENE_VERSION_PATCH@ -Libs: -L${prefix}/@LIB_DESTINATION@/ -lclucene-core -Cflags: -I${prefix}/include -I${prefix}/include/CLucene/ext +Libs: -L${prefix}/@LIB_DESTINATION@/ -lclucene-core -lclucene-shared +Cflags: -I${prefix}/include -I${prefix}/include/CLucene/ext -I@LUCENE_SYS_INCLUDES@ ~ diff --git a/src/shared/CLucene/LuceneThreads.h b/src/shared/CLucene/LuceneThreads.h index 97072ee..4ea2346 100644 --- a/src/shared/CLucene/LuceneThreads.h +++ b/src/shared/CLucene/LuceneThreads.h @@ -30,6 +30,9 @@ class CLuceneThreadIdCompare; #define _LUCENE_ATOMIC_INC(theInteger) (++(*theInteger)) #define _LUCENE_ATOMIC_DEC(theInteger) (--(*theInteger)) #define _LUCENE_ATOMIC_INT int + + #define _LUCENE_ATOMIC_INT_SET(x, v) x=v + #define _LUCENE_ATOMIC_INT_GET(x) x #else #if defined(_LUCENE_DONTIMPLEMENT_THREADMUTEX) //do nothing diff --git a/src/shared/CLucene/util/Misc.cpp b/src/shared/CLucene/util/Misc.cpp index 240b827..0585422 100644 --- a/src/shared/CLucene/util/Misc.cpp +++ b/src/shared/CLucene/util/Misc.cpp @@ -466,6 +466,8 @@ bool Misc::listFiles(const char* directory, std::vector& files, boo std::string Misc::toString(const bool value){ return value ? "true" : "false"; } + +#if !defined(_CL_DISABLE_MULTITHREADING) std::string Misc::toString(_LUCENE_THREADID_TYPE value){ static int32_t nextindex = 0; static std::map<_LUCENE_THREADID_TYPE, int32_t> ids; @@ -474,6 +476,7 @@ std::string Misc::toString(_LUCENE_THREADID_TYPE value){ } return toString(ids[value]); } +#endif std::string Misc::toString(const int32_t value){ char buf[20]; TCHAR tbuf[20]; diff --git a/src/shared/CLucene/util/Misc.h b/src/shared/CLucene/util/Misc.h index aea7c42..698a2d5 100644 --- a/src/shared/CLucene/util/Misc.h +++ b/src/shared/CLucene/util/Misc.h @@ -67,7 +67,9 @@ CL_NS_DEF(util) static std::string toString(const int32_t value); static std::string toString(const int64_t value); - static std::string toString(const _LUCENE_THREADID_TYPE value); +#if !defined(_CL_DISABLE_MULTITHREADING) + static std::string toString(const _LUCENE_THREADID_TYPE value); +#endif static std::string toString(const bool value); static std::string toString(const float_t value); static std::string toString(const TCHAR* s, int32_t len=-1); diff --git a/src/shared/CMakeLists.txt b/src/shared/CMakeLists.txt index 3d1975e..08b0fec 100644 --- a/src/shared/CMakeLists.txt +++ b/src/shared/CMakeLists.txt @@ -214,9 +214,9 @@ ENDIF ( NOT HAVE_SYMBOL__T ) IF ( CMAKE_USE_WIN32_THREADS_INIT ) SET ( _CL_HAVE_WIN32_THREADS 1 ) ENDIF ( CMAKE_USE_WIN32_THREADS_INIT ) -IF ( CMAKE_USE_PTHREADS_INIT ) +IF ( CMAKE_USE_PTHREADS_INIT AND NOT _CL_HAVE_WIN32_THREADS) SET ( _CL_HAVE_PTHREAD 1 ) -ENDIF (CMAKE_USE_PTHREADS_INIT) +ENDIF (CMAKE_USE_PTHREADS_INIT AND NOT _CL_HAVE_WIN32_THREADS) IF ( CMAKE_USE_SPROC_INIT OR CMAKE_HP_PTHREADS_INIT ) MESSAGE(FATAL_ERROR "Threads library not implemented") ENDIF( CMAKE_USE_SPROC_INIT OR CMAKE_HP_PTHREADS_INIT ) diff --git a/src/shared/cmake/MacroCheckGccVisibility.cmake b/src/shared/cmake/MacroCheckGccVisibility.cmake index 2022aa3..535e553 100644 --- a/src/shared/cmake/MacroCheckGccVisibility.cmake +++ b/src/shared/cmake/MacroCheckGccVisibility.cmake @@ -15,7 +15,7 @@ macro(MACRO_CHECK_GCC_VISIBILITY GccVisibility) # get the gcc version exec_program(${CMAKE_C_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info) - string (REGEX MATCH "[345]\\.[0-9]\\.[0-9]" _gcc_version "${_gcc_version_info}") + string (REGEX MATCH "[3-9]\\.[0-9]\\.[0-9]" _gcc_version "${_gcc_version_info}") if (NOT _gcc_version) # clang reports: clang version 1.1 (trunk 95754)