Simplify to validate the availability of scandir
authorAkira TAGOH <akira@tagoh.org>
Mon, 2 Dec 2013 10:18:25 +0000 (19:18 +0900)
committerAkira TAGOH <akira@tagoh.org>
Mon, 2 Dec 2013 10:18:25 +0000 (19:18 +0900)
configure.ac

index fed8b2a..1a1b534 100644 (file)
@@ -154,38 +154,36 @@ dnl AC_CHECK_FUNCS doesn't check for header files.
 dnl posix_fadvise() may be not available in older libc.
 AC_CHECK_SYMBOL([posix_fadvise], [fcntl.h], [fc_func_posix_fadvise=1], [fc_func_posix_fadvise=0])
 AC_DEFINE_UNQUOTED([HAVE_POSIX_FADVISE], [$fc_func_posix_fadvise], [Define to 1 if you have the 'posix_fadivse' function.])
-fc_saved_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $WARN_CFLAGS -Werror"
 if test "$os_win32" = "no"; then
        AC_MSG_CHECKING([for scandir])
-       AC_LINK_IFELSE([AC_LANG_SOURCE([[
+       fc_saved_CFLAGS="$CFLAGS"
+       CFLAGS="$CFLAGS $WARN_CFLAGS -Werror"
+       AC_TRY_COMPILE([
                #include <dirent.h>
-               int comp(const struct dirent **, const struct dirent **);
-               int comp(const struct dirent **a, const struct dirent **b) { return 0; }
-               int main(void) {
-                   struct dirent **d;
-                   return scandir(".", &d, 0, &comp) >= 0;
-               }
-               ]])],[
+               int main(void);
+       ], [
+               int (* comp) (const struct dirent **, const struct dirent **) = 0;
+               struct dirent **d;
+               return scandir(".", &d, 0, comp) >= 0;
+       ], [
+               AC_MSG_RESULT([yes])
+               AC_DEFINE([HAVE_SCANDIR], [1], [Define to 1 if you have the 'scandir' function.])
+       ], [
+               AC_TRY_COMPILE([
+                       #include <dirent.h>
+                       int main(void);
+               ], [
+                       int (* comp) (const void *, const void *) = 0;
+                       struct dirent **d;
+                       return scandir(".", &d, 0, comp) >= 0;
+               ], [
                        AC_MSG_RESULT([yes])
-                       AC_DEFINE([HAVE_SCANDIR], [1], [Define to 1 if you have the 'scandir' function.])
+                       AC_DEFINE([HAVE_SCANDIR_VOID_P], [1], [Define to 1 if you have the 'scandir' function with int (* compar)(const void *, const void *)])
                ],[
-                       AC_LINK_IFELSE([AC_LANG_SOURCE([[
-                               #include <dirent.h>
-                               int comp(const void *, const void *);
-                               int comp(const void *a, const void *b) { return 0; }
-                               int main(void) {
-                                   struct dirent **d;
-                                   return scandir(".", &d, 0, &comp) >= 0;
-                               }
-                       ]])],[
-                               AC_MSG_RESULT([yes])
-                               AC_DEFINE([HAVE_SCANDIR_VOID_P], [1], [Define to 1 if you have the 'scandir' function with int (* compar)(const void *, const void *)])
-                       ],[
-                               AC_MSG_ERROR([
+                       AC_MSG_ERROR([
 *** No scandir function available.])
-                       ])
                ])
+       ])
 fi
 CFLAGS="$fc_saved_CFLAGS"