Skip to content

build: Never use poll() on Darwin family (macOS, etc.) or Interix

Simon McVittie requested to merge smcv/dbus:broken-poll into master

Doing a runtime check in configure.ac (AC_RUN_IFELSE) has several disadvantages:

  • It doesn't work when cross-compiling. For example, if we build macOS binaries on a Linux system, we'd assume that poll() works, but in fact it won't.

  • It checks the build system capabilities, but that is not necessarily appropriate if (for example) a macOS 10.10 user builds binaries that could be used by macOS 10.12 or macOS 10.9 users.

  • It checks for one specific failure mode, but macOS seems to have a history of various implementation issues in poll().

  • If we want it to work in CMake, we have to duplicate it in the CMake build system.

None of these is a showstopper on its own, but the combination of all of them makes the current approach to avoiding the broken poll() on macOS look unreliable. libcurl, a widely-portable library making extensive use of sockets, specifically doesn't use poll() on Darwin (macOS, iOS, etc.) or on Interix; let's follow their example here.

See also https://bugzilla.gnome.org/show_bug.cgi?id=302672 and https://daniel.haxx.se/blog/2016/10/11/poll-on-mac-10-12-is-broken/ for some relevant history.

Signed-off-by: Simon McVittie smcv@collabora.com Resolves: #232 (closed)

Edited by Simon McVittie

Merge request reports