commit:     3aec425b48b36c3f7f7df6b053441bbecbbd0584
Author:     David Seifert <soap <AT> gentoo <DOT> org>
AuthorDate: Mon Jan  1 21:34:15 2024 +0000
Commit:     David Seifert <soap <AT> gentoo <DOT> org>
CommitDate: Mon Jan  1 21:34:15 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3aec425b

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 <AT> gentoo.org>

 ...{boost-1.84.0.ebuild => boost-1.84.0-r1.ebuild} |   6 +-
 .../boost/files/boost-1.84.0-signals2-patch1.patch | 124 +++++++++++++++++++++
 .../boost/files/boost-1.84.0-signals2-patch2.patch |  19 ++++
 3 files changed, 148 insertions(+), 1 deletion(-)

diff --git a/dev-libs/boost/boost-1.84.0.ebuild 
b/dev-libs/boost/boost-1.84.0-r1.ebuild
similarity index 98%
rename from dev-libs/boost/boost-1.84.0.ebuild
rename to 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 <[email protected]>
+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 <[email protected]>
+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))

Reply via email to