Merge commit 'a39d4083cab589d7cd6a13e8a4b8db8875261d75'
[gnulib.git] / m4 / fcntl_h.m4
index 4d90488..fb2556d 100644 (file)
@@ -1,5 +1,6 @@
+# serial 15
 # Configure fcntl.h.
-dnl Copyright (C) 2006 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2007, 2009-2014 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,43 +9,42 @@ dnl Written by Paul Eggert.
 
 AC_DEFUN([gl_FCNTL_H],
 [
-  AC_CACHE_CHECK([for working fcntl.h], gl_cv_header_working_fcntl_h,
-    [AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM(
-         [[#include <sys/types.h>
-          #include <sys/stat.h>
-          #include <unistd.h>
-          #include <fcntl.h>
-          #ifndef O_NOFOLLOW
-           #define O_NOFOLLOW 0
-          #endif
-          static int const constants[] =
-           {
-             O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-             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 (open (sym, O_RDONLY | O_NOFOLLOW) == 0)
-                 return 1;
-             }
-           return !constants;]])],
-       [gl_cv_header_working_fcntl_h=yes],
-       [gl_cv_header_working_fcntl_h=no],
-       [gl_cv_header_working_fcntl_h=cross-compiling])])
+  AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+  AC_REQUIRE([gl_FCNTL_O_FLAGS])
+  gl_NEXT_HEADERS([fcntl.h])
 
-  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
+  dnl Ensure the type pid_t gets defined.
+  AC_REQUIRE([AC_TYPE_PID_T])
 
-  gl_ABSOLUTE_HEADER([fcntl.h])
-  ABSOLUTE_FCNTL_H=\"$gl_cv_absolute_fcntl_h\"
-  AC_SUBST([ABSOLUTE_FCNTL_H])
-  FCNTL_H='fcntl.h'
-  AC_SUBST([FCNTL_H])
+  dnl Ensure the type mode_t gets defined.
+  AC_REQUIRE([AC_TYPE_MODE_T])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, if it is not common
+  dnl enough to be declared everywhere.
+  gl_WARN_ON_USE_PREPARE([[#include <fcntl.h>
+    ]], [fcntl openat])
+])
+
+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])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_FCNTL_H_DEFAULTS],
+[
+  GNULIB_FCNTL=0;        AC_SUBST([GNULIB_FCNTL])
+  GNULIB_NONBLOCKING=0;  AC_SUBST([GNULIB_NONBLOCKING])
+  GNULIB_OPEN=0;         AC_SUBST([GNULIB_OPEN])
+  GNULIB_OPENAT=0;       AC_SUBST([GNULIB_OPENAT])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_FCNTL=1;          AC_SUBST([HAVE_FCNTL])
+  HAVE_OPENAT=1;         AC_SUBST([HAVE_OPENAT])
+  REPLACE_FCNTL=0;       AC_SUBST([REPLACE_FCNTL])
+  REPLACE_OPEN=0;        AC_SUBST([REPLACE_OPEN])
+  REPLACE_OPENAT=0;      AC_SUBST([REPLACE_OPENAT])
 ])