Fix autoconf's check for create_timer()
authorAustin Seipp <austin@well-typed.com>
Tue, 14 Apr 2015 06:12:09 +0000 (01:12 -0500)
committerAustin Seipp <austin@well-typed.com>
Tue, 14 Apr 2015 06:18:54 +0000 (01:18 -0500)
commitedc059a425068f9bf4a60520e8d8906bc764e2b5
tree016e37e356489dac6babf1eabfe4ddfe3f7f275e
parent485dba86d2519cc4855e01db279e127d0221f88a
Fix autoconf's check for create_timer()

GHC build system have custom autoconf check for `create_timer()`
function from librt. Check description says that it checks for
`CLOCK_REALTIME` timer, but checking code also checks for
`CLOCK_PROCESS_CPUTIME_ID` timer, which is not commonly present (for
example, FreeBSD doesn't have it). This makes whole check fail despite
the fact that FreeBSD have `create_timer()` call and supports
`CLOCK_REALTIME`. As a consequence, GHC RTS falls back to using SIGALRM
for its timing machinery. Not only it's very ancient codepath, it also
break some FFI bindings to C code that isn't prepared for syscall
interruption caused by SIGALRM delivery.

Grepping through ghc source code reveals that `USE_TIMER_CREATE`
defininition in the config.h doesn't imply having
`CLOCK_PROCESS_CPUTIME_ID`. The only place where
`CLOCK_PROCESS_CPUTIME_ID` is used is rts/posix/GetTime.c and this code
handles the absence of `CLOCK_PROCESS_CPUTIME_ID` gracefully.

This patch makes autoconf checking code to check only for
`timer_create(CLOCK_REALTIME, ...)` and fixes check description.

Reviewed By: austin

Differential Revision: https://phabricator.haskell.org/D831
aclocal.m4