diff options
author | David Seifert <soap@gentoo.org> | 2024-01-01 22:34:15 +0100 |
---|---|---|
committer | David Seifert <soap@gentoo.org> | 2024-01-01 22:34:15 +0100 |
commit | 3aec425b48b36c3f7f7df6b053441bbecbbd0584 (patch) | |
tree | ab900c0737796fabb0f79b7bf82bb77fd4feb0f6 /dev-libs/boost | |
parent | dev-qt/qtwebview: add 5.15.12 (diff) | |
download | gentoo-3aec425b48b36c3f7f7df6b053441bbecbbd0584.tar.gz gentoo-3aec425b48b36c3f7f7df6b053441bbecbbd0584.tar.bz2 gentoo-3aec425b48b36c3f7f7df6b053441bbecbbd0584.zip |
dev-libs/boost: add patch for net-im/swift build failure
Bug: https://github.com/boostorg/signals2/issues/70
Bug: https://bugs.gentoo.org/912309
Signed-off-by: David Seifert <soap@gentoo.org>
Diffstat (limited to 'dev-libs/boost')
-rw-r--r-- | dev-libs/boost/boost-1.84.0-r1.ebuild (renamed from dev-libs/boost/boost-1.84.0.ebuild) | 6 | ||||
-rw-r--r-- | dev-libs/boost/files/boost-1.84.0-signals2-patch1.patch | 124 | ||||
-rw-r--r-- | dev-libs/boost/files/boost-1.84.0-signals2-patch2.patch | 19 |
3 files changed, 148 insertions, 1 deletions
diff --git a/dev-libs/boost/boost-1.84.0.ebuild b/dev-libs/boost/boost-1.84.0-r1.ebuild index c6e55525f805..fc4ea0922f11 100644 --- a/dev-libs/boost/boost-1.84.0.ebuild +++ b/dev-libs/boost/boost-1.84.0-r1.ebuild @@ -1,4 +1,4 @@ -# Copyright 1999-2023 Gentoo Authors +# Copyright 1999-2024 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 @@ -55,6 +55,10 @@ PATCHES=( "${FILESDIR}"/${PN}-1.79.0-boost-mpi-python-PEP-328.patch "${FILESDIR}"/${PN}-1.81.0-phoenix-multiple-definitions.patch "${FILESDIR}"/${PN}-1.83.0-math-gcc14.patch + + # upstreamed + "${FILESDIR}"/${PN}-1.84.0-signals2-patch1.patch + "${FILESDIR}"/${PN}-1.84.0-signals2-patch2.patch ) python_bindings_needed() { diff --git a/dev-libs/boost/files/boost-1.84.0-signals2-patch1.patch b/dev-libs/boost/files/boost-1.84.0-signals2-patch1.patch new file mode 100644 index 000000000000..9c07bd8f06cf --- /dev/null +++ b/dev-libs/boost/files/boost-1.84.0-signals2-patch1.patch @@ -0,0 +1,124 @@ +https://github.com/boostorg/signals2/issues/70 + +From 2ba258f7b465e7bde14663ca3a966019b4ec3694 Mon Sep 17 00:00:00 2001 +From: Frank Mori Hess <fmh6jj@gmail.com> +Date: Sat, 30 Dec 2023 14:34:58 -0500 +Subject: [PATCH] Fix disconnect by slot when the slot is another signal. + +--- a/boost/signals2/detail/signal_template.hpp ++++ b/boost/signals2/detail/signal_template.hpp +@@ -103,9 +103,9 @@ namespace boost + BOOST_SIGNALS2_FORWARDED_ARGS(BOOST_SIGNALS2_NUM_ARGS)); + } + template<typename T> +- bool operator==(const T &other) const ++ bool contains(const T &other) const + { +- return _fun == other; ++ return _fun.contains(other); + } + private: + BOOST_SIGNALS2_BOUND_EXTENDED_SLOT_FUNCTION_N(BOOST_SIGNALS2_NUM_ARGS)() +@@ -115,6 +115,8 @@ namespace boost + boost::shared_ptr<connection> _connection; + }; + ++ template<BOOST_SIGNALS2_SIGNAL_TEMPLATE_DECL(BOOST_SIGNALS2_NUM_ARGS)> ++ class BOOST_SIGNALS2_WEAK_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS); + template<BOOST_SIGNALS2_SIGNAL_TEMPLATE_DECL(BOOST_SIGNALS2_NUM_ARGS)> + class BOOST_SIGNALS2_SIGNAL_IMPL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS); + +@@ -150,6 +152,8 @@ namespace boost + typedef GroupCompare group_compare_type; + typedef typename detail::slot_call_iterator_t<slot_invoker, + typename connection_list_type::iterator, connection_body<group_key_type, slot_type, Mutex> > slot_call_iterator; ++ typedef detail::BOOST_SIGNALS2_WEAK_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) ++ <BOOST_SIGNALS2_SIGNAL_TEMPLATE_INSTANTIATION> weak_signal_type; + + BOOST_SIGNALS2_SIGNAL_IMPL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS)(const combiner_type &combiner_arg, + const group_compare_type &group_compare): +@@ -531,13 +535,20 @@ namespace boost + { + (*it)->nolock_disconnect(lock); + }else +- { +- // check for wrapped extended slot ++ { // check for wrapped extended slot + bound_extended_slot_function_type *fp; + fp = (*it)->slot().slot_function().template target<bound_extended_slot_function_type>(); +- if(fp && function_equal(*fp, slot)) ++ if(fp && fp->contains(slot)) + { + (*it)->nolock_disconnect(lock); ++ }else ++ { // check for wrapped signal ++ weak_signal_type *fp; ++ fp = (*it)->slot().slot_function().template target<weak_signal_type>(); ++ if(fp && fp->contains(slot)) ++ { ++ (*it)->nolock_disconnect(lock); ++ } + } + } + } +@@ -588,8 +599,6 @@ namespace boost + const boost::shared_ptr<mutex_type> _mutex; + }; + +- template<BOOST_SIGNALS2_SIGNAL_TEMPLATE_DECL(BOOST_SIGNALS2_NUM_ARGS)> +- class BOOST_SIGNALS2_WEAK_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS); + } + + template<BOOST_SIGNALS2_SIGNAL_TEMPLATE_DEFAULTED_DECL(BOOST_SIGNALS2_NUM_ARGS)> +@@ -603,8 +612,7 @@ namespace boost + typedef detail::BOOST_SIGNALS2_SIGNAL_IMPL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) + <BOOST_SIGNALS2_SIGNAL_TEMPLATE_INSTANTIATION> impl_class; + public: +- typedef detail::BOOST_SIGNALS2_WEAK_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) +- <BOOST_SIGNALS2_SIGNAL_TEMPLATE_INSTANTIATION> weak_signal_type; ++ typedef typename impl_class::weak_signal_type weak_signal_type; + friend class detail::BOOST_SIGNALS2_WEAK_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) + <BOOST_SIGNALS2_SIGNAL_TEMPLATE_INSTANTIATION>; + +@@ -746,12 +754,24 @@ namespace boost + using std::swap; + swap(_pimpl, other._pimpl); + } ++ bool operator==(const BOOST_SIGNALS2_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) & other) const ++ { ++ return _pimpl.get() == other._pimpl.get(); ++ } + protected: + virtual shared_ptr<void> lock_pimpl() const + { + return _pimpl; + } + private: ++ // explicit private copy constructor to avoid compiler trying to do implicit conversions to signal ++ explicit BOOST_SIGNALS2_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS)( ++ const BOOST_SIGNALS2_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) & other) BOOST_NOEXCEPT ++ { ++ // noncopyable ++ BOOST_ASSERT(false); ++ } ++ + shared_ptr<impl_class> + _pimpl; + }; +@@ -802,6 +822,16 @@ namespace boost + shared_pimpl(_weak_pimpl.lock()); + return (*shared_pimpl)(BOOST_SIGNALS2_SIGNATURE_ARG_NAMES(BOOST_SIGNALS2_NUM_ARGS)); + } ++ bool contains(const BOOST_SIGNALS2_SIGNAL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) ++ <BOOST_SIGNALS2_SIGNAL_TEMPLATE_INSTANTIATION> &signal) const ++ { ++ return _weak_pimpl.lock().get() == signal._pimpl.get(); ++ } ++ template <typename T> ++ bool contains(const T&) const ++ { ++ return false; ++ } + private: + boost::weak_ptr<detail::BOOST_SIGNALS2_SIGNAL_IMPL_CLASS_NAME(BOOST_SIGNALS2_NUM_ARGS) + <BOOST_SIGNALS2_SIGNAL_TEMPLATE_INSTANTIATION> > _weak_pimpl; diff --git a/dev-libs/boost/files/boost-1.84.0-signals2-patch2.patch b/dev-libs/boost/files/boost-1.84.0-signals2-patch2.patch new file mode 100644 index 000000000000..f277ae9973a1 --- /dev/null +++ b/dev-libs/boost/files/boost-1.84.0-signals2-patch2.patch @@ -0,0 +1,19 @@ +https://github.com/boostorg/signals2/issues/70 + +From 4d994bbed820882059c7842ba5e230a26d68f2f0 Mon Sep 17 00:00:00 2001 +From: Frank Mori Hess <fmh6jj@gmail.com> +Date: Sat, 30 Dec 2023 14:51:49 -0500 +Subject: [PATCH] Fix disconnect by slot when slot is wrapped in a + boost::reference_wrapper + +--- a/boost/signals2/detail/signal_template.hpp ++++ b/boost/signals2/detail/signal_template.hpp +@@ -223,7 +223,7 @@ namespace boost + void disconnect(const T &slot) + { + typedef mpl::bool_<(is_convertible<T, group_type>::value)> is_group; +- do_disconnect(slot, is_group()); ++ do_disconnect(unwrap_ref(slot), is_group()); + } + // emit signal + result_type operator ()(BOOST_SIGNALS2_SIGNATURE_FULL_ARGS(BOOST_SIGNALS2_NUM_ARGS)) |