Compilation Error on SmartOS/Illumos/OpenIndiana
Jason Madden
jason.madden at nextthought.com
Fri Jan 8 16:42:20 CET 2016
Hi all,
I'm a maintainer of the Python gevent library which wraps libev. Recently, we received a bug report [1] from a user claiming compilation issues on SmartOS [2], which is a variant of OpenIndiana/Illumos [3], the open versions of Solaris.
Specifically, it turns out that Illumos now ships with an implementation of `inotify` [4], including the header and init function. This is detected by the `configure` script and EV_USE_INOTIFY is defined. However, the Illumos definition for `struct statfs` is incompatible with the Linux version, so compilation fails.
This has been reported as a problem with other software, for example one of Facebook's projects at [5]. In that project, they were able to make a code change to prefer the port backend and ignore the inotify support. This seems better than hacking on `configure` as reported to gevent and to Facebook. It looks to me like this should be possible in ev.c as well using something like the following patch (setting EV_USE_INOTIFY to 0 if the Solaris port watchers are detected):
--- a/libev/ev.c
+++ b/libev/ev.c
@@ -127,6 +127,7 @@
# endif
# if HAVE_PORT_H && HAVE_PORT_CREATE
+# define EV_USE_INOTIFY 0
# ifndef EV_USE_PORT
# define EV_USE_PORT EV_FEATURE_BACKENDS
# endif
I'm not able to test this and I haven't gotten feedback from our user. Has anyone run into this before and solved it in a better way? If not, does this seem like a reasonable approach? Or should this particular platform not be considered supported at this time?
Thanks,
Jason
[1] https://github.com/gevent/gevent/pull/711
[2] https://smartos.org
[3] http://wiki.illumos.org/display/illumos/illumos+Home
[4] https://github.com/joyent/illumos-joyent/blob/master/usr/src/uts/common/io/inotify.c
[5] https://github.com/facebook/watchman/issues/84
More information about the libev
mailing list