1# serial 14 2# See if we need to provide fdopendir. 3 4dnl Copyright (C) 2009-2021 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( 29 [AC_LANG_PROGRAM([[ 30#include <dirent.h> 31#include <fcntl.h> 32#include <unistd.h> 33]GL_MDA_DEFINES[ 34#if !HAVE_DECL_FDOPENDIR 35extern 36# ifdef __cplusplus 37"C" 38# endif 39DIR *fdopendir (int); 40#endif 41]], 42 [[int result = 0; 43 int fd = open ("conftest.c", O_RDONLY); 44 if (fd < 0) result |= 1; 45 if (fdopendir (fd)) result |= 2; 46 if (close (fd)) result |= 4; 47 return result; 48 ]])], 49 [gl_cv_func_fdopendir_works=yes], 50 [gl_cv_func_fdopendir_works=no], 51 [case "$host_os" in 52 # Guess yes on glibc systems. 53 *-gnu*) gl_cv_func_fdopendir_works="guessing yes" ;; 54 # Guess yes on musl systems. 55 *-musl*) gl_cv_func_fdopendir_works="guessing yes" ;; 56 # If we don't know, obey --enable-cross-guesses. 57 *) gl_cv_func_fdopendir_works="$gl_cross_guess_normal" ;; 58 esac 59 ])]) 60 case "$gl_cv_func_fdopendir_works" in 61 *yes) ;; 62 *) 63 REPLACE_FDOPENDIR=1 64 ;; 65 esac 66 fi 67]) 68