attributes.m4 | attributes.m4 | |||
---|---|---|---|---|
dnl Macros to check the presence of generic (non-typed) symbols. | dnl Macros to check the presence of generic (non-typed) symbols. | |||
dnl Copyright (c) 2006-2007 Diego Pettenò <flameeyes@gmail.com> | dnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes@gmail.com> | |||
dnl Copyright (c) 2006-2007 xine project | dnl Copyright (c) 2006-2008 xine project | |||
dnl Copyright (c) 2012 Lucas De Marchi <lucas.de.marchi@gmail.com> | ||||
dnl | dnl | |||
dnl This program is free software; you can redistribute it and/or modify | dnl This program is free software; you can redistribute it and/or modify | |||
dnl it under the terms of the GNU General Public License as published by | dnl it under the terms of the GNU General Public License as published by | |||
dnl the Free Software Foundation; either version 2, or (at your option) | dnl the Free Software Foundation; either version 2, or (at your option) | |||
dnl any later version. | dnl any later version. | |||
dnl | dnl | |||
dnl This program is distributed in the hope that it will be useful, | dnl This program is distributed in the hope that it will be useful, | |||
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of | dnl but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
dnl GNU General Public License for more details. | dnl GNU General Public License for more details. | |||
skipping to change at line 35 | skipping to change at line 36 | |||
dnl of the text of the Macro appear in them. The GNU General Public | dnl of the text of the Macro appear in them. The GNU General Public | |||
dnl License (GPL) does govern all other use of the material that | dnl License (GPL) does govern all other use of the material that | |||
dnl constitutes the Autoconf Macro. | dnl constitutes the Autoconf Macro. | |||
dnl | dnl | |||
dnl This special exception to the GPL applies to versions of the | dnl This special exception to the GPL applies to versions of the | |||
dnl Autoconf Macro released by this project. When you make and | dnl Autoconf Macro released by this project. When you make and | |||
dnl distribute a modified version of the Autoconf Macro, you may extend | dnl distribute a modified version of the Autoconf Macro, you may extend | |||
dnl this special exception to the GPL to apply to your modified version as | dnl this special exception to the GPL to apply to your modified version as | |||
dnl well. | dnl well. | |||
AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [ | dnl Check if FLAG in ENV-VAR is supported by compiler and append it | |||
AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]), | dnl to WHERE-TO-APPEND variable | |||
[ac_save_CFLAGS="$CFLAGS" | dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG]) | |||
CFLAGS="$CFLAGS $1" | ||||
AC_COMPILE_IFELSE([int a;], | AC_DEFUN([CC_CHECK_FLAG_APPEND], [ | |||
[eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"], | AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2], | |||
[eval "AS_TR_SH([cc_cv_cflags_$1])='no'"]) | AS_TR_SH([cc_cv_$2_$3]), | |||
CFLAGS="$ac_save_CFLAGS" | [eval "AS_TR_SH([cc_save_$2])='${$2}'" | |||
]) | eval "AS_TR_SH([$2])='$3'" | |||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a = 0; int main(voi | ||||
AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], | d) { return a; } ])], | |||
[$2], [$3]) | [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"], | |||
[eval "AS_TR_SH([cc_cv_$2_$3])='no'"]) | ||||
eval "AS_TR_SH([$2])='$cc_save_$2'"]) | ||||
AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes], | ||||
[eval "$1='${$1} $3'"]) | ||||
]) | ||||
dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2]) | ||||
AC_DEFUN([CC_CHECK_FLAGS_APPEND], [ | ||||
for flag in $3; do | ||||
CC_CHECK_FLAG_APPEND($1, $2, $flag) | ||||
done | ||||
]) | ]) | |||
AC_DEFUN([CC_CHECK_CFLAGS], [ | dnl Check if the flag is supported by linker (cacheable) | |||
AC_CACHE_CHECK([if $CC supports $1 flag], | dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) | |||
AS_TR_SH([cc_cv_cflags_$1]), | ||||
CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here! | ||||
) | ||||
AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], | ||||
[$2], [$3]) | ||||
]) | ||||
AC_DEFUN([CC_CHECK_LDFLAGS], [ | AC_DEFUN([CC_CHECK_LDFLAGS], [ | |||
AC_CACHE_CHECK([if $CC supports $1 flag], | AC_CACHE_CHECK([if $CC supports $1 flag], | |||
AS_TR_SH([cc_cv_ldflags_$1]), | AS_TR_SH([cc_cv_ldflags_$1]), | |||
[ac_save_LDFLAGS="$LDFLAGS" | [ac_save_LDFLAGS="$LDFLAGS" | |||
LDFLAGS="$LDFLAGS $1" | LDFLAGS="$LDFLAGS $1" | |||
AC_LINK_IFELSE([int main() { return 1; }], | AC_LINK_IFELSE([int main() { return 1; }], | |||
[eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"], | [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"], | |||
[eval "AS_TR_SH([cc_cv_ldflags_$1])="]) | [eval "AS_TR_SH([cc_cv_ldflags_$1])="]) | |||
LDFLAGS="$ac_save_LDFLAGS" | LDFLAGS="$ac_save_LDFLAGS" | |||
]) | ]) | |||
AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes], | AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes], | |||
[$2], [$3]) | [$2], [$3]) | |||
]) | ]) | |||
dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for | ||||
dnl the current linker to avoid undefined references in a shared object. | ||||
AC_DEFUN([CC_NOUNDEFINED], [ | ||||
dnl We check $host for which systems to enable this for. | ||||
AC_REQUIRE([AC_CANONICAL_HOST]) | ||||
case $host in | ||||
dnl FreeBSD (et al.) does not complete linking for shared objects when | ||||
pthreads | ||||
dnl are requested, as different implementations are present; to avoid | ||||
problems | ||||
dnl use -Wl,-z,defs only for those platform not behaving this way. | ||||
*-freebsd* | *-openbsd*) ;; | ||||
*) | ||||
dnl First of all check for the --no-undefined variant of GNU ld. Th | ||||
is allows | ||||
dnl for a much more readable commandline, so that people can unders | ||||
tand what | ||||
dnl it does without going to look for what the heck -z defs does. | ||||
for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do | ||||
CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possib | ||||
le_flags"]) | ||||
break | ||||
done | ||||
;; | ||||
esac | ||||
AC_SUBST([LDFLAGS_NOUNDEFINED]) | ||||
]) | ||||
dnl Check for a -Werror flag or equivalent. -Werror is the GCC | dnl Check for a -Werror flag or equivalent. -Werror is the GCC | |||
dnl and ICC flag that tells the compiler to treat all the warnings | dnl and ICC flag that tells the compiler to treat all the warnings | |||
dnl as fatal. We usually need this option to make sure that some | dnl as fatal. We usually need this option to make sure that some | |||
dnl constructs (like attributes) are not simply ignored. | dnl constructs (like attributes) are not simply ignored. | |||
dnl | dnl | |||
dnl Other compilers don't support -Werror per se, but they support | dnl Other compilers don't support -Werror per se, but they support | |||
dnl an equivalent flag: | dnl an equivalent flag: | |||
dnl - Sun Studio compiler supports -errwarn=%all | dnl - Sun Studio compiler supports -errwarn=%all | |||
AC_DEFUN([CC_CHECK_WERROR], [ | AC_DEFUN([CC_CHECK_WERROR], [ | |||
AC_CACHE_CHECK( | AC_CACHE_CHECK( | |||
skipping to change at line 97 | skipping to change at line 127 | |||
[CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all] )]) | [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all] )]) | |||
]) | ]) | |||
]) | ]) | |||
AC_DEFUN([CC_CHECK_ATTRIBUTE], [ | AC_DEFUN([CC_CHECK_ATTRIBUTE], [ | |||
AC_REQUIRE([CC_CHECK_WERROR]) | AC_REQUIRE([CC_CHECK_WERROR]) | |||
AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2] ) ))], | AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2] ) ))], | |||
AS_TR_SH([cc_cv_attribute_$1]), | AS_TR_SH([cc_cv_attribute_$1]), | |||
[ac_save_CFLAGS="$CFLAGS" | [ac_save_CFLAGS="$CFLAGS" | |||
CFLAGS="$CFLAGS $cc_cv_werror" | CFLAGS="$CFLAGS $cc_cv_werror" | |||
AC_COMPILE_IFELSE([$3], | AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])], | |||
[eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"], | [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"], | |||
[eval "AS_TR_SH([cc_cv_attribute_$1])='no'"]) | [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"]) | |||
CFLAGS="$ac_save_CFLAGS" | CFLAGS="$ac_save_CFLAGS" | |||
]) | ]) | |||
AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes], | AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes], | |||
[AC_DEFINE( | [AC_DEFINE( | |||
AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1, | AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1, | |||
[Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))] | [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))] | |||
) | ) | |||
skipping to change at line 221 | skipping to change at line 251 | |||
$1], | $1], | |||
[$2]) | [$2]) | |||
]) | ]) | |||
AC_DEFUN([CC_FUNC_EXPECT], [ | AC_DEFUN([CC_FUNC_EXPECT], [ | |||
AC_REQUIRE([CC_CHECK_WERROR]) | AC_REQUIRE([CC_CHECK_WERROR]) | |||
AC_CACHE_CHECK([if compiler has __builtin_expect function], | AC_CACHE_CHECK([if compiler has __builtin_expect function], | |||
[cc_cv_func_expect], | [cc_cv_func_expect], | |||
[ac_save_CFLAGS="$CFLAGS" | [ac_save_CFLAGS="$CFLAGS" | |||
CFLAGS="$CFLAGS $cc_cv_werror" | CFLAGS="$CFLAGS $cc_cv_werror" | |||
AC_COMPILE_IFELSE( | AC_COMPILE_IFELSE([AC_LANG_SOURCE( | |||
[int some_function() { | [int some_function() { | |||
int a = 3; | int a = 3; | |||
return (int)__builtin_expect(a, 3); | return (int)__builtin_expect(a, 3); | |||
}], | }])], | |||
[cc_cv_func_expect=yes], | [cc_cv_func_expect=yes], | |||
[cc_cv_func_expect=no]) | [cc_cv_func_expect=no]) | |||
CFLAGS="$ac_save_CFLAGS" | CFLAGS="$ac_save_CFLAGS" | |||
]) | ]) | |||
AS_IF([test "x$cc_cv_func_expect" = "xyes"], | AS_IF([test "x$cc_cv_func_expect" = "xyes"], | |||
[AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1, | [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1, | |||
[Define this if the compiler supports __builtin_expect() function]) | [Define this if the compiler supports __builtin_expect() function]) | |||
$1], | $1], | |||
[$2]) | [$2]) | |||
]) | ]) | |||
AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [ | AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [ | |||
AC_REQUIRE([CC_CHECK_WERROR]) | AC_REQUIRE([CC_CHECK_WERROR]) | |||
AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported], | AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported], | |||
[cc_cv_attribute_aligned], | [cc_cv_attribute_aligned], | |||
[ac_save_CFLAGS="$CFLAGS" | [ac_save_CFLAGS="$CFLAGS" | |||
CFLAGS="$CFLAGS $cc_cv_werror" | CFLAGS="$CFLAGS $cc_cv_werror" | |||
for cc_attribute_align_try in 64 32 16 8 4 2; do | for cc_attribute_align_try in 64 32 16 8 4 2; do | |||
AC_COMPILE_IFELSE([ | AC_COMPILE_IFELSE([AC_LANG_SOURCE([ | |||
int main() { | int main() { | |||
static char c __attribute__ ((aligned($cc_attribute_align_try)) ) = 0; | static char c __attribute__ ((aligned($cc_attribute_align_try)) ) = 0; | |||
return c; | return c; | |||
}], [cc_cv_attribute_aligned=$cc_attribute_align_try; break]) | }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break]) | |||
done | done | |||
CFLAGS="$ac_save_CFLAGS" | CFLAGS="$ac_save_CFLAGS" | |||
]) | ]) | |||
if test "x$cc_cv_attribute_aligned" != "x"; then | if test "x$cc_cv_attribute_aligned" != "x"; then | |||
AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned] , | AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned] , | |||
[Define the highest alignment supported]) | [Define the highest alignment supported]) | |||
fi | fi | |||
]) | ]) | |||
End of changes. 9 change blocks. | ||||
28 lines changed or deleted | 64 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |