aboutsummaryrefslogtreecommitdiffstats
path: root/meson.build
diff options
context:
space:
mode:
authorDylan Baker <[email protected]>2020-04-24 12:39:27 -0700
committerMarge Bot <[email protected]>2020-06-01 18:59:18 +0000
commit17dcd535c1973fb8bdaba9eb013672825cc10b94 (patch)
treeef85ea4fcd7bf0abcb8d51a633e1c64aecb23364 /meson.build
parent6ef314b4fa938310f282951888a1b51e31e4fa51 (diff)
meson: Use builtins for checking gnu __attributes__
This requires less code, and will fast skip on compilers that are known to not have these, like MSVC. Acked-by: Matt Turner <[email protected]> Reviewed-by: Eric Engestrom <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4740>
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build38
1 files changed, 7 insertions, 31 deletions
diff --git a/meson.build b/meson.build
index bebb900d10a..2365874bc3f 100644
--- a/meson.build
+++ b/meson.build
@@ -839,40 +839,16 @@ foreach b : ['bswap32', 'bswap64', 'clz', 'clzll', 'ctz', 'expect', 'ffs',
endforeach
# check for GCC __attribute__
-foreach a : ['const', 'flatten', 'malloc', 'pure', 'unused',
- 'warn_unused_result', 'weak',]
- if cc.compiles('int foo(void) __attribute__((@0@));'.format(a),
- name : '__attribute__((@0@))'.format(a))
- pre_args += '-DHAVE_FUNC_ATTRIBUTE_@0@'.format(a.to_upper())
- endif
+_attributes = [
+ 'const', 'flatten', 'malloc', 'pure', 'unused', 'warn_unused_result',
+ 'weak', 'format', 'packed', 'returns_nonnull', 'alias', 'noreturn',
+]
+foreach a : cc.get_supported_function_attributes(_attributes)
+ pre_args += '-DHAVE_FUNC_ATTRIBUTE_@0@'.format(a.to_upper())
endforeach
-if cc.compiles('int foo(const char *p, ...) __attribute__((format(printf, 1, 2)));',
- name : '__attribute__((format(...)))')
- pre_args += '-DHAVE_FUNC_ATTRIBUTE_FORMAT'
-endif
-if cc.compiles('struct __attribute__((packed)) foo { int bar; };',
- name : '__attribute__((packed))')
- pre_args += '-DHAVE_FUNC_ATTRIBUTE_PACKED'
-endif
-if cc.compiles('int *foo(void) __attribute__((returns_nonnull));',
- name : '__attribute__((returns_nonnull))')
- pre_args += '-DHAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL'
-endif
-if cc.compiles('''int foo_def(void) __attribute__((visibility("default")));
- int foo_hid(void) __attribute__((visibility("hidden")));
- int foo_int(void) __attribute__((visibility("internal")));
- int foo_pro(void) __attribute__((visibility("protected")));''',
- name : '__attribute__((visibility(...)))')
+if cc.has_function_attribute('visibility:hidden')
pre_args += '-DHAVE_FUNC_ATTRIBUTE_VISIBILITY'
endif
-if cc.compiles('int foo(void) { return 0; } int bar(void) __attribute__((alias("foo")));',
- name : '__attribute__((alias(...)))')
- pre_args += '-DHAVE_FUNC_ATTRIBUTE_ALIAS'
-endif
-if cc.compiles('int foo(void) __attribute__((__noreturn__));',
- name : '__attribute__((__noreturn__))')
- pre_args += '-DHAVE_FUNC_ATTRIBUTE_NORETURN'
-endif
if cc.compiles('__uint128_t foo(void) { return 0; }',
name : '__uint128_t')
pre_args += '-DHAVE_UINT128'