changeset 33199:a22aaae4184a

dirfd: Avoid link error on AIX 7.1.
author Bruno Haible <bruno@clisp.org>
date Fri, 30 Jul 2010 23:54:44 +0200
parents 74a8d6dd660f
children 4736bbcab691
files ChangeLog doc/posix-functions/dirfd.texi lib/dirent.in.h m4/dirent_h.m4 m4/dirfd.m4 modules/dirent
diffstat 6 files changed, 36 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Jul 30 16:01:41 2010 -0600
+++ b/ChangeLog	Fri Jul 30 23:54:44 2010 +0200
@@ -1,3 +1,14 @@
+2010-07-30  Bruno Haible  <bruno@clisp.org>
+
+	dirfd: Avoid link error on AIX 7.1.
+	* lib/dirent.in.h (dirfd): Use modern idiom with REPLACE_DIRFD.
+	* m4/dirfd.m4 (gl_FUNC_DIRFD): If the function is declared but does not
+	exist, set REPLACE_DIRFD.
+	* m4/dirent_h.m4 (gl_DIRENT_H_DEFAULTS): Initialize REPLACE_DIRFD.
+	* modules/dirent (Makefile.am): Substitute REPLACE_DIRFD.
+	* doc/posix-functions/dirfd.texi: Update.
+	Reported by Rainer Tammer.
+
 2010-07-30  Eric Blake  <eblake@redhat.com>
 
 	strtod: next round of AIX fixes
--- a/doc/posix-functions/dirfd.texi	Fri Jul 30 16:01:41 2010 -0600
+++ b/doc/posix-functions/dirfd.texi	Fri Jul 30 23:54:44 2010 +0200
@@ -10,7 +10,7 @@
 @itemize
 @item
 This function is missing on some platforms:
-AIX 5.1, HP-UX 11, OSF/1 5.1, Solaris 10, mingw.
+AIX 7.1, HP-UX 11, OSF/1 5.1, Solaris 10, mingw.
 @end itemize
 
 Portability problems not fixed by Gnulib:
--- a/lib/dirent.in.h	Fri Jul 30 16:01:41 2010 -0600
+++ b/lib/dirent.in.h	Fri Jul 30 23:54:44 2010 +0200
@@ -50,11 +50,22 @@
 _GL_CXXALIASWARN (closedir);
 
 #if @GNULIB_DIRFD@
-# if !@HAVE_DECL_DIRFD@ && !defined dirfd
 /* Return the file descriptor associated with the given directory stream,
    or -1 if none exists.  */
-_GL_EXTERN_C int dirfd (DIR *dir) _GL_ARG_NONNULL ((1));
+# if @REPLACE_DIRFD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef dirfd
+#   define dirfd rpl_dirfd
+#  endif
+_GL_FUNCDECL_RPL (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (dirfd, int, (DIR *));
+# else
+#  if !(@HAVE_DECL_DIRFD@ || defined dirfd)
+_GL_FUNCDECL_SYS (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (dirfd, int, (DIR *));
 # endif
+_GL_CXXALIASWARN (dirfd);
 #elif defined GNULIB_POSIXCHECK
 # undef dirfd
 # if HAVE_RAW_DECL_DIRFD
--- a/m4/dirent_h.m4	Fri Jul 30 16:01:41 2010 -0600
+++ b/m4/dirent_h.m4	Fri Jul 30 23:54:44 2010 +0200
@@ -1,4 +1,4 @@
-# dirent_h.m4 serial 12
+# dirent_h.m4 serial 13
 dnl Copyright (C) 2008-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -51,6 +51,7 @@
   HAVE_SCANDIR=1;       AC_SUBST([HAVE_SCANDIR])
   HAVE_ALPHASORT=1;     AC_SUBST([HAVE_ALPHASORT])
   REPLACE_CLOSEDIR=0;   AC_SUBST([REPLACE_CLOSEDIR])
+  REPLACE_DIRFD=0;      AC_SUBST([REPLACE_DIRFD])
   REPLACE_FDOPENDIR=0;  AC_SUBST([REPLACE_FDOPENDIR])
   REPLACE_OPENDIR=0;    AC_SUBST([REPLACE_OPENDIR])
 ])
--- a/m4/dirfd.m4	Fri Jul 30 16:01:41 2010 -0600
+++ b/m4/dirfd.m4	Fri Jul 30 23:54:44 2010 +0200
@@ -1,4 +1,4 @@
-# serial 17   -*- Autoconf -*-
+# serial 18   -*- Autoconf -*-
 
 dnl Find out how to get the file descriptor associated with an open DIR*.
 
@@ -40,11 +40,13 @@
        gl_cv_func_dirfd_macro=yes,
        gl_cv_func_dirfd_macro=no)])
 
-  # Use the replacement only if we have no function, macro,
-  # or declaration with that name.
-  if test $ac_cv_func_dirfd,$ac_cv_have_decl_dirfd,$gl_cv_func_dirfd_macro \
-      = no,no,no; then
-    AC_REPLACE_FUNCS([dirfd])
+  # Use the replacement only if we have no function or macro with that name.
+  if test $ac_cv_func_dirfd,$gl_cv_func_dirfd_macro = no,no; then
+    if test $ac_cv_have_decl_dirfd = yes; then
+      # If the system declares dirfd already, let's declare rpl_dirfd instead.
+      REPLACE_DIRFD=1
+    fi
+    AC_LIBOBJ([dirfd])
     AC_CACHE_CHECK(
               [how to get the file descriptor associated with an open DIR*],
                    gl_cv_sys_dir_fd_member_name,
--- a/modules/dirent	Fri Jul 30 16:01:41 2010 -0600
+++ b/modules/dirent	Fri Jul 30 23:54:44 2010 +0200
@@ -36,6 +36,7 @@
 	      -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \
 	      -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \
 	      -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \
+	      -e 's|@''REPLACE_DIRFD''@|$(REPLACE_DIRFD)|g' \
 	      -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \
 	      -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \
 	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \