1# unistd_h.m4 serial 90
2dnl Copyright (C) 2006-2022 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_GETPASS_GNU])
116    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUSERSHELL])
117    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GROUP_MEMBER])
118    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISATTY])
119    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHOWN])
120    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINK])
121    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINKAT])
122    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSEEK])
123    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE])
124    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE2])
125    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PREAD])
126    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PWRITE])
127    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READ])
128    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINK])
129    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINKAT])
130    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RMDIR])
131    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETHOSTNAME])
132    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SLEEP])
133    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINK])
134    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINKAT])
135    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCATE])
136    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TTYNAME_R])
137    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT])
138    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_NONBLOCKING])
139    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_SIGPIPE])
140    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINK])
141    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINKAT])
142    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_USLEEP])
143    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WRITE])
144    dnl Support Microsoft deprecated alias function names by default.
145    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ACCESS], [1])
146    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHDIR], [1])
147    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CLOSE], [1])
148    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP], [1])
149    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP2], [1])
150    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECL], [1])
151    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLE], [1])
152    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLP], [1])
153    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECV], [1])
154    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVE], [1])
155    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVP], [1])
156    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVPE], [1])
157    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETCWD], [1])
158    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETPID], [1])
159    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ISATTY], [1])
160    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_LSEEK], [1])
161    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_READ], [1])
162    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_RMDIR], [1])
163    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_SWAB], [1])
164    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UNLINK], [1])
165    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WRITE], [1])
166  ])
167  m4_require(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS])
168  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
169])
170
171AC_DEFUN([gl_UNISTD_H_DEFAULTS],
172[
173  dnl Assume proper GNU behavior unless another module says otherwise.
174  HAVE_CHOWN=1;                      AC_SUBST([HAVE_CHOWN])
175  HAVE_COPY_FILE_RANGE=1;            AC_SUBST([HAVE_COPY_FILE_RANGE])
176  HAVE_DUP3=1;                       AC_SUBST([HAVE_DUP3])
177  HAVE_EUIDACCESS=1;                 AC_SUBST([HAVE_EUIDACCESS])
178  HAVE_EXECVPE=1;                    AC_SUBST([HAVE_EXECVPE])
179  HAVE_FACCESSAT=1;                  AC_SUBST([HAVE_FACCESSAT])
180  HAVE_FCHDIR=1;                     AC_SUBST([HAVE_FCHDIR])
181  HAVE_FCHOWNAT=1;                   AC_SUBST([HAVE_FCHOWNAT])
182  HAVE_FDATASYNC=1;                  AC_SUBST([HAVE_FDATASYNC])
183  HAVE_FSYNC=1;                      AC_SUBST([HAVE_FSYNC])
184  HAVE_FTRUNCATE=1;                  AC_SUBST([HAVE_FTRUNCATE])
185  HAVE_GETDTABLESIZE=1;              AC_SUBST([HAVE_GETDTABLESIZE])
186  HAVE_GETENTROPY=1;                 AC_SUBST([HAVE_GETENTROPY])
187  HAVE_GETGROUPS=1;                  AC_SUBST([HAVE_GETGROUPS])
188  HAVE_GETHOSTNAME=1;                AC_SUBST([HAVE_GETHOSTNAME])
189  HAVE_GETLOGIN=1;                   AC_SUBST([HAVE_GETLOGIN])
190  HAVE_GETPAGESIZE=1;                AC_SUBST([HAVE_GETPAGESIZE])
191  HAVE_GETPASS=1;                    AC_SUBST([HAVE_GETPASS])
192  HAVE_GROUP_MEMBER=1;               AC_SUBST([HAVE_GROUP_MEMBER])
193  HAVE_LCHOWN=1;                     AC_SUBST([HAVE_LCHOWN])
194  HAVE_LINK=1;                       AC_SUBST([HAVE_LINK])
195  HAVE_LINKAT=1;                     AC_SUBST([HAVE_LINKAT])
196  HAVE_PIPE=1;                       AC_SUBST([HAVE_PIPE])
197  HAVE_PIPE2=1;                      AC_SUBST([HAVE_PIPE2])
198  HAVE_PREAD=1;                      AC_SUBST([HAVE_PREAD])
199  HAVE_PWRITE=1;                     AC_SUBST([HAVE_PWRITE])
200  HAVE_READLINK=1;                   AC_SUBST([HAVE_READLINK])
201  HAVE_READLINKAT=1;                 AC_SUBST([HAVE_READLINKAT])
202  HAVE_SETHOSTNAME=1;                AC_SUBST([HAVE_SETHOSTNAME])
203  HAVE_SLEEP=1;                      AC_SUBST([HAVE_SLEEP])
204  HAVE_SYMLINK=1;                    AC_SUBST([HAVE_SYMLINK])
205  HAVE_SYMLINKAT=1;                  AC_SUBST([HAVE_SYMLINKAT])
206  HAVE_UNLINKAT=1;                   AC_SUBST([HAVE_UNLINKAT])
207  HAVE_USLEEP=1;                     AC_SUBST([HAVE_USLEEP])
208  HAVE_DECL_ENVIRON=1;               AC_SUBST([HAVE_DECL_ENVIRON])
209  HAVE_DECL_EXECVPE=1;               AC_SUBST([HAVE_DECL_EXECVPE])
210  HAVE_DECL_FCHDIR=1;                AC_SUBST([HAVE_DECL_FCHDIR])
211  HAVE_DECL_FDATASYNC=1;             AC_SUBST([HAVE_DECL_FDATASYNC])
212  HAVE_DECL_GETDOMAINNAME=1;         AC_SUBST([HAVE_DECL_GETDOMAINNAME])
213  HAVE_DECL_GETLOGIN=1;              AC_SUBST([HAVE_DECL_GETLOGIN])
214  HAVE_DECL_GETLOGIN_R=1;            AC_SUBST([HAVE_DECL_GETLOGIN_R])
215  HAVE_DECL_GETPAGESIZE=1;           AC_SUBST([HAVE_DECL_GETPAGESIZE])
216  HAVE_DECL_GETUSERSHELL=1;          AC_SUBST([HAVE_DECL_GETUSERSHELL])
217  HAVE_DECL_SETHOSTNAME=1;           AC_SUBST([HAVE_DECL_SETHOSTNAME])
218  HAVE_DECL_TRUNCATE=1;              AC_SUBST([HAVE_DECL_TRUNCATE])
219  HAVE_DECL_TTYNAME_R=1;             AC_SUBST([HAVE_DECL_TTYNAME_R])
220  HAVE_OS_H=0;                       AC_SUBST([HAVE_OS_H])
221  HAVE_SYS_PARAM_H=0;                AC_SUBST([HAVE_SYS_PARAM_H])
222  REPLACE_ACCESS=0;                  AC_SUBST([REPLACE_ACCESS])
223  REPLACE_CHOWN=0;                   AC_SUBST([REPLACE_CHOWN])
224  REPLACE_CLOSE=0;                   AC_SUBST([REPLACE_CLOSE])
225  REPLACE_COPY_FILE_RANGE=0;         AC_SUBST([REPLACE_COPY_FILE_RANGE])
226  REPLACE_DUP=0;                     AC_SUBST([REPLACE_DUP])
227  REPLACE_DUP2=0;                    AC_SUBST([REPLACE_DUP2])
228  REPLACE_EXECL=0;                   AC_SUBST([REPLACE_EXECL])
229  REPLACE_EXECLE=0;                  AC_SUBST([REPLACE_EXECLE])
230  REPLACE_EXECLP=0;                  AC_SUBST([REPLACE_EXECLP])
231  REPLACE_EXECV=0;                   AC_SUBST([REPLACE_EXECV])
232  REPLACE_EXECVE=0;                  AC_SUBST([REPLACE_EXECVE])
233  REPLACE_EXECVP=0;                  AC_SUBST([REPLACE_EXECVP])
234  REPLACE_EXECVPE=0;                 AC_SUBST([REPLACE_EXECVPE])
235  REPLACE_FACCESSAT=0;               AC_SUBST([REPLACE_FACCESSAT])
236  REPLACE_FCHOWNAT=0;                AC_SUBST([REPLACE_FCHOWNAT])
237  REPLACE_FTRUNCATE=0;               AC_SUBST([REPLACE_FTRUNCATE])
238  REPLACE_GETCWD=0;                  AC_SUBST([REPLACE_GETCWD])
239  REPLACE_GETDOMAINNAME=0;           AC_SUBST([REPLACE_GETDOMAINNAME])
240  REPLACE_GETDTABLESIZE=0;           AC_SUBST([REPLACE_GETDTABLESIZE])
241  REPLACE_GETLOGIN_R=0;              AC_SUBST([REPLACE_GETLOGIN_R])
242  REPLACE_GETGROUPS=0;               AC_SUBST([REPLACE_GETGROUPS])
243  REPLACE_GETPAGESIZE=0;             AC_SUBST([REPLACE_GETPAGESIZE])
244  REPLACE_GETPASS=0;                 AC_SUBST([REPLACE_GETPASS])
245  REPLACE_GETPASS_FOR_GETPASS_GNU=0; AC_SUBST([REPLACE_GETPASS_FOR_GETPASS_GNU])
246  REPLACE_ISATTY=0;                  AC_SUBST([REPLACE_ISATTY])
247  REPLACE_LCHOWN=0;                  AC_SUBST([REPLACE_LCHOWN])
248  REPLACE_LINK=0;                    AC_SUBST([REPLACE_LINK])
249  REPLACE_LINKAT=0;                  AC_SUBST([REPLACE_LINKAT])
250  REPLACE_LSEEK=0;                   AC_SUBST([REPLACE_LSEEK])
251  REPLACE_PREAD=0;                   AC_SUBST([REPLACE_PREAD])
252  REPLACE_PWRITE=0;                  AC_SUBST([REPLACE_PWRITE])
253  REPLACE_READ=0;                    AC_SUBST([REPLACE_READ])
254  REPLACE_READLINK=0;                AC_SUBST([REPLACE_READLINK])
255  REPLACE_READLINKAT=0;              AC_SUBST([REPLACE_READLINKAT])
256  REPLACE_RMDIR=0;                   AC_SUBST([REPLACE_RMDIR])
257  REPLACE_SLEEP=0;                   AC_SUBST([REPLACE_SLEEP])
258  REPLACE_SYMLINK=0;                 AC_SUBST([REPLACE_SYMLINK])
259  REPLACE_SYMLINKAT=0;               AC_SUBST([REPLACE_SYMLINKAT])
260  REPLACE_TRUNCATE=0;                AC_SUBST([REPLACE_TRUNCATE])
261  REPLACE_TTYNAME_R=0;               AC_SUBST([REPLACE_TTYNAME_R])
262  REPLACE_UNLINK=0;                  AC_SUBST([REPLACE_UNLINK])
263  REPLACE_UNLINKAT=0;                AC_SUBST([REPLACE_UNLINKAT])
264  REPLACE_USLEEP=0;                  AC_SUBST([REPLACE_USLEEP])
265  REPLACE_WRITE=0;                   AC_SUBST([REPLACE_WRITE])
266  UNISTD_H_HAVE_SYS_RANDOM_H=0;      AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H])
267  UNISTD_H_HAVE_WINSOCK2_H=0;        AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
268  UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
269                           AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS])
270])
271