changeset 14932:9ea347c6fce2

dirfd: Move AC_LIBOBJ invocations to module description. * m4/dirfd.m4 (gl_PREREQ_DIRFD): New macro, extracted from gl_FUNC_DIRFD. (gl_FUNC_DIRFD): Move AC_LIBOBJ and gl_PREREQ_DIRFD invocations from here... * modules/dirfd (configure.ac): ... to here. (Depends-on): Fix condition.
author Bruno Haible <bruno@clisp.org>
date Fri, 06 May 2011 03:46:57 +0200
parents 5fac8bca3a41
children 45dddbc362fb
files ChangeLog m4/dirfd.m4 modules/dirfd
diffstat 3 files changed, 49 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2011-05-05  Bruno Haible  <bruno@clisp.org>
+
+	dirfd: Move AC_LIBOBJ invocations to module description.
+	* m4/dirfd.m4 (gl_PREREQ_DIRFD): New macro, extracted from
+	gl_FUNC_DIRFD.
+	(gl_FUNC_DIRFD): Move AC_LIBOBJ and gl_PREREQ_DIRFD invocations from
+	here...
+	* modules/dirfd (configure.ac): ... to here.
+	(Depends-on): Fix condition.
+
 2011-05-05  Bruno Haible  <bruno@clisp.org>
 
 	chown: Respect rules for use of AC_LIBOBJ.
--- a/m4/dirfd.m4
+++ b/m4/dirfd.m4
@@ -1,4 +1,4 @@
-# serial 20   -*- Autoconf -*-
+# serial 21   -*- Autoconf -*-
 
 dnl Find out how to get the file descriptor associated with an open DIR*.
 
@@ -36,45 +36,48 @@
        gl_cv_func_dirfd_macro=no)])
 
   # 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_func_dirfd = no && test $gl_cv_func_dirfd_macro = 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,
-      [
-        dirfd_save_CFLAGS=$CFLAGS
-        for ac_expr in d_fd dd_fd; do
+  fi
+])
+
+dnl Prerequisites of lib/dirfd.c.
+AC_DEFUN([gl_PREREQ_DIRFD],
+[
+  AC_CACHE_CHECK([how to get the file descriptor associated with an open DIR*],
+                 [gl_cv_sys_dir_fd_member_name],
+    [
+      dirfd_save_CFLAGS=$CFLAGS
+      for ac_expr in d_fd dd_fd; do
 
-          CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr"
-          AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-             #include <sys/types.h>
-             #include <dirent.h>]],
-            [[DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;]])],
-            [dir_fd_found=yes]
-          )
-          CFLAGS=$dirfd_save_CFLAGS
-          test "$dir_fd_found" = yes && break
-        done
-        test "$dir_fd_found" = yes || ac_expr=no_such_member
+        CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr"
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+           #include <sys/types.h>
+           #include <dirent.h>]],
+          [[DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;]])],
+          [dir_fd_found=yes]
+        )
+        CFLAGS=$dirfd_save_CFLAGS
+        test "$dir_fd_found" = yes && break
+      done
+      test "$dir_fd_found" = yes || ac_expr=no_such_member
 
-        gl_cv_sys_dir_fd_member_name=$ac_expr
-      ]
-    )
-    if test $gl_cv_sys_dir_fd_member_name != no_such_member; then
-      AC_DEFINE_UNQUOTED([DIR_FD_MEMBER_NAME],
-        $gl_cv_sys_dir_fd_member_name,
-        [the name of the file descriptor member of DIR])
-    fi
-    AH_VERBATIM(DIR_TO_FD,
-                [#ifdef DIR_FD_MEMBER_NAME
+      gl_cv_sys_dir_fd_member_name=$ac_expr
+    ]
+  )
+  if test $gl_cv_sys_dir_fd_member_name != no_such_member; then
+    AC_DEFINE_UNQUOTED([DIR_FD_MEMBER_NAME],
+      [$gl_cv_sys_dir_fd_member_name],
+      [the name of the file descriptor member of DIR])
+  fi
+  AH_VERBATIM([DIR_TO_FD],
+              [#ifdef DIR_FD_MEMBER_NAME
 # define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME)
 #else
 # define DIR_TO_FD(Dir_p) -1
 #endif
 ])
-  fi
 ])
--- a/modules/dirfd
+++ b/modules/dirfd
@@ -8,10 +8,14 @@
 Depends-on:
 dirent
 extensions
-errno           [test $ac_cv_have_decl_dirfd = no || test $REPLACE_DIRFD = 1]
+errno           [test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no]
 
 configure.ac:
 gl_FUNC_DIRFD
+if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no; then
+  AC_LIBOBJ([dirfd])
+  gl_PREREQ_DIRFD
+fi
 gl_DIRENT_MODULE_INDICATOR([dirfd])
 
 Makefile.am: