diff options
author | Andrei Alexeyev <akari@taisei-project.org> | 2020-04-02 03:43:24 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2020-04-04 20:51:35 +0300 |
commit | 96ed64caa11f977c33ae8bf4143f8756ab3c1a36 (patch) | |
tree | 6e93a64eae35e86a72c3e395bbc1dc27c037e0ae | |
parent | 1a741e0439deeef241053df04bc6e521d70aaae5 (diff) | |
download | meson-96ed64caa11f977c33ae8bf4143f8756ab3c1a36.zip meson-96ed64caa11f977c33ae8bf4143f8756ab3c1a36.tar.gz meson-96ed64caa11f977c33ae8bf4143f8756ab3c1a36.tar.bz2 |
Make cc.has_function work on GCC/Clang __builtins
-rw-r--r-- | mesonbuild/compilers/mixins/clike.py | 11 | ||||
-rw-r--r-- | test cases/common/39 has function/meson.build | 8 |
2 files changed, 14 insertions, 5 deletions
diff --git a/mesonbuild/compilers/mixins/clike.py b/mesonbuild/compilers/mixins/clike.py index e043bcd..6b09b97 100644 --- a/mesonbuild/compilers/mixins/clike.py +++ b/mesonbuild/compilers/mixins/clike.py @@ -727,22 +727,23 @@ class CLikeCompiler: # need to look for them differently. On nice compilers like clang, we # can just directly use the __has_builtin() macro. fargs['no_includes'] = '#include' not in prefix + fargs['__builtin_'] = '' if funcname.startswith('__builtin_') else '__builtin_' t = '''{prefix} int main(void) {{ #ifdef __has_builtin - #if !__has_builtin(__builtin_{func}) - #error "__builtin_{func} not found" + #if !__has_builtin({__builtin_}{func}) + #error "{__builtin_}{func} not found" #endif #elif ! defined({func}) - /* Check for __builtin_{func} only if no includes were added to the + /* Check for {__builtin_}{func} only if no includes were added to the * prefix above, which means no definition of {func} can be found. * We would always check for this, but we get false positives on * MSYS2 if we do. Their toolchain is broken, but we can at least * give them a workaround. */ #if {no_includes:d} - __builtin_{func}; + {__builtin_}{func}; #else - #error "No definition for __builtin_{func} found in the prefix" + #error "No definition for {__builtin_}{func} found in the prefix" #endif #endif return 0; diff --git a/test cases/common/39 has function/meson.build b/test cases/common/39 has function/meson.build index 539f313..16f43c4 100644 --- a/test cases/common/39 has function/meson.build +++ b/test cases/common/39 has function/meson.build @@ -88,4 +88,12 @@ foreach cc : compilers assert (cc.has_function('sendmmsg', args : unit_test_args), 'Failed to detect function "sendmmsg" (should always exist).') endif + + # We should be able to find GCC and Clang __builtin functions + if ['gcc', 'clang'].contains(cc.get_id()) + # __builtin_constant_p is documented to exist at least as far back as + # GCC 2.95.3 + assert(cc.has_function('__builtin_constant_p', args : unit_test_args), + '__builtin_constant_p must be found under gcc and clang') + endif endforeach |