telephony/resiprocate fails to build on non-x86 architectures.
The reason is amazing:
error: Need some way to seed the random number generator
http://build-failures.rhaalovely.net/aarch64/2020-05-30/telephony/resiprocate%2C.log
The culprit is stunRand() in rutil/stun/Stun.cxx. Depending on
operating system and architecture, this function tries to query
some high resolution timer or get a piece of random data, which it
uses to seed srandom(), and then calls random(). It's an inconsistent
mess (why build a 64-bit seed? does it return 32 or 31 bits?).
Oh, and it uses rdtsc on __i386__, an instruction that appeared on
the Pentium.
I already spent too much time looking at this; here's a patch that
simply bypasses the whole mess.
OK?
Index: Makefile
===================================================================
RCS file: /cvs/ports/telephony/resiprocate/Makefile,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 Makefile
--- Makefile 29 May 2020 21:41:23 -0000 1.1.1.1
+++ Makefile 4 Jun 2020 16:28:51 -0000
@@ -6,6 +6,7 @@ COMMENT-return = reSIProcate STUN/TURN c
V = 1.12.0
DISTNAME = resiprocate-${V}
+REVISION = 0
PKGNAME-main = resiprocate-${V}
PKGNAME-repro = resiprocate-repro-${V}
PKGNAME-return = resiprocate-return-${V}
Index: patches/patch-rutil_stun_Stun_cxx
===================================================================
RCS file: patches/patch-rutil_stun_Stun_cxx
diff -N patches/patch-rutil_stun_Stun_cxx
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-rutil_stun_Stun_cxx 4 Jun 2020 16:28:51 -0000
@@ -0,0 +1,23 @@
+$OpenBSD$
+
+Index: rutil/stun/Stun.cxx
+--- rutil/stun/Stun.cxx.orig
++++ rutil/stun/Stun.cxx
+@@ -802,6 +802,9 @@ stunRand()
+ {
+ // return 32 bits of random stuff
+ resip_assert( sizeof(int) == 4 );
++#if defined(__OpenBSD__)
++ return arc4random();
++#else
+ static bool init=false;
+ if ( !init )
+ {
+@@ -857,6 +860,7 @@ stunRand()
+ return ret;
+ #else
+ return random();
++#endif
+ #endif
+ }
+
--
Christian "naddy" Weisgerber [email protected]