Use Gnulib's `inet_ntop' and `inet_pton' modules.
[bpt/guile.git] / m4 / fcntl_h.m4
1 # serial 6
2 # Configure fcntl.h.
3 dnl Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc.
4 dnl This file is free software; the Free Software Foundation
5 dnl gives unlimited permission to copy and/or distribute it,
6 dnl with or without modifications, as long as this notice is preserved.
7
8 dnl Written by Paul Eggert.
9
10 AC_DEFUN([gl_FCNTL_H],
11 [
12 AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
13 AC_REQUIRE([gl_FCNTL_O_FLAGS])
14 gl_CHECK_NEXT_HEADERS([fcntl.h])
15 FCNTL_H='fcntl.h'
16 AC_SUBST([FCNTL_H])
17 ])
18
19 # Test whether the flags O_NOATIME and O_NOFOLLOW actually work.
20 # Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise.
21 # Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise.
22 AC_DEFUN([gl_FCNTL_O_FLAGS],
23 [
24 dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW.
25 AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
26 AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
27 [AC_RUN_IFELSE(
28 [AC_LANG_PROGRAM(
29 [[#include <sys/types.h>
30 #include <sys/stat.h>
31 #include <unistd.h>
32 #include <fcntl.h>
33 #ifndef O_NOATIME
34 #define O_NOATIME 0
35 #endif
36 #ifndef O_NOFOLLOW
37 #define O_NOFOLLOW 0
38 #endif
39 static int const constants[] =
40 {
41 O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
42 O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
43 };
44 ]],
45 [[
46 int status = !constants;
47 {
48 static char const sym[] = "conftest.sym";
49 if (symlink (".", sym) != 0
50 || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0)
51 status |= 32;
52 unlink (sym);
53 }
54 {
55 static char const file[] = "confdefs.h";
56 int fd = open (file, O_RDONLY | O_NOATIME);
57 char c;
58 struct stat st0, st1;
59 if (fd < 0
60 || fstat (fd, &st0) != 0
61 || sleep (1) != 0
62 || read (fd, &c, 1) != 1
63 || close (fd) != 0
64 || stat (file, &st1) != 0
65 || st0.st_atime != st1.st_atime)
66 status |= 64;
67 }
68 return status;]])],
69 [gl_cv_header_working_fcntl_h=yes],
70 [case $? in #(
71 32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
72 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
73 96) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
74 *) gl_cv_header_working_fcntl_h='no';;
75 esac],
76 [gl_cv_header_working_fcntl_h=cross-compiling])])
77
78 case $gl_cv_header_working_fcntl_h in #(
79 *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
80 *) ac_val=1;;
81 esac
82 AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
83 [Define to 1 if O_NOATIME works.])
84
85 case $gl_cv_header_working_fcntl_h in #(
86 *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
87 *) ac_val=1;;
88 esac
89 AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
90 [Define to 1 if O_NOFOLLOW works.])
91 ])
92
93 AC_DEFUN([gl_FCNTL_MODULE_INDICATOR],
94 [
95 dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
96 AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
97 GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1
98 ])
99
100 AC_DEFUN([gl_FCNTL_H_DEFAULTS],
101 [
102 GNULIB_OPEN=0; AC_SUBST([GNULIB_OPEN])
103 GNULIB_OPENAT=0; AC_SUBST([GNULIB_OPENAT])
104 dnl Assume proper GNU behavior unless another module says otherwise.
105 HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT])
106 REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN])
107 REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT])
108 ])