Merge pull request #1996 from alejandro-perez/v3.0.x
[freeradius.git] / acinclude.m4
index 01565ef..da48acc 100644 (file)
@@ -225,13 +225,13 @@ _smart_try_dir=
 _smart_include_dir=
 
 dnl #  Add variants with the different prefixes and one with no prefix
-for prefix in $smart_prefix ""; do
-  for dir in $smart_try_dir; do
-    _smart_try_dir="${_smart_try_dir} ${dir}/${prefix}"
+for _prefix in $smart_prefix ""; do
+  for _dir in $smart_try_dir; do
+    _smart_try_dir="${_smart_try_dir} ${_dir}/${_prefix}"
   done
 
-  for dir in $smart_include_dir; do
-    _smart_include_dir="${_smart_include_dir} ${dir}/${prefix}"
+  for _dir in $smart_include_dir; do
+    _smart_include_dir="${_smart_include_dir} ${_dir}/${_prefix}"
   done
 done
 
@@ -263,14 +263,14 @@ dnl #
 dnl #  Try using the default includes (with prefixes).
 dnl #
 if test "x$smart_include" = "x"; then
-  for prefix in $smart_prefix; do
-    AC_MSG_CHECKING([for ${prefix}/$1])
+  for _prefix in $smart_prefix; do
+    AC_MSG_CHECKING([for ${_prefix}/$1])
 
     AC_TRY_COMPILE([$2
                    #include <$1>],
                   [int a = 1;],
                   [
-                    smart_include="-isystem ${prefix}/"
+                    smart_include="-isystem ${_prefix}/"
                     AC_MSG_RESULT(yes)
                     break
                   ],
@@ -307,7 +307,7 @@ dnl #
 if test "x$smart_include" = "x"; then
 
   for prefix in $smart_prefix; do
-    FR_LOCATE_DIR(_smart_include_dir,"${prefix}/${1}")
+    FR_LOCATE_DIR(_smart_include_dir,"${_prefix}/${1}")
   done
   FR_LOCATE_DIR(_smart_include_dir, $1)
 
@@ -513,17 +513,22 @@ dnl #  Check if we have the choose expr builtin
 dnl #
 AC_DEFUN([FR_HAVE_BUILTIN_CHOOSE_EXPR],
 [
-  AC_MSG_CHECKING(for __builtin_choose_expr support in compiler)
-  AC_RUN_IFELSE(
-    [AC_LANG_SOURCE(
-      [[
-        int main(int argc, char **argv) {
-          return __builtin_choose_expr(0, 1, 0);
-        }
-      ]])
-    ],[have_builtin_choose_expr=yes],[have_builtin_choose_expr=no],[have_builtin_choose_expr=no])
-  AC_MSG_RESULT($have_builtin_choose_expr)
-  if test "x$have_builtin_choose_expr" = "xyes"; then
+  AC_CACHE_CHECK([for __builtin_choose_expr support in compiler], [ax_cv_cc_builtin_choose_expr],[
+    AC_RUN_IFELSE(
+      [
+        AC_LANG_SOURCE(
+        [
+          int main(int argc, char **argv) {
+            if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */
+            return __builtin_choose_expr(0, 1, 0);
+          }
+        ])
+      ],
+      [ax_cv_cc_builtin_choose_expr=yes],
+      [ax_cv_cc_builtin_choose_expr=no]
+    )
+  ])
+  if test "x$ax_cv_cc_builtin_choose_expr" = "xyes"; then
     AC_DEFINE([HAVE_BUILTIN_CHOOSE_EXPR],1,[Define if the compiler supports __builtin_choose_expr])
   fi
 ])
@@ -533,17 +538,22 @@ dnl #  Check if we have the types compatible p builtin
 dnl #
 AC_DEFUN([FR_HAVE_BUILTIN_TYPES_COMPATIBLE_P],
 [
-  AC_MSG_CHECKING(for __builtin_types_compatible_p support in compiler)
-  AC_RUN_IFELSE(
-    [AC_LANG_SOURCE(
-      [[
-        int main(int argc, char **argv) {
-          return !(__builtin_types_compatible_p(char *, char *));
-        }
-      ]])
-    ],[have_builtin_types_compatible_p=yes],[have_builtin_types_compatible_p=no],[have_builtin_types_compatible_p=no])
-  AC_MSG_RESULT($have_builtin_types_compatible_p)
-  if test "x$have_builtin_types_compatible_p" = "xyes"; then
+  AC_CACHE_CHECK([for __builtin_types_compatible_p support in compiler], [ax_cv_cc_builtin_types_compatible_p],[
+    AC_RUN_IFELSE(
+      [
+        AC_LANG_SOURCE(
+        [
+          int main(int argc, char **argv) {
+            if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */
+            return !(__builtin_types_compatible_p(char *, char *));
+          }
+        ])
+      ],
+      [ax_cv_cc_builtin_types_compatible_p=yes],
+      [ax_cv_cc_builtin_types_compatible_p=no]
+    )
+  ])
+  if test "x$ax_cv_cc_builtin_types_compatible_p" = "xyes"; then
     AC_DEFINE([HAVE_BUILTIN_TYPES_COMPATIBLE_P],1,[Define if the compiler supports __builtin_types_compatible_p])
   fi
 ])
@@ -551,23 +561,51 @@ AC_DEFUN([FR_HAVE_BUILTIN_TYPES_COMPATIBLE_P],
 dnl #
 dnl #  Check if we have the bwsap64 builtin
 dnl #
-AC_DEFUN([FR_HAVE_BUILTIN_BSWAP_64],
+AC_DEFUN([FR_HAVE_BUILTIN_BSWAP64],
 [
+  AC_CACHE_CHECK([for __builtin_bswap64 support in compiler], [ax_cv_cc_builtin_bswap64],[
+    AC_RUN_IFELSE(
+      [
+        AC_LANG_SOURCE([
+          int main(int argc, char **argv) {
+            if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */
+            return (__builtin_bswap64(0));
+          }
+        ])
+      ],
+      [ax_cv_cc_builtin_bswap64=yes],
+      [ax_cv_cc_builtin_bswap64=no]
+    )
+  ])
+  if test "x$ax_cv_cc_builtin_bswap64" = "xyes"; then
+    AC_DEFINE([HAVE_BUILTIN_BSWAP_64],1,[Define if the compiler supports __builtin_bswap64])
+  fi
+])
+
 dnl #
-dnl #  See if the compilation works with __thread, for thread-local storage
+dnl #  Check if we have __attribute__((__bounded__)) (usually only OpenBSD with GCC)
 dnl #
-  AC_MSG_CHECKING(for __builtin_bswap64 support in compiler)
-  AC_RUN_IFELSE(
-    [AC_LANG_SOURCE(
-      [[
-        int main(int argc, char **argv) {
-          return (__builtin_bswap64(0));
-        }
-      ]])
-    ],[have_builtin_bswap64=yes],[have_builtin_bswap64=no],[have_builtin_bswap64=no])
-  AC_MSG_RESULT($have_builtin_bswap64)
-  if test "x$have_builtin_bswap64" = "xyes"; then
-    AC_DEFINE([HAVE_BUILTIN_BSWAP_64],1,[Define if the compiler supports __builtin_types_compatible_p])
+AC_DEFUN([FR_HAVE_BOUNDED_ATTRIBUTE],[
+  AC_CACHE_CHECK([for __attribute__((__bounded__)) support in compiler], [ax_cv_cc_bounded_attribute],[
+    CFLAGS_SAVED=$CFLAGS
+    CFLAGS="$CFLAGS -Werror"
+    AC_RUN_IFELSE(
+      [
+        AC_LANG_SOURCE([
+          void test(char *buff) __attribute__ ((__bounded__ (__string__, 1, 1)));
+          int main(int argc, char **argv) {
+            if ((argc < 0) || !argv) return 1; /* -Werror=unused-parameter */
+            return 0;
+          }
+        ])
+      ],
+      [ax_cv_cc_bounded_attribute=yes],
+      [ax_cv_cc_bounded_attribute=no]
+    )
+    CFLAGS="$CFLAGS_SAVED"
+  ])
+  if test "x$ax_cv_cc_bounded_attribute" = "xyes"; then
+    AC_DEFINE(HAVE_ATTRIBUTE_BOUNDED, 1, [Define if your compiler supports the __bounded__ attribute (usually OpenBSD gcc).])
   fi
 ])