Skip to content
Snippets Groups Projects
Commit 7499ac1a authored by Tobias Mayer's avatar Tobias Mayer Committed by David Faure
Browse files

Fix false positive fdatasync detection on darwin

The `has_function` feature in meson uses different detection methods
depending on the contents of the `prefix` kwarg [1]:

 * if it contains `#include` directives it will copy the prefix into
   the test code and check if it compiles
 * if it doesn't contain an include or isn't specified, `has_function`
   will forward declare the function and test for it's existence by
   trying to link it to the default libraries

The latter approach wrongly succeeds for `fdatasync` on darwin because
the linker binds the function to a system call of the same name. Note
that this result really is wrong because that system call has not
the expected semantics of `fdatasync`.

By adding an include for `unistd.h` we can get meson to use the
first approach and the detection fails.

Note that this has gone unnoticed so far because only recent versions
of clang (the default compiler on darwin) started to treat implicit
function declarations as an error.

[1] https://github.com/mesonbuild/meson/blob/583d2815d1a130227f0f4db47e4ab2e80ebb6a61/mesonbuild/compilers/mixins/clike.py#L839-L846

Fixes #211
parent 12a3a6b1
No related branches found
No related tags found
1 merge request!252Fix false positive fdatasync detection on darwin
Checking pipeline status
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment