summaryrefslogtreecommitdiff
path: root/dev-cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dev-cpp')
-rw-r--r--dev-cpp/catch/catch-1.12.2-r2.ebuild2
-rw-r--r--dev-cpp/catch/catch-3.8.1.ebuild2
-rw-r--r--dev-cpp/clucene/clucene-2.3.3.4-r10.ebuild2
-rw-r--r--dev-cpp/clucene/clucene-2.3.3.4-r11.ebuild2
-rw-r--r--dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r6.ebuild41
-rw-r--r--dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-char-traits-patch.patch436
-rw-r--r--dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-json-unique-ptr.patch221
-rw-r--r--dev-cpp/doctest/doctest-2.4.12.ebuild2
-rw-r--r--dev-cpp/fkYAML/Manifest2
-rw-r--r--dev-cpp/fkYAML/files/fkYAML-0.4.2-Remove-the-space-between-operator-and-_yaml.patch44
-rw-r--r--dev-cpp/fkYAML/files/fkYAML-0.4.2-Use-system-Catch2.patch38
-rw-r--r--dev-cpp/fkYAML/files/fkYAML-0.4.2_p20250522-Use-system-Catch2.patch13
-rw-r--r--dev-cpp/fkYAML/fkYAML-0.4.2.ebuild39
-rw-r--r--dev-cpp/fkYAML/fkYAML-0.4.2_p20250522.ebuild42
-rw-r--r--dev-cpp/fkYAML/metadata.xml12
-rw-r--r--dev-cpp/glog/glog-0.6.0-r1.ebuild2
-rw-r--r--dev-cpp/gpgmepp/gpgmepp-1.24.3.ebuild2
-rw-r--r--dev-cpp/kokkos/Manifest1
-rw-r--r--dev-cpp/kokkos/kokkos-4.0.1-r1.ebuild (renamed from dev-cpp/kokkos/kokkos-4.0.1.ebuild)8
-rw-r--r--dev-cpp/kokkos/kokkos-4.3.1-r1.ebuild (renamed from dev-cpp/kokkos/kokkos-4.3.1.ebuild)8
-rw-r--r--dev-cpp/kokkos/kokkos-4.6.2-r1.ebuild61
-rw-r--r--dev-cpp/kokkos/kokkos-9999.ebuild61
-rw-r--r--dev-cpp/lucene++/lucene++-3.0.9.ebuild2
-rw-r--r--dev-cpp/nlohmann_json/nlohmann_json-3.12.0-r1.ebuild2
-rw-r--r--dev-cpp/pystring/pystring-1.1.4-r2.ebuild2
-rw-r--r--dev-cpp/taskflow/taskflow-3.10.0.ebuild2
-rw-r--r--dev-cpp/tinygltf/Manifest2
-rw-r--r--dev-cpp/tinygltf/files/0001-Use-nlohmann-and-stb-packages-instead-of-bundled-one.patch41
-rw-r--r--dev-cpp/tinygltf/metadata.xml10
-rw-r--r--dev-cpp/tinygltf/tinygltf-2.9.6.ebuild95
-rw-r--r--dev-cpp/waylandpp/Manifest1
-rw-r--r--dev-cpp/waylandpp/waylandpp-1.0.1.ebuild41
-rw-r--r--dev-cpp/waylandpp/waylandpp-9999.ebuild4
-rw-r--r--dev-cpp/yaml-cpp/yaml-cpp-0.8.0-r1.ebuild2
34 files changed, 1223 insertions, 22 deletions
diff --git a/dev-cpp/catch/catch-1.12.2-r2.ebuild b/dev-cpp/catch/catch-1.12.2-r2.ebuild
index 0165790c1388..8c9c72ff8007 100644
--- a/dev-cpp/catch/catch-1.12.2-r2.ebuild
+++ b/dev-cpp/catch/catch-1.12.2-r2.ebuild
@@ -12,7 +12,7 @@ if [[ ${PV} == *9999 ]]; then
else
MY_P=${PN^}-${PV}
SRC_URI="https://github.com/catchorg/Catch2/archive/v${PV}.tar.gz -> ${MY_P}.tar.gz"
- KEYWORDS="amd64 arm arm64 hppa ppc ppc64 ~riscv ~sparc x86"
+ KEYWORDS="amd64 arm arm64 hppa ppc ppc64 ~riscv sparc x86"
S="${WORKDIR}/${PN^}2-${PV}"
fi
diff --git a/dev-cpp/catch/catch-3.8.1.ebuild b/dev-cpp/catch/catch-3.8.1.ebuild
index ed77ec07524c..84d506abfd09 100644
--- a/dev-cpp/catch/catch-3.8.1.ebuild
+++ b/dev-cpp/catch/catch-3.8.1.ebuild
@@ -15,7 +15,7 @@ else
SRC_URI="https://github.com/catchorg/Catch2/archive/v${PV}.tar.gz -> ${MY_P}.tar.gz"
S="${WORKDIR}/${MY_P}"
- KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+ KEYWORDS="~alpha amd64 arm arm64 hppa ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86"
fi
DESCRIPTION="Modern C++ header-only framework for unit-tests"
diff --git a/dev-cpp/clucene/clucene-2.3.3.4-r10.ebuild b/dev-cpp/clucene/clucene-2.3.3.4-r10.ebuild
index 8f6c8bf945fc..028505bcf5cb 100644
--- a/dev-cpp/clucene/clucene-2.3.3.4-r10.ebuild
+++ b/dev-cpp/clucene/clucene-2.3.3.4-r10.ebuild
@@ -14,7 +14,7 @@ S="${WORKDIR}/${MY_PN}-${PV}"
LICENSE="|| ( Apache-2.0 LGPL-2.1 )"
SLOT="1"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~amd64-linux ~x86-linux ~ppc-macos"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos"
IUSE="debug doc static-libs"
RESTRICT="test"
diff --git a/dev-cpp/clucene/clucene-2.3.3.4-r11.ebuild b/dev-cpp/clucene/clucene-2.3.3.4-r11.ebuild
index a1c9a1879b13..67e37e69c9f3 100644
--- a/dev-cpp/clucene/clucene-2.3.3.4-r11.ebuild
+++ b/dev-cpp/clucene/clucene-2.3.3.4-r11.ebuild
@@ -14,7 +14,7 @@ S="${WORKDIR}/${MY_PN}-${PV}"
LICENSE="|| ( Apache-2.0 LGPL-2.1 )"
SLOT="1"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~amd64-linux ~x86-linux ~ppc-macos"
IUSE="debug doc static-libs"
RESTRICT="test"
diff --git a/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r6.ebuild b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r6.ebuild
new file mode 100644
index 000000000000..f8d72b655490
--- /dev/null
+++ b/dev-cpp/cpprestsdk/cpprestsdk-2.10.19-r6.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="A Microsoft project for cloud-based client-server communication."
+HOMEPAGE="https://github.com/microsoft/cpprestsdk"
+SRC_URI="https://github.com/microsoft/cpprestsdk/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND=">=dev-libs/openssl-1.1.1q
+ >=dev-libs/boost-1.80.0-r1:=
+ >=sys-libs/zlib-1.2.13-r1"
+
+DEPEND="${RDEPEND}"
+
+BDEPEND="
+ app-alternatives/ninja
+ >=sys-devel/gcc-11.3.0
+ >=virtual/pkgconfig-2-r1
+ >=dev-cpp/websocketpp-0.8.2
+"
+
+PATCHES=(
+ "${FILESDIR}"/cpprestsdk-${PV}-warnings.patch
+ "${FILESDIR}"/cpprestsdk-${PV}-disabl-int-tests.patch
+ "${FILESDIR}"/cpprestsdk-${PV}-disable-werror-default.patch
+ "${FILESDIR}"/cpprestsdk-${PV}-boost-1.87-compat.patch
+ "${FILESDIR}"/cpprestsdk-${PV}-cmake-4.patch
+ "${FILESDIR}"/cpprestsdk-${PV}-llvm-char-traits-patch.patch
+ "${FILESDIR}"/cpprestsdk-${PV}-llvm-json-unique-ptr.patch
+)
+
+src_configure() {
+ local mycmakeargs=( -DCMAKE_BUILD_TYPE=Release )
+ cmake_src_configure
+}
diff --git a/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-char-traits-patch.patch b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-char-traits-patch.patch
new file mode 100644
index 000000000000..d2a3ef900944
--- /dev/null
+++ b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-char-traits-patch.patch
@@ -0,0 +1,436 @@
+Also submitted upstream https://github.com/microsoft/cpprestsdk/pull/1829
+Cpprestsdk is using a lot of unsigned types like uint8_t with C++ streams, this
+seems to be fine with msvc/win32 and at least for now with gcc. This patch will
+provide a char_traits type to the streams types other than std::char_traits if
+needed. This is detected via template specialisations. Google & AIs will probably
+suggest adding a std::char_traits<unsingned char> implementation, but I think that
+is very innappropriate in a library for use by applications.
+--- a/Release/include/cpprest/streams.h (revision 0b1ce318a757bbfb89bdb0fffb61ca4e38dc3b33)
++++ b/Release/include/cpprest/streams.h (revision 32b322b564e5e540ff02393ffe3bd3bade8d299c)
+@@ -16,6 +16,7 @@
+ #define CASA_STREAMS_H
+
+ #include "cpprest/astreambuf.h"
++#include "cpprest/details/char_traits.h"
+ #include <iosfwd>
+ #include <cstdio>
+
+@@ -60,30 +61,95 @@
+ concurrency::streams::streambuf<CharType> m_buffer;
+ };
+
+-template<typename CharType>
++template<typename CharType, class Traits = typename utility::CanUseStdCharTraits<CharType>::TraitsType>
+ struct Value2StringFormatter
+ {
++ struct SanitizeInput
++ {
++ const std::basic_string<char> &operator () (const std::basic_string<char> &input)
++ {
++ return input;
++ }
++ template <class InputTraits> std::basic_string<char> operator () (const std::basic_string<unsigned char, InputTraits> &input)
++ {
++ return {reinterpret_cast<const char *>(input.c_str()), input.size()};
++ }
++ const char *operator () (const char *input) {
++ return input;
++ }
++ const char *operator () (const unsigned char *input)
++ {
++ return reinterpret_cast<const char *>(input);
++ }
++ template <class T> T operator () (T input)
++ {
++ return input;
++ }
++ };
++ struct GenerateFormatOutput
++ {
++ std::basic_string<CharType,Traits> &&operator() (std::basic_string<CharType,Traits> &&result)
++ {
++ return std::move(result);
++ }
++ std::basic_string<CharType,Traits> operator() (const std::basic_string<char> &intermediate)
++ {
++ return {reinterpret_cast<const CharType *>(intermediate.c_str()), intermediate.size()};
++ }
++ };
+ template<typename T>
+- static std::basic_string<CharType> format(const T& val)
++ static std::basic_string<CharType, Traits> format(const T& val)
+ {
+- std::basic_ostringstream<CharType> ss;
++ typename std::conditional<
++ sizeof(CharType) == 1,
++ std::basic_ostringstream<char>,
++ std::basic_ostringstream<typename std::make_signed<CharType>::type>
++ >::type ss;
++ SanitizeInput sanitizer;
++ ss << sanitizer(val);
++ typename std::conditional<
++ sizeof(CharType) == 1,
++ std::basic_string<char>,
++ std::basic_string<typename std::make_signed<CharType>::type>
++ >::type str = ss.str();
++ GenerateFormatOutput generateFormatOutput;
++ return generateFormatOutput(std::move(str));
++ }
++};
++
++template<class Traits, typename T>
++struct Value2StringFormatterUint8Format
++{
++ std::basic_string<uint8_t, Traits> operator () (const T& val)
++ {
++ std::basic_ostringstream<char> ss;
+ ss << val;
+- return ss.str();
++ return reinterpret_cast<const uint8_t*>(ss.str().c_str());
++ }
++};
++
++template <class Traits>
++struct Value2StringFormatterUint8Format<Traits, std::basic_string<uint8_t,Traits>>
++{
++ std::basic_string<uint8_t, Traits> operator () (
++ const std::basic_string<uint8_t, typename utility::CanUseStdCharTraits<uint8_t>::TraitsType>& val)
++ {
++ Value2StringFormatterUint8Format<Traits,std::basic_string<char>> format;
++ return format(reinterpret_cast<const std::basic_string<char>&>(val));
+ }
+ };
+
+ template<>
+ struct Value2StringFormatter<uint8_t>
+ {
+- template<typename T>
+- static std::basic_string<uint8_t> format(const T& val)
++ template <typename T, class Traits = typename utility::CanUseStdCharTraits<uint8_t>::TraitsType>
++ static std::basic_string<uint8_t, Traits> format(const T& val)
+ {
+- std::basic_ostringstream<char> ss;
+- ss << val;
+- return reinterpret_cast<const uint8_t*>(ss.str().c_str());
++ Value2StringFormatterUint8Format<Traits, T> format;
++ return format(val);
+ }
+
+- static std::basic_string<uint8_t> format(const utf16string& val)
++ static std::basic_string<uint8_t, typename utility::CanUseStdCharTraits<uint8_t>::TraitsType> format(const utf16string& val)
+ {
+ return format(utility::conversions::utf16_to_utf8(val));
+ }
+@@ -262,7 +328,7 @@
+ /// Write the specified string to the output stream.
+ /// </summary>
+ /// <param name="str">Input string.</param>
+- pplx::task<size_t> print(const std::basic_string<CharType>& str) const
++ pplx::task<size_t> print(const std::basic_string<CharType,traits>& str) const
+ {
+ pplx::task<size_t> result;
+ if (!_verify_and_return_task(details::_out_stream_msg, result)) return result;
+@@ -273,7 +339,7 @@
+ }
+ else
+ {
+- auto sharedStr = std::make_shared<std::basic_string<CharType>>(str);
++ auto sharedStr = std::make_shared<std::basic_string<CharType,traits>>(str);
+ return helper()->m_buffer.putn_nocopy(sharedStr->c_str(), sharedStr->size()).then([sharedStr](size_t size) {
+ return size;
+ });
+@@ -294,7 +360,7 @@
+ if (!_verify_and_return_task(details::_out_stream_msg, result)) return result;
+ // TODO in the future this could be improved to have Value2StringFormatter avoid another unnecessary copy
+ // by putting the string on the heap before calling the print string overload.
+- return print(details::Value2StringFormatter<CharType>::format(val));
++ return print(details::Value2StringFormatter<CharType, traits>::format(val));
+ }
+
+ /// <summary>
+--- a/Release/include/cpprest/astreambuf.h (revision d17f091b5a753b33fb455e92b590fc9f4e921119)
++++ b/Release/include/cpprest/astreambuf.h (revision 4188ad89b2cf2e8de3cc3513adcf400fbfdc5ce7)
+@@ -15,6 +15,7 @@
+
+ #include "cpprest/asyncrt_utils.h"
+ #include "cpprest/details/basic_types.h"
++#include "cpprest/details/char_traits.h"
+ #include "pplx/pplxtasks.h"
+ #include <atomic>
+ #include <cstring>
+@@ -56,55 +57,28 @@
+ /// <typeparam name="_CharType">
+ /// The data type of the basic element of the stream.
+ /// </typeparam>
++namespace detail
++{
+ template<typename _CharType>
+-struct char_traits : std::char_traits<_CharType>
++struct char_traits : utility::CanUseStdCharTraits<_CharType>::TraitsType
+ {
+ /// <summary>
+ /// Some synchronous functions will return this value if the operation
+ /// requires an asynchronous call in a given situation.
+ /// </summary>
+ /// <returns>An <c>int_type</c> value which implies that an asynchronous call is required.</returns>
+- static typename std::char_traits<_CharType>::int_type requires_async()
++ static typename utility::CanUseStdCharTraits<_CharType>::TraitsType::int_type requires_async()
+ {
+- return std::char_traits<_CharType>::eof() - 1;
++ return utility::CanUseStdCharTraits<_CharType>::TraitsType::eof() - 1;
+ }
++};
++}
++template<typename _CharType> struct char_traits : detail::char_traits<_CharType> {
+ };
+ #if !defined(_WIN32)
+-template<>
+-struct char_traits<unsigned char> : private std::char_traits<char>
+-{
+-public:
+- typedef unsigned char char_type;
+-
+- using std::char_traits<char>::eof;
+- using std::char_traits<char>::int_type;
+- using std::char_traits<char>::off_type;
+- using std::char_traits<char>::pos_type;
+-
+- static size_t length(const unsigned char* str)
+- {
+- return std::char_traits<char>::length(reinterpret_cast<const char*>(str));
+- }
+-
+- static void assign(unsigned char& left, const unsigned char& right) { left = right; }
+- static unsigned char* assign(unsigned char* left, size_t n, unsigned char value)
+- {
+- return reinterpret_cast<unsigned char*>(
+- std::char_traits<char>::assign(reinterpret_cast<char*>(left), n, static_cast<char>(value)));
+- }
+-
+- static unsigned char* copy(unsigned char* left, const unsigned char* right, size_t n)
+- {
+- return reinterpret_cast<unsigned char*>(
+- std::char_traits<char>::copy(reinterpret_cast<char*>(left), reinterpret_cast<const char*>(right), n));
+- }
+-
+- static unsigned char* move(unsigned char* left, const unsigned char* right, size_t n)
+- {
+- return reinterpret_cast<unsigned char*>(
+- std::char_traits<char>::move(reinterpret_cast<char*>(left), reinterpret_cast<const char*>(right), n));
+- }
+-
++template <> struct char_traits<unsigned char> : detail::char_traits<unsigned char> {
++ typedef typename std::char_traits<char>::int_type int_type;
++ static int_type eof() { return std::char_traits<char>::eof(); }
+ static int_type requires_async() { return eof() - 1; }
+ };
+ #endif
+new file mode 100644
+--- /dev/null (revision 4188ad89b2cf2e8de3cc3513adcf400fbfdc5ce7)
++++ b/Release/include/cpprest/details/char_traits.h (revision 4188ad89b2cf2e8de3cc3513adcf400fbfdc5ce7)
+@@ -0,0 +1,102 @@
++//
++// Created by sigsegv on 6/28/25.
++//
++
++#ifndef CPPRESTSDK_ROOT_CHAR_TRAITS_H
++#define CPPRESTSDK_ROOT_CHAR_TRAITS_H
++
++#include <type_traits>
++#include <string>
++
++namespace utility {
++
++namespace detail {
++
++template <typename T> struct IntTypeFor {
++ typedef typename std::conditional<std::is_unsigned<T>::value, unsigned long long int, long long int>::type type;
++};
++template <> struct IntTypeFor<char> {
++ typedef typename std::char_traits<char>::int_type type;
++};
++template <> struct IntTypeFor<unsigned char> {
++ typedef typename std::make_unsigned<typename std::char_traits<char>::int_type>::type type;
++};
++
++template <typename T> class DetailCharTraits
++{
++public:
++ using char_type = T;
++ using int_type = typename IntTypeFor<T>::type;
++ using off_type = std::streamoff;
++ using pos_type = std::streampos;
++ using state_type = mbstate_t;
++
++ static void assign(char_type& r, const char_type& a) noexcept { r = a; }
++ static char_type to_char_type(int_type c) noexcept { return char_type(c); }
++ static int_type to_int_type(char_type c) noexcept { return c; }
++ static bool eq(char_type a, char_type b) noexcept { return a == b; }
++ static bool lt(char_type a, char_type b) noexcept { return a < b; }
++ static int compare(const char_type* s1,const char_type* s2,size_t n){
++ for (; n--; ++s1, ++s2) {
++ if (!eq(*s1, *s2))
++ return lt(*s1,*s2)?-1:1;
++ }
++ return 0;
++ }
++ static size_t length(const char_type* s){
++ const char_type* p = s;
++ while (*p)
++ ++p;
++ return size_t(p - s);
++ }
++ static const char_type* find(const char_type* s,size_t n,const char_type& a){
++ for (; n--; ++s)
++ {
++ if (eq(*s, a))
++ return s;
++ return nullptr;
++ }
++ }
++ static char_type* move (char_type* r,const char_type* s,size_t n){
++ return (char_type*)memmove(r, s, n * sizeof(char_type));
++ }
++ static char_type* copy (char_type* r,const char_type* s,size_t n){
++ return (char_type*)memcpy (r, s, n * sizeof(char_type));
++ }
++ static char_type* assign(char_type* r,size_t n,char_type a){
++ if (sizeof(char_type) == 1)
++ {
++ return (char_type*)memset(r, a, n);
++ }
++ else
++ {
++ for (char_type *s = r; n--; ++s)
++ {
++ *s = a;
++ }
++ }
++ }
++ static int_type eof() noexcept { return ~0u; }
++ static int_type not_eof(int_type c) noexcept { return c == eof() ? 0 : c; }
++};
++
++template <typename T, typename = bool> struct CanUseStdCharTraits : public std::false_type
++{
++public:
++ typedef DetailCharTraits<T> TraitsType;
++};
++
++template <typename T> struct CanUseStdCharTraits<T, decltype(std::char_traits<T>::eq(std::declval<T>(), std::declval<T>()))> : public std::true_type
++{
++public:
++ typedef std::char_traits<T> TraitsType;
++};
++
++}
++
++template <typename T> struct CanUseStdCharTraits : detail::CanUseStdCharTraits<typename std::remove_const<typename std::remove_reference<T>::type>::type> {
++};
++
++}
++
++#endif // CPPRESTSDK_ROOT_CHAR_TRAITS_H
+--- a/Release/tests/functional/streams/memstream_tests.cpp (revision d17f091b5a753b33fb455e92b590fc9f4e921119)
++++ b/Release/tests/functional/streams/memstream_tests.cpp (revision 6df13a8c0417ef700c0f164bcd0686ad46f66fd9)
+@@ -8,6 +8,7 @@
+ *
+ * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ ****/
++#include "cpprest/details/char_traits.h"
+ #include "stdafx.h"
+ #if defined(__cplusplus_winrt)
+ #include <wrl.h>
+@@ -32,7 +33,7 @@
+ {
+ VERIFY_IS_TRUE(wbuf.can_write());
+
+- std::basic_string<typename StreamBufferType::char_type> s;
++ std::basic_string<typename StreamBufferType::char_type,typename utility::CanUseStdCharTraits<typename StreamBufferType::char_type>::TraitsType> s;
+ s.push_back((typename StreamBufferType::char_type)0);
+ s.push_back((typename StreamBufferType::char_type)1);
+ s.push_back((typename StreamBufferType::char_type)2);
+@@ -137,7 +138,7 @@
+ {
+ VERIFY_IS_TRUE(wbuf.can_write());
+
+- std::basic_string<typename StreamBufferType::char_type> s;
++ std::basic_string<typename StreamBufferType::char_type,typename utility::CanUseStdCharTraits<typename StreamBufferType::char_type>::TraitsType> s;
+ s.push_back((typename StreamBufferType::char_type)0);
+ s.push_back((typename StreamBufferType::char_type)1);
+ s.push_back((typename StreamBufferType::char_type)2);
+@@ -169,7 +170,7 @@
+
+ typedef concurrency::streams::rawptr_buffer<CharType> StreamBufferType;
+
+- std::basic_string<CharType> s;
++ std::basic_string<CharType,typename CanUseStdCharTraits<CharType>::TraitsType> s;
+ s.push_back((CharType)0);
+ s.push_back((CharType)1);
+ s.push_back((CharType)2);
+@@ -198,7 +199,7 @@
+ typedef concurrency::streams::container_buffer<CollectionType> StreamBufferType;
+ typedef typename concurrency::streams::container_buffer<CollectionType>::char_type CharType;
+
+- std::basic_string<CharType> s;
++ std::basic_string<CharType, typename utility::CanUseStdCharTraits<CharType>::TraitsType> s;
+ s.push_back((CharType)0);
+ s.push_back((CharType)1);
+ s.push_back((CharType)2);
+@@ -553,7 +554,7 @@
+ VERIFY_IS_TRUE(rwbuf.can_read());
+ VERIFY_IS_TRUE(rwbuf.can_write());
+ VERIFY_IS_FALSE(rwbuf.is_eof());
+- std::basic_string<typename StreamBufferType::char_type> s;
++ std::basic_string<typename StreamBufferType::char_type, typename utility::CanUseStdCharTraits<typename StreamBufferType::char_type>::TraitsType> s;
+ s.push_back((typename StreamBufferType::char_type)0);
+ s.push_back((typename StreamBufferType::char_type)1);
+ s.push_back((typename StreamBufferType::char_type)2);
+@@ -684,7 +685,7 @@
+ VERIFY_IS_TRUE(rwbuf.can_write());
+
+ // Write 4 characters
+- std::basic_string<typename StreamBufferType::char_type> s;
++ std::basic_string<typename StreamBufferType::char_type, typename utility::CanUseStdCharTraits<typename StreamBufferType::char_type>::TraitsType> s;
+ s.push_back((typename StreamBufferType::char_type)0);
+ s.push_back((typename StreamBufferType::char_type)1);
+ s.push_back((typename StreamBufferType::char_type)2);
+@@ -726,7 +727,7 @@
+ VERIFY_IS_TRUE(rwbuf.can_write());
+
+ // Write 4 characters
+- std::basic_string<typename StreamBufferType::char_type> s;
++ std::basic_string<typename StreamBufferType::char_type, typename utility::CanUseStdCharTraits<typename StreamBufferType::char_type>::TraitsType> s;
+ s.push_back((typename StreamBufferType::char_type)0);
+ s.push_back((typename StreamBufferType::char_type)1);
+ s.push_back((typename StreamBufferType::char_type)2);
+--- a/Release/tests/functional/streams/stdstream_tests.cpp (revision d17f091b5a753b33fb455e92b590fc9f4e921119)
++++ b/Release/tests/functional/streams/stdstream_tests.cpp (revision 6df13a8c0417ef700c0f164bcd0686ad46f66fd9)
+@@ -13,6 +13,7 @@
+ #include "cpprest/filestream.h"
+ #include "cpprest/producerconsumerstream.h"
+ #include "cpprest/rawptrstream.h"
++#include "cpprest/details/char_traits.h"
+
+ #if (!defined(_WIN32) || !defined(CPPREST_EXCLUDE_WEBSOCKETS)) && !defined(__cplusplus_winrt)
+ #include <boost/interprocess/streams/bufferstream.hpp>
+@@ -303,7 +304,8 @@
+
+ const std::streamsize iterations = 100;
+
+- const std::string the_alphabet("abcdefghijklmnopqrstuvwxyz");
++ const char *the_alphabet_characters = "abcdefghijklmnopqrstuvwxyz";
++ const std::basic_string<uint8_t,typename utility::CanUseStdCharTraits<uint8_t>::TraitsType> the_alphabet(reinterpret_cast<const uint8_t *>(the_alphabet_characters));
+
+ auto writer = pplx::create_task([ostream, iterations, the_alphabet]() {
+ auto os = ostream;
+@@ -341,7 +343,8 @@
+
+ const std::streamsize iterations = 100;
+
+- const std::string the_alphabet("abcdefghijklmnopqrstuvwxyz");
++ const char *the_alphabet_chars = "abcdefghijklmnopqrstuvwxyz";
++ const std::basic_string<uint8_t,typename CanUseStdCharTraits<uint8_t>::TraitsType> the_alphabet(reinterpret_cast<const uint8_t *>(the_alphabet_chars));
+
+ auto writer = pplx::create_task([ostream, iterations, the_alphabet]() {
+ auto os = ostream;
diff --git a/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-json-unique-ptr.patch b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-json-unique-ptr.patch
new file mode 100644
index 000000000000..ce7f03741b0b
--- /dev/null
+++ b/dev-cpp/cpprestsdk/files/cpprestsdk-2.10.19-llvm-json-unique-ptr.patch
@@ -0,0 +1,221 @@
+This patch moves the implementations of certain json-methods to the cpp-file-implementations.
+This is needed because llvm needs sizeof(T) to be valid for a lot more methods on containers
+and std::unique_ptr, so these methods can't be header only on llvm. This patch is developed
+by me and I cannot right now find an upstream bug-report on this just yet. I uploaded a similar
+patch to FreeBSD ports a while ago.
+--- a/Release/include/cpprest/json.h
++++ b/Release/include/cpprest/json.h
+@@ -737,12 +737,10 @@
+ _ASYNCRTIMP void format(std::basic_string<char>& string) const;
+
+ #ifdef ENABLE_JSON_VALUE_VISUALIZER
+- explicit value(std::unique_ptr<details::_Value> v, value_type kind) : m_value(std::move(v)), m_kind(kind)
++ explicit value(std::unique_ptr<details::_Value> v, value_type kind);
+ #else
+- explicit value(std::unique_ptr<details::_Value> v) : m_value(std::move(v))
++ explicit value(std::unique_ptr<details::_Value> v);
+ #endif
+- {
+- }
+
+ std::unique_ptr<details::_Value> m_value;
+ #ifdef ENABLE_JSON_VALUE_VISUALIZER
+@@ -831,9 +829,9 @@
+ typedef storage_type::size_type size_type;
+
+ private:
+- array() : m_elements() {}
+- array(size_type size) : m_elements(size) {}
+- array(storage_type elements) : m_elements(std::move(elements)) {}
++ array();
++ array(size_type size);
++ array(storage_type elements);
+
+ public:
+ /// <summary>
+@@ -915,20 +913,13 @@
+ /// <returns>Iterator to the new location of the element following the erased element.</returns>
+ /// <remarks>GCC doesn't support erase with const_iterator on vector yet. In the future this should be
+ /// changed.</remarks>
+- iterator erase(iterator position) { return m_elements.erase(position); }
++ iterator erase(iterator position);
+
+ /// <summary>
+ /// Deletes the element at an index of the JSON array.
+ /// </summary>
+ /// <param name="index">The index of the element to delete.</param>
+- void erase(size_type index)
+- {
+- if (index >= m_elements.size())
+- {
+- throw json_exception("index out of bounds");
+- }
+- m_elements.erase(m_elements.begin() + index);
+- }
++ void erase(size_type index);
+
+ /// <summary>
+ /// Accesses an element of a JSON array. Throws when index out of bounds.
+@@ -959,15 +950,7 @@
+ /// </summary>
+ /// <param name="index">The index of an element in the JSON array.</param>
+ /// <returns>A reference to the value kept in the field.</returns>
+- json::value& operator[](size_type index)
+- {
+- msl::safeint3::SafeInt<size_type> nMinSize(index);
+- nMinSize += 1;
+- msl::safeint3::SafeInt<size_type> nlastSize(m_elements.size());
+- if (nlastSize < nMinSize) m_elements.resize((size_type)nMinSize);
+-
+- return m_elements[index];
+- }
++ json::value& operator[](size_type index);
+
+ /// <summary>
+ /// Gets the number of elements of the array.
+@@ -998,14 +981,8 @@
+ typedef storage_type::size_type size_type;
+
+ private:
+- object(bool keep_order = false) : m_elements(), m_keep_order(keep_order) {}
+- object(storage_type elements, bool keep_order = false) : m_elements(std::move(elements)), m_keep_order(keep_order)
+- {
+- if (!keep_order)
+- {
+- sort(m_elements.begin(), m_elements.end(), compare_pairs);
+- }
+- }
++ object(bool keep_order = false);
++ object(storage_type elements, bool keep_order = false);
+
+ public:
+ /// <summary>
+@@ -1087,22 +1064,13 @@
+ /// <returns>Iterator to the new location of the element following the erased element.</returns>
+ /// <remarks>GCC doesn't support erase with const_iterator on vector yet. In the future this should be
+ /// changed.</remarks>
+- iterator erase(iterator position) { return m_elements.erase(position); }
++ iterator erase(iterator position);
+
+ /// <summary>
+ /// Deletes an element of the JSON object. If the key doesn't exist, this method throws.
+ /// </summary>
+ /// <param name="key">The key of an element in the JSON object.</param>
+- void erase(const utility::string_t& key)
+- {
+- auto iter = find_by_key(key);
+- if (iter == m_elements.end())
+- {
+- throw web::json::json_exception("Key not found");
+- }
+-
+- m_elements.erase(iter);
+- }
++ void erase(const utility::string_t& key);
+
+ /// <summary>
+ /// Accesses an element of a JSON object. If the key doesn't exist, this method throws.
+@@ -1142,17 +1110,7 @@
+ /// <param name="key">The key of an element in the JSON object.</param>
+ /// <returns>If the key exists, a reference to the value kept in the field, otherwise a newly created null value
+ /// that will be stored for the given key.</returns>
+- json::value& operator[](const utility::string_t& key)
+- {
+- auto iter = find_insert_location(key);
+-
+- if (iter == m_elements.end() || key != iter->first)
+- {
+- return m_elements.insert(iter, std::pair<utility::string_t, value>(key, value()))->second;
+- }
+-
+- return iter->second;
+- }
++ json::value& operator[](const utility::string_t& key);
+
+ /// <summary>
+ /// Gets an iterator to an element of a JSON object.
+--- a/Release/src/json/json.cpp
++++ b/Release/src/json/json.cpp
+@@ -135,6 +135,14 @@
+ {
+ }
+
++#ifdef ENABLE_JSON_VALUE_VISUALIZER
++web::json::value::value(std::unique_ptr<details::_Value> v, value_type kind) : m_value(std::move(v)), m_kind(kind)
++#else
++web::json::value::value(std::unique_ptr<details::_Value> v) : m_value(std::move(v))
++#endif
++{
++}
++
+ web::json::value::value(const value& other)
+ : m_value(other.m_value->_copy_value())
+ #ifdef ENABLE_JSON_VALUE_VISUALIZER
+@@ -495,3 +503,67 @@
+ #endif
+ return instance;
+ }
++
++web::json::array::array() : m_elements() {}
++web::json::array::array(size_type size) : m_elements(size) {}
++web::json::array::array(storage_type elements) : m_elements(std::move(elements)) {}
++
++web::json::array::iterator web::json::array::erase(web::json::array::iterator position)
++{
++ return m_elements.erase(position);
++}
++
++void web::json::array::erase(web::json::array::size_type index)
++{
++ if (index >= m_elements.size())
++ {
++ throw json_exception("index out of bounds");
++ }
++ m_elements.erase(m_elements.begin() + index);
++}
++
++json::value& web::json::array::operator[](web::json::array::size_type index)
++{
++ msl::safeint3::SafeInt<size_type> nMinSize(index);
++ nMinSize += 1;
++ msl::safeint3::SafeInt<size_type> nlastSize(m_elements.size());
++ if (nlastSize < nMinSize) m_elements.resize((size_type)nMinSize);
++
++ return m_elements[index];
++}
++
++web::json::object::object(bool keep_order) : m_elements(), m_keep_order(keep_order) {}
++web::json::object::object(storage_type elements, bool keep_order) : m_elements(std::move(elements)), m_keep_order(keep_order)
++{
++ if (!keep_order)
++ {
++ sort(m_elements.begin(), m_elements.end(), compare_pairs);
++ }
++}
++web::json::object::iterator web::json::object::erase(iterator position)
++{
++ return m_elements.erase(position);
++}
++
++void web::json::object::erase(const utility::string_t& key)
++{
++ auto iter = find_by_key(key);
++ if (iter == m_elements.end())
++ {
++ throw web::json::json_exception("Key not found");
++ }
++
++ m_elements.erase(iter);
++}
++
++json::value& web::json::object::operator[](const utility::string_t& key)
++{
++ auto iter = find_insert_location(key);
++
++ if (iter == m_elements.end() || key != iter->first)
++ {
++ return m_elements.insert(iter, std::pair<utility::string_t, value>(key, value()))->second;
++ }
++
++ return iter->second;
++}
diff --git a/dev-cpp/doctest/doctest-2.4.12.ebuild b/dev-cpp/doctest/doctest-2.4.12.ebuild
index 46a69e7a5850..030f8e18cbeb 100644
--- a/dev-cpp/doctest/doctest-2.4.12.ebuild
+++ b/dev-cpp/doctest/doctest-2.4.12.ebuild
@@ -11,7 +11,7 @@ SRC_URI="https://github.com/doctest/doctest/archive/v${PV}.tar.gz -> ${P}.tar.gz
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86"
IUSE="test"
RESTRICT="!test? ( test )"
diff --git a/dev-cpp/fkYAML/Manifest b/dev-cpp/fkYAML/Manifest
new file mode 100644
index 000000000000..0532a0a6942d
--- /dev/null
+++ b/dev-cpp/fkYAML/Manifest
@@ -0,0 +1,2 @@
+DIST fkYAML-0.4.2.tar.gz 437972 BLAKE2B 24afade617172a5af8b0be3c91b069ed1782140101a67b86bb3afad230656d22e4e55f24883499ca1764a095c87a64370fdba9b0aa617c51815b25d4bdd2f374 SHA512 20a7e2a236f77e27a676348585cbf6c36d8c46f1ad0964b879eb61925e3d6545d6dda46379b897712890faa2b8d5e837b7f9cc312448a3d762f0017c618cbcd1
+DIST fkYAML-0.4.2_p20250522.tar.gz 586601 BLAKE2B 236e9c3e09fd6aaf94e3c7740790ac362bcd19e949fa5570e480ce9d30fcf8bde0e2ff6c948d9082c1efc347be1c46c381834ebaf640d082035f5e7d4c60c1cb SHA512 80cdbab5ca5a8d2d9f7a9c98b7a75a5807e46609c4c6e5e3a162ece60ba820e890413f09048e53f094edeb52e03c9592187cbb008812c77bc598f2868f85f8f7
diff --git a/dev-cpp/fkYAML/files/fkYAML-0.4.2-Remove-the-space-between-operator-and-_yaml.patch b/dev-cpp/fkYAML/files/fkYAML-0.4.2-Remove-the-space-between-operator-and-_yaml.patch
new file mode 100644
index 000000000000..52bd5e91b5cc
--- /dev/null
+++ b/dev-cpp/fkYAML/files/fkYAML-0.4.2-Remove-the-space-between-operator-and-_yaml.patch
@@ -0,0 +1,44 @@
+From: Pavel Sobolev <contact@paveloom.dev>
+Subject: [PATCH] Remove the space between `operator""` and `_yaml`.
+
+This makes it compile in C++23.
+
+Signed-off-by: Pavel Sobolev <contact@paveloom.dev>
+
+--- a/include/fkYAML/node.hpp
++++ b/include/fkYAML/node.hpp
+@@ -1823,7 +1823,7 @@ inline namespace yaml_literals {
+ /// @param n The size of `s`.
+ /// @return The resulting `node` object deserialized from `s`.
+ /// @sa https://fktn-k.github.io/fkYAML/api/operator_literal_yaml/
+-inline fkyaml::node operator"" _yaml(const char* s, std::size_t n) {
++inline fkyaml::node operator""_yaml(const char* s, std::size_t n) {
+ return fkyaml::node::deserialize(s, s + n);
+ }
+
+@@ -1832,7 +1832,7 @@ inline fkyaml::node operator"" _yaml(const char* s, std::size_t n) {
+ /// @param n The size of `s`.
+ /// @return The resulting `node` object deserialized from `s`.
+ /// @sa https://fktn-k.github.io/fkYAML/api/operator_literal_yaml/
+-inline fkyaml::node operator"" _yaml(const char16_t* s, std::size_t n) {
++inline fkyaml::node operator""_yaml(const char16_t* s, std::size_t n) {
+ return fkyaml::node::deserialize(s, s + n);
+ }
+
+@@ -1841,7 +1841,7 @@ inline fkyaml::node operator"" _yaml(const char16_t* s, std::size_t n) {
+ /// @param n The size of `s`.
+ /// @return The resulting `node` object deserialized from `s`.
+ /// @sa https://fktn-k.github.io/fkYAML/api/operator_literal_yaml/
+-inline fkyaml::node operator"" _yaml(const char32_t* s, std::size_t n) {
++inline fkyaml::node operator""_yaml(const char32_t* s, std::size_t n) {
+ return fkyaml::node::deserialize(s, s + n);
+ }
+
+@@ -1850,7 +1850,7 @@ inline fkyaml::node operator"" _yaml(const char32_t* s, std::size_t n) {
+ /// @param s An input `char8_t` array.
+ /// @param n The size of `s`.
+ /// @return The resulting `node` object deserialized from `s`.
+-inline fkyaml::node operator"" _yaml(const char8_t* s, std::size_t n) {
++inline fkyaml::node operator""_yaml(const char8_t* s, std::size_t n) {
+ return fkyaml::node::deserialize((const char8_t*)s, (const char8_t*)s + n);
+ }
diff --git a/dev-cpp/fkYAML/files/fkYAML-0.4.2-Use-system-Catch2.patch b/dev-cpp/fkYAML/files/fkYAML-0.4.2-Use-system-Catch2.patch
new file mode 100644
index 000000000000..e736a28dcbd8
--- /dev/null
+++ b/dev-cpp/fkYAML/files/fkYAML-0.4.2-Use-system-Catch2.patch
@@ -0,0 +1,38 @@
+From: Pavel Sobolev <contact@paveloom.dev>
+Subject: [PATCH] Use system `Catch2`.
+
+Signed-off-by: Pavel Sobolev <contact@paveloom.dev>
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -32,21 +32,7 @@ if(FK_YAML_CODE_COVERAGE OR FK_YAML_RUN_VALGRIND OR FK_YAML_RUN_CLANG_SANITIZERS
+ endif()
+
+ if(FK_YAML_BUILD_TEST OR FK_YAML_BUILD_ALL_TEST)
+- set(CATCH2_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/catch2")
+-
+- if(NOT EXISTS ${CATCH2_ROOT_DIR}/CMakeLists.txt)
+- find_package(Git REQUIRED)
+- message(STATUS "Fetching git submodule: Catch2")
+- execute_process(
+- COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive -- ${CATCH2_ROOT_DIR}
+- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+- RESULT_VARIABLE GIT_SUBMOD_RET)
+- if(NOT GIT_SUBMOD_RET EQUAL "0")
+- message(FATAL_ERROR "Failed to fetch Catch2 as a git submodule.")
+- endif()
+- endif()
+-
+- list(APPEND CMAKE_MODULE_PATH "${CATCH2_ROOT_DIR}/contrib")
++ find_package(Catch2 REQUIRED)
+ endif()
+
+ ###########################################
+@@ -140,7 +126,6 @@ endif()
+ ###########################
+
+ if(FK_YAML_BUILD_TEST OR FK_YAML_BUILD_ALL_TEST)
+- add_subdirectory(${CATCH2_ROOT_DIR})
+ include(CTest)
+ enable_testing()
+ add_subdirectory(tests)
diff --git a/dev-cpp/fkYAML/files/fkYAML-0.4.2_p20250522-Use-system-Catch2.patch b/dev-cpp/fkYAML/files/fkYAML-0.4.2_p20250522-Use-system-Catch2.patch
new file mode 100644
index 000000000000..fe40120f4290
--- /dev/null
+++ b/dev-cpp/fkYAML/files/fkYAML-0.4.2_p20250522-Use-system-Catch2.patch
@@ -0,0 +1,13 @@
+From: Pavel Sobolev <contact@paveloom.dev>
+Subject: [PATCH] Use system `Catch2`.
+
+Signed-off-by: Pavel Sobolev <contact@paveloom.dev>
+
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -1,5 +1,4 @@
+-set(CATCH2_ROOT_DIR "${PROJECT_SOURCE_DIR}/thirdparty/Catch2")
+-list(APPEND CMAKE_MODULE_PATH "${CATCH2_ROOT_DIR}/contrib")
++find_package(Catch2 REQUIRED)
+
+ add_subdirectory(unit_test)
diff --git a/dev-cpp/fkYAML/fkYAML-0.4.2.ebuild b/dev-cpp/fkYAML/fkYAML-0.4.2.ebuild
new file mode 100644
index 000000000000..a7fcd957492c
--- /dev/null
+++ b/dev-cpp/fkYAML/fkYAML-0.4.2.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="A C++ header-only YAML library"
+HOMEPAGE="https://fktn-k.github.io/fkYAML/"
+SRC_URI="https://github.com/fktn-k/fkYAML/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ test? ( =dev-cpp/catch-2* )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.4.2-Remove-the-space-between-operator-and-_yaml.patch"
+ "${FILESDIR}/${PN}-0.4.2-Use-system-Catch2.patch"
+)
+
+src_prepare() {
+ find thirdparty -mindepth 1 -not -name imapdl -delete || die
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DFK_YAML_BUILD_TEST=$(usex test)
+ )
+
+ cmake_src_configure
+}
diff --git a/dev-cpp/fkYAML/fkYAML-0.4.2_p20250522.ebuild b/dev-cpp/fkYAML/fkYAML-0.4.2_p20250522.ebuild
new file mode 100644
index 000000000000..70fb0c2ba073
--- /dev/null
+++ b/dev-cpp/fkYAML/fkYAML-0.4.2_p20250522.ebuild
@@ -0,0 +1,42 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+EGIT_COMMIT="721edb3e1a817e527fd9e1e18a3bea300822522e"
+
+DESCRIPTION="A C++ header-only YAML library"
+HOMEPAGE="https://fktn-k.github.io/fkYAML/"
+SRC_URI="https://github.com/fktn-k/fkYAML/archive/${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz"
+
+S="${WORKDIR}/${PN}-${EGIT_COMMIT}"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ test? ( =dev-cpp/catch-2* )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.4.2_p20250522-Use-system-Catch2.patch"
+)
+
+src_prepare() {
+ find thirdparty -mindepth 1 -not -name imapdl -delete || die
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DFK_YAML_BUILD_TEST=$(usex test)
+ )
+
+ cmake_src_configure
+}
diff --git a/dev-cpp/fkYAML/metadata.xml b/dev-cpp/fkYAML/metadata.xml
new file mode 100644
index 000000000000..14889d9bf84d
--- /dev/null
+++ b/dev-cpp/fkYAML/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>contact@paveloom.dev</email>
+ <name>Pavel Sobolev</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://github.com/fktn-k/fkYAML</bugs-to>
+ </upstream>
+ <origin>gentoo-guru-overlay</origin>
+</pkgmetadata> \ No newline at end of file
diff --git a/dev-cpp/glog/glog-0.6.0-r1.ebuild b/dev-cpp/glog/glog-0.6.0-r1.ebuild
index fca47051d4d7..2bff3be26ace 100644
--- a/dev-cpp/glog/glog-0.6.0-r1.ebuild
+++ b/dev-cpp/glog/glog-0.6.0-r1.ebuild
@@ -14,7 +14,7 @@ if [[ ${PV} == 9999 ]]; then
else
SRC_URI="https://github.com/google/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
- KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux"
+ KEYWORDS="amd64 arm arm64 ~hppa ~loong ~mips ~ppc ppc64 ~riscv ~s390 ~sparc x86 ~amd64-linux ~x86-linux"
fi
LICENSE="BSD"
diff --git a/dev-cpp/gpgmepp/gpgmepp-1.24.3.ebuild b/dev-cpp/gpgmepp/gpgmepp-1.24.3.ebuild
index d5c011d63a5f..b1fa67a528c3 100644
--- a/dev-cpp/gpgmepp/gpgmepp-1.24.3.ebuild
+++ b/dev-cpp/gpgmepp/gpgmepp-1.24.3.ebuild
@@ -9,6 +9,6 @@ HOMEPAGE="https://www.gnupg.org/related_software/gpgme"
# keep slot and keywords in sync with app-crypt/gpgme
LICENSE="metapackage"
SLOT="1/11.6.15.2"
-KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
RDEPEND="~app-crypt/gpgme-${PV}:=[cxx]"
diff --git a/dev-cpp/kokkos/Manifest b/dev-cpp/kokkos/Manifest
index 9ed03b5fd146..26cc03fc5274 100644
--- a/dev-cpp/kokkos/Manifest
+++ b/dev-cpp/kokkos/Manifest
@@ -1,2 +1,3 @@
DIST kokkos-4.0.1.tar.gz 2322402 BLAKE2B a4aba2f7ffe7b7c93051ad65d398f442b753975eceb3f83ed1bff0b8c468e4ffdcb6437989e740c65fc550f17ef8ddf78ca50ca881d3953f886309dc7d6fc597 SHA512 cf6742f4be777b52673858b49cf68fdf335e760509688483e62ef41af5026070f69dcf39d010134c85dc6c4868f82a38900872be11ed43190432c8530b90deee
DIST kokkos-4.3.1.tar.gz 2431142 BLAKE2B 158ceea3c62449f386613b17e996e4d11e9b95c38a92f69fb3c487b90cf5f07dffdafb6ee0a37eff5299e7d1db50efaed4b26b9baebeeea9d675d0d98dd420e4 SHA512 8180ecdec2f0a6167a85dd1eb268996b0310e82098f2329eccf658aff90118a7c85c2f7607984602de2ca48dc45c1dbf30a4843b35c42590e58d4b03beff474a
+DIST kokkos-4.6.2.tar.gz 2477557 BLAKE2B 3d8a93ca8e27bc0a3a5542680b0a2daf7ca862826a1a45973012f09a6f0a39938628efdb532bb2d013cb669b912785eac12bcf1b17712cb3e098106e858f3fe3 SHA512 bef5afc0009d6e3ac555dbaebc471fe0823ac1d1add79dcacbed82bee4d2a9a34cf4342fbef8fd00beefc6bd0a2f569e9f0cbe987ec60d087fde803479eff426
diff --git a/dev-cpp/kokkos/kokkos-4.0.1.ebuild b/dev-cpp/kokkos/kokkos-4.0.1-r1.ebuild
index a83617a9795f..a0af3b2e9bb1 100644
--- a/dev-cpp/kokkos/kokkos-4.0.1.ebuild
+++ b/dev-cpp/kokkos/kokkos-4.0.1-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2023 Gentoo Authors
+# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -10,8 +10,10 @@ HOMEPAGE="https://github.com/kokkos"
MY_PV="$(ver_cut 1-2).0$(ver_cut 3)"
SRC_URI="https://github.com/${PN}/${PN}/archive/refs/tags/${MY_PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/${PN}-${MY_PV}"
+
LICENSE="BSD"
-SLOT="0"
+SLOT="0/${PV}"
KEYWORDS="amd64 -x86"
IUSE="+openmp test"
RESTRICT="!test? ( test )"
@@ -19,8 +21,6 @@ RESTRICT="!test? ( test )"
DEPEND="sys-apps/hwloc:="
RDEPEND="${DEPEND}"
-S="${WORKDIR}/${PN}-${MY_PV}"
-
pkg_pretend() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
diff --git a/dev-cpp/kokkos/kokkos-4.3.1.ebuild b/dev-cpp/kokkos/kokkos-4.3.1-r1.ebuild
index d97010cc25f9..a0af3b2e9bb1 100644
--- a/dev-cpp/kokkos/kokkos-4.3.1.ebuild
+++ b/dev-cpp/kokkos/kokkos-4.3.1-r1.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2024 Gentoo Authors
+# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -10,8 +10,10 @@ HOMEPAGE="https://github.com/kokkos"
MY_PV="$(ver_cut 1-2).0$(ver_cut 3)"
SRC_URI="https://github.com/${PN}/${PN}/archive/refs/tags/${MY_PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/${PN}-${MY_PV}"
+
LICENSE="BSD"
-SLOT="0"
+SLOT="0/${PV}"
KEYWORDS="amd64 -x86"
IUSE="+openmp test"
RESTRICT="!test? ( test )"
@@ -19,8 +21,6 @@ RESTRICT="!test? ( test )"
DEPEND="sys-apps/hwloc:="
RDEPEND="${DEPEND}"
-S="${WORKDIR}/${PN}-${MY_PV}"
-
pkg_pretend() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
diff --git a/dev-cpp/kokkos/kokkos-4.6.2-r1.ebuild b/dev-cpp/kokkos/kokkos-4.6.2-r1.ebuild
new file mode 100644
index 000000000000..ee6ccf7fff8b
--- /dev/null
+++ b/dev-cpp/kokkos/kokkos-4.6.2-r1.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake toolchain-funcs
+
+DESCRIPTION="C++ Performance Portability Programming EcoSystem"
+HOMEPAGE="https://github.com/kokkos"
+
+if [[ ${PV} = *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/kokkos/kokkos.git"
+else
+ MY_PV="$(ver_cut 1-2).0$(ver_cut 3)"
+ SRC_URI="https://github.com/${PN}/${PN}/archive/refs/tags/${MY_PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${MY_PV}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="BSD"
+SLOT="0/${PV}"
+IUSE="+openmp test"
+RESTRICT="!test? ( test )"
+
+DEPEND="sys-apps/hwloc:="
+RDEPEND="${DEPEND}"
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+}
+
+pkg_setup() {
+ [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DCMAKE_INSTALL_INCLUDEDIR=include/kokkos
+ -DKokkos_ENABLE_TESTS=$(usex test)
+ -DKokkos_ENABLE_AGGRESSIVE_VECTORIZATION=ON
+ -DKokkos_ENABLE_SERIAL=ON
+ -DKokkos_ENABLE_HWLOC=ON
+ -DKokkos_HWLOC_DIR="${EPREFIX}/usr"
+ -DKokkos_ENABLE_OPENMP=$(usex openmp)
+ -DBUILD_SHARED_LIBS=ON
+ )
+
+ cmake_src_configure
+}
+
+src_test() {
+ local myctestargs=(
+ # Contains "death tests" which are known/expected(?) to fail
+ # https://github.com/kokkos/kokkos/issues/3033
+ # bug #791514
+ -E "(KokkosCore_UnitTest_OpenMP|KokkosCore_UnitTest_Serial)"
+ )
+
+ cmake_src_test
+}
diff --git a/dev-cpp/kokkos/kokkos-9999.ebuild b/dev-cpp/kokkos/kokkos-9999.ebuild
new file mode 100644
index 000000000000..ee6ccf7fff8b
--- /dev/null
+++ b/dev-cpp/kokkos/kokkos-9999.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake toolchain-funcs
+
+DESCRIPTION="C++ Performance Portability Programming EcoSystem"
+HOMEPAGE="https://github.com/kokkos"
+
+if [[ ${PV} = *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/kokkos/kokkos.git"
+else
+ MY_PV="$(ver_cut 1-2).0$(ver_cut 3)"
+ SRC_URI="https://github.com/${PN}/${PN}/archive/refs/tags/${MY_PV}.tar.gz -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-${MY_PV}"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="BSD"
+SLOT="0/${PV}"
+IUSE="+openmp test"
+RESTRICT="!test? ( test )"
+
+DEPEND="sys-apps/hwloc:="
+RDEPEND="${DEPEND}"
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+}
+
+pkg_setup() {
+ [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DCMAKE_INSTALL_INCLUDEDIR=include/kokkos
+ -DKokkos_ENABLE_TESTS=$(usex test)
+ -DKokkos_ENABLE_AGGRESSIVE_VECTORIZATION=ON
+ -DKokkos_ENABLE_SERIAL=ON
+ -DKokkos_ENABLE_HWLOC=ON
+ -DKokkos_HWLOC_DIR="${EPREFIX}/usr"
+ -DKokkos_ENABLE_OPENMP=$(usex openmp)
+ -DBUILD_SHARED_LIBS=ON
+ )
+
+ cmake_src_configure
+}
+
+src_test() {
+ local myctestargs=(
+ # Contains "death tests" which are known/expected(?) to fail
+ # https://github.com/kokkos/kokkos/issues/3033
+ # bug #791514
+ -E "(KokkosCore_UnitTest_OpenMP|KokkosCore_UnitTest_Serial)"
+ )
+
+ cmake_src_test
+}
diff --git a/dev-cpp/lucene++/lucene++-3.0.9.ebuild b/dev-cpp/lucene++/lucene++-3.0.9.ebuild
index 3c13c5178d02..c415baab9246 100644
--- a/dev-cpp/lucene++/lucene++-3.0.9.ebuild
+++ b/dev-cpp/lucene++/lucene++-3.0.9.ebuild
@@ -13,7 +13,7 @@ S="${WORKDIR}/${MY_P}"
LICENSE="|| ( LGPL-3 Apache-2.0 )"
SLOT="0"
-KEYWORDS="amd64 ~hppa ~loong ppc ppc64 ~sparc x86"
+KEYWORDS="amd64 ~hppa ~loong ppc ppc64 sparc x86"
IUSE="debug test"
RESTRICT="!test? ( test )"
diff --git a/dev-cpp/nlohmann_json/nlohmann_json-3.12.0-r1.ebuild b/dev-cpp/nlohmann_json/nlohmann_json-3.12.0-r1.ebuild
index 70f098895022..91c3272db0dd 100644
--- a/dev-cpp/nlohmann_json/nlohmann_json-3.12.0-r1.ebuild
+++ b/dev-cpp/nlohmann_json/nlohmann_json-3.12.0-r1.ebuild
@@ -22,7 +22,7 @@ S="${WORKDIR}/json-${PV}"
LICENSE="MIT"
SLOT="0"
-KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
+KEYWORDS="amd64 arm arm64 ~loong ppc ppc64 ~riscv x86"
IUSE="test"
RESTRICT="!test? ( test )"
diff --git a/dev-cpp/pystring/pystring-1.1.4-r2.ebuild b/dev-cpp/pystring/pystring-1.1.4-r2.ebuild
index 0182d29885e2..428c7b91f626 100644
--- a/dev-cpp/pystring/pystring-1.1.4-r2.ebuild
+++ b/dev-cpp/pystring/pystring-1.1.4-r2.ebuild
@@ -13,7 +13,7 @@ if [[ "${PV}" == "9999" ]]; then
EGIT_REPO_URI="https://github.com/imageworks/pystring.git"
else
SRC_URI="https://github.com/imageworks/pystring/archive/v${PV}.tar.gz -> ${P}.tar.gz"
- KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86"
+ KEYWORDS="amd64 ~arm ~arm64 ~ppc64 ~riscv x86"
fi
LICENSE="BSD"
diff --git a/dev-cpp/taskflow/taskflow-3.10.0.ebuild b/dev-cpp/taskflow/taskflow-3.10.0.ebuild
index 8d7a5eb2fc70..2ccb5bb2fbbf 100644
--- a/dev-cpp/taskflow/taskflow-3.10.0.ebuild
+++ b/dev-cpp/taskflow/taskflow-3.10.0.ebuild
@@ -13,7 +13,7 @@ if [[ ${PV} == 9999 ]]; then
S="${WORKDIR}/taskflow-${PV}"
else
SRC_URI="https://github.com/${PN}/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
- KEYWORDS="~alpha amd64 ~arm arm64 ~hppa ~loong ~mips ppc ~ppc64 ~riscv ~s390 ~sparc x86"
+ KEYWORDS="~alpha amd64 ~arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 sparc x86"
S="${WORKDIR}/taskflow-${PV}"
fi
diff --git a/dev-cpp/tinygltf/Manifest b/dev-cpp/tinygltf/Manifest
new file mode 100644
index 000000000000..4d33926e077b
--- /dev/null
+++ b/dev-cpp/tinygltf/Manifest
@@ -0,0 +1,2 @@
+DIST glTF-Sample-Models-d7a3cc8e51d7c573771ae77a57f16b0662a905c6.tar.gz 1181935486 BLAKE2B 4282f5b5e2d56677a907b91b73791bc34dfcdbf931088f315adb938f4c74ffaaa7c9ef9c9018c7e39fbe617b336cc0b09ded87f9f9a567affc1bf25da5929713 SHA512 38e1af72f5748356098d2b948fe19442c200c1b824276bad0f1406f0ee4eb62126891049c0ae795127a92d364a47fd8ec8d29f211a5b19d263a78124aff3c11d
+DIST tinygltf-2.9.6.tar.gz 5904733 BLAKE2B 52012d3ca8cc6661e470c544ad64c6e2761ea39b712da15ca53b19131795220d4be5375697eb935e8b38c025f03e5243e8e1c99c04a5464e130589ee946afb22 SHA512 89397dc2c8884a54ea0c370251449459a200057b5e470210c4468f43c4623947500630b1a67ff6319e0998e648487367398f134711bc7d2c42ebdbd7097770b3
diff --git a/dev-cpp/tinygltf/files/0001-Use-nlohmann-and-stb-packages-instead-of-bundled-one.patch b/dev-cpp/tinygltf/files/0001-Use-nlohmann-and-stb-packages-instead-of-bundled-one.patch
new file mode 100644
index 000000000000..694d9faf8ad6
--- /dev/null
+++ b/dev-cpp/tinygltf/files/0001-Use-nlohmann-and-stb-packages-instead-of-bundled-one.patch
@@ -0,0 +1,41 @@
+From ea07b73401b604adefa99b5d11c391d10cbb29c4 Mon Sep 17 00:00:00 2001
+From: Nguyen Dinh Dang Duong <dangduong31205@gmail.com>
+Date: Wed, 9 Jul 2025 16:56:20 +0700
+Subject: [PATCH] Use nlohmann and stb packages instead of bundled ones
+
+---
+ tiny_gltf.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/tiny_gltf.h b/tiny_gltf.h
+index 7612804..b536faa 100644
+--- a/tiny_gltf.h
++++ b/tiny_gltf.h
+@@ -1712,7 +1712,7 @@ class TinyGLTF {
+
+ #ifndef TINYGLTF_NO_INCLUDE_JSON
+ #ifndef TINYGLTF_USE_RAPIDJSON
+-#include "json.hpp"
++#include <nlohmann/json.hpp>
+ #else
+ #ifndef TINYGLTF_NO_INCLUDE_RAPIDJSON
+ #include "document.h"
+@@ -1731,13 +1731,13 @@ class TinyGLTF {
+
+ #ifndef TINYGLTF_NO_STB_IMAGE
+ #ifndef TINYGLTF_NO_INCLUDE_STB_IMAGE
+-#include "stb_image.h"
++#include <stb/stb_image.h>
+ #endif
+ #endif
+
+ #ifndef TINYGLTF_NO_STB_IMAGE_WRITE
+ #ifndef TINYGLTF_NO_INCLUDE_STB_IMAGE_WRITE
+-#include "stb_image_write.h"
++#include <stb/stb_image_write.h>
+ #endif
+ #endif
+
+--
+2.50.0
+
diff --git a/dev-cpp/tinygltf/metadata.xml b/dev-cpp/tinygltf/metadata.xml
new file mode 100644
index 000000000000..b88102874f2e
--- /dev/null
+++ b/dev-cpp/tinygltf/metadata.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>dangduong31205@gmail.com</email>
+ <name>Nguyen Dinh Dang Duong</name>
+ </maintainer>
+
+ <origin>gentoo-guru-overlay</origin>
+</pkgmetadata> \ No newline at end of file
diff --git a/dev-cpp/tinygltf/tinygltf-2.9.6.ebuild b/dev-cpp/tinygltf/tinygltf-2.9.6.ebuild
new file mode 100644
index 000000000000..ca8be4e22ec2
--- /dev/null
+++ b/dev-cpp/tinygltf/tinygltf-2.9.6.ebuild
@@ -0,0 +1,95 @@
+# Copyright 2024-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{11..14} )
+inherit cmake edo python-any-r1
+
+DESCRIPTION="Header only C++11 tiny glTF 2.0 library"
+HOMEPAGE="https://github.com/syoyo/tinygltf"
+
+SAMPLE_MODELS="d7a3cc8e51d7c573771ae77a57f16b0662a905c6"
+SRC_URI="
+ https://github.com/syoyo/tinygltf/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ test? (
+ https://github.com/KhronosGroup/glTF-Sample-Models/archive/${SAMPLE_MODELS}.tar.gz
+ -> glTF-Sample-Models-${SAMPLE_MODELS}.tar.gz
+ )
+"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+
+IUSE="examples test"
+
+RESTRICT="!test? ( test )"
+
+PATCHES=(
+ "${FILESDIR}/0001-Use-nlohmann-and-stb-packages-instead-of-bundled-one.patch"
+)
+
+RDEPEND="
+ dev-libs/stb
+ dev-cpp/nlohmann_json
+ examples? (
+ media-libs/glew:=
+ media-libs/glfw
+ media-libs/glu
+ virtual/opengl
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ test? (
+ ${PYTHON_DEPS}
+ )
+"
+
+pkg_setup() {
+ use test && python-any-r1_pkg_setup
+}
+
+src_prepare() {
+ cmake_src_prepare
+
+ if use test; then
+ mv -T "${WORKDIR}/glTF-Sample-Models-${SAMPLE_MODELS}" "${WORKDIR}/glTF-Sample-Models" || die
+ fi
+
+ sed -i -e 's/clang++/$(CXX)/' tests/Makefile || die
+ sed -i \
+ -e "s|^sample_model_dir = \".*\"|sample_model_dir = \"${WORKDIR}/glTF-Sample-Models\"|" \
+ -e "s|\"./loader_example\"|\"${BUILD_DIR}/loader_example\"|" \
+ test_runner.py || die
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DTINYGLTF_BUILD_LOADER_EXAMPLE=$(usex test)
+ -DTINYGLTF_BUILD_GL_EXAMPLES=$(usex examples)
+ -DTINYGLTF_BUILD_VALIDATOR_EXAMPLE=$(usex examples)
+ -DTINYGLTF_BUILD_BUILDER_EXAMPLE=$(usex examples)
+ -DTINYGLTF_HEADER_ONLY=OFF
+ -DTINYGLTF_INSTALL=ON
+ -DTINYGLTF_INSTALL_VENDOR=OFF
+ )
+ #use examples && mycmakeargs+=( -DOpenGL_GL_PREFERENCE=GLVND )
+ cmake_src_configure
+}
+
+src_test() {
+ # unit tests
+ pushd tests >/dev/null || die
+ emake
+ edo ./tester
+ edo ./tester_noexcept
+ popd >/dev/null || die
+
+ # glTF parsing tests
+ edo "${EPYTHON}" test_runner.py
+}
diff --git a/dev-cpp/waylandpp/Manifest b/dev-cpp/waylandpp/Manifest
index c8ca9ccfb365..72b2dc92d89f 100644
--- a/dev-cpp/waylandpp/Manifest
+++ b/dev-cpp/waylandpp/Manifest
@@ -1 +1,2 @@
DIST waylandpp-1.0.0.tar.gz 203510 BLAKE2B 939262f61051fb242e779fa4817b262af2de6acef50b53a55e8565e6305e84fbf297adad02d27342a39e2a1be920443cc6dd50711e2c584b3322fa1e90a7051c SHA512 64b59d073a0593ecf442362eb63ec0a9dfeaa1ad1d56b5955cb0c159fd01dc45e012b926811c6ca0dc12d4bb2e640eabc2e778ab7d28de2098eb694d26f01039
+DIST waylandpp-1.0.1.tar.gz 203547 BLAKE2B a9958dde214541066521b91753a24ae70975e679fc815c2f566f03a2ef01b740daaa6dde6b871d1e3e03740083aa907b6132118d7c377e59ecedd3060b204439 SHA512 32c334cc5349c0f15efb5ebc192b60909580ab90b1359c905ca693fe0006747be2a8c7053ffcfc14eaafeeb6aa0b61d1e07a6a3bd9c351d1abb059b2d7c6191b
diff --git a/dev-cpp/waylandpp/waylandpp-1.0.1.ebuild b/dev-cpp/waylandpp/waylandpp-1.0.1.ebuild
new file mode 100644
index 000000000000..11c5362f522e
--- /dev/null
+++ b/dev-cpp/waylandpp/waylandpp-1.0.1.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Wayland C++ bindings"
+HOMEPAGE="https://github.com/NilsBrause/waylandpp"
+
+LICENSE="MIT"
+IUSE="doc"
+SLOT="0/$(ver_cut 1-2)"
+
+if [[ ${PV} == *9999 ]] ; then
+ EGIT_REPO_URI="https://github.com/NilsBrause/waylandpp.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/NilsBrause/waylandpp/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm arm64 ~riscv ~x86"
+fi
+
+RDEPEND="
+ >=dev-libs/wayland-1.11.0
+ media-libs/mesa[wayland]
+ >=dev-libs/pugixml-1.9-r1
+"
+DEPEND="${RDEPEND}
+ doc? (
+ app-text/doxygen
+ media-gfx/graphviz
+ )
+ "
+
+src_configure() {
+ local mycmakeargs=(
+ -DBUILD_DOCUMENTATION=$(usex doc)
+ )
+
+ cmake_src_configure
+}
diff --git a/dev-cpp/waylandpp/waylandpp-9999.ebuild b/dev-cpp/waylandpp/waylandpp-9999.ebuild
index 5cdaa6a0078f..11c5362f522e 100644
--- a/dev-cpp/waylandpp/waylandpp-9999.ebuild
+++ b/dev-cpp/waylandpp/waylandpp-9999.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2024 Gentoo Authors
+# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
@@ -17,7 +17,7 @@ if [[ ${PV} == *9999 ]] ; then
inherit git-r3
else
SRC_URI="https://github.com/NilsBrause/waylandpp/archive/${PV}.tar.gz -> ${P}.tar.gz"
- KEYWORDS="~amd64 ~arm ~arm64 ~x86"
+ KEYWORDS="~amd64 ~arm arm64 ~riscv ~x86"
fi
RDEPEND="
diff --git a/dev-cpp/yaml-cpp/yaml-cpp-0.8.0-r1.ebuild b/dev-cpp/yaml-cpp/yaml-cpp-0.8.0-r1.ebuild
index 21f8f1065c53..1303ecdc4613 100644
--- a/dev-cpp/yaml-cpp/yaml-cpp-0.8.0-r1.ebuild
+++ b/dev-cpp/yaml-cpp/yaml-cpp-0.8.0-r1.ebuild
@@ -11,7 +11,7 @@ SRC_URI="https://github.com/jbeder/yaml-cpp/archive/refs/tags/${PV}.tar.gz -> ${
LICENSE="MIT"
SLOT="0/0.8"
-KEYWORDS="amd64 ~arm arm64 ~hppa ~loong ppc ppc64 ~riscv ~sparc x86 ~amd64-linux ~x86-linux"
+KEYWORDS="amd64 ~arm arm64 ~hppa ~loong ppc ppc64 ~riscv sparc x86 ~amd64-linux ~x86-linux"
IUSE="test"
RESTRICT="!test? ( test )"