*printf-posix-tests: Strengthen tests.
[gnulib.git] / m4 / unistd_h.m4
blob04fa79c9ca607712b181b7ea2f5fb50feabeded4
1 # unistd_h.m4
2 # serial 96
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
18     HAVE_UNISTD_H=1
19   else
20     HAVE_UNISTD_H=0
21   fi
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([[
33 #if HAVE_UNISTD_H
34 # include <unistd.h>
35 #endif
36 /* Some systems declare various items in the wrong headers.  */
37 #if !(defined __GLIBC__ && !defined __UCLIBC__)
38 # include <fcntl.h>
39 # include <stdio.h>
40 # include <stdlib.h>
41 # if defined _WIN32 && ! defined __CYGWIN__
42 #  include <io.h>
43 # endif
44 #endif
45     ]], [access chdir chown copy_file_range dup dup2 dup3 environ euidaccess
46     execl execle execlp execv execve execvp execvpe
47     faccessat fchdir
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
59     HAVE_DECL_EXECVPE=0
60   fi
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])
167   ])
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])