This shows up in powerpc and sparc64 since a long time

  http://build-failures.rhaalovely.net/sparc64/2020-04-07/x11/libdbus-c++.log

ld.bfd checks that symbols in libdbus-c++-1.so are resolvable, but
ld.lld doesn't.  On amd64:

--8<--
russell ~$ nm -g /usr/local/lib/libdbus-c++-1.so.0.0 | c++filt | grep -E 
'DBus::operator(<<|>>)'
         U DBus::operator<<(DBus::MessageIter&, DBus::Variant const&)
         U DBus::operator>>(DBus::MessageIter&, DBus::Variant&)
-->8--

Upstream has a fix, though it looks like only the chromium developers
understand what is going on in this C++ maze. (:

  
https://github.com/andreas-volz/dbus-cplusplus/commit/a0b9ef3b469ca23c6a3229d8abb967cbbddcee38

With this fix, the symbols are present in libdbus-c++.so and
build succeeds on sparc64.

--8<--
/usr/local/lib/libdbus-c++-1.so.0.0 --> 
../fake-amd64/usr/local/lib/libdbus-c++-1.so.0.0
Dynamic export changes:
added:
        DBus::operator<<(DBus::MessageIter&, DBus::Variant const&)
        DBus::operator>>(DBus::MessageIter&, DBus::Variant&)

External reference changes:
removed:
        DBus::operator<<(DBus::MessageIter&, DBus::Variant const&)
        DBus::operator>>(DBus::MessageIter&, DBus::Variant&)

PLT added:
        DBus::operator<<(DBus::MessageIter&, DBus::Variant const&)
        DBus::operator>>(DBus::MessageIter&, DBus::Variant&)

-->8--

Shared lib bump needed for libdbus-c++-1.so only.  ok?


Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/libdbus-c++/Makefile,v
retrieving revision 1.3
diff -u -p -r1.3 Makefile
--- Makefile    12 Jul 2019 20:51:15 -0000      1.3
+++ Makefile    9 Apr 2020 09:59:32 -0000
@@ -2,9 +2,13 @@
 
 COMMENT =      C++ API for dbus
 DISTNAME =     libdbus-c++-0.9.0
-SHARED_LIBS =  dbus-c++-1      0.0 \
+REVISION =     0
+
+SHARED_LIBS =  dbus-c++-1      0.1 \
                dbus-c++-glib-1 0.0
+
 CATEGORIES =   x11 devel
+
 HOMEPAGE =     http://dbus-cplusplus.sourceforge.net/
 
 # LGPLv2.1+
Index: patches/patch-include_dbus-c++_types_h
===================================================================
RCS file: /cvs/ports/x11/libdbus-c++/patches/patch-include_dbus-c++_types_h,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 patch-include_dbus-c++_types_h
--- patches/patch-include_dbus-c++_types_h      13 Mar 2019 10:52:51 -0000      
1.1.1.1
+++ patches/patch-include_dbus-c++_types_h      9 Apr 2020 09:59:32 -0000
@@ -1,21 +1,57 @@
 $OpenBSD: patch-include_dbus-c++_types_h,v 1.1.1.1 2019/03/13 10:52:51 stsp 
Exp $
+
 Fix build failure due to symbols not being declared in the DBus namespace.
+https://github.com/andreas-volz/dbus-cplusplus/commit/a0b9ef3b469ca23c6a3229d8abb967cbbddcee38
+
 Index: include/dbus-c++/types.h
 --- include/dbus-c++/types.h.orig
 +++ include/dbus-c++/types.h
-@@ -316,8 +316,6 @@ struct type< Struct<T1, T2, T3, T4, T5, T6, T7, T8, T9
+@@ -89,13 +89,7 @@ class DXXAPI Variant (public)
+   }
+ 
+   template <typename T>
+-  operator T() const
+-  {
+-    T cast;
+-    MessageIter ri = _msg.reader();
+-    ri >> cast;
+-    return cast;
+-  }
++  operator T() const;
+ 
+ private:
+ 
+@@ -316,7 +310,7 @@ struct type< Struct<T1, T2, T3, T4, T5, T6, T7, T8, T9
    }
  };
  
 -} /* namespace DBus */
--
++extern DXXAPI DBus::MessageIter &operator << (DBus::MessageIter &iter, const 
DBus::Variant &val);
+ 
  inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const 
DBus::Invalid &)
  {
-   return iter;
-@@ -645,6 +643,8 @@ inline DBus::MessageIter &operator >> (DBus::MessageIt
+@@ -551,6 +545,8 @@ inline DBus::MessageIter &operator >> (DBus::MessageIt
+   return ++iter;
+ }
+ 
++extern DXXAPI DBus::MessageIter &operator >> (DBus::MessageIter &iter, 
DBus::Variant &val);
++
+ template<typename E>
+ inline DBus::MessageIter &operator >> (DBus::MessageIter &iter, 
std::vector<E>& val)
+ {
+@@ -644,7 +640,16 @@ inline DBus::MessageIter &operator >> (DBus::MessageIt
+   return ++iter;
  }
  
- extern DXXAPI DBus::MessageIter &operator >> (DBus::MessageIter &iter, 
DBus::Variant &val);
+-extern DXXAPI DBus::MessageIter &operator >> (DBus::MessageIter &iter, 
DBus::Variant &val);
++template <typename T>
++inline DBus::Variant::operator T() const
++{
++  T cast;
++  DBus::MessageIter ri = _msg.reader();
++  ri >> cast;
++  return cast;
++}
 +
 +} /* namespace DBus */
  
Index: patches/patch-src_types_cpp
===================================================================
RCS file: patches/patch-src_types_cpp
diff -N patches/patch-src_types_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_types_cpp 9 Apr 2020 09:59:32 -0000
@@ -0,0 +1,22 @@
+$OpenBSD$
+
+Fix build failure due to symbols not being declared in the DBus namespace.
+https://github.com/andreas-volz/dbus-cplusplus/commit/a0b9ef3b469ca23c6a3229d8abb967cbbddcee38
+
+Index: src/types.cpp
+--- src/types.cpp.orig
++++ src/types.cpp
+@@ -34,7 +34,7 @@
+ #include "message_p.h"
+ #include "internalerror.h"
+ 
+-using namespace DBus;
++namespace DBus {
+ 
+ Variant::Variant()
+   : _msg(CallMessage()) // dummy message used as temporary storage for 
variant data
+@@ -104,3 +104,4 @@ MessageIter &operator >> (MessageIter &iter, Variant &
+   return ++iter;
+ }
+ 
++} /* namespace DBus */


-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to