attributes.m4 revision 0943f4b7b22fb676fcd9ede50f8133bf6d4a270b
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl Macros to check the presence of generic (non-typed) symbols.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes@gmail.com>
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl Copyright (c) 2006-2008 xine project
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl Copyright (c) 2012 Lucas De Marchi <lucas.de.marchi@gmail.com>
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl This program is free software; you can redistribute it and/or modify
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl it under the terms of the GNU General Public License as published by
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl the Free Software Foundation; either version 2, or (at your option)
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl any later version.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl This program is distributed in the hope that it will be useful,
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl but WITHOUT ANY WARRANTY; without even the implied warranty of
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
45d2468cd430f160914c353c714144054804373aMark Powersdnl GNU General Public License for more details.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl
45d2468cd430f160914c353c714144054804373aMark Powersdnl You should have received a copy of the GNU General Public License
45d2468cd430f160914c353c714144054804373aMark Powersdnl along with this program; if not, write to the Free Software
45d2468cd430f160914c353c714144054804373aMark Powersdnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
45d2468cd430f160914c353c714144054804373aMark Powersdnl 02110-1301, USA.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl
45d2468cd430f160914c353c714144054804373aMark Powersdnl As a special exception, the copyright owners of the
45d2468cd430f160914c353c714144054804373aMark Powersdnl macro gives unlimited permission to copy, distribute and modify the
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl configure scripts that are the output of Autoconf when processing the
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl Macro. You need not follow the terms of the GNU General Public
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl License when using or distributing such scripts, even though portions
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl of the text of the Macro appear in them. The GNU General Public
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl License (GPL) does govern all other use of the material that
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl constitutes the Autoconf Macro.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl This special exception to the GPL applies to versions of the
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl Autoconf Macro released by this project. When you make and
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl distribute a modified version of the Autoconf Macro, you may extend
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl this special exception to the GPL to apply to your modified version as
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl well.
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowers
f9fbec18f5b458b560ecf45d3db8e8bd56bf6942mcpowersdnl Check if FLAG in ENV-VAR is supported by compiler and append it
45d2468cd430f160914c353c714144054804373aMark Powersdnl to WHERE-TO-APPEND variable
45d2468cd430f160914c353c714144054804373aMark Powersdnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_CHECK_FLAG_APPEND], [
45d2468cd430f160914c353c714144054804373aMark Powers AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2],
45d2468cd430f160914c353c714144054804373aMark Powers AS_TR_SH([cc_cv_$2_$3]),
45d2468cd430f160914c353c714144054804373aMark Powers [eval "AS_TR_SH([cc_save_$2])='${$2}'"
45d2468cd430f160914c353c714144054804373aMark Powers eval "AS_TR_SH([$2])='-Werror $3'"
45d2468cd430f160914c353c714144054804373aMark Powers AC_LINK_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; } ])],
45d2468cd430f160914c353c714144054804373aMark Powers [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"],
45d2468cd430f160914c353c714144054804373aMark Powers [eval "AS_TR_SH([cc_cv_$2_$3])='no'"])
45d2468cd430f160914c353c714144054804373aMark Powers eval "AS_TR_SH([$2])='$cc_save_$2'"])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powers AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes],
45d2468cd430f160914c353c714144054804373aMark Powers [eval "$1='${$1} $3'"])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powersdnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2])
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_CHECK_FLAGS_APPEND], [
45d2468cd430f160914c353c714144054804373aMark Powers for flag in $3; do
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_FLAG_APPEND($1, $2, $flag)
45d2468cd430f160914c353c714144054804373aMark Powers done
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powersdnl Check if the flag is supported by linker (cacheable)
45d2468cd430f160914c353c714144054804373aMark Powersdnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_CHECK_LDFLAGS], [
45d2468cd430f160914c353c714144054804373aMark Powers AC_CACHE_CHECK([if $CC supports $1 flag],
45d2468cd430f160914c353c714144054804373aMark Powers AS_TR_SH([cc_cv_ldflags_$1]),
45d2468cd430f160914c353c714144054804373aMark Powers [ac_save_LDFLAGS="$LDFLAGS"
45d2468cd430f160914c353c714144054804373aMark Powers LDFLAGS="$LDFLAGS $1"
45d2468cd430f160914c353c714144054804373aMark Powers AC_LINK_IFELSE([int main() { return 1; }],
45d2468cd430f160914c353c714144054804373aMark Powers [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
45d2468cd430f160914c353c714144054804373aMark Powers [eval "AS_TR_SH([cc_cv_ldflags_$1])="])
45d2468cd430f160914c353c714144054804373aMark Powers LDFLAGS="$ac_save_LDFLAGS"
45d2468cd430f160914c353c714144054804373aMark Powers ])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powers AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
45d2468cd430f160914c353c714144054804373aMark Powers [$2], [$3])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powersdnl define the LDFLAGS_NOUNDEFINED variable with the correct value for
45d2468cd430f160914c353c714144054804373aMark Powersdnl the current linker to avoid undefined references in a shared object.
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_NOUNDEFINED], [
45d2468cd430f160914c353c714144054804373aMark Powers dnl We check $host for which systems to enable this for.
45d2468cd430f160914c353c714144054804373aMark Powers AC_REQUIRE([AC_CANONICAL_HOST])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powers case $host in
45d2468cd430f160914c353c714144054804373aMark Powers dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads
45d2468cd430f160914c353c714144054804373aMark Powers dnl are requested, as different implementations are present; to avoid problems
45d2468cd430f160914c353c714144054804373aMark Powers dnl use -Wl,-z,defs only for those platform not behaving this way.
45d2468cd430f160914c353c714144054804373aMark Powers *-freebsd* | *-openbsd*) ;;
45d2468cd430f160914c353c714144054804373aMark Powers *)
45d2468cd430f160914c353c714144054804373aMark Powers dnl First of all check for the --no-undefined variant of GNU ld. This allows
45d2468cd430f160914c353c714144054804373aMark Powers dnl for a much more readable commandline, so that people can understand what
45d2468cd430f160914c353c714144054804373aMark Powers dnl it does without going to look for what the heck -z defs does.
45d2468cd430f160914c353c714144054804373aMark Powers for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
45d2468cd430f160914c353c714144054804373aMark Powers break
45d2468cd430f160914c353c714144054804373aMark Powers done
45d2468cd430f160914c353c714144054804373aMark Powers ;;
45d2468cd430f160914c353c714144054804373aMark Powers esac
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powers AC_SUBST([LDFLAGS_NOUNDEFINED])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powersdnl Check for a -Werror flag or equivalent. -Werror is the GCC
45d2468cd430f160914c353c714144054804373aMark Powersdnl and ICC flag that tells the compiler to treat all the warnings
45d2468cd430f160914c353c714144054804373aMark Powersdnl as fatal. We usually need this option to make sure that some
45d2468cd430f160914c353c714144054804373aMark Powersdnl constructs (like attributes) are not simply ignored.
45d2468cd430f160914c353c714144054804373aMark Powersdnl
45d2468cd430f160914c353c714144054804373aMark Powersdnl Other compilers don't support -Werror per se, but they support
45d2468cd430f160914c353c714144054804373aMark Powersdnl an equivalent flag:
45d2468cd430f160914c353c714144054804373aMark Powersdnl - Sun Studio compiler supports -errwarn=%all
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_CHECK_WERROR], [
45d2468cd430f160914c353c714144054804373aMark Powers AC_CACHE_CHECK(
45d2468cd430f160914c353c714144054804373aMark Powers [for $CC way to treat warnings as errors],
45d2468cd430f160914c353c714144054804373aMark Powers [cc_cv_werror],
45d2468cd430f160914c353c714144054804373aMark Powers [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
45d2468cd430f160914c353c714144054804373aMark Powers [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
45d2468cd430f160914c353c714144054804373aMark Powers ])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_CHECK_ATTRIBUTE], [
45d2468cd430f160914c353c714144054804373aMark Powers AC_REQUIRE([CC_CHECK_WERROR])
45d2468cd430f160914c353c714144054804373aMark Powers AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
45d2468cd430f160914c353c714144054804373aMark Powers AS_TR_SH([cc_cv_attribute_$1]),
45d2468cd430f160914c353c714144054804373aMark Powers [ac_save_CFLAGS="$CFLAGS"
45d2468cd430f160914c353c714144054804373aMark Powers CFLAGS="$CFLAGS $cc_cv_werror"
45d2468cd430f160914c353c714144054804373aMark Powers AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])],
45d2468cd430f160914c353c714144054804373aMark Powers [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
45d2468cd430f160914c353c714144054804373aMark Powers [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
45d2468cd430f160914c353c714144054804373aMark Powers CFLAGS="$ac_save_CFLAGS"
45d2468cd430f160914c353c714144054804373aMark Powers ])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powers AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
45d2468cd430f160914c353c714144054804373aMark Powers [AC_DEFINE(
45d2468cd430f160914c353c714144054804373aMark Powers AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
45d2468cd430f160914c353c714144054804373aMark Powers [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
45d2468cd430f160914c353c714144054804373aMark Powers )
45d2468cd430f160914c353c714144054804373aMark Powers $4],
45d2468cd430f160914c353c714144054804373aMark Powers [$5])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [constructor],,
45d2468cd430f160914c353c714144054804373aMark Powers [void __attribute__((constructor)) ctor() { int a; }],
45d2468cd430f160914c353c714144054804373aMark Powers [$1], [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_FORMAT], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [format], [format(printf, n, n)],
45d2468cd430f160914c353c714144054804373aMark Powers [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
45d2468cd430f160914c353c714144054804373aMark Powers [$1], [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [format_arg], [format_arg(printf)],
45d2468cd430f160914c353c714144054804373aMark Powers [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
45d2468cd430f160914c353c714144054804373aMark Powers [$1], [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [visibility_$1], [visibility("$1")],
45d2468cd430f160914c353c714144054804373aMark Powers [void __attribute__((visibility("$1"))) $1_function() { }],
45d2468cd430f160914c353c714144054804373aMark Powers [$2], [$3])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_NONNULL], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [nonnull], [nonnull()],
45d2468cd430f160914c353c714144054804373aMark Powers [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
45d2468cd430f160914c353c714144054804373aMark Powers [$1], [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_UNUSED], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [unused], ,
45d2468cd430f160914c353c714144054804373aMark Powers [void some_function(void *foo, __attribute__((unused)) void *bar);],
45d2468cd430f160914c353c714144054804373aMark Powers [$1], [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [sentinel], ,
45d2468cd430f160914c353c714144054804373aMark Powers [void some_function(void *foo, ...) __attribute__((sentinel));],
45d2468cd430f160914c353c714144054804373aMark Powers [$1], [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [deprecated], ,
45d2468cd430f160914c353c714144054804373aMark Powers [void some_function(void *foo, ...) __attribute__((deprecated));],
45d2468cd430f160914c353c714144054804373aMark Powers [$1], [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_ALIAS], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [alias], [weak, alias],
45d2468cd430f160914c353c714144054804373aMark Powers [void other_function(void *foo) { }
45d2468cd430f160914c353c714144054804373aMark Powers void some_function(void *foo) __attribute__((weak, alias("other_function")));],
45d2468cd430f160914c353c714144054804373aMark Powers [$1], [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_MALLOC], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [malloc], ,
45d2468cd430f160914c353c714144054804373aMark Powers [void * __attribute__((malloc)) my_alloc(int n);],
45d2468cd430f160914c353c714144054804373aMark Powers [$1], [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_PACKED], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [packed], ,
45d2468cd430f160914c353c714144054804373aMark Powers [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
45d2468cd430f160914c353c714144054804373aMark Powers [$1], [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_CONST], [
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_ATTRIBUTE(
45d2468cd430f160914c353c714144054804373aMark Powers [const], ,
45d2468cd430f160914c353c714144054804373aMark Powers [int __attribute__((const)) twopow(int n) { return 1 << n; } ],
45d2468cd430f160914c353c714144054804373aMark Powers [$1], [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_FLAG_VISIBILITY], [
45d2468cd430f160914c353c714144054804373aMark Powers AC_REQUIRE([CC_CHECK_WERROR])
45d2468cd430f160914c353c714144054804373aMark Powers AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
45d2468cd430f160914c353c714144054804373aMark Powers [cc_cv_flag_visibility],
45d2468cd430f160914c353c714144054804373aMark Powers [cc_flag_visibility_save_CFLAGS="$CFLAGS"
45d2468cd430f160914c353c714144054804373aMark Powers CFLAGS="$CFLAGS $cc_cv_werror"
45d2468cd430f160914c353c714144054804373aMark Powers CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
45d2468cd430f160914c353c714144054804373aMark Powers cc_cv_flag_visibility='yes',
45d2468cd430f160914c353c714144054804373aMark Powers cc_cv_flag_visibility='no')
45d2468cd430f160914c353c714144054804373aMark Powers CFLAGS="$cc_flag_visibility_save_CFLAGS"])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powers AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
45d2468cd430f160914c353c714144054804373aMark Powers [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
45d2468cd430f160914c353c714144054804373aMark Powers [Define this if the compiler supports the -fvisibility flag])
45d2468cd430f160914c353c714144054804373aMark Powers $1],
45d2468cd430f160914c353c714144054804373aMark Powers [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_FUNC_EXPECT], [
45d2468cd430f160914c353c714144054804373aMark Powers AC_REQUIRE([CC_CHECK_WERROR])
45d2468cd430f160914c353c714144054804373aMark Powers AC_CACHE_CHECK([if compiler has __builtin_expect function],
45d2468cd430f160914c353c714144054804373aMark Powers [cc_cv_func_expect],
45d2468cd430f160914c353c714144054804373aMark Powers [ac_save_CFLAGS="$CFLAGS"
45d2468cd430f160914c353c714144054804373aMark Powers CFLAGS="$CFLAGS $cc_cv_werror"
45d2468cd430f160914c353c714144054804373aMark Powers AC_COMPILE_IFELSE([AC_LANG_SOURCE(
45d2468cd430f160914c353c714144054804373aMark Powers [int some_function() {
45d2468cd430f160914c353c714144054804373aMark Powers int a = 3;
45d2468cd430f160914c353c714144054804373aMark Powers return (int)__builtin_expect(a, 3);
45d2468cd430f160914c353c714144054804373aMark Powers }])],
45d2468cd430f160914c353c714144054804373aMark Powers [cc_cv_func_expect=yes],
45d2468cd430f160914c353c714144054804373aMark Powers [cc_cv_func_expect=no])
45d2468cd430f160914c353c714144054804373aMark Powers CFLAGS="$ac_save_CFLAGS"
45d2468cd430f160914c353c714144054804373aMark Powers ])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powers AS_IF([test "x$cc_cv_func_expect" = "xyes"],
45d2468cd430f160914c353c714144054804373aMark Powers [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1,
45d2468cd430f160914c353c714144054804373aMark Powers [Define this if the compiler supports __builtin_expect() function])
45d2468cd430f160914c353c714144054804373aMark Powers $1],
45d2468cd430f160914c353c714144054804373aMark Powers [$2])
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark PowersAC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
45d2468cd430f160914c353c714144054804373aMark Powers AC_REQUIRE([CC_CHECK_WERROR])
45d2468cd430f160914c353c714144054804373aMark Powers AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported],
45d2468cd430f160914c353c714144054804373aMark Powers [cc_cv_attribute_aligned],
45d2468cd430f160914c353c714144054804373aMark Powers [ac_save_CFLAGS="$CFLAGS"
45d2468cd430f160914c353c714144054804373aMark Powers CFLAGS="$CFLAGS $cc_cv_werror"
45d2468cd430f160914c353c714144054804373aMark Powers for cc_attribute_align_try in 64 32 16 8 4 2; do
45d2468cd430f160914c353c714144054804373aMark Powers AC_COMPILE_IFELSE([AC_LANG_SOURCE([
45d2468cd430f160914c353c714144054804373aMark Powers int main() {
45d2468cd430f160914c353c714144054804373aMark Powers static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0;
45d2468cd430f160914c353c714144054804373aMark Powers return c;
45d2468cd430f160914c353c714144054804373aMark Powers }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
45d2468cd430f160914c353c714144054804373aMark Powers done
45d2468cd430f160914c353c714144054804373aMark Powers CFLAGS="$ac_save_CFLAGS"
45d2468cd430f160914c353c714144054804373aMark Powers ])
45d2468cd430f160914c353c714144054804373aMark Powers
45d2468cd430f160914c353c714144054804373aMark Powers if test "x$cc_cv_attribute_aligned" != "x"; then
45d2468cd430f160914c353c714144054804373aMark Powers AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned],
45d2468cd430f160914c353c714144054804373aMark Powers [Define the highest alignment supported])
45d2468cd430f160914c353c714144054804373aMark Powers fi
45d2468cd430f160914c353c714144054804373aMark Powers])
45d2468cd430f160914c353c714144054804373aMark Powers