commit: 3cd4670949925ba41cf339fb2885a49bb0fd9ab2 Author: Holger Hoffstätte <holger <AT> applied-asynchrony <DOT> com> AuthorDate: Wed Feb 11 21:32:36 2026 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Wed Feb 11 23:40:44 2026 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3cd46709
dev-cpp/tree: fixes for gcc-16 compile/test failures Also unhardcode g++ to allow building/testing with different compilers. Closes: https://bugs.gentoo.org/964308 Signed-off-by: Holger Hoffstätte <holger <AT> applied-asynchrony.com> Part-of: https://github.com/gentoo/gentoo/pull/45767 Closes: https://github.com/gentoo/gentoo/pull/45767 Signed-off-by: Sam James <sam <AT> gentoo.org> dev-cpp/tree/files/3.18-add-missing-insert.patch | 82 ++++++++++++++++++++++++ dev-cpp/tree/files/3.18-const.patch | 23 +++++++ dev-cpp/tree/files/3.18-cxx.patch | 27 ++++++++ dev-cpp/tree/files/3.18-fix-move-out.patch | 46 +++++++++++++ dev-cpp/tree/tree-3.18-r1.ebuild | 46 +++++++++++++ 5 files changed, 224 insertions(+) diff --git a/dev-cpp/tree/files/3.18-add-missing-insert.patch b/dev-cpp/tree/files/3.18-add-missing-insert.patch new file mode 100644 index 000000000000..adf3776448ac --- /dev/null +++ b/dev-cpp/tree/files/3.18-add-missing-insert.patch @@ -0,0 +1,82 @@ +https://github.com/kpeeters/tree.hh/commit/1bd1cd80cdcec2ba1c677ee0ef3766a9485d1d2f + +From: Kasper Peeters <[email protected]> +Date: Fri, 17 Nov 2023 11:24:49 +0000 +Subject: [PATCH] Add a missing 'insert(sibling_iterators, T&&)'. Fixes issue + #24. + +--- + src/tree.hh | 39 +++++++++++++++++++++++++++++++++++---- + 1 file changed, 35 insertions(+), 4 deletions(-) + +diff --git a/src/tree.hh b/src/tree.hh +index 906cda1..d460165 100644 +--- a/src/tree.hh ++++ b/src/tree.hh +@@ -1,7 +1,7 @@ + + // STL-like templated tree class. + // +-// Copyright (C) 2001-2020 Kasper Peeters <[email protected]> ++// Copyright (C) 2001-2023 Kasper Peeters <[email protected]> + // Distributed under the GNU General Public License version 3. + // + // Special permission to use tree.hh under the conditions of a +@@ -9,9 +9,8 @@ + + /** \mainpage tree.hh + \author Kasper Peeters +- \version 3.18 +- \date 13-Feb-2021 +- \see http://tree.phi-sci.com/ ++ \version 3.19 ++ \date 2023-11-17 + \see http://github.com/kpeeters/tree.hh/ + + The tree.hh library for C++ provides an STL-like container class +@@ -363,6 +362,7 @@ class tree { + template<typename iter> iter insert(iter position, T&& x); + /// Specialisation of previous member. + sibling_iterator insert(sibling_iterator position, const T& x); ++ sibling_iterator insert(sibling_iterator position, T&& x); + /// Insert node (with children) pointed to by subtree as previous sibling of node pointed to by position. + /// Does not change the subtree itself (use move_in or move_in_below for that). + template<typename iter> iter insert_subtree(iter position, const iterator_base& subtree); +@@ -1363,6 +1363,37 @@ typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_alloca + return tmp; + } + ++template <class T, class tree_node_allocator> ++typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_allocator>::insert(sibling_iterator position, T&& x) ++ { ++ tree_node *tmp=std::allocator_traits<decltype(alloc_)>::allocate(alloc_, 1, 0); ++ std::allocator_traits<decltype(alloc_)>::construct(alloc_, tmp); ++ std::swap(tmp->data, x); // Move semantics ++ ++ tmp->first_child=0; ++ tmp->last_child=0; ++ ++ tmp->next_sibling=position.node; ++ if(position.node==0) { // iterator points to end of a subtree ++ tmp->parent=position.parent_; ++ tmp->prev_sibling=position.range_last(); ++ tmp->parent->last_child=tmp; ++ } ++ else { ++ tmp->parent=position.node->parent; ++ tmp->prev_sibling=position.node->prev_sibling; ++ position.node->prev_sibling=tmp; ++ } ++ ++ if(tmp->prev_sibling==0) { ++ if(tmp->parent) // when inserting nodes at the head, there is no parent ++ tmp->parent->first_child=tmp; ++ } ++ else ++ tmp->prev_sibling->next_sibling=tmp; ++ return tmp; ++ } ++ + template <class T, class tree_node_allocator> + template <class iter> + iter tree<T, tree_node_allocator>::insert_after(iter position, const T& x) diff --git a/dev-cpp/tree/files/3.18-const.patch b/dev-cpp/tree/files/3.18-const.patch new file mode 100644 index 000000000000..580c23f7ac53 --- /dev/null +++ b/dev-cpp/tree/files/3.18-const.patch @@ -0,0 +1,23 @@ +https://github.com/kpeeters/tree.hh/commit/0ee8b5a4c3a93814bbf465ffc56c296cf84f1832 + +From: Kasper Peeters <[email protected]> +Date: Fri, 17 Nov 2023 11:27:13 +0000 +Subject: [PATCH] Fix const-correctness for comparison. + +--- + src/tree.hh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/tree.hh b/src/tree.hh +index d460165..be45f99 100644 +--- a/src/tree.hh ++++ b/src/tree.hh +@@ -505,7 +505,7 @@ class tree { + public: + compare_nodes(StrictWeakOrdering comp) : comp_(comp) {} + +- bool operator()(const tree_node *a, const tree_node *b) ++ bool operator()(const tree_node *a, const tree_node *b) const + { + return comp_(a->data, b->data); + } diff --git a/dev-cpp/tree/files/3.18-cxx.patch b/dev-cpp/tree/files/3.18-cxx.patch new file mode 100644 index 000000000000..e5562dfee4f6 --- /dev/null +++ b/dev-cpp/tree/files/3.18-cxx.patch @@ -0,0 +1,27 @@ +--- tree.hh-3.18/src/Makefile ++++ tree.hh-3.18/src/Makefile +@@ -2,19 +2,19 @@ + all: test1 test2 test_tree + + %.o: %.cc tree.hh +- g++ -g -c -o $@ -Wall -O2 -std=c++11 -I. $< ++ $(CXX) -g -c -o $@ -Wall -O2 -std=c++11 -I. $< + + test1: test1.o +- g++ -o test1 test1.o ++ $(CXX) -o test1 test1.o + + test2: test2.o +- g++ -o test2 test2.o ++ $(CXX) -o test2 test2.o + + test_tree: test_tree.o +- g++ -o test_tree test_tree.o ++ $(CXX) -o test_tree test_tree.o + + sample_path: sample_path.o +- g++ -o sample_path sample_path.o ++ $(CXX) -o sample_path sample_path.o + + run_tests: test1 test1.req + ./test1 > test1.res diff --git a/dev-cpp/tree/files/3.18-fix-move-out.patch b/dev-cpp/tree/files/3.18-fix-move-out.patch new file mode 100644 index 000000000000..9f72b438720b --- /dev/null +++ b/dev-cpp/tree/files/3.18-fix-move-out.patch @@ -0,0 +1,46 @@ +https://github.com/kpeeters/tree.hh/commit/66f71a672698909e5b613a3c04a918bac3d4282f + +From: Kasper Peeters <[email protected]> +Date: Fri, 17 Nov 2023 11:33:30 +0000 +Subject: [PATCH] Fix move_out for cases when the moved-out node was first or + last child of the old parent. + +--- + src/tree.hh | 17 ++++++++++++++++- + 1 file changed, 16 insertions(+), 1 deletion(-) + +diff --git a/src/tree.hh b/src/tree.hh +index be45f99..743a81b 100644 +--- a/src/tree.hh ++++ b/src/tree.hh +@@ -1860,7 +1860,6 @@ tree<T, tree_node_allocator> tree<T, tree_node_allocator>::move_out(iterator sou + // Move source node into the 'ret' tree. + ret.head->next_sibling = source.node; + ret.feet->prev_sibling = source.node; +- source.node->parent=0; + + // Close the links in the current tree. + if(source.node->prev_sibling!=0) +@@ -1869,6 +1868,22 @@ tree<T, tree_node_allocator> tree<T, tree_node_allocator>::move_out(iterator sou + if(source.node->next_sibling!=0) + source.node->next_sibling->prev_sibling = source.node->prev_sibling; + ++ // If the moved-out node was a first or last child of ++ // the parent, adjust those links. ++ if(source.node->parent->first_child==source.node) { ++ if(source.node->next_sibling!=0) ++ source.node->parent->first_child=source.node->next_sibling; ++ else ++ source.node->parent->first_child=0; ++ } ++ if(source.node->parent->last_child==source.node) { ++ if(source.node->prev_sibling!=0) ++ source.node->parent->last_child=source.node->prev_sibling; ++ else ++ source.node->parent->last_child=0; ++ } ++ source.node->parent=0; ++ + // Fix source prev/next links. + source.node->prev_sibling = ret.head; + source.node->next_sibling = ret.feet; diff --git a/dev-cpp/tree/tree-3.18-r1.ebuild b/dev-cpp/tree/tree-3.18-r1.ebuild new file mode 100644 index 000000000000..8e80f85b9080 --- /dev/null +++ b/dev-cpp/tree/tree-3.18-r1.ebuild @@ -0,0 +1,46 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DOCS_BUILDER="doxygen" +DOCS_CONFIG_NAME="doxygen_tree.config" +DOCS_DIR="doc" + +inherit docs toolchain-funcs + +DESCRIPTION="An STL-like tree class" +HOMEPAGE="https://github.com/kpeeters/tree.hh" +SRC_URI="https://github.com/kpeeters/tree.hh/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz" +S="${WORKDIR}/${PN}.hh-${PV}" + +LICENSE="|| ( GPL-2 GPL-3 )" +SLOT="0" +KEYWORDS="~amd64 ~ppc64 ~x86" + +PATCHES=( + "${FILESDIR}"/3.18-add-missing-insert.patch + "${FILESDIR}"/3.18-const.patch + "${FILESDIR}"/3.18-cxx.patch + "${FILESDIR}"/3.18-fix-move-out.patch +) + +src_configure() { + tc-export CXX +} + +src_compile() { + docs_compile +} + +src_test() { + cd src || die + emake + emake run_tests +} + +src_install() { + doheader src/tree.hh src/tree_util.hh + dodoc -r examples + einstalldocs +}
