1d5ac70f0Sopenharmony_cidnl Macros to check the presence of generic (non-typed) symbols.
2d5ac70f0Sopenharmony_cidnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes@gmail.com>
3d5ac70f0Sopenharmony_cidnl Copyright (c) 2006-2008 xine project
4d5ac70f0Sopenharmony_cidnl
5d5ac70f0Sopenharmony_cidnl This program is free software; you can redistribute it and/or modify
6d5ac70f0Sopenharmony_cidnl it under the terms of the GNU General Public License as published by
7d5ac70f0Sopenharmony_cidnl the Free Software Foundation; either version 2, or (at your option)
8d5ac70f0Sopenharmony_cidnl any later version.
9d5ac70f0Sopenharmony_cidnl
10d5ac70f0Sopenharmony_cidnl This program is distributed in the hope that it will be useful,
11d5ac70f0Sopenharmony_cidnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12d5ac70f0Sopenharmony_cidnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13d5ac70f0Sopenharmony_cidnl GNU General Public License for more details.
14d5ac70f0Sopenharmony_cidnl
15d5ac70f0Sopenharmony_cidnl You should have received a copy of the GNU General Public License
16d5ac70f0Sopenharmony_cidnl along with this program; if not, write to the Free Software
17d5ac70f0Sopenharmony_cidnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18d5ac70f0Sopenharmony_cidnl 02110-1301, USA.
19d5ac70f0Sopenharmony_cidnl
20d5ac70f0Sopenharmony_cidnl As a special exception, the copyright owners of the
21d5ac70f0Sopenharmony_cidnl macro gives unlimited permission to copy, distribute and modify the
22d5ac70f0Sopenharmony_cidnl configure scripts that are the output of Autoconf when processing the
23d5ac70f0Sopenharmony_cidnl Macro. You need not follow the terms of the GNU General Public
24d5ac70f0Sopenharmony_cidnl License when using or distributing such scripts, even though portions
25d5ac70f0Sopenharmony_cidnl of the text of the Macro appear in them. The GNU General Public
26d5ac70f0Sopenharmony_cidnl License (GPL) does govern all other use of the material that
27d5ac70f0Sopenharmony_cidnl constitutes the Autoconf Macro.
28d5ac70f0Sopenharmony_cidnl
29d5ac70f0Sopenharmony_cidnl This special exception to the GPL applies to versions of the
30d5ac70f0Sopenharmony_cidnl Autoconf Macro released by this project. When you make and
31d5ac70f0Sopenharmony_cidnl distribute a modified version of the Autoconf Macro, you may extend
32d5ac70f0Sopenharmony_cidnl this special exception to the GPL to apply to your modified version as
33d5ac70f0Sopenharmony_cidnl well.
34d5ac70f0Sopenharmony_ci
35d5ac70f0Sopenharmony_cidnl Check if the flag is supported by compiler
36d5ac70f0Sopenharmony_cidnl CC_CHECK_CFLAGS_SILENT([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
37d5ac70f0Sopenharmony_ci
38d5ac70f0Sopenharmony_ciAC_DEFUN([CC_CHECK_CFLAGS_SILENT], [
39d5ac70f0Sopenharmony_ci  AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]),
40d5ac70f0Sopenharmony_ci    [ac_save_CFLAGS="$CFLAGS"
41d5ac70f0Sopenharmony_ci     CFLAGS="$CFLAGS $1"
42d5ac70f0Sopenharmony_ci     AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a;])],
43d5ac70f0Sopenharmony_ci       [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"],
44d5ac70f0Sopenharmony_ci       [eval "AS_TR_SH([cc_cv_cflags_$1])='no'"])
45d5ac70f0Sopenharmony_ci     CFLAGS="$ac_save_CFLAGS"
46d5ac70f0Sopenharmony_ci    ])
47d5ac70f0Sopenharmony_ci
48d5ac70f0Sopenharmony_ci  AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
49d5ac70f0Sopenharmony_ci    [$2], [$3])
50d5ac70f0Sopenharmony_ci])
51d5ac70f0Sopenharmony_ci
52d5ac70f0Sopenharmony_cidnl Check if the flag is supported by compiler (cacheable)
53d5ac70f0Sopenharmony_cidnl CC_CHECK_CFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
54d5ac70f0Sopenharmony_ci
55d5ac70f0Sopenharmony_ciAC_DEFUN([CC_CHECK_CFLAGS], [
56d5ac70f0Sopenharmony_ci  AC_CACHE_CHECK([if $CC supports $1 flag],
57d5ac70f0Sopenharmony_ci    AS_TR_SH([cc_cv_cflags_$1]),
58d5ac70f0Sopenharmony_ci    CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here!
59d5ac70f0Sopenharmony_ci  )
60d5ac70f0Sopenharmony_ci
61d5ac70f0Sopenharmony_ci  AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
62d5ac70f0Sopenharmony_ci    [$2], [$3])
63d5ac70f0Sopenharmony_ci])
64d5ac70f0Sopenharmony_ci
65d5ac70f0Sopenharmony_cidnl CC_CHECK_CFLAG_APPEND(FLAG, [action-if-found], [action-if-not-found])
66d5ac70f0Sopenharmony_cidnl Check for CFLAG and appends them to CFLAGS if supported
67d5ac70f0Sopenharmony_ciAC_DEFUN([CC_CHECK_CFLAG_APPEND], [
68d5ac70f0Sopenharmony_ci  AC_CACHE_CHECK([if $CC supports $1 flag],
69d5ac70f0Sopenharmony_ci    AS_TR_SH([cc_cv_cflags_$1]),
70d5ac70f0Sopenharmony_ci    CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here!
71d5ac70f0Sopenharmony_ci  )
72d5ac70f0Sopenharmony_ci
73d5ac70f0Sopenharmony_ci  AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
74d5ac70f0Sopenharmony_ci    [CFLAGS="$CFLAGS $1"; DEBUG_CFLAGS="$DEBUG_CFLAGS $1"; $2], [$3])
75d5ac70f0Sopenharmony_ci])
76d5ac70f0Sopenharmony_ci
77d5ac70f0Sopenharmony_cidnl CC_CHECK_CFLAGS_APPEND([FLAG1 FLAG2], [action-if-found], [action-if-not])
78d5ac70f0Sopenharmony_ciAC_DEFUN([CC_CHECK_CFLAGS_APPEND], [
79d5ac70f0Sopenharmony_ci  for flag in $1; do
80d5ac70f0Sopenharmony_ci    CC_CHECK_CFLAG_APPEND($flag, [$2], [$3])
81d5ac70f0Sopenharmony_ci  done
82d5ac70f0Sopenharmony_ci])
83d5ac70f0Sopenharmony_ci
84d5ac70f0Sopenharmony_cidnl Check if the flag is supported by linker (cacheable)
85d5ac70f0Sopenharmony_cidnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
86d5ac70f0Sopenharmony_ci
87d5ac70f0Sopenharmony_ciAC_DEFUN([CC_CHECK_LDFLAGS], [
88d5ac70f0Sopenharmony_ci  AC_CACHE_CHECK([if $CC supports $1 flag],
89d5ac70f0Sopenharmony_ci    AS_TR_SH([cc_cv_ldflags_$1]),
90d5ac70f0Sopenharmony_ci    [ac_save_LDFLAGS="$LDFLAGS"
91d5ac70f0Sopenharmony_ci     LDFLAGS="$LDFLAGS $1"
92d5ac70f0Sopenharmony_ci     AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 1; }])],
93d5ac70f0Sopenharmony_ci       [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
94d5ac70f0Sopenharmony_ci       [eval "AS_TR_SH([cc_cv_ldflags_$1])="])
95d5ac70f0Sopenharmony_ci     LDFLAGS="$ac_save_LDFLAGS"
96d5ac70f0Sopenharmony_ci    ])
97d5ac70f0Sopenharmony_ci
98d5ac70f0Sopenharmony_ci  AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
99d5ac70f0Sopenharmony_ci    [$2], [$3])
100d5ac70f0Sopenharmony_ci])
101d5ac70f0Sopenharmony_ci
102d5ac70f0Sopenharmony_cidnl define the LDFLAGS_NOUNDEFINED variable with the correct value for
103d5ac70f0Sopenharmony_cidnl the current linker to avoid undefined references in a shared object.
104d5ac70f0Sopenharmony_ciAC_DEFUN([CC_NOUNDEFINED], [
105d5ac70f0Sopenharmony_ci  dnl We check $host for which systems to enable this for.
106d5ac70f0Sopenharmony_ci  AC_REQUIRE([AC_CANONICAL_HOST])
107d5ac70f0Sopenharmony_ci
108d5ac70f0Sopenharmony_ci  case $host in
109d5ac70f0Sopenharmony_ci     dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads
110d5ac70f0Sopenharmony_ci     dnl are requested, as different implementations are present; to avoid problems
111d5ac70f0Sopenharmony_ci     dnl use -Wl,-z,defs only for those platform not behaving this way.
112d5ac70f0Sopenharmony_ci     dnl
113d5ac70f0Sopenharmony_ci     dnl MinGW platforms: for libraries required -no-undefined,
114d5ac70f0Sopenharmony_ci     dnl use it only for libraries in mingw32-w64 
115d5ac70f0Sopenharmony_ci
116d5ac70f0Sopenharmony_ci     *-freebsd* | *-openbsd*) ;;
117d5ac70f0Sopenharmony_ci     *-mingw*)
118d5ac70f0Sopenharmony_ci        LDFLAGS_NOUNDEFINED="-no-undefined"
119d5ac70f0Sopenharmony_ci        ;;
120d5ac70f0Sopenharmony_ci     *)
121d5ac70f0Sopenharmony_ci        dnl First of all check for the --no-undefined variant of GNU ld. This allows
122d5ac70f0Sopenharmony_ci        dnl for a much more readable commandline, so that people can understand what
123d5ac70f0Sopenharmony_ci        dnl it does without going to look for what the heck -z defs does.
124d5ac70f0Sopenharmony_ci	for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
125d5ac70f0Sopenharmony_ci          CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
126d5ac70f0Sopenharmony_ci	  if test "x$LDFLAGS_NOUNDEFINED" = "x"; then break; fi
127d5ac70f0Sopenharmony_ci        done
128d5ac70f0Sopenharmony_ci	;;
129d5ac70f0Sopenharmony_ci  esac
130d5ac70f0Sopenharmony_ci
131d5ac70f0Sopenharmony_ci  AC_SUBST([LDFLAGS_NOUNDEFINED])
132d5ac70f0Sopenharmony_ci])
133d5ac70f0Sopenharmony_ci
134d5ac70f0Sopenharmony_cidnl Check for a -Werror flag or equivalent. -Werror is the GCC
135d5ac70f0Sopenharmony_cidnl and ICC flag that tells the compiler to treat all the warnings
136d5ac70f0Sopenharmony_cidnl as fatal. We usually need this option to make sure that some
137d5ac70f0Sopenharmony_cidnl constructs (like attributes) are not simply ignored.
138d5ac70f0Sopenharmony_cidnl
139d5ac70f0Sopenharmony_cidnl Other compilers don't support -Werror per se, but they support
140d5ac70f0Sopenharmony_cidnl an equivalent flag:
141d5ac70f0Sopenharmony_cidnl  - Sun Studio compiler supports -errwarn=%all
142d5ac70f0Sopenharmony_ciAC_DEFUN([CC_CHECK_WERROR], [
143d5ac70f0Sopenharmony_ci  AC_CACHE_CHECK(
144d5ac70f0Sopenharmony_ci    [for $CC way to treat warnings as errors],
145d5ac70f0Sopenharmony_ci    [cc_cv_werror],
146d5ac70f0Sopenharmony_ci    [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
147d5ac70f0Sopenharmony_ci      [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
148d5ac70f0Sopenharmony_ci    ])
149d5ac70f0Sopenharmony_ci])
150d5ac70f0Sopenharmony_ci
151d5ac70f0Sopenharmony_ciAC_DEFUN([CC_CHECK_ATTRIBUTE], [
152d5ac70f0Sopenharmony_ci  AC_REQUIRE([CC_CHECK_WERROR])
153d5ac70f0Sopenharmony_ci  AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
154d5ac70f0Sopenharmony_ci    AS_TR_SH([cc_cv_attribute_$1]),
155d5ac70f0Sopenharmony_ci    [ac_save_CFLAGS="$CFLAGS"
156d5ac70f0Sopenharmony_ci     CFLAGS="$CFLAGS $cc_cv_werror"
157d5ac70f0Sopenharmony_ci     AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])],
158d5ac70f0Sopenharmony_ci       [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
159d5ac70f0Sopenharmony_ci       [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
160d5ac70f0Sopenharmony_ci     CFLAGS="$ac_save_CFLAGS"
161d5ac70f0Sopenharmony_ci    ])
162d5ac70f0Sopenharmony_ci
163d5ac70f0Sopenharmony_ci  AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
164d5ac70f0Sopenharmony_ci    [AC_DEFINE(
165d5ac70f0Sopenharmony_ci       AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
166d5ac70f0Sopenharmony_ci         [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
167d5ac70f0Sopenharmony_ci         )
168d5ac70f0Sopenharmony_ci     $4],
169d5ac70f0Sopenharmony_ci    [$5])
170d5ac70f0Sopenharmony_ci])
171d5ac70f0Sopenharmony_ci
172d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
173d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
174d5ac70f0Sopenharmony_ci    [constructor],,
175d5ac70f0Sopenharmony_ci    [void __attribute__((constructor)) ctor() { int a; }],
176d5ac70f0Sopenharmony_ci    [$1], [$2])
177d5ac70f0Sopenharmony_ci])
178d5ac70f0Sopenharmony_ci
179d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_FORMAT], [
180d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
181d5ac70f0Sopenharmony_ci    [format], [format(printf, n, n)],
182d5ac70f0Sopenharmony_ci    [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
183d5ac70f0Sopenharmony_ci    [$1], [$2])
184d5ac70f0Sopenharmony_ci])
185d5ac70f0Sopenharmony_ci
186d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
187d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
188d5ac70f0Sopenharmony_ci    [format_arg], [format_arg(printf)],
189d5ac70f0Sopenharmony_ci    [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
190d5ac70f0Sopenharmony_ci    [$1], [$2])
191d5ac70f0Sopenharmony_ci])
192d5ac70f0Sopenharmony_ci
193d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
194d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
195d5ac70f0Sopenharmony_ci    [visibility_$1], [visibility("$1")],
196d5ac70f0Sopenharmony_ci    [void __attribute__((visibility("$1"))) $1_function() { }],
197d5ac70f0Sopenharmony_ci    [$2], [$3])
198d5ac70f0Sopenharmony_ci])
199d5ac70f0Sopenharmony_ci
200d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_NONNULL], [
201d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
202d5ac70f0Sopenharmony_ci    [nonnull], [nonnull()],
203d5ac70f0Sopenharmony_ci    [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
204d5ac70f0Sopenharmony_ci    [$1], [$2])
205d5ac70f0Sopenharmony_ci])
206d5ac70f0Sopenharmony_ci
207d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_UNUSED], [
208d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
209d5ac70f0Sopenharmony_ci    [unused], ,
210d5ac70f0Sopenharmony_ci    [void some_function(void *foo, __attribute__((unused)) void *bar);],
211d5ac70f0Sopenharmony_ci    [$1], [$2])
212d5ac70f0Sopenharmony_ci])
213d5ac70f0Sopenharmony_ci
214d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
215d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
216d5ac70f0Sopenharmony_ci    [sentinel], ,
217d5ac70f0Sopenharmony_ci    [void some_function(void *foo, ...) __attribute__((sentinel));],
218d5ac70f0Sopenharmony_ci    [$1], [$2])
219d5ac70f0Sopenharmony_ci])
220d5ac70f0Sopenharmony_ci
221d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
222d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
223d5ac70f0Sopenharmony_ci    [deprecated], ,
224d5ac70f0Sopenharmony_ci    [void some_function(void *foo, ...) __attribute__((deprecated));],
225d5ac70f0Sopenharmony_ci    [$1], [$2])
226d5ac70f0Sopenharmony_ci])
227d5ac70f0Sopenharmony_ci
228d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_ALIAS], [
229d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
230d5ac70f0Sopenharmony_ci    [alias], [weak, alias],
231d5ac70f0Sopenharmony_ci    [void other_function(void *foo) { }
232d5ac70f0Sopenharmony_ci     void some_function(void *foo) __attribute__((weak, alias("other_function")));],
233d5ac70f0Sopenharmony_ci    [$1], [$2])
234d5ac70f0Sopenharmony_ci])
235d5ac70f0Sopenharmony_ci
236d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_MALLOC], [
237d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
238d5ac70f0Sopenharmony_ci    [malloc], ,
239d5ac70f0Sopenharmony_ci    [void * __attribute__((malloc)) my_alloc(int n);],
240d5ac70f0Sopenharmony_ci    [$1], [$2])
241d5ac70f0Sopenharmony_ci])
242d5ac70f0Sopenharmony_ci
243d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_PACKED], [
244d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
245d5ac70f0Sopenharmony_ci    [packed], ,
246d5ac70f0Sopenharmony_ci    [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
247d5ac70f0Sopenharmony_ci    [$1], [$2])
248d5ac70f0Sopenharmony_ci])
249d5ac70f0Sopenharmony_ci
250d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_CONST], [
251d5ac70f0Sopenharmony_ci  CC_CHECK_ATTRIBUTE(
252d5ac70f0Sopenharmony_ci    [const], ,
253d5ac70f0Sopenharmony_ci    [int __attribute__((const)) twopow(int n) { return 1 << n; } ],
254d5ac70f0Sopenharmony_ci    [$1], [$2])
255d5ac70f0Sopenharmony_ci])
256d5ac70f0Sopenharmony_ci
257d5ac70f0Sopenharmony_ciAC_DEFUN([CC_FLAG_VISIBILITY], [
258d5ac70f0Sopenharmony_ci  AC_REQUIRE([CC_CHECK_WERROR])
259d5ac70f0Sopenharmony_ci  AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
260d5ac70f0Sopenharmony_ci    [cc_cv_flag_visibility],
261d5ac70f0Sopenharmony_ci    [cc_flag_visibility_save_CFLAGS="$CFLAGS"
262d5ac70f0Sopenharmony_ci     CFLAGS="$CFLAGS $cc_cv_werror"
263d5ac70f0Sopenharmony_ci     CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
264d5ac70f0Sopenharmony_ci	cc_cv_flag_visibility='yes',
265d5ac70f0Sopenharmony_ci	cc_cv_flag_visibility='no')
266d5ac70f0Sopenharmony_ci     CFLAGS="$cc_flag_visibility_save_CFLAGS"])
267d5ac70f0Sopenharmony_ci
268d5ac70f0Sopenharmony_ci  AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
269d5ac70f0Sopenharmony_ci    [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
270d5ac70f0Sopenharmony_ci       [Define this if the compiler supports the -fvisibility flag])
271d5ac70f0Sopenharmony_ci     $1],
272d5ac70f0Sopenharmony_ci    [$2])
273d5ac70f0Sopenharmony_ci])
274d5ac70f0Sopenharmony_ci
275d5ac70f0Sopenharmony_ciAC_DEFUN([CC_FUNC_EXPECT], [
276d5ac70f0Sopenharmony_ci  AC_REQUIRE([CC_CHECK_WERROR])
277d5ac70f0Sopenharmony_ci  AC_CACHE_CHECK([if compiler has __builtin_expect function],
278d5ac70f0Sopenharmony_ci    [cc_cv_func_expect],
279d5ac70f0Sopenharmony_ci    [ac_save_CFLAGS="$CFLAGS"
280d5ac70f0Sopenharmony_ci     CFLAGS="$CFLAGS $cc_cv_werror"
281d5ac70f0Sopenharmony_ci     AC_COMPILE_IFELSE(
282d5ac70f0Sopenharmony_ci       [int some_function() {
283d5ac70f0Sopenharmony_ci        int a = 3;
284d5ac70f0Sopenharmony_ci        return (int)__builtin_expect(a, 3);
285d5ac70f0Sopenharmony_ci	}],
286d5ac70f0Sopenharmony_ci       [cc_cv_func_expect=yes],
287d5ac70f0Sopenharmony_ci       [cc_cv_func_expect=no])
288d5ac70f0Sopenharmony_ci     CFLAGS="$ac_save_CFLAGS"
289d5ac70f0Sopenharmony_ci    ])
290d5ac70f0Sopenharmony_ci
291d5ac70f0Sopenharmony_ci  AS_IF([test "x$cc_cv_func_expect" = "xyes"],
292d5ac70f0Sopenharmony_ci    [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1,
293d5ac70f0Sopenharmony_ci     [Define this if the compiler supports __builtin_expect() function])
294d5ac70f0Sopenharmony_ci     $1],
295d5ac70f0Sopenharmony_ci    [$2])
296d5ac70f0Sopenharmony_ci])
297d5ac70f0Sopenharmony_ci
298d5ac70f0Sopenharmony_ciAC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
299d5ac70f0Sopenharmony_ci  AC_REQUIRE([CC_CHECK_WERROR])
300d5ac70f0Sopenharmony_ci  AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported],
301d5ac70f0Sopenharmony_ci    [cc_cv_attribute_aligned],
302d5ac70f0Sopenharmony_ci    [ac_save_CFLAGS="$CFLAGS"
303d5ac70f0Sopenharmony_ci     CFLAGS="$CFLAGS $cc_cv_werror"
304d5ac70f0Sopenharmony_ci     for cc_attribute_align_try in 64 32 16 8 4 2; do
305d5ac70f0Sopenharmony_ci        AC_COMPILE_IFELSE([AC_LANG_SOURCE([
306d5ac70f0Sopenharmony_ci          int main() {
307d5ac70f0Sopenharmony_ci            static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0;
308d5ac70f0Sopenharmony_ci            return c;
309d5ac70f0Sopenharmony_ci          }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
310d5ac70f0Sopenharmony_ci     done
311d5ac70f0Sopenharmony_ci     CFLAGS="$ac_save_CFLAGS"
312d5ac70f0Sopenharmony_ci  ])
313d5ac70f0Sopenharmony_ci
314d5ac70f0Sopenharmony_ci  if test "x$cc_cv_attribute_aligned" != "x"; then
315d5ac70f0Sopenharmony_ci     AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned],
316d5ac70f0Sopenharmony_ci       [Define the highest alignment supported])
317d5ac70f0Sopenharmony_ci  fi
318d5ac70f0Sopenharmony_ci])
319