1# serial 22 -*- Autoconf -*- 2 3dnl Find out how to get the file descriptor associated with an open DIR*. 4 5# Copyright (C) 2001-2006, 2008-2015 Free Software Foundation, Inc. 6# This file is free software; the Free Software Foundation 7# gives unlimited permission to copy and/or distribute it, 8# with or without modifications, as long as this notice is preserved. 9 10dnl From Jim Meyering 11 12AC_DEFUN([gl_FUNC_DIRFD], 13[ 14 AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) 15 16 dnl Persuade glibc <dirent.h> to declare dirfd(). 17 AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) 18 19 AC_CHECK_FUNCS([dirfd]) 20 AC_CHECK_DECLS([dirfd], , , 21 [[#include <sys/types.h> 22 #include <dirent.h>]]) 23 if test $ac_cv_have_decl_dirfd = no; then 24 HAVE_DECL_DIRFD=0 25 fi 26 27 AC_CACHE_CHECK([whether dirfd is a macro], 28 gl_cv_func_dirfd_macro, 29 [AC_EGREP_CPP([dirent_header_defines_dirfd], [ 30#include <sys/types.h> 31#include <dirent.h> 32#ifdef dirfd 33 dirent_header_defines_dirfd 34#endif], 35 gl_cv_func_dirfd_macro=yes, 36 gl_cv_func_dirfd_macro=no)]) 37 38 # Use the replacement only if we have no function or macro with that name. 39 if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no; then 40 if test $ac_cv_have_decl_dirfd = yes; then 41 # If the system declares dirfd already, let's declare rpl_dirfd instead. 42 REPLACE_DIRFD=1 43 fi 44 fi 45]) 46 47dnl Prerequisites of lib/dirfd.c. 48AC_DEFUN([gl_PREREQ_DIRFD], 49[ 50 AC_CACHE_CHECK([how to get the file descriptor associated with an open DIR*], 51 [gl_cv_sys_dir_fd_member_name], 52 [ 53 dirfd_save_CFLAGS=$CFLAGS 54 for ac_expr in d_fd dd_fd; do 55 56 CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr" 57 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 58 #include <sys/types.h> 59 #include <dirent.h>]], 60 [[DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;]])], 61 [dir_fd_found=yes] 62 ) 63 CFLAGS=$dirfd_save_CFLAGS 64 test "$dir_fd_found" = yes && break 65 done 66 test "$dir_fd_found" = yes || ac_expr=no_such_member 67 68 gl_cv_sys_dir_fd_member_name=$ac_expr 69 ] 70 ) 71 if test $gl_cv_sys_dir_fd_member_name != no_such_member; then 72 AC_DEFINE_UNQUOTED([DIR_FD_MEMBER_NAME], 73 [$gl_cv_sys_dir_fd_member_name], 74 [the name of the file descriptor member of DIR]) 75 fi 76 AH_VERBATIM([DIR_TO_FD], 77 [#ifdef DIR_FD_MEMBER_NAME 78# define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME) 79#else 80# define DIR_TO_FD(Dir_p) -1 81#endif 82]) 83]) 84