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