diff options
author | Nirbheek Chauhan <nirbheek@centricular.com> | 2016-10-25 02:32:57 +0530 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek@centricular.com> | 2016-10-25 09:44:15 +0530 |
commit | ac58c13bbfa6c7b47cc54f30e32bd405c944076d (patch) | |
tree | c0ee7a89b5482497f3af4dd928d2866161b06bbc /mesonbuild/interpreter.py | |
parent | 02a2d69270ae37fd3de0c6f2bdc33c9ad47a6517 (diff) | |
download | meson-ac58c13bbfa6c7b47cc54f30e32bd405c944076d.zip meson-ac58c13bbfa6c7b47cc54f30e32bd405c944076d.tar.gz meson-ac58c13bbfa6c7b47cc54f30e32bd405c944076d.tar.bz2 |
has_function: Only ignore prototype when no includes are specified
The Autoconf-style check we were doing gives false positives when the
linker uses the prototype defined in the SDK header to decide whether
a function is available or not.
For example, with macOS 10.12, clock_gettime is now implemented
(alongwith other functions). These functions are always defined in the
XCode 8 SDK as weak imports and you're supposed to do a runtime check to
see if the symbols are available and use fallback code if they aren't.
The linker will always successfully link if you use one of those symbols
(without a runtime fallback) even if you target an older OS X version
with -mmacosx-version-min. This is the intended behaviour by Apple.
But this makes has_function useless because to test if the symbol is
available, we must know at link-time whether it is available.
To force the linker to do the check at link-time you must use
'-Wl,-no_weak_imports` *and* use the prototype in time.h which has an
availability macro which tells the linker whether the symbol is
available or not based on the -mmacosx-version-min flag.
An autoconf-style check would override this prototype and use its own
which would result in the linker thinking that the function is always
available (a false positive). Worse, this would manifest at runtime and
might not be picked up immediately.
We now use the function prototype in the user-provided includes if the
'prefix' kwarg contains a `#include` and use the old Autoconf-style
check if not. I've tested that the configure checks done by GStreamer
and GLib are completely unaffected by this; at least on Linux.
The next commit will also add `-Wl,-no_weak_imports` to extra_args by
default so that Meson avoids this mess completely. We always want this
because the user would not do a has_function check if they have
a runtime fallback for the function in their code.
Diffstat (limited to 'mesonbuild/interpreter.py')
0 files changed, 0 insertions, 0 deletions