1# serial 12 2# See if we need to provide fdopendir. 3 4dnl Copyright (C) 2009-2020 Free Software Foundation, Inc. 5dnl This file is free software; the Free Software Foundation 6dnl gives unlimited permission to copy and/or distribute it, 7dnl with or without modifications, as long as this notice is preserved. 8 9# Written by Eric Blake. 10 11AC_DEFUN([gl_FUNC_FDOPENDIR], 12[ 13 AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) 14 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 15 16 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) 17 18 dnl FreeBSD 7.3 has the function, but failed to declare it. 19 AC_CHECK_DECLS([fdopendir], [], [HAVE_DECL_FDOPENDIR=0], [[ 20#include <dirent.h> 21 ]]) 22 AC_CHECK_FUNCS_ONCE([fdopendir]) 23 if test $ac_cv_func_fdopendir = no; then 24 HAVE_FDOPENDIR=0 25 else 26 AC_CACHE_CHECK([whether fdopendir works], 27 [gl_cv_func_fdopendir_works], 28 [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ 29#include <dirent.h> 30#include <fcntl.h> 31#include <unistd.h> 32#if !HAVE_DECL_FDOPENDIR 33extern 34# ifdef __cplusplus 35"C" 36# endif 37DIR *fdopendir (int); 38#endif 39]], [int result = 0; 40 int fd = open ("conftest.c", O_RDONLY); 41 if (fd < 0) result |= 1; 42 if (fdopendir (fd)) result |= 2; 43 if (close (fd)) result |= 4; 44 return result;])], 45 [gl_cv_func_fdopendir_works=yes], 46 [gl_cv_func_fdopendir_works=no], 47 [case "$host_os" in 48 # Guess yes on glibc systems. 49 *-gnu*) gl_cv_func_fdopendir_works="guessing yes" ;; 50 # Guess yes on musl systems. 51 *-musl*) gl_cv_func_fdopendir_works="guessing yes" ;; 52 # Guess yes on bsd. 53 *bsd*) gl_cv_func_fdopendir_works="guessing yes" ;; 54 # If we don't know, obey --enable-cross-guesses. 55 *) gl_cv_func_fdopendir_works="$gl_cross_guess_normal" ;; 56 esac 57 ])]) 58 case "$gl_cv_func_fdopendir_works" in 59 *yes) ;; 60 *) 61 REPLACE_FDOPENDIR=1 62 ;; 63 esac 64 fi 65]) 66