3 dnl Copyright (C) 2006-2024 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.
8 dnl Written by Simon Josefsson, Bruno Haible.
10 AC_DEFUN_ONCE([gl_UNISTD_H],
12 dnl Ensure to expand the default settings once only, before all statements
13 dnl that occur in other macros.
14 AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
16 gl_CHECK_NEXT_HEADERS([unistd.h])
17 if test $ac_cv_header_unistd_h = yes; then
22 AC_SUBST([HAVE_UNISTD_H])
24 dnl Ensure the type pid_t gets defined.
25 AC_REQUIRE([AC_TYPE_PID_T])
27 dnl Determine WINDOWS_64_BIT_OFF_T.
28 AC_REQUIRE([gl_TYPE_OFF_T])
30 dnl Check for declarations of anything we want to poison if the
31 dnl corresponding gnulib module is not in use.
32 gl_WARN_ON_USE_PREPARE([[
36 /* Some systems declare various items in the wrong headers. */
37 #if !(defined __GLIBC__ && !defined __UCLIBC__)
41 # if defined _WIN32 && ! defined __CYGWIN__
45 ]], [access chdir chown copy_file_range dup dup2 dup3 environ euidaccess
46 execl execle execlp execv execve execvp execvpe
48 fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize
49 getentropy getgroups gethostname getlogin getlogin_r getpagesize getpass
50 getusershell setusershell endusershell
51 group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite
52 readlink readlinkat rmdir sethostname sleep symlink symlinkat
53 truncate ttyname_r unlink unlinkat usleep])
55 AC_REQUIRE([AC_C_RESTRICT])
57 AC_CHECK_DECLS_ONCE([execvpe])
58 if test $ac_cv_have_decl_execvpe = no; then
63 # gl_UNISTD_MODULE_INDICATOR([modulename])
64 # sets the shell variable that indicates the presence of the given module
65 # to a C preprocessor expression that will evaluate to 1.
66 # This macro invocation must not occur in macros that are AC_REQUIREd.
67 AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
69 dnl Ensure to expand the default settings once only.
70 gl_UNISTD_H_REQUIRE_DEFAULTS
71 gl_MODULE_INDICATOR_SET_VARIABLE([$1])
72 dnl Define it also as a C macro, for the benefit of the unit tests.
73 gl_MODULE_INDICATOR_FOR_TESTS([$1])
76 # Initializes the default values for AC_SUBSTed shell variables.
77 # This macro must not be AC_REQUIREd. It must only be invoked, and only
78 # outside of macros or in macros that are not AC_REQUIREd.
79 AC_DEFUN([gl_UNISTD_H_REQUIRE_DEFAULTS],
81 m4_defun(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS], [
82 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCESS])
83 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHDIR])
84 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHOWN])
85 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CLOSE])
86 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPY_FILE_RANGE])
87 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP])
88 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP2])
89 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP3])
90 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ENVIRON])
91 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EUIDACCESS])
92 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECL])
93 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLE])
94 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLP])
95 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECV])
96 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVE])
97 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVP])
98 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVPE])
99 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FACCESSAT])
100 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHDIR])
101 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHOWNAT])
102 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDATASYNC])
103 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSYNC])
104 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTRUNCATE])
105 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCWD])
106 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDOMAINNAME])
107 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDTABLESIZE])
108 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETENTROPY])
109 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETGROUPS])
110 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETHOSTNAME])
111 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN])
112 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN_R])
113 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETOPT_POSIX])
114 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPAGESIZE])
115 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS])
116 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS_GNU])
117 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUSERSHELL])
118 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GROUP_MEMBER])
119 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISATTY])
120 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHOWN])
121 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINK])
122 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINKAT])
123 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSEEK])
124 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE])
125 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE2])
126 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PREAD])
127 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PWRITE])
128 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READ])
129 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINK])
130 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINKAT])
131 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RMDIR])
132 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETHOSTNAME])
133 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SLEEP])
134 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINK])
135 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINKAT])
136 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCATE])
137 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TTYNAME_R])
138 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT])
139 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_NONBLOCKING])
140 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_SIGPIPE])
141 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINK])
142 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINKAT])
143 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_USLEEP])
144 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WRITE])
145 dnl Support Microsoft deprecated alias function names by default.
146 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ACCESS], [1])
147 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHDIR], [1])
148 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CLOSE], [1])
149 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP], [1])
150 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP2], [1])
151 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECL], [1])
152 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLE], [1])
153 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLP], [1])
154 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECV], [1])
155 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVE], [1])
156 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVP], [1])
157 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVPE], [1])
158 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETCWD], [1])
159 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETPID], [1])
160 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ISATTY], [1])
161 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_LSEEK], [1])
162 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_READ], [1])
163 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_RMDIR], [1])
164 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_SWAB], [1])
165 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UNLINK], [1])
166 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WRITE], [1])
168 m4_require(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS])
169 AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
172 AC_DEFUN([gl_UNISTD_H_DEFAULTS],
174 dnl Assume proper GNU behavior unless another module says otherwise.
175 HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN])
176 HAVE_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE])
177 HAVE_DUP3=1; AC_SUBST([HAVE_DUP3])
178 HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS])
179 HAVE_EXECVPE=1; AC_SUBST([HAVE_EXECVPE])
180 HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT])
181 HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR])
182 HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT])
183 HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC])
184 HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC])
185 HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE])
186 HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE])
187 HAVE_GETENTROPY=1; AC_SUBST([HAVE_GETENTROPY])
188 HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS])
189 HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME])
190 HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN])
191 HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE])
192 HAVE_GETPASS=1; AC_SUBST([HAVE_GETPASS])
193 HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER])
194 HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN])
195 HAVE_LINK=1; AC_SUBST([HAVE_LINK])
196 HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT])
197 HAVE_PIPE=1; AC_SUBST([HAVE_PIPE])
198 HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2])
199 HAVE_PREAD=1; AC_SUBST([HAVE_PREAD])
200 HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE])
201 HAVE_READLINK=1; AC_SUBST([HAVE_READLINK])
202 HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT])
203 HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME])
204 HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP])
205 HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK])
206 HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT])
207 HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT])
208 HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP])
209 HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON])
210 HAVE_DECL_EXECVPE=1; AC_SUBST([HAVE_DECL_EXECVPE])
211 HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR])
212 HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC])
213 HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME])
214 HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN])
215 HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
216 HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE])
217 HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL])
218 HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME])
219 HAVE_DECL_TRUNCATE=1; AC_SUBST([HAVE_DECL_TRUNCATE])
220 HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R])
221 HAVE_OS_H=0; AC_SUBST([HAVE_OS_H])
222 HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H])
223 REPLACE_ACCESS=0; AC_SUBST([REPLACE_ACCESS])
224 REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN])
225 REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE])
226 REPLACE_COPY_FILE_RANGE=0; AC_SUBST([REPLACE_COPY_FILE_RANGE])
227 REPLACE_DUP=0; AC_SUBST([REPLACE_DUP])
228 REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2])
229 REPLACE_DUP3=0; AC_SUBST([REPLACE_DUP3])
230 REPLACE_EXECL=0; AC_SUBST([REPLACE_EXECL])
231 REPLACE_EXECLE=0; AC_SUBST([REPLACE_EXECLE])
232 REPLACE_EXECLP=0; AC_SUBST([REPLACE_EXECLP])
233 REPLACE_EXECV=0; AC_SUBST([REPLACE_EXECV])
234 REPLACE_EXECVE=0; AC_SUBST([REPLACE_EXECVE])
235 REPLACE_EXECVP=0; AC_SUBST([REPLACE_EXECVP])
236 REPLACE_EXECVPE=0; AC_SUBST([REPLACE_EXECVPE])
237 REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT])
238 REPLACE_FCHDIR=0; AC_SUBST([REPLACE_FCHDIR])
239 REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT])
240 REPLACE_FDATASYNC=0; AC_SUBST([REPLACE_FDATASYNC])
241 REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE])
242 REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD])
243 REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME])
244 REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE])
245 REPLACE_GETENTROPY=0; AC_SUBST([REPLACE_GETENTROPY])
246 REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R])
247 REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS])
248 REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE])
249 REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS])
250 REPLACE_GETPASS_FOR_GETPASS_GNU=0; AC_SUBST([REPLACE_GETPASS_FOR_GETPASS_GNU])
251 REPLACE_GETUSERSHELL=0; AC_SUBST([REPLACE_GETUSERSHELL])
252 REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY])
253 REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN])
254 REPLACE_LINK=0; AC_SUBST([REPLACE_LINK])
255 REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT])
256 REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK])
257 REPLACE_PIPE2=0; AC_SUBST([REPLACE_PIPE2])
258 REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD])
259 REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE])
260 REPLACE_READ=0; AC_SUBST([REPLACE_READ])
261 REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK])
262 REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT])
263 REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR])
264 REPLACE_SETHOSTNAME=0; AC_SUBST([REPLACE_SETHOSTNAME])
265 REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP])
266 REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK])
267 REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT])
268 REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE])
269 REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R])
270 REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK])
271 REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT])
272 REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP])
273 REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE])
274 UNISTD_H_HAVE_SYS_RANDOM_H=0; AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H])
275 UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
276 UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
277 AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS])