summaryrefslogtreecommitdiff
path: root/dev-cpp/lucene++
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-06-12 19:09:37 -0500
committerroot <root@alpha.trunkmasters.com>2026-06-12 19:09:37 -0500
commitb590c8d7572b727d565cc0b8ff660d43569845de (patch)
tree06f7a4102ea4e845df8b66660f252920d52952f9 /dev-cpp/lucene++
parent24f9cbfc4c34fdb6a6e03311674414e881ceab47 (diff)
downloadbaldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.gz
baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.xz
baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.zip
Adding metadata
Diffstat (limited to 'dev-cpp/lucene++')
-rw-r--r--dev-cpp/lucene++/Manifest1
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.7-boost-1.85.patch64
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.87.patch81
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.89.patch83
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.90.patch486
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-boost-bind.patch51
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-cmake4.patch62
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-gcc15.patch32
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-no-inline.patch70
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-no-pch.patch51
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-odr-fixes.patch343
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-pkgconfig.patch24
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-system-gtest.patch21
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-tests-gtest-cstdint.patch10
-rw-r--r--dev-cpp/lucene++/files/lucene++-3.0.9-threadpool-shutdown.patch14
-rw-r--r--dev-cpp/lucene++/lucene++-3.0.9-r2.ebuild55
-rw-r--r--dev-cpp/lucene++/metadata.xml5
17 files changed, 1453 insertions, 0 deletions
diff --git a/dev-cpp/lucene++/Manifest b/dev-cpp/lucene++/Manifest
new file mode 100644
index 000000000000..2cb8154eec92
--- /dev/null
+++ b/dev-cpp/lucene++/Manifest
@@ -0,0 +1 @@
+DIST lucene++-3.0.9.tar.gz 2458287 BLAKE2B cbc6c32bd23525ad53fbcf500628f1806496d7f0575ee33baf0bc189d2ea5710334d07b23869e9b3b205bfa229400bc09c108ba6919e2b83bf0c6259e0a88564 SHA512 220fe1b46518018d176ae16434f03b1453fc345d8d552a294d1af927ea4ab69a83ee4b03c82938e648edaa3e7064526ca047fc86e1c71743b0958b520d59e225
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.7-boost-1.85.patch b/dev-cpp/lucene++/files/lucene++-3.0.7-boost-1.85.patch
new file mode 100644
index 000000000000..05babf97a08d
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.7-boost-1.85.patch
@@ -0,0 +1,64 @@
+From c18ead2b0c4aa62af01450cb12353a0baa51411f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?= <bero@lindev.ch>
+Date: Wed, 27 Mar 2024 12:00:18 +0100
+Subject: [PATCH] Fix build with boost 1.85.0
+
+boost::filesystem::wpath has been deprecated (and typedef-ed to
+boost::filesystem::path) for a long time; it is removed from boost
+starting with 1.85.0-beta1.
+
+Use boost::filesystem::path instead.
+
+boost/filesystem/convenience.hpp has been removed (and was being
+included without being used anyway - its only use was indirectly
+pulling in boost/filesystem/directory.hpp, which is actually used).
+
+Include boost/filesystem/directory.hpp directly instead.
+---
+ src/core/store/MMapDirectory.cpp | 2 +-
+ src/core/util/FileUtils.cpp | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/core/store/MMapDirectory.cpp b/src/core/store/MMapDirectory.cpp
+index beac7828..46156e3a 100644
+--- a/src/core/store/MMapDirectory.cpp
++++ b/src/core/store/MMapDirectory.cpp
+@@ -36,7 +36,7 @@ MMapIndexInput::MMapIndexInput(const String& path) {
+ bufferPosition = 0;
+ if (!path.empty()) {
+ try {
+- file.open(boost::filesystem::wpath(path), _length);
++ file.open(boost::filesystem::path(path), _length);
+ } catch (...) {
+ boost::throw_exception(FileNotFoundException(path));
+ }
+diff --git a/src/core/util/FileUtils.cpp b/src/core/util/FileUtils.cpp
+index 51508b57..d92efbb8 100644
+--- a/src/core/util/FileUtils.cpp
++++ b/src/core/util/FileUtils.cpp
+@@ -5,9 +5,9 @@
+ /////////////////////////////////////////////////////////////////////////////
+
+ #include "LuceneInc.h"
+-#include <boost/filesystem/convenience.hpp>
+ #include <boost/filesystem/operations.hpp>
+ #include <boost/filesystem/path.hpp>
++#include <boost/filesystem/directory.hpp>
+ #include "LuceneThread.h"
+ #include "StringUtils.h"
+ #include "FileUtils.h"
+@@ -128,12 +128,12 @@ String joinPath(const String& path, const String& file) {
+ }
+
+ String extractPath(const String& path) {
+- boost::filesystem::wpath parentPath(path.c_str());
++ boost::filesystem::path parentPath(path.c_str());
+ return parentPath.parent_path().wstring().c_str();
+ }
+
+ String extractFile(const String& path) {
+- boost::filesystem::wpath fileName(path.c_str());
++ boost::filesystem::path fileName(path.c_str());
+ return fileName.filename().wstring().c_str();
+ }
+
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.87.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.87.patch
new file mode 100644
index 000000000000..8851e2a6749b
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.87.patch
@@ -0,0 +1,81 @@
+https://github.com/luceneplusplus/LucenePlusPlus/commit/e6a376836e5c891577eae6369263152106b9bc02
+
+From e6a376836e5c891577eae6369263152106b9bc02 Mon Sep 17 00:00:00 2001
+From: Christian Heusel <christian@heusel.eu>
+Date: Tue, 21 Jan 2025 01:01:58 +0100
+Subject: [PATCH] Migrate to boost::asio::io_context
+
+The code previously used the deprecated (and with bost 1.87.0 removed)
+`boost::asio::io_service`, which used to be an alias to `io_context`.
+The new version heavily changes the `io_context` API and therefore is no
+the old interface was removed.
+
+Fixes https://github.com/luceneplusplus/LucenePlusPlus/issues/208
+
+Signed-off-by: Christian Heusel <christian@heusel.eu>
+---
+ include/lucene++/ThreadPool.h | 10 ++++++----
+ src/core/util/ThreadPool.cpp | 9 +++++----
+ 2 files changed, 11 insertions(+), 8 deletions(-)
+
+diff --git a/include/lucene++/ThreadPool.h b/include/lucene++/ThreadPool.h
+index dc6446ff..175ac8ad 100644
+--- a/include/lucene++/ThreadPool.h
++++ b/include/lucene++/ThreadPool.h
+@@ -14,7 +14,9 @@
+
+ namespace Lucene {
+
+-typedef boost::shared_ptr<boost::asio::io_service::work> workPtr;
++
++typedef boost::asio::io_context io_context_t;
++typedef boost::asio::executor_work_guard<io_context_t::executor_type> work_t;
+
+ /// A Future represents the result of an asynchronous computation. Methods are provided to check if the computation
+ /// is complete, to wait for its completion, and to retrieve the result of the computation. The result can only be
+@@ -51,8 +53,8 @@ class ThreadPool : public LuceneObject {
+ LUCENE_CLASS(ThreadPool);
+
+ protected:
+- boost::asio::io_service io_service;
+- workPtr work;
++ io_context_t io_context;
++ work_t work;
+ boost::thread_group threadGroup;
+
+ static const int32_t THREADPOOL_SIZE;
+@@ -64,7 +66,7 @@ class ThreadPool : public LuceneObject {
+ template <typename FUNC>
+ FuturePtr scheduleTask(FUNC func) {
+ FuturePtr future(newInstance<Future>());
+- io_service.post(boost::bind(&ThreadPool::execute<FUNC>, this, func, future));
++ boost::asio::post(io_context, boost::bind(&ThreadPool::execute<FUNC>, this, func, future));
+ return future;
+ }
+
+diff --git a/src/core/util/ThreadPool.cpp b/src/core/util/ThreadPool.cpp
+index 8086d8b1..116f521c 100644
+--- a/src/core/util/ThreadPool.cpp
++++ b/src/core/util/ThreadPool.cpp
+@@ -14,15 +14,16 @@ Future::~Future() {
+
+ const int32_t ThreadPool::THREADPOOL_SIZE = 5;
+
+-ThreadPool::ThreadPool() {
+- work.reset(new boost::asio::io_service::work(io_service));
++ThreadPool::ThreadPool()
++ :
++ work(boost::asio::make_work_guard(io_context))
++{
+ for (int32_t i = 0; i < THREADPOOL_SIZE; ++i) {
+- threadGroup.create_thread(boost::bind(&boost::asio::io_service::run, &io_service));
++ threadGroup.create_thread(boost::bind(&boost::asio::io_context::run, &io_context));
+ }
+ }
+
+ ThreadPool::~ThreadPool() {
+- work.reset(); // stop all threads
+ threadGroup.join_all(); // wait for all competition
+ }
+
+
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.89.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.89.patch
new file mode 100644
index 000000000000..6ed4f4b4a03e
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.89.patch
@@ -0,0 +1,83 @@
+Bug: https://bugs.gentoo.org/963333
+
+--- LucenePlusPlus-rel_3.0.9/cmake/dependencies.cmake
++++ LucenePlusPlus-rel_3.0.9-boost-1.89/cmake/dependencies.cmake
+@@ -7,7 +7,6 @@ find_package(Boost COMPONENTS
+ filesystem
+ iostreams
+ regex
+- system
+ thread
+ REQUIRED
+ )
+@@ -20,7 +19,6 @@ set(lucene_boost_libs
+ ${Boost_FILESYSTEM_LIBRARIES}
+ ${Boost_IOSTREAMS_LIBRARIES}
+ ${Boost_REGEX_LIBRARIES}
+- ${Boost_SYSTEM_LIBRARIES}
+ ${Boost_THREAD_LIBRARIES}
+ )
+
+--- LucenePlusPlus-rel_3.0.9/src/contrib/CMakeLists.txt
++++ LucenePlusPlus-rel_3.0.9-boost-1.89/src/contrib/CMakeLists.txt
+@@ -67,7 +67,6 @@ target_link_libraries(lucene++-contrib
+ Boost::filesystem
+ Boost::iostreams
+ Boost::regex
+- Boost::system
+ Boost::thread
+ ZLIB::ZLIB
+ lucene++::lucene++)
+--- LucenePlusPlus-rel_3.0.9/src/core/CMakeLists.txt
++++ LucenePlusPlus-rel_3.0.9-boost-1.89/src/core/CMakeLists.txt
+@@ -57,7 +57,6 @@ target_link_libraries(lucene++
+ Boost::filesystem
+ Boost::iostreams
+ Boost::regex
+- Boost::system
+ Boost::thread
+ ZLIB::ZLIB
+ )
+--- LucenePlusPlus-rel_3.0.9/src/demo/deletefiles/CMakeLists.txt
++++ LucenePlusPlus-rel_3.0.9-boost-1.89/src/demo/deletefiles/CMakeLists.txt
+@@ -38,7 +38,6 @@ target_link_libraries(deletefiles
+ Boost::filesystem
+ Boost::iostreams
+ Boost::regex
+- Boost::system
+ Boost::thread
+ ZLIB::ZLIB
+ lucene++::lucene++
+diff -rup LucenePlusPlus-rel_3.0.9/src/demo/indexfiles/CMakeLists.txt LucenePlusPlus-rel_3.0.9-boost-1.89/src/demo/indexfiles/CMakeLists.txt
+--- LucenePlusPlus-rel_3.0.9/src/demo/indexfiles/CMakeLists.txt
++++ LucenePlusPlus-rel_3.0.9-boost-1.89/src/demo/indexfiles/CMakeLists.txt
+@@ -39,7 +39,6 @@ target_link_libraries(indexfiles
+ Boost::filesystem
+ Boost::iostreams
+ Boost::regex
+- Boost::system
+ Boost::thread
+ ZLIB::ZLIB
+ lucene++::lucene++
+diff -rup LucenePlusPlus-rel_3.0.9/src/demo/searchfiles/CMakeLists.txt LucenePlusPlus-rel_3.0.9-boost-1.89/src/demo/searchfiles/CMakeLists.txt
+--- LucenePlusPlus-rel_3.0.9/src/demo/searchfiles/CMakeLists.txt
++++ LucenePlusPlus-rel_3.0.9-boost-1.89/src/demo/searchfiles/CMakeLists.txt
+@@ -38,7 +38,6 @@ target_link_libraries(searchfiles
+ Boost::filesystem
+ Boost::iostreams
+ Boost::regex
+- Boost::system
+ Boost::thread
+ ZLIB::ZLIB
+ lucene++::lucene++
+diff -rup LucenePlusPlus-rel_3.0.9/src/test/CMakeLists.txt LucenePlusPlus-rel_3.0.9-boost-1.89/src/test/CMakeLists.txt
+--- LucenePlusPlus-rel_3.0.9/src/test/CMakeLists.txt
++++ LucenePlusPlus-rel_3.0.9-boost-1.89/src/test/CMakeLists.txt
+@@ -59,7 +59,6 @@ target_link_libraries(lucene++-tester
+ Boost::filesystem
+ Boost::iostreams
+ Boost::regex
+- Boost::system
+ Boost::thread
+ ZLIB::ZLIB
+ gtest_main
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.90.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.90.patch
new file mode 100644
index 000000000000..54ff53938980
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-boost-1.90.patch
@@ -0,0 +1,486 @@
+https://github.com/luceneplusplus/LucenePlusPlus/pull/222
+Bug: https://bugs.gentoo.org/969181
+
+From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
+ <congdanhqx@gmail.com>
+Date: Fri, 5 Dec 2025 10:37:48 +0700
+Subject: [PATCH 1/2] BitSet: Partial fix for Boost 1.90
+
+---
+ include/lucene++/BitSet.h | 8 ++++-
+ src/core/util/BitSet.cpp | 72 ++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 78 insertions(+), 2 deletions(-)
+
+diff --git a/include/lucene++/BitSet.h b/include/lucene++/BitSet.h
+index e06e6c7b..d07f12c5 100644
+--- a/include/lucene++/BitSet.h
++++ b/include/lucene++/BitSet.h
+@@ -8,6 +8,7 @@
+ #define BITSET_H
+
+ #include <boost/dynamic_bitset.hpp>
++#include <boost/version.hpp>
+ #include "LuceneObject.h"
+
+ namespace Lucene {
+@@ -22,9 +23,14 @@ class LPPAPI BitSet : public LuceneObject {
+ protected:
+ typedef boost::dynamic_bitset<uint64_t> bitset_type;
+ bitset_type bitSet;
++#if BOOST_VERSION >= 109000
++ typedef const bitset_type& get_bits_result;
++#else
++ typedef const uint64_t* get_bits_result;
++#endif
+
+ public:
+- const uint64_t* getBits();
++ get_bits_result getBits();
+ void clear();
+ void clear(uint32_t bitIndex);
+ void fastClear(uint32_t bitIndex);
+diff --git a/src/core/util/BitSet.cpp b/src/core/util/BitSet.cpp
+index 6eb9d943..bff757bb 100644
+--- a/src/core/util/BitSet.cpp
++++ b/src/core/util/BitSet.cpp
+@@ -7,6 +7,8 @@
+ #include "LuceneInc.h"
+ #include "BitSet.h"
+ #include "BitUtil.h"
++#include <boost/version.hpp>
++#include <boost/iterator/function_output_iterator.hpp>
+
+ namespace Lucene {
+
+@@ -16,8 +18,12 @@ BitSet::BitSet(uint32_t size) : bitSet(size) {
+ BitSet::~BitSet() {
+ }
+
+-const uint64_t* BitSet::getBits() {
++BitSet::get_bits_result BitSet::getBits() {
++#if BOOST_VERSION < 109000
+ return bitSet.empty() ? NULL : static_cast<const uint64_t*>(&bitSet.m_bits[0]);
++#else
++ return bitSet;
++#endif
+ }
+
+ void BitSet::clear() {
+@@ -151,6 +157,11 @@ int32_t BitSet::nextSetBit(uint32_t fromIndex) const {
+ }
+
+ void BitSet::_and(const BitSetPtr& set) {
++#if BOOST_VERSION >= 108900
++ bitset_type other = set->bitSet;
++ other.resize(bitSet.size());
++ bitSet &= other;
++#else
+ bitset_type::size_type minBlocks = std::min(bitSet.num_blocks(), set->bitSet.num_blocks());
+ for (bitset_type::size_type i = 0; i < minBlocks; ++i) {
+ bitSet.m_bits[i] &= set->bitSet.m_bits[i];
+@@ -158,9 +169,20 @@ void BitSet::_and(const BitSetPtr& set) {
+ if (bitSet.num_blocks() > minBlocks) {
+ std::fill(bitSet.m_bits.begin() + minBlocks, bitSet.m_bits.end(), bitset_type::block_type(0));
+ }
++#endif
+ }
+
+ void BitSet::_or(const BitSetPtr& set) {
++#if BOOST_VERSION >= 108900
++ if (set->bitSet.size() > bitSet.size()) {
++ resize(set->bitSet.size());
++ bitSet |= set->bitSet;
++ } else {
++ bitset_type other = set->bitSet;
++ other.resize(bitSet.size());
++ bitSet |= other;
++ }
++#else
+ bitset_type::size_type minBlocks = std::min(bitSet.num_blocks(), set->bitSet.num_blocks());
+ if (set->bitSet.size() > bitSet.size()) {
+ resize(set->bitSet.size());
+@@ -171,9 +193,20 @@ void BitSet::_or(const BitSetPtr& set) {
+ if (bitSet.num_blocks() > minBlocks) {
+ std::copy(set->bitSet.m_bits.begin() + minBlocks, set->bitSet.m_bits.end(), bitSet.m_bits.begin() + minBlocks);
+ }
++#endif
+ }
+
+ void BitSet::_xor(const BitSetPtr& set) {
++#if BOOST_VERSION >= 108900
++ if (set->bitSet.size() > bitSet.size()) {
++ resize(set->bitSet.size());
++ bitSet ^= set->bitSet;
++ } else {
++ bitset_type other = set->bitSet;
++ other.resize(bitSet.size());
++ bitSet ^= other;
++ }
++#else
+ bitset_type::size_type minBlocks = std::min(bitSet.num_blocks(), set->bitSet.num_blocks());
+ if (set->bitSet.size() > bitSet.size()) {
+ resize(set->bitSet.size());
+@@ -184,13 +217,20 @@ void BitSet::_xor(const BitSetPtr& set) {
+ if (bitSet.num_blocks() > minBlocks) {
+ std::copy(set->bitSet.m_bits.begin() + minBlocks, set->bitSet.m_bits.end(), bitSet.m_bits.begin() + minBlocks);
+ }
++#endif
+ }
+
+ void BitSet::andNot(const BitSetPtr& set) {
++#if BOOST_VERSION >= 108900
++ bitset_type other = set->bitSet;
++ other.resize(bitSet.size());
++ bitSet &= other.flip();
++#else
+ bitset_type::size_type minBlocks = std::min(bitSet.num_blocks(), set->bitSet.num_blocks());
+ for (bitset_type::size_type i = 0; i < minBlocks; ++i) {
+ bitSet.m_bits[i] &= ~set->bitSet.m_bits[i];
+ }
++#endif
+ }
+
+ bool BitSet::intersectsBitSet(const BitSetPtr& set) const {
+@@ -198,10 +238,17 @@ bool BitSet::intersectsBitSet(const BitSetPtr& set) const {
+ }
+
+ uint32_t BitSet::cardinality() {
++#if BOOST_VERSION >= 108900
++ return bitSet.count();
++#else
+ return bitSet.num_blocks() == 0 ? 0 : (uint32_t)BitUtil::pop_array((int64_t*)getBits(), 0, bitSet.num_blocks());
++#endif
+ }
+
+ void BitSet::resize(uint32_t size) {
++#if BOOST_VERSION >= 108900
++ bitSet.resize(size);
++#else
+ bitset_type::size_type old_num_blocks = bitSet.num_blocks();
+ bitset_type::size_type required_blocks = bitSet.calc_num_blocks(size);
+ if (required_blocks != old_num_blocks) {
+@@ -212,6 +259,7 @@ void BitSet::resize(uint32_t size) {
+ if (extra_bits != 0) {
+ bitSet.m_bits.back() &= ~(~static_cast<bitset_type::block_type>(0) << extra_bits);
+ }
++#endif
+ }
+
+ bool BitSet::equals(const LuceneObjectPtr& other) {
+@@ -224,6 +272,18 @@ bool BitSet::equals(const LuceneObjectPtr& other) {
+ }
+ BitSetPtr first = bitSet.num_blocks() < otherBitSet->bitSet.num_blocks() ? otherBitSet : shared_from_this();
+ BitSetPtr second = bitSet.num_blocks() < otherBitSet->bitSet.num_blocks() ? shared_from_this() : otherBitSet;
++#if BOOST_VERSION >= 108900
++ bitset_type::size_type f = first->bitSet.find_first();
++ bitset_type::size_type s = second->bitSet.find_first();
++ while (f == s) {
++ if (f == bitset_type::npos) {
++ return true;
++ }
++ f = first->bitSet.find_next(f);
++ s = second->bitSet.find_next(s);
++ }
++ return false;
++#else
+ bitset_type::size_type firstLength = first->bitSet.num_blocks();
+ bitset_type::size_type secondLength = second->bitSet.num_blocks();
+ for (bitset_type::size_type i = secondLength; i < firstLength; ++i) {
+@@ -237,18 +297,28 @@ bool BitSet::equals(const LuceneObjectPtr& other) {
+ }
+ }
+ return true;
++#endif
+ }
+
+ int32_t BitSet::hashCode() {
+ // Start with a zero hash and use a mix that results in zero if the input is zero.
+ // This effectively truncates trailing zeros without an explicit check.
+ int64_t hash = 0;
++#if BOOST_VERSION >= 108900
++ to_block_range(bitSet, boost::make_function_output_iterator(
++ [&hash](bitset_type::block_type block) {
++ hash ^= block;
++ hash = (hash << 1) | (hash >> 63); // rotate left
++ }
++ ));
++#else
+ uint32_t maxSize = bitSet.num_blocks();
+ const uint64_t* bits = getBits();
+ for (uint32_t bit = 0; bit < maxSize; ++bit) {
+ hash ^= bits[bit];
+ hash = (hash << 1) | (hash >> 63); // rotate left
+ }
++#endif
+ // Fold leftmost bits into right and add a constant to prevent empty sets from
+ // returning 0, which is too common.
+ return (int32_t)((hash >> 32) ^ hash) + 0x98761234;
+
+From 55a1238e23c0f98ff375acaf8bb4f6ebba9f2b72 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?=
+ <congdanhqx@gmail.com>
+Date: Fri, 5 Dec 2025 11:19:08 +0700
+Subject: [PATCH 2/2] BitSet: prefer builtin boost function
+
+---
+ src/core/util/BitSet.cpp | 126 +++++++--------------------------------
+ 1 file changed, 23 insertions(+), 103 deletions(-)
+
+diff --git a/src/core/util/BitSet.cpp b/src/core/util/BitSet.cpp
+index bff757bb..c2fa941b 100644
+--- a/src/core/util/BitSet.cpp
++++ b/src/core/util/BitSet.cpp
+@@ -41,16 +41,20 @@ void BitSet::fastClear(uint32_t bitIndex) {
+ }
+
+ void BitSet::clear(uint32_t fromIndex, uint32_t toIndex) {
++#if BOOST_VERSION >= 106900
++ fromIndex = std::min<bitset_type::size_type>(fromIndex, bitSet.size());
++ toIndex = std::min<bitset_type::size_type>(toIndex, bitSet.size());
++ bitSet.reset(fromIndex, toIndex - fromIndex);
++#else
+ toIndex = std::min(toIndex, (uint32_t)bitSet.size());
+ for (bitset_type::size_type i = std::min(fromIndex, (uint32_t)bitSet.size()); i < toIndex; ++i) {
+ bitSet.set(i, false);
+ }
++#endif
+ }
+
+ void BitSet::fastClear(uint32_t fromIndex, uint32_t toIndex) {
+- for (bitset_type::size_type i = fromIndex; i < toIndex; ++i) {
+- bitSet.set(i, false);
+- }
++ fastSet(fromIndex, toIndex, false);
+ }
+
+ void BitSet::set(uint32_t bitIndex) {
+@@ -76,33 +80,28 @@ void BitSet::fastSet(uint32_t bitIndex, bool value) {
+ }
+
+ void BitSet::set(uint32_t fromIndex, uint32_t toIndex) {
+- if (toIndex >= bitSet.size()) {
+- resize(toIndex + 1);
+- }
+- for (bitset_type::size_type i = fromIndex; i < toIndex; ++i) {
+- bitSet.set(i, true);
+- }
++ set(fromIndex, toIndex, true);
+ }
+
+ void BitSet::fastSet(uint32_t fromIndex, uint32_t toIndex) {
+- for (bitset_type::size_type i = fromIndex; i < toIndex; ++i) {
+- bitSet.set(i, true);
+- }
++ fastSet(fromIndex, toIndex, true);
+ }
+
+ void BitSet::set(uint32_t fromIndex, uint32_t toIndex, bool value) {
+ if (toIndex >= bitSet.size()) {
+ resize(toIndex + 1);
+ }
+- for (bitset_type::size_type i = fromIndex; i < toIndex; ++i) {
+- bitSet.set(i, value);
+- }
++ fastSet(fromIndex, toIndex, value);
+ }
+
+ void BitSet::fastSet(uint32_t fromIndex, uint32_t toIndex, bool value) {
++#if BOOST_VERSION >= 106900
++ bitSet.set(fromIndex, toIndex - fromIndex, value);
++#else
+ for (bitset_type::size_type i = fromIndex; i < toIndex; ++i) {
+ bitSet.set(i, value);
+ }
++#endif
+ }
+
+ void BitSet::flip(uint32_t bitIndex) {
+@@ -120,15 +119,17 @@ void BitSet::flip(uint32_t fromIndex, uint32_t toIndex) {
+ if (toIndex >= bitSet.size()) {
+ resize(toIndex + 1);
+ }
+- for (bitset_type::size_type i = fromIndex; i < toIndex; ++i) {
+- bitSet.flip(i);
+- }
++ fastFlip(fromIndex, toIndex);
+ }
+
+ void BitSet::fastFlip(uint32_t fromIndex, uint32_t toIndex) {
++#if BOOST_VERSION >= 106900
++ bitSet.flip(fromIndex, toIndex - fromIndex);
++#else
+ for (bitset_type::size_type i = fromIndex; i < toIndex; ++i) {
+ bitSet.flip(i);
+ }
++#endif
+ }
+
+ uint32_t BitSet::size() const {
+@@ -152,28 +153,21 @@ bool BitSet::fastGet(uint32_t bitIndex) const {
+ }
+
+ int32_t BitSet::nextSetBit(uint32_t fromIndex) const {
++#if BOOST_VERSION >= 108800
++ return bitSet.find_first(fromIndex);
++#else
+ bitset_type::size_type next = fromIndex == 0 ? bitSet.find_first() : bitSet.find_next(fromIndex - 1);
+ return next == bitset_type::npos ? -1 : next;
++#endif
+ }
+
+ void BitSet::_and(const BitSetPtr& set) {
+-#if BOOST_VERSION >= 108900
+ bitset_type other = set->bitSet;
+ other.resize(bitSet.size());
+ bitSet &= other;
+-#else
+- bitset_type::size_type minBlocks = std::min(bitSet.num_blocks(), set->bitSet.num_blocks());
+- for (bitset_type::size_type i = 0; i < minBlocks; ++i) {
+- bitSet.m_bits[i] &= set->bitSet.m_bits[i];
+- }
+- if (bitSet.num_blocks() > minBlocks) {
+- std::fill(bitSet.m_bits.begin() + minBlocks, bitSet.m_bits.end(), bitset_type::block_type(0));
+- }
+-#endif
+ }
+
+ void BitSet::_or(const BitSetPtr& set) {
+-#if BOOST_VERSION >= 108900
+ if (set->bitSet.size() > bitSet.size()) {
+ resize(set->bitSet.size());
+ bitSet |= set->bitSet;
+@@ -182,22 +176,9 @@ void BitSet::_or(const BitSetPtr& set) {
+ other.resize(bitSet.size());
+ bitSet |= other;
+ }
+-#else
+- bitset_type::size_type minBlocks = std::min(bitSet.num_blocks(), set->bitSet.num_blocks());
+- if (set->bitSet.size() > bitSet.size()) {
+- resize(set->bitSet.size());
+- }
+- for (bitset_type::size_type i = 0; i < minBlocks; ++i) {
+- bitSet.m_bits[i] |= set->bitSet.m_bits[i];
+- }
+- if (bitSet.num_blocks() > minBlocks) {
+- std::copy(set->bitSet.m_bits.begin() + minBlocks, set->bitSet.m_bits.end(), bitSet.m_bits.begin() + minBlocks);
+- }
+-#endif
+ }
+
+ void BitSet::_xor(const BitSetPtr& set) {
+-#if BOOST_VERSION >= 108900
+ if (set->bitSet.size() > bitSet.size()) {
+ resize(set->bitSet.size());
+ bitSet ^= set->bitSet;
+@@ -206,31 +187,12 @@ void BitSet::_xor(const BitSetPtr& set) {
+ other.resize(bitSet.size());
+ bitSet ^= other;
+ }
+-#else
+- bitset_type::size_type minBlocks = std::min(bitSet.num_blocks(), set->bitSet.num_blocks());
+- if (set->bitSet.size() > bitSet.size()) {
+- resize(set->bitSet.size());
+- }
+- for (bitset_type::size_type i = 0; i < minBlocks; ++i) {
+- bitSet.m_bits[i] ^= set->bitSet.m_bits[i];
+- }
+- if (bitSet.num_blocks() > minBlocks) {
+- std::copy(set->bitSet.m_bits.begin() + minBlocks, set->bitSet.m_bits.end(), bitSet.m_bits.begin() + minBlocks);
+- }
+-#endif
+ }
+
+ void BitSet::andNot(const BitSetPtr& set) {
+-#if BOOST_VERSION >= 108900
+ bitset_type other = set->bitSet;
+ other.resize(bitSet.size());
+ bitSet &= other.flip();
+-#else
+- bitset_type::size_type minBlocks = std::min(bitSet.num_blocks(), set->bitSet.num_blocks());
+- for (bitset_type::size_type i = 0; i < minBlocks; ++i) {
+- bitSet.m_bits[i] &= ~set->bitSet.m_bits[i];
+- }
+-#endif
+ }
+
+ bool BitSet::intersectsBitSet(const BitSetPtr& set) const {
+@@ -238,28 +200,11 @@ bool BitSet::intersectsBitSet(const BitSetPtr& set) const {
+ }
+
+ uint32_t BitSet::cardinality() {
+-#if BOOST_VERSION >= 108900
+ return bitSet.count();
+-#else
+- return bitSet.num_blocks() == 0 ? 0 : (uint32_t)BitUtil::pop_array((int64_t*)getBits(), 0, bitSet.num_blocks());
+-#endif
+ }
+
+ void BitSet::resize(uint32_t size) {
+-#if BOOST_VERSION >= 108900
+ bitSet.resize(size);
+-#else
+- bitset_type::size_type old_num_blocks = bitSet.num_blocks();
+- bitset_type::size_type required_blocks = bitSet.calc_num_blocks(size);
+- if (required_blocks != old_num_blocks) {
+- bitSet.m_bits.resize(required_blocks, bitset_type::block_type(0));
+- }
+- bitSet.m_num_bits = size;
+- uint64_t extra_bits = static_cast<uint64_t>(bitSet.size() % bitSet.bits_per_block);
+- if (extra_bits != 0) {
+- bitSet.m_bits.back() &= ~(~static_cast<bitset_type::block_type>(0) << extra_bits);
+- }
+-#endif
+ }
+
+ bool BitSet::equals(const LuceneObjectPtr& other) {
+@@ -272,7 +217,6 @@ bool BitSet::equals(const LuceneObjectPtr& other) {
+ }
+ BitSetPtr first = bitSet.num_blocks() < otherBitSet->bitSet.num_blocks() ? otherBitSet : shared_from_this();
+ BitSetPtr second = bitSet.num_blocks() < otherBitSet->bitSet.num_blocks() ? shared_from_this() : otherBitSet;
+-#if BOOST_VERSION >= 108900
+ bitset_type::size_type f = first->bitSet.find_first();
+ bitset_type::size_type s = second->bitSet.find_first();
+ while (f == s) {
+@@ -283,42 +227,18 @@ bool BitSet::equals(const LuceneObjectPtr& other) {
+ s = second->bitSet.find_next(s);
+ }
+ return false;
+-#else
+- bitset_type::size_type firstLength = first->bitSet.num_blocks();
+- bitset_type::size_type secondLength = second->bitSet.num_blocks();
+- for (bitset_type::size_type i = secondLength; i < firstLength; ++i) {
+- if (first->bitSet.m_bits[i] != 0) {
+- return false;
+- }
+- }
+- for (bitset_type::size_type i = 0; i < secondLength; ++i) {
+- if (first->bitSet.m_bits[i] != second->bitSet.m_bits[i]) {
+- return false;
+- }
+- }
+- return true;
+-#endif
+ }
+
+ int32_t BitSet::hashCode() {
+ // Start with a zero hash and use a mix that results in zero if the input is zero.
+ // This effectively truncates trailing zeros without an explicit check.
+ int64_t hash = 0;
+-#if BOOST_VERSION >= 108900
+ to_block_range(bitSet, boost::make_function_output_iterator(
+ [&hash](bitset_type::block_type block) {
+ hash ^= block;
+ hash = (hash << 1) | (hash >> 63); // rotate left
+ }
+ ));
+-#else
+- uint32_t maxSize = bitSet.num_blocks();
+- const uint64_t* bits = getBits();
+- for (uint32_t bit = 0; bit < maxSize; ++bit) {
+- hash ^= bits[bit];
+- hash = (hash << 1) | (hash >> 63); // rotate left
+- }
+-#endif
+ // Fold leftmost bits into right and add a constant to prevent empty sets from
+ // returning 0, which is too common.
+ return (int32_t)((hash >> 32) ^ hash) + 0x98761234;
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-boost-bind.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-boost-bind.patch
new file mode 100644
index 000000000000..691247f8d581
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-boost-bind.patch
@@ -0,0 +1,51 @@
+https://github.com/luceneplusplus/LucenePlusPlus/pull/223
+
+From: rewine <luhongxu@deepin.org>
+Date: Thu, 12 Feb 2026 10:33:33 +0800
+Subject: [PATCH] Fix Boost.Bind deprecation warnings with version compatibility
+
+Use conditional compilation to support both old and new Boost.Bind API:
+- Boost >= 1.73.0: Use boost/bind/bind.hpp
+- Boost < 1.73.0: Use boost/bind.hpp
+
+This approach maintains backward compatibility while fixing deprecation
+warnings in newer Boost versions.
+---
+ src/core/search/ParallelMultiSearcher.cpp | 5 +++++
+ src/core/util/ThreadPool.cpp | 6 ++++++
+ 2 files changed, 11 insertions(+)
+
+diff --git a/src/core/search/ParallelMultiSearcher.cpp b/src/core/search/ParallelMultiSearcher.cpp
+index f3bf4af0..1d00b612 100644
+--- a/src/core/search/ParallelMultiSearcher.cpp
++++ b/src/core/search/ParallelMultiSearcher.cpp
+@@ -5,7 +5,12 @@
+ /////////////////////////////////////////////////////////////////////////////
+
+ #include "LuceneInc.h"
++#include <boost/version.hpp>
++#if BOOST_VERSION >= 107300 // Boost 1.73.0+
++#include <boost/bind/bind.hpp>
++#else
+ #include <boost/bind.hpp>
++#endif
+ #include <boost/bind/protect.hpp>
+ #include "ParallelMultiSearcher.h"
+ #include "_MultiSearcher.h"
+diff --git a/src/core/util/ThreadPool.cpp b/src/core/util/ThreadPool.cpp
+index 116f521c..ee6640b3 100644
+--- a/src/core/util/ThreadPool.cpp
++++ b/src/core/util/ThreadPool.cpp
+@@ -5,6 +5,12 @@
+ /////////////////////////////////////////////////////////////////////////////
+
+ #include "LuceneInc.h"
++#include <boost/version.hpp>
++#if BOOST_VERSION >= 107300 // Boost 1.73.0+
++#include <boost/bind/bind.hpp>
++#else
++#include <boost/bind.hpp>
++#endif
+ #include "ThreadPool.h"
+
+ namespace Lucene {
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-cmake4.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-cmake4.patch
new file mode 100644
index 000000000000..4e4805fc852d
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-cmake4.patch
@@ -0,0 +1,62 @@
+From: https://github.com/luceneplusplus/LucenePlusPlus/pull/218
+
+From: Gianfranco Costamagna <locutusofborg@debian.org>
+Date: Mon, 8 Sep 2025 15:05:10 +0200
+Subject: [PATCH] Bump minimum required cmake version to 3.10, for new cmake 4
+ compatibility fix
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -2,7 +2,7 @@
+ # init
+ ####################################
+
+-cmake_minimum_required(VERSION 3.5)
++cmake_minimum_required(VERSION 3.10)
+
+ project(lucene++)
+
+--- a/cmake/cotire.cmake
++++ b/cmake/cotire.cmake
+@@ -37,7 +37,7 @@ set(__COTIRE_INCLUDED TRUE)
+ if (NOT CMAKE_SCRIPT_MODE_FILE)
+ cmake_policy(PUSH)
+ endif()
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 3.10)
+ if (NOT CMAKE_SCRIPT_MODE_FILE)
+ cmake_policy(POP)
+ endif()
+--- a/src/test/gtest/CMakeLists.txt
++++ b/src/test/gtest/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ # Note: CMake support is community-based. The maintainers do not use CMake
+ # internally.
+
+-cmake_minimum_required(VERSION 2.8.8)
++cmake_minimum_required(VERSION 3.10)
+
+ if (POLICY CMP0048)
+ cmake_policy(SET CMP0048 NEW)
+--- a/src/test/gtest/googlemock/CMakeLists.txt
++++ b/src/test/gtest/googlemock/CMakeLists.txt
+@@ -42,7 +42,7 @@ else()
+ cmake_policy(SET CMP0048 NEW)
+ project(gmock VERSION ${GOOGLETEST_VERSION} LANGUAGES CXX C)
+ endif()
+-cmake_minimum_required(VERSION 2.6.4)
++cmake_minimum_required(VERSION 3.10)
+
+ if (COMMAND set_up_hermetic_build)
+ set_up_hermetic_build()
+--- a/src/test/gtest/googletest/CMakeLists.txt
++++ b/src/test/gtest/googletest/CMakeLists.txt
+@@ -53,7 +53,7 @@ else()
+ cmake_policy(SET CMP0048 NEW)
+ project(gtest VERSION ${GOOGLETEST_VERSION} LANGUAGES CXX C)
+ endif()
+-cmake_minimum_required(VERSION 2.6.4)
++cmake_minimum_required(VERSION 3.10)
+
+ if (POLICY CMP0063) # Visibility
+ cmake_policy(SET CMP0063 NEW)
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-gcc15.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-gcc15.patch
new file mode 100644
index 000000000000..44d935e8eb14
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-gcc15.patch
@@ -0,0 +1,32 @@
+From: https://github.com/luceneplusplus/LucenePlusPlus/pull/218
+
+From: Gianfranco Costamagna <locutusofborg@debian.org>
+Date: Mon, 8 Sep 2025 15:05:58 +0200
+Subject: [PATCH] Bump minimum std-version to 17, fixing FTBFS with new gcc-15
+ and googletest
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -47,7 +47,7 @@ include(dependencies)
+ include(Lucene++Docs)
+
+ # Enable C++11
+-set(CMAKE_CXX_STANDARD 11)
++set(CMAKE_CXX_STANDARD 17)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+ ####################################
+--- a/src/test/gtest/CMakeLists.txt
++++ b/src/test/gtest/CMakeLists.txt
+@@ -11,9 +11,9 @@ project(googletest-distribution)
+ set(GOOGLETEST_VERSION 1.10.0)
+
+ if (CMAKE_VERSION VERSION_LESS "3.1")
+- add_definitions(-std=c++11)
++ add_definitions(-std=c++17)
+ else()
+- set(CMAKE_CXX_STANDARD 11)
++ set(CMAKE_CXX_STANDARD 17)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+ if(NOT CYGWIN)
+ set(CMAKE_CXX_EXTENSIONS OFF)
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-no-inline.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-no-inline.patch
new file mode 100644
index 000000000000..58b00b2295e1
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-no-inline.patch
@@ -0,0 +1,70 @@
+From https://github.com/luceneplusplus/LucenePlusPlus/pull/200
+Bug: https://bugs.gentoo.org/973146
+Pruned compiler errors to relevant lines.
+
+From: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
+Date: Sat, 24 Feb 2024 21:26:58 +0100
+Subject: [PATCH] Update DefaultSimilarity.cpp
+
+This fixes a linker failure when building tests (lto related?)
+https://launchpadlibrarian.net/715939877/buildlog_ubuntu-noble-amd64.lucene++_3.0.9-1_BUILDING.txt.gz
+..
+/usr/bin/ld: /tmp/ccUJivoA.ltrans35.ltrans.o:(.data.rel.ro+0x558): undefined reference to `Lucene::DefaultSimilarity::queryNorm(double)'
+/usr/bin/ld: /tmp/ccUJivoA.ltrans35.ltrans.o:(.data.rel.ro+0x568): undefined reference to `Lucene::DefaultSimilarity::sloppyFreq(int)'
+/usr/bin/ld: /tmp/ccUJivoA.ltrans35.ltrans.o:(.data.rel.ro+0x570): undefined reference to `Lucene::DefaultSimilarity::tf(double)'
+/usr/bin/ld: /tmp/ccUJivoA.ltrans35.ltrans.o:(.data.rel.ro+0x588): undefined reference to `Lucene::DefaultSimilarity::idf(int, int)'
+/usr/bin/ld: /tmp/ccUJivoA.ltrans35.ltrans.o:(.data.rel.ro+0x590): undefined reference to `Lucene::DefaultSimilarity::coord(int, int)'
+/usr/bin/ld: /tmp/ccUJivoA.ltrans72.ltrans.o:(.data.rel.ro+0x360): undefined reference to `Lucene::DefaultSimilarity::lengthNorm(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, int)'
+..
+---
+ src/core/search/DefaultSimilarity.cpp | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/src/core/search/DefaultSimilarity.cpp b/src/core/search/DefaultSimilarity.cpp
+index c98f2d95..da4c3db2 100644
+--- a/src/core/search/DefaultSimilarity.cpp
++++ b/src/core/search/DefaultSimilarity.cpp
+@@ -27,35 +27,35 @@ double DefaultSimilarity::computeNorm(const String& fieldName, const FieldInvert
+ return (state->getBoost() * lengthNorm(fieldName, numTerms));
+ }
+
+-inline double DefaultSimilarity::lengthNorm(const String& fieldName, int32_t numTokens) {
++double DefaultSimilarity::lengthNorm(const String& fieldName, int32_t numTokens) {
+ return (double)(1.0 / std::sqrt((double)numTokens));
+ }
+
+-inline double DefaultSimilarity::queryNorm(double sumOfSquaredWeights) {
++double DefaultSimilarity::queryNorm(double sumOfSquaredWeights) {
+ return (double)(1.0 / std::sqrt(sumOfSquaredWeights));
+ }
+
+-inline double DefaultSimilarity::tf(double freq) {
++double DefaultSimilarity::tf(double freq) {
+ return (double)std::sqrt(freq);
+ }
+
+-inline double DefaultSimilarity::sloppyFreq(int32_t distance) {
++double DefaultSimilarity::sloppyFreq(int32_t distance) {
+ return (1.0 / (double)(distance + 1));
+ }
+
+-inline double DefaultSimilarity::idf(int32_t docFreq, int32_t numDocs) {
++double DefaultSimilarity::idf(int32_t docFreq, int32_t numDocs) {
+ return (double)(std::log((double)numDocs / (double)(docFreq + 1)) + 1.0);
+ }
+
+-inline double DefaultSimilarity::coord(int32_t overlap, int32_t maxOverlap) {
++double DefaultSimilarity::coord(int32_t overlap, int32_t maxOverlap) {
+ return (double)overlap / (double)maxOverlap;
+ }
+
+-inline void DefaultSimilarity::setDiscountOverlaps(bool v) {
++void DefaultSimilarity::setDiscountOverlaps(bool v) {
+ discountOverlaps = v;
+ }
+
+-inline bool DefaultSimilarity::getDiscountOverlaps() {
++bool DefaultSimilarity::getDiscountOverlaps() {
+ return discountOverlaps;
+ }
+
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-no-pch.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-no-pch.patch
new file mode 100644
index 000000000000..7db9599d2982
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-no-pch.patch
@@ -0,0 +1,51 @@
+Remove precompiled header support as per Gentoo QA policy.
+Bug: https://bugs.gentoo.org/920845
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 7ce313c..cb2e0c4 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -32,9 +32,6 @@ set(LIB_DESTINATION
+ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+ include(options.cmake)
+
+-# pre-compiled headers support
+-include(cotire)
+-
+ # if setup using the Toolchain-llvm.cmake file, then use llvm...
+ if(ENABLE_LLVM)
+ include(Toolchain-llvm)
+diff --git a/src/contrib/CMakeLists.txt b/src/contrib/CMakeLists.txt
+index 7252b73..fa4bc1a 100644
+--- a/src/contrib/CMakeLists.txt
++++ b/src/contrib/CMakeLists.txt
+@@ -89,8 +89,6 @@ set_target_properties(lucene++-contrib
+ VERSION ${lucene++_VERSION}
+ SOVERSION ${lucene++_SOVERSION})
+
+-cotire(lucene++-contrib)
+-
+ install(TARGETS lucene++-contrib
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ COMPONENT runtime)
+diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
+index 657de54..564286d 100644
+--- a/src/core/CMakeLists.txt
++++ b/src/core/CMakeLists.txt
+@@ -78,7 +78,6 @@ set_target_properties(lucene++
+ VERSION ${lucene++_VERSION}
+ SOVERSION ${lucene++_SOVERSION})
+
+-cotire(lucene++)
+
+
+ install(TARGETS lucene++
+diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt
+index a5c1b28..2e9f574 100644
+--- a/src/test/CMakeLists.txt
++++ b/src/test/CMakeLists.txt
+@@ -75,4 +75,3 @@ target_link_libraries(lucene++-tester
+ ####################################
+ target_compile_options(lucene++-tester PRIVATE -DLPP_EXPOSE_INTERNAL)
+
+-cotire(lucene++-tester)
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-odr-fixes.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-odr-fixes.patch
new file mode 100644
index 000000000000..6a63ab168297
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-odr-fixes.patch
@@ -0,0 +1,343 @@
+https://github.com/luceneplusplus/LucenePlusPlus/pull/226
+
+diff --git a/src/test/index/AtomicUpdateTest.cpp b/src/test/index/AtomicUpdateTest.cpp
+index 0535ee0..4dbbef8 100644
+--- a/src/test/index/AtomicUpdateTest.cpp
++++ b/src/test/index/AtomicUpdateTest.cpp
+@@ -24,13 +24,13 @@ using namespace Lucene;
+
+ typedef LuceneTestFixture AtomicUpdateTest;
+
+-class MockIndexWriter : public IndexWriter {
++class AUTMockIndexWriter : public IndexWriter {
+ public:
+- MockIndexWriter(const DirectoryPtr& dir, const AnalyzerPtr& a, bool create, int32_t mfl) : IndexWriter(dir, a, create, mfl) {
++ AUTMockIndexWriter(const DirectoryPtr& dir, const AnalyzerPtr& a, bool create, int32_t mfl) : IndexWriter(dir, a, create, mfl) {
+ random = newLucene<Random>();
+ }
+
+- virtual ~MockIndexWriter() {
++ virtual ~AUTMockIndexWriter() {
+ }
+
+ protected:
+@@ -140,7 +140,7 @@ static void runTest(const DirectoryPtr& directory) {
+ Collection<AtomicTimedThreadPtr> threads(Collection<AtomicTimedThreadPtr>::newInstance(4));
+ AnalyzerPtr analyzer = newLucene<SimpleAnalyzer>();
+
+- IndexWriterPtr writer = newLucene<MockIndexWriter>(directory, analyzer, true, IndexWriter::MaxFieldLengthUNLIMITED);
++ IndexWriterPtr writer = newLucene<AUTMockIndexWriter>(directory, analyzer, true, IndexWriter::MaxFieldLengthUNLIMITED);
+
+ writer->setMaxBufferedDocs(7);
+ writer->setMergeFactor(3);
+diff --git a/src/test/index/IndexReaderCloneNormsTest.cpp b/src/test/index/IndexReaderCloneNormsTest.cpp
+index cdd213f..2deab71 100644
+--- a/src/test/index/IndexReaderCloneNormsTest.cpp
++++ b/src/test/index/IndexReaderCloneNormsTest.cpp
+@@ -22,9 +22,9 @@
+
+ using namespace Lucene;
+
+-class SimilarityOne : public DefaultSimilarity {
++class IRCNTSimilarityOne : public DefaultSimilarity {
+ public:
+- virtual ~SimilarityOne() {
++ virtual ~IRCNTSimilarityOne() {
+ }
+
+ public:
+@@ -36,7 +36,7 @@ public:
+ class IndexReaderCloneNormsTest : public LuceneTestFixture {
+ public:
+ IndexReaderCloneNormsTest() {
+- similarityOne = newLucene<SimilarityOne>();
++ similarityOne = newLucene<IRCNTSimilarityOne>();
+ anlzr = newLucene<StandardAnalyzer>(LuceneVersion::LUCENE_CURRENT);
+ numDocNorms = 0;
+ lastNorm = 0.0;
+diff --git a/src/test/index/IndexWriterExceptionsTest.cpp b/src/test/index/IndexWriterExceptionsTest.cpp
+index ba05c4a..4e5ded3 100644
+--- a/src/test/index/IndexWriterExceptionsTest.cpp
++++ b/src/test/index/IndexWriterExceptionsTest.cpp
+@@ -119,13 +119,13 @@ public:
+ }
+ };
+
+-class MockIndexWriter : public IndexWriter {
++class IWETMockIndexWriter : public IndexWriter {
+ public:
+- MockIndexWriter(const DirectoryPtr& dir, const AnalyzerPtr& a, bool create, int32_t mfl) : IndexWriter(dir, a, create, mfl) {
++ IWETMockIndexWriter(const DirectoryPtr& dir, const AnalyzerPtr& a, bool create, int32_t mfl) : IndexWriter(dir, a, create, mfl) {
+ this->r = newLucene<Random>(17);
+ }
+
+- virtual ~MockIndexWriter() {
++ virtual ~IWETMockIndexWriter() {
+ }
+
+ protected:
+@@ -142,7 +142,7 @@ public:
+
+ TEST_F(IndexWriterExceptionsTest, testRandomExceptions) {
+ MockRAMDirectoryPtr dir = newLucene<MockRAMDirectory>();
+- IndexWriterPtr writer = newLucene<MockIndexWriter>(dir, newLucene<WhitespaceAnalyzer>(), true, IndexWriter::MaxFieldLengthLIMITED);
++ IndexWriterPtr writer = newLucene<IWETMockIndexWriter>(dir, newLucene<WhitespaceAnalyzer>(), true, IndexWriter::MaxFieldLengthLIMITED);
+ boost::dynamic_pointer_cast<ConcurrentMergeScheduler>(writer->getMergeScheduler())->setSuppressExceptions();
+
+ writer->setRAMBufferSizeMB(0.1);
+@@ -174,7 +174,7 @@ TEST_F(IndexWriterExceptionsTest, testRandomExceptions) {
+
+ TEST_F(IndexWriterExceptionsTest, testRandomExceptionsThreads) {
+ MockRAMDirectoryPtr dir = newLucene<MockRAMDirectory>();
+- IndexWriterPtr writer = newLucene<MockIndexWriter>(dir, newLucene<WhitespaceAnalyzer>(), true, IndexWriter::MaxFieldLengthLIMITED);
++ IndexWriterPtr writer = newLucene<IWETMockIndexWriter>(dir, newLucene<WhitespaceAnalyzer>(), true, IndexWriter::MaxFieldLengthLIMITED);
+ boost::dynamic_pointer_cast<ConcurrentMergeScheduler>(writer->getMergeScheduler())->setSuppressExceptions();
+
+ writer->setRAMBufferSizeMB(0.2);
+diff --git a/src/test/index/NormsTest.cpp b/src/test/index/NormsTest.cpp
+index 8212e3b..0321436 100644
+--- a/src/test/index/NormsTest.cpp
++++ b/src/test/index/NormsTest.cpp
+@@ -18,12 +18,12 @@
+
+ using namespace Lucene;
+
+-class SimilarityOne : public DefaultSimilarity {
++class NTSimilarityOne : public DefaultSimilarity {
+ public:
+- virtual ~SimilarityOne() {
++ virtual ~NTSimilarityOne() {
+ }
+
+- LUCENE_CLASS(SimilarityOne);
++ LUCENE_CLASS(NTSimilarityOne);
+
+ public:
+ virtual double lengthNorm(const String& fieldName, int32_t numTokens) {
+@@ -35,7 +35,7 @@ public:
+ class NormsTest : public LuceneTestFixture {
+ public:
+ NormsTest() {
+- similarityOne = newLucene<SimilarityOne>();
++ similarityOne = newLucene<NTSimilarityOne>();
+ lastNorm = 0.0;
+ normDelta = 0.001;
+ numDocNorms = 0;
+diff --git a/src/test/index/OmitTfTest.cpp b/src/test/index/OmitTfTest.cpp
+index 618c1dd..0439215 100644
+--- a/src/test/index/OmitTfTest.cpp
++++ b/src/test/index/OmitTfTest.cpp
+@@ -29,7 +29,7 @@ using namespace Lucene;
+
+ typedef LuceneTestFixture OmitTfTest;
+
+-DECLARE_SHARED_PTR(CountingHitCollector)
++DECLARE_SHARED_PTR(OITCountingHitCollector)
+
+ class SimpleIDFExplanation : public IDFExplanation {
+ public:
+@@ -85,18 +85,18 @@ public:
+ }
+ };
+
+-class CountingHitCollector : public Collector {
++class OITCountingHitCollector : public Collector {
+ public:
+- CountingHitCollector() {
++ OITCountingHitCollector() {
+ count = 0;
+ sum = 0;
+ docBase = -1;
+ }
+
+- virtual ~CountingHitCollector() {
++ virtual ~OITCountingHitCollector() {
+ }
+
+- LUCENE_CLASS(CountingHitCollector);
++ LUCENE_CLASS(OITCountingHitCollector);
+
+ public:
+ int32_t count;
+@@ -306,7 +306,7 @@ TEST_F(OmitTfTest, testNoPrxFile) {
+
+ namespace TestBasic {
+
+-class CountingHitCollectorQ1 : public CountingHitCollector {
++class CountingHitCollectorQ1 : public OITCountingHitCollector {
+ protected:
+ ScorerPtr scorer;
+
+@@ -317,11 +317,11 @@ public:
+
+ virtual void collect(int32_t doc) {
+ EXPECT_EQ(scorer->score(), 1.0);
+- CountingHitCollector::collect(doc);
++ OITCountingHitCollector::collect(doc);
+ }
+ };
+
+-class CountingHitCollectorQ2 : public CountingHitCollector {
++class CountingHitCollectorQ2 : public OITCountingHitCollector {
+ protected:
+ ScorerPtr scorer;
+
+@@ -332,11 +332,11 @@ public:
+
+ virtual void collect(int32_t doc) {
+ EXPECT_EQ(scorer->score(), 1.0 + (double)doc);
+- CountingHitCollector::collect(doc);
++ OITCountingHitCollector::collect(doc);
+ }
+ };
+
+-class CountingHitCollectorQ3 : public CountingHitCollector {
++class CountingHitCollectorQ3 : public OITCountingHitCollector {
+ protected:
+ ScorerPtr scorer;
+
+@@ -348,11 +348,11 @@ public:
+ virtual void collect(int32_t doc) {
+ EXPECT_EQ(scorer->score(), 1.0);
+ EXPECT_NE(doc % 2, 0);
+- CountingHitCollector::collect(doc);
++ OITCountingHitCollector::collect(doc);
+ }
+ };
+
+-class CountingHitCollectorQ4 : public CountingHitCollector {
++class CountingHitCollectorQ4 : public OITCountingHitCollector {
+ protected:
+ ScorerPtr scorer;
+
+@@ -364,7 +364,7 @@ public:
+ virtual void collect(int32_t doc) {
+ EXPECT_EQ(scorer->score(), 1.0);
+ EXPECT_EQ(doc % 2, 0);
+- CountingHitCollector::collect(doc);
++ OITCountingHitCollector::collect(doc);
+ }
+ };
+
+@@ -424,7 +424,7 @@ TEST_F(OmitTfTest, testBasic) {
+ bq->add(q1, BooleanClause::MUST);
+ bq->add(q4, BooleanClause::MUST);
+
+- CountingHitCollectorPtr collector = newLucene<CountingHitCollector>();
++ OITCountingHitCollectorPtr collector = newLucene<OITCountingHitCollector>();
+
+ searcher->search(bq, collector);
+ EXPECT_EQ(15, collector->count);
+diff --git a/src/test/search/ScorerPerfTest.cpp b/src/test/search/ScorerPerfTest.cpp
+index 9612c31..0ec1253 100644
+--- a/src/test/search/ScorerPerfTest.cpp
++++ b/src/test/search/ScorerPerfTest.cpp
+@@ -21,18 +21,18 @@
+
+ using namespace Lucene;
+
+-DECLARE_SHARED_PTR(CountingHitCollector)
++DECLARE_SHARED_PTR(SPTCountingHitCollector)
+ DECLARE_SHARED_PTR(MatchingHitCollector)
+
+-class CountingHitCollector : public Collector {
++class SPTCountingHitCollector : public Collector {
+ public:
+- CountingHitCollector() {
++ SPTCountingHitCollector() {
+ count = 0;
+ sum = 0;
+ docBase = 0;
+ }
+
+- virtual ~CountingHitCollector() {
++ virtual ~SPTCountingHitCollector() {
+ }
+
+ public:
+@@ -66,7 +66,7 @@ public:
+ }
+ };
+
+-class MatchingHitCollector : public CountingHitCollector {
++class MatchingHitCollector : public SPTCountingHitCollector {
+ public:
+ MatchingHitCollector(const BitSetPtr& answer) {
+ this->answer = answer;
+@@ -86,7 +86,7 @@ public:
+ if (pos != doc + docBase) {
+ boost::throw_exception(RuntimeException(L"Expected doc " + StringUtils::toString(pos) + L" but got " + StringUtils::toString(doc + docBase)));
+ }
+- CountingHitCollector::collect(doc);
++ SPTCountingHitCollector::collect(doc);
+ }
+ };
+
+@@ -160,7 +160,7 @@ public:
+ result = addClause(bq, result);
+ }
+
+- CountingHitCollectorPtr hc = newLucene<MatchingHitCollector>(result);
++ SPTCountingHitCollectorPtr hc = newLucene<MatchingHitCollector>(result);
+ s->search(bq, hc);
+
+ EXPECT_EQ(result->cardinality(), hc->getCount());
+@@ -182,7 +182,7 @@ public:
+ oq->add(bq, BooleanClause::MUST);
+ }
+
+- CountingHitCollectorPtr hc = newLucene<MatchingHitCollector>(result);
++ SPTCountingHitCollectorPtr hc = newLucene<MatchingHitCollector>(result);
+ s->search(oq, hc);
+
+ EXPECT_EQ(result->cardinality(), hc->getCount());
+diff --git a/src/test/store/BufferedIndexOutputTest.cpp b/src/test/store/BufferedIndexOutputTest.cpp
+index 564a875..fd8490d 100644
+--- a/src/test/store/BufferedIndexOutputTest.cpp
++++ b/src/test/store/BufferedIndexOutputTest.cpp
+@@ -97,9 +97,9 @@ TEST_F(BufferedIndexOutputTest, testWriteChars) {
+
+ namespace TestCopyBytes {
+
+-class SourceIndexInput : public BufferedIndexInput {
++class BIOTSourceIndexInput : public BufferedIndexInput {
+ public:
+- SourceIndexInput(const uint8_t* b, int32_t length) : inputBytes(b), inputLength(length), nextByte(0) {
++ BIOTSourceIndexInput(const uint8_t* b, int32_t length) : inputBytes(b), inputLength(length), nextByte(0) {
+ }
+
+ virtual void readInternal(uint8_t* b, int32_t offset, int32_t length) {
+@@ -129,7 +129,7 @@ protected:
+ TEST_F(BufferedIndexOutputTest, testCopyBytes) {
+ ByteArray sourceBytes(ByteArray::newInstance(32768));
+ std::generate(sourceBytes.get(), sourceBytes.get() + 32768, rand);
+- BufferedIndexInputPtr indexSource(newLucene<TestCopyBytes::SourceIndexInput>(sourceBytes.get(), 32768));
++ BufferedIndexInputPtr indexSource(newLucene<TestCopyBytes::BIOTSourceIndexInput>(sourceBytes.get(), 32768));
+
+ ByteArray outputBytes(ByteArray::newInstance(32768));
+ TestableBufferedIndexOutput indexOutput(outputBytes.get(), 32768);
+diff --git a/src/test/store/IndexOutputTest.cpp b/src/test/store/IndexOutputTest.cpp
+index 15ff86b..374da5e 100644
+--- a/src/test/store/IndexOutputTest.cpp
++++ b/src/test/store/IndexOutputTest.cpp
+@@ -115,9 +115,9 @@ TEST_F(IndexOutputTest, testWriteChars) {
+
+ namespace TestCopyBytes {
+
+-class SourceIndexInput : public IndexInput {
++class IOTSourceIndexInput : public IndexInput {
+ public:
+- SourceIndexInput(const uint8_t* b, int32_t length) : inputBytes(b), inputLength(length), nextByte(0) {
++ IOTSourceIndexInput(const uint8_t* b, int32_t length) : inputBytes(b), inputLength(length), nextByte(0) {
+ }
+
+ virtual uint8_t readByte() {
+@@ -158,7 +158,7 @@ protected:
+ TEST_F(IndexOutputTest, testCopyBytes) {
+ ByteArray sourceBytes(ByteArray::newInstance(32768));
+ std::generate(sourceBytes.get(), sourceBytes.get() + 32768, rand);
+- IndexInputPtr indexSource(newLucene<TestCopyBytes::SourceIndexInput>(sourceBytes.get(), 32768));
++ IndexInputPtr indexSource(newLucene<TestCopyBytes::IOTSourceIndexInput>(sourceBytes.get(), 32768));
+
+ ByteArray outputBytes(ByteArray::newInstance(32768));
+ TestableIndexOutput indexOutput(outputBytes.get(), 32768);
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-pkgconfig.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-pkgconfig.patch
new file mode 100644
index 000000000000..36fea7bb60dd
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-pkgconfig.patch
@@ -0,0 +1,24 @@
+https://github.com/luceneplusplus/LucenePlusPlus/commit/f40f59c6e169b4e16b7a6439ecb26a629c6540d1
+
+From f40f59c6e169b4e16b7a6439ecb26a629c6540d1 Mon Sep 17 00:00:00 2001
+From: Sergey Fedorov <vital.had@gmail.com>
+Date: Thu, 14 Mar 2024 20:37:34 +0800
+Subject: [PATCH] Fix install path for liblucene++.pc
+
+---
+ src/config/core/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/config/core/CMakeLists.txt b/src/config/core/CMakeLists.txt
+index e5691f54..69cfefcc 100644
+--- a/src/config/core/CMakeLists.txt
++++ b/src/config/core/CMakeLists.txt
+@@ -9,7 +9,7 @@ if(NOT WIN32)
+ install(
+ FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/liblucene++.pc"
+- DESTINATION "${LIB_DESTINATION}/pkgconfig")
++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
+ endif()
+
+
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-system-gtest.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-system-gtest.patch
new file mode 100644
index 000000000000..11469a2c60fb
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-system-gtest.patch
@@ -0,0 +1,21 @@
+From: https://github.com/luceneplusplus/LucenePlusPlus/pull/218
+
+From: Gianfranco Costamagna <locutusofborg@debian.org>
+Date: Mon, 8 Sep 2025 15:05:34 +0200
+Subject: [PATCH] Find and use system googletest if available
+
+--- a/src/test/CMakeLists.txt
++++ b/src/test/CMakeLists.txt
+@@ -8,8 +8,10 @@ if(MSVC)
+ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+ endif()
+
+-add_subdirectory(gtest)
+-
++find_package(GTest)
++if(NOT GTEST_FOUND)
++ add_subdirectory(gtest)
++endif()
+
+ ####################################
+ # src
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-tests-gtest-cstdint.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-tests-gtest-cstdint.patch
new file mode 100644
index 000000000000..02cb8956543e
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-tests-gtest-cstdint.patch
@@ -0,0 +1,10 @@
+--- a/src/test/gtest/googletest/src/gtest-death-test.cc
++++ b/src/test/gtest/googletest/src/gtest-death-test.cc
+@@ -32,6 +32,7 @@
+
+ #include "gtest/gtest-death-test.h"
+
++#include <cstdint>
+ #include <utility>
+
+ #include "gtest/internal/gtest-port.h"
diff --git a/dev-cpp/lucene++/files/lucene++-3.0.9-threadpool-shutdown.patch b/dev-cpp/lucene++/files/lucene++-3.0.9-threadpool-shutdown.patch
new file mode 100644
index 000000000000..c0f1ddb4e77a
--- /dev/null
+++ b/dev-cpp/lucene++/files/lucene++-3.0.9-threadpool-shutdown.patch
@@ -0,0 +1,14 @@
+https://github.com/luceneplusplus/LucenePlusPlus/pull/227
+
+diff --git a/src/core/util/ThreadPool.cpp b/src/core/util/ThreadPool.cpp
+index ee6640b..38f4170 100644
+--- a/src/core/util/ThreadPool.cpp
++++ b/src/core/util/ThreadPool.cpp
+@@ -30,6 +30,7 @@ ThreadPool::ThreadPool()
+ }
+
+ ThreadPool::~ThreadPool() {
++ io_context.stop();
+ threadGroup.join_all(); // wait for all competition
+ }
+
diff --git a/dev-cpp/lucene++/lucene++-3.0.9-r2.ebuild b/dev-cpp/lucene++/lucene++-3.0.9-r2.ebuild
new file mode 100644
index 000000000000..0fc356701706
--- /dev/null
+++ b/dev-cpp/lucene++/lucene++-3.0.9-r2.ebuild
@@ -0,0 +1,55 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MY_P="LucenePlusPlus-rel_${PV}"
+inherit edo cmake flag-o-matic
+
+DESCRIPTION="C++ port of Lucene library, a high-performance, full-featured text search engine"
+HOMEPAGE="https://github.com/luceneplusplus/LucenePlusPlus"
+SRC_URI="https://github.com/luceneplusplus/LucenePlusPlus/archive/rel_${PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="|| ( LGPL-3 Apache-2.0 )"
+SLOT="0"
+KEYWORDS="amd64 ~hppa ~loong ppc ppc64 ~sparc x86"
+IUSE="debug test"
+RESTRICT="!test? ( test )"
+
+DEPEND="dev-libs/boost:=[zlib]"
+RDEPEND="${DEPEND}"
+BDEPEND="
+ test? ( dev-cpp/gtest )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-3.0.7-boost-1.85.patch"
+ "${FILESDIR}/${PN}-3.0.9-boost-1.87.patch"
+ "${FILESDIR}/${PN}-3.0.9-pkgconfig.patch"
+ "${FILESDIR}/${PN}-3.0.9-tests-gtest-cstdint.patch"
+ "${FILESDIR}/${PN}-3.0.9-cmake4.patch"
+ "${FILESDIR}/${PN}-3.0.9-system-gtest.patch"
+ "${FILESDIR}/${PN}-3.0.9-gcc15.patch"
+ "${FILESDIR}/${PN}-3.0.9-boost-1.89.patch"
+ "${FILESDIR}/${PN}-3.0.9-boost-1.90.patch"
+ "${FILESDIR}/${PN}-3.0.9-no-inline.patch"
+ "${FILESDIR}/${PN}-3.0.9-no-pch.patch"
+ "${FILESDIR}/${PN}-3.0.9-boost-bind.patch"
+ "${FILESDIR}/${PN}-3.0.9-odr-fixes.patch"
+ "${FILESDIR}/${PN}-3.0.9-threadpool-shutdown.patch"
+)
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_DEMO=OFF
+ -DENABLE_TEST=$(usex test)
+ )
+
+ cmake_src_configure
+}
+
+src_test() {
+ edo "${BUILD_DIR}"/src/test/lucene++-tester \
+ --test_dir="${S}"/src/test/testfiles
+}
diff --git a/dev-cpp/lucene++/metadata.xml b/dev-cpp/lucene++/metadata.xml
new file mode 100644
index 000000000000..5f33304011d5
--- /dev/null
+++ b/dev-cpp/lucene++/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>