build: Never use poll() on Darwin family (macOS, etc.) or Interix
authorSimon McVittie <smcv@collabora.com>
Mon, 22 Oct 2018 10:45:45 +0000 (11:45 +0100)
committerSimon McVittie <smcv@collabora.com>
Fri, 16 Nov 2018 15:07:39 +0000 (15:07 +0000)
commit6cb51b22fa971e16554638ec3725b6126f284999
tree8a46dfa0953d137ae031eda7c1c60be22f6004c0
parenta2a8510e8efb67c8fe2e44831ceff51d17dc0064
build: Never use poll() on Darwin family (macOS, etc.) or Interix

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: https://gitlab.freedesktop.org/dbus/dbus/issues/232
(cherry picked from commit 0414ea65ca8196e328da09c3a2324d7765fba8c4)
configure.ac
dbus/dbus-sysdeps.h