On Tue, 2015-10-06 at 12:33 +0200, Svante Signell wrote:
> tags 799235 patch
> usertag 799235 hurd
> user [email protected]
> thanks
>
> Source: zeromq3
> Version: 4.0.5+dfsg-3
> Severity: important
> Justification: fails to build from source
>
> Hello,
>
> The attached patch adds support for zeromq3 on GNU/Hurd. Two tests
> fails causing ssh to hang and crashes a translator in a hurd terminal:
> test_pair_ipc and test_reqrep_ipc. Partial problems with these tests
> are that option SO_ERROR is not yet supported for gsetsockopt() on
> Hurd.
>
> Investigation is ongoing. This is reflected in tests/Makefile.am which
> excludes these tests.
Now fixed!
Attached is an updated patch not containing the commented-out code. Regarding
SO_ERROR for local sockets Hurd is now updated not to issue an error. However,
the test for ENOPROTOOPT should probably still be there, for reasons given by
Samuel in issue 1709. Seems like the old patch got applied to the github code,
see issue 1704 and pull request 1709. Since I don't know anything about github
pull requests, maybe you can handle this?
Additionally, until upstream makes a new release, do you think it is possible to
add the patch to the Debian package so that packages reverse-depending on it can
be built?
Thanks!
Index: zeromq3-4.0.5+dfsg/configure.ac
===================================================================
--- zeromq3-4.0.5+dfsg.orig/configure.ac
+++ zeromq3-4.0.5+dfsg/configure.ac
@@ -115,6 +115,7 @@ libzmq_dso_visibility="yes"
libzmq_on_mingw32="no"
libzmq_on_android="no"
libzmq_on_linux="no"
+libzmq_on_gnu="no"
# Set some default features required by 0MQ code.
CPPFLAGS="-D_REENTRANT -D_THREAD_SAFE $CPPFLAGS"
@@ -249,6 +250,15 @@ case "${host_os}" in
AC_MSG_ERROR([Building static libraries is not supported under Cygwin])
fi
;;
+ gnu*)
+ # Define on GNU/Hurd to enable all library features. Define if using a gnu compiler
+ if test "x$GXX" = "xyes"; then
+ CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
+ fi
+ AC_DEFINE(ZMQ_HAVE_GNU, 1, [Have GNU/Hurd OS])
+ libzmq_on_gnu="yes"
+ AC_CHECK_LIB(rt, sem_init)
+ ;;
*)
AC_MSG_ERROR([unsupported system: ${host_os}.])
;;
@@ -431,6 +441,7 @@ AM_CONDITIONAL(BUILD_PGM, test "x$libzmq
AM_CONDITIONAL(ON_MINGW, test "x$libzmq_on_mingw32" = "xyes")
AM_CONDITIONAL(ON_ANDROID, test "x$libzmq_on_android" = "xyes")
AM_CONDITIONAL(ON_LINUX, test "x$libzmq_on_linux" = "xyes")
+AM_CONDITIONAL(ON_GNU, test "x$libzmq_on_gnu" = "xyes")
# Checks for library functions.
AC_TYPE_SIGNAL
Index: zeromq3-4.0.5+dfsg/src/poller.hpp
===================================================================
--- zeromq3-4.0.5+dfsg.orig/src/poller.hpp
+++ zeromq3-4.0.5+dfsg/src/poller.hpp
@@ -73,6 +73,9 @@
#elif defined ZMQ_HAVE_CYGWIN
#define ZMQ_USE_SELECT
#include "select.hpp"
+#elif defined ZMQ_HAVE_GNU
+#define ZMQ_USE_POLL
+#include "poll.hpp"
#else
#error Unsupported platform
#endif
Index: zeromq3-4.0.5+dfsg/src/ipc_connecter.cpp
===================================================================
--- zeromq3-4.0.5+dfsg.orig/src/ipc_connecter.cpp
+++ zeromq3-4.0.5+dfsg/src/ipc_connecter.cpp
@@ -242,8 +242,11 @@ zmq::fd_t zmq::ipc_connecter_t::connect
socklen_t len = sizeof (err);
#endif
int rc = getsockopt (s, SOL_SOCKET, SO_ERROR, (char*) &err, &len);
- if (rc == -1)
+ if (rc == -1) {
+ if (errno == ENOPROTOOPT)
+ errno = 0;
err = errno;
+ }
if (err != 0) {
// Assert if the error was caused by 0MQ bug.
Index: zeromq3-4.0.5+dfsg/src/zmq.cpp
===================================================================
--- zeromq3-4.0.5+dfsg.orig/src/zmq.cpp
+++ zeromq3-4.0.5+dfsg/src/zmq.cpp
@@ -28,7 +28,7 @@
defined ZMQ_HAVE_OPENBSD || defined ZMQ_HAVE_SOLARIS ||\
defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_QNXNTO ||\
defined ZMQ_HAVE_HPUX || defined ZMQ_HAVE_AIX ||\
- defined ZMQ_HAVE_NETBSD
+ defined ZMQ_HAVE_NETBSD || defined ZMQ_HAVE_GNU
#define ZMQ_POLL_BASED_ON_POLL
#elif defined ZMQ_HAVE_WINDOWS || defined ZMQ_HAVE_OPENVMS ||\
defined ZMQ_HAVE_CYGWIN
Index: zeromq3-4.0.5+dfsg/src/proxy.cpp
===================================================================
--- zeromq3-4.0.5+dfsg.orig/src/proxy.cpp
+++ zeromq3-4.0.5+dfsg/src/proxy.cpp
@@ -30,7 +30,7 @@
defined ZMQ_HAVE_OPENBSD || defined ZMQ_HAVE_SOLARIS ||\
defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_QNXNTO ||\
defined ZMQ_HAVE_HPUX || defined ZMQ_HAVE_AIX ||\
- defined ZMQ_HAVE_NETBSD
+ defined ZMQ_HAVE_NETBSD || defined ZMQ_HAVE_GNU
#define ZMQ_POLL_BASED_ON_POLL
#elif defined ZMQ_HAVE_WINDOWS || defined ZMQ_HAVE_OPENVMS ||\
defined ZMQ_HAVE_CYGWIN
Index: zeromq3-4.0.5+dfsg/src/signaler.cpp
===================================================================
--- zeromq3-4.0.5+dfsg.orig/src/signaler.cpp
+++ zeromq3-4.0.5+dfsg/src/signaler.cpp
@@ -27,7 +27,7 @@
defined ZMQ_HAVE_OPENBSD || defined ZMQ_HAVE_SOLARIS ||\
defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_QNXNTO ||\
defined ZMQ_HAVE_HPUX || defined ZMQ_HAVE_AIX ||\
- defined ZMQ_HAVE_NETBSD
+ defined ZMQ_HAVE_NETBSD || defined ZMQ_HAVE_GNU
#define ZMQ_SIGNALER_WAIT_BASED_ON_POLL
#elif defined ZMQ_HAVE_WINDOWS || defined ZMQ_HAVE_OPENVMS ||\
defined ZMQ_HAVE_CYGWIN
Index: zeromq3-4.0.5+dfsg/src/tcp_address.cpp
===================================================================
--- zeromq3-4.0.5+dfsg.orig/src/tcp_address.cpp
+++ zeromq3-4.0.5+dfsg/src/tcp_address.cpp
@@ -146,7 +146,8 @@ int zmq::tcp_address_t::resolve_nic_name
#elif ((defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_FREEBSD ||\
defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_OPENBSD ||\
- defined ZMQ_HAVE_QNXNTO || defined ZMQ_HAVE_NETBSD)\
+ defined ZMQ_HAVE_QNXNTO || defined ZMQ_HAVE_NETBSD ||\
+ defined ZMQ_HAVE_GNU)\
&& defined ZMQ_HAVE_IFADDRS)
#include <ifaddrs.h>