Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: [OMPI devel] Build failure on FreeBSD 7
From: Karol Mroz (mroz.karol_at_[hidden])
Date: 2008-04-04 19:34:47


Hello everyone... it's been some time since I posted here. I pulled the
latest svn revision (18079) and had some trouble building Open MPI on a
FreeBSD 7 machine (i386).

Make failed when compiling opal/event/kqueue.c. It appears that freebsd
needs sys/types.h, sys/ioctl.h, termios.h and libutil.h included in
order to reference openpty(). I added ifdef/includes for these header
files into kqueue.c and managed to build. Note that I also tried the
latest nightly tarball. The tarball build actually succeeded without any
changes. Curious if anyone has experienced this type of behavior? A
colleague of mine mentioned it could be a FreeBSD autotools issue?

Although builds were successful (with modification for the svn build,
and without modification for the nightly tarball), I tried running a
simple app locally with 2 processes using the TCP BTL that does a
non-blocking send/recv. The app simply hung. After attaching gdb to one
of the 2 processes, the console output (not gdb) reported the following
output:

[warn] kq_init: detected broken kqueue (failed add); not using error 4
(Interrupted system call)
: Interrupted system call

I'm including the diff of kqueue.c here for completeness. If anyone
requires any further information, please let me know.

Thanks.

-- 
Karol

Index: opal/event/kqueue.c
===================================================================
--- opal/event/kqueue.c (revision 18079)
+++ opal/event/kqueue.c (working copy)
@@ -52,7 +52,17 @@
 #ifdef HAVE_UTIL_H
 #include <util.h>
 #endif
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+#ifdef HAVE_LIBUTIL_H
+#include <libutil.h>
+#endif
+#ifdef HAVE_TERMIOS_H
+#include <termios.h>
+#endif
 
+
 /* Some platforms apparently define the udata field of struct kevent as
  * intptr_t, whereas others define it as void*. There doesn't seem to be an
  * easy way to tell them apart via autoconf, so we need to use OS macros. */