X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Ffcntl_h.m4;h=e3b9aa526cb31b5929fad6fe012b49928f235b63;hb=55f15d88ddd9754f4da0d2621e18f3ad378e2dce;hp=35e4b514875e4fe20af0ee4774bbde62300f7616;hpb=4f8569913ab93ef1bd615457b60ae6bd07cf7173;p=gnulib.git diff --git a/m4/fcntl_h.m4 b/m4/fcntl_h.m4 index 35e4b5148..e3b9aa526 100644 --- a/m4/fcntl_h.m4 +++ b/m4/fcntl_h.m4 @@ -1,5 +1,5 @@ # Configure fcntl.h. -dnl Copyright (C) 2006 Free Software Foundation, Inc. +dnl Copyright (C) 2006, 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -8,6 +8,7 @@ dnl Written by Paul Eggert. AC_DEFUN([gl_FCNTL_H], [ + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_CACHE_CHECK([for working fcntl.h], gl_cv_header_working_fcntl_h, [AC_RUN_IFELSE( [AC_LANG_PROGRAM( @@ -15,6 +16,9 @@ AC_DEFUN([gl_FCNTL_H], #include #include #include + #ifndef O_NOATIME + #define O_NOATIME 0 + #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif @@ -24,27 +28,67 @@ AC_DEFUN([gl_FCNTL_H], O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; ]], - [[static char const sym[] = "conftest.sym"; - if (O_NOFOLLOW) - { - if (symlink (".", sym) != 0) - return 1; - if (0 <= open (sym, O_RDONLY | O_NOFOLLOW)) - return 1; - } - return !constants;]])], + [[ + int status = !constants; + { + static char const sym[] = "conftest.sym"; + if (symlink (".", sym) != 0 + || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0) + status |= 32; + } + { + static char const file[] = "confdefs.h"; + int fd = open (file, O_RDONLY | O_NOATIME); + char c; + struct stat st0, st1; + if (fd < 0 + || fstat (fd, &st0) != 0 + || sleep (1) != 0 + || read (fd, &c, 1) != 1 + || close (fd) != 0 + || stat (file, &st1) != 0 + || st0.st_atime != st1.st_atime) + status |= 64; + } + return status;]])], [gl_cv_header_working_fcntl_h=yes], - [gl_cv_header_working_fcntl_h=no], + [case $? in #( + 32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( + 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( + 96) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( + *) gl_cv_header_working_fcntl_h='no';; + esac], [gl_cv_header_working_fcntl_h=cross-compiling])]) - if test $gl_cv_header_working_fcntl_h != yes; then - AC_DEFINE([O_NOFOLLOW_IS_INEFFECTIVE], 1, - [Define to 1 if O_NOFOLLOW is ineffective.]) - fi + case $gl_cv_header_working_fcntl_h in #( + *O_NOATIME* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], + [Define to 1 if O_NOATIME works.]) - gl_ABSOLUTE_HEADER([fcntl.h]) - ABSOLUTE_FCNTL_H=\"$gl_cv_absolute_fcntl_h\" - AC_SUBST([ABSOLUTE_FCNTL_H]) + case $gl_cv_header_working_fcntl_h in #( + *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], + [Define to 1 if O_NOFOLLOW works.]) + + gl_CHECK_NEXT_HEADERS([fcntl.h]) FCNTL_H='fcntl.h' AC_SUBST([FCNTL_H]) ]) + +AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_FCNTL_H_DEFAULTS], +[ + GNULIB_OPEN=0; AC_SUBST([GNULIB_OPEN]) + dnl Assume proper GNU behavior unless another module says otherwise. + REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) +])