* lisp/emacs-lisp/nadvice.el (add-function): Fix debug spec.
[emacs.git] / m4 / gnulib-comp.m4
blob349c0dce4e2afc9a08908f9b7fb415a482af55cd
1 # DO NOT EDIT! GENERATED AUTOMATICALLY!
2 # Copyright (C) 2002-2015 Free Software Foundation, Inc.
4 # This file is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 3 of the License, or
7 # (at your option) any later version.
9 # This file is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this file.  If not, see <http://www.gnu.org/licenses/>.
17 # As a special exception to the GNU General Public License,
18 # this file may be distributed as part of a program that
19 # contains a configuration script generated by Autoconf, under
20 # the same distribution terms as the rest of that program.
22 # Generated by gnulib-tool.
24 # This file represents the compiled summary of the specification in
25 # gnulib-cache.m4. It lists the computed macro invocations that need
26 # to be invoked from configure.ac.
27 # In projects that use version control, this file can be treated like
28 # other built files.
31 # This macro should be invoked from ./configure.ac, in the section
32 # "Checks for programs", right after AC_PROG_CC, and certainly before
33 # any checks for libraries, header files, types and library functions.
34 AC_DEFUN([gl_EARLY],
36   m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
37   m4_pattern_allow([^gl_ES$])dnl a valid locale name
38   m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
39   m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
41   # Pre-early section.
42   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
43   AC_REQUIRE([gl_PROG_AR_RANLIB])
45   # Code from module absolute-header:
46   # Code from module acl-permissions:
47   # Code from module alloca-opt:
48   # Code from module allocator:
49   # Code from module at-internal:
50   # Code from module binary-io:
51   # Code from module byteswap:
52   # Code from module c-ctype:
53   # Code from module c-strcase:
54   # Code from module careadlinkat:
55   # Code from module clock-time:
56   # Code from module close-stream:
57   # Code from module count-one-bits:
58   # Code from module count-trailing-zeros:
59   # Code from module crypto/md5:
60   # Code from module crypto/sha1:
61   # Code from module crypto/sha256:
62   # Code from module crypto/sha512:
63   # Code from module dirent:
64   # Code from module dirfd:
65   # Code from module dosname:
66   # Code from module dtoastr:
67   # Code from module dtotimespec:
68   # Code from module dup2:
69   # Code from module environ:
70   # Code from module errno:
71   # Code from module euidaccess:
72   # Code from module execinfo:
73   # Code from module extensions:
74   # Code from module extern-inline:
75   # Code from module faccessat:
76   # Code from module fcntl:
77   # Code from module fcntl-h:
78   # Code from module fdatasync:
79   # Code from module fdopendir:
80   # Code from module filemode:
81   # Code from module fpending:
82   # Code from module fstatat:
83   # Code from module fsync:
84   # Code from module getdtablesize:
85   # Code from module getgroups:
86   # Code from module getloadavg:
87   # Code from module getopt-gnu:
88   # Code from module getopt-posix:
89   # Code from module gettext-h:
90   # Code from module gettime:
91   # Code from module gettimeofday:
92   # Code from module gitlog-to-changelog:
93   # Code from module group-member:
94   # Code from module include_next:
95   # Code from module intprops:
96   # Code from module inttypes-incomplete:
97   # Code from module largefile:
98   AC_REQUIRE([AC_SYS_LARGEFILE])
99   # Code from module lstat:
100   # Code from module manywarnings:
101   # Code from module memrchr:
102   # Code from module mkostemp:
103   # Code from module mktime:
104   # Code from module mktime-internal:
105   # Code from module multiarch:
106   # Code from module nocrash:
107   # Code from module openat-h:
108   # Code from module pathmax:
109   # Code from module pipe2:
110   # Code from module pselect:
111   # Code from module pthread_sigmask:
112   # Code from module putenv:
113   # Code from module qcopy-acl:
114   # Code from module readlink:
115   # Code from module readlinkat:
116   # Code from module root-uid:
117   # Code from module secure_getenv:
118   # Code from module sig2str:
119   # Code from module signal-h:
120   # Code from module snippet/_Noreturn:
121   # Code from module snippet/arg-nonnull:
122   # Code from module snippet/c++defs:
123   # Code from module snippet/warn-on-use:
124   # Code from module socklen:
125   # Code from module ssize_t:
126   # Code from module stat:
127   # Code from module stat-time:
128   # Code from module stdalign:
129   # Code from module stddef:
130   # Code from module stdint:
131   # Code from module stdio:
132   # Code from module stdlib:
133   # Code from module stpcpy:
134   # Code from module strftime:
135   # Code from module string:
136   # Code from module strtoimax:
137   # Code from module strtoll:
138   # Code from module strtoull:
139   # Code from module strtoumax:
140   # Code from module symlink:
141   # Code from module sys_select:
142   # Code from module sys_stat:
143   # Code from module sys_time:
144   # Code from module sys_types:
145   # Code from module tempname:
146   # Code from module time:
147   # Code from module time_r:
148   # Code from module time_rz:
149   # Code from module timegm:
150   # Code from module timer-time:
151   # Code from module timespec:
152   # Code from module timespec-add:
153   # Code from module timespec-sub:
154   # Code from module u64:
155   # Code from module unistd:
156   # Code from module update-copyright:
157   # Code from module utimens:
158   # Code from module vararrays:
159   # Code from module verify:
160   # Code from module vla:
161   # Code from module warnings:
162   # Code from module xalloc-oversized:
165 # This macro should be invoked from ./configure.ac, in the section
166 # "Check for header files, types and library functions".
167 AC_DEFUN([gl_INIT],
169   AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
170   gl_cond_libtool=false
171   gl_libdeps=
172   gl_ltlibdeps=
173   gl_m4_base='m4'
174   m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
175   m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
176   m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
177   m4_pushdef([gl_LIBSOURCES_LIST], [])
178   m4_pushdef([gl_LIBSOURCES_DIR], [])
179   gl_COMMON
180   gl_source_base='lib'
181   gl_FUNC_ACL
182   gl_FUNC_ALLOCA
183   gl_BYTESWAP
184   AC_CHECK_FUNCS_ONCE([readlinkat])
185   gl_CLOCK_TIME
186   gl_CLOSE_STREAM
187   gl_MODULE_INDICATOR([close-stream])
188   gl_COUNT_ONE_BITS
189   gl_COUNT_TRAILING_ZEROS
190   gl_MD5
191   gl_SHA1
192   gl_SHA256
193   gl_SHA512
194   gl_DIRENT_H
195   AC_REQUIRE([gl_C99_STRTOLD])
196   gl_FUNC_DUP2
197   if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then
198     AC_LIBOBJ([dup2])
199     gl_PREREQ_DUP2
200   fi
201   gl_UNISTD_MODULE_INDICATOR([dup2])
202   gl_ENVIRON
203   gl_UNISTD_MODULE_INDICATOR([environ])
204   gl_HEADER_ERRNO_H
205   gl_EXECINFO_H
206   AC_REQUIRE([gl_EXTERN_INLINE])
207   gl_FUNC_FACCESSAT
208   if test $HAVE_FACCESSAT = 0; then
209     AC_LIBOBJ([faccessat])
210     gl_PREREQ_FACCESSAT
211   fi
212   gl_MODULE_INDICATOR([faccessat])
213   gl_UNISTD_MODULE_INDICATOR([faccessat])
214   gl_FUNC_FCNTL
215   if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then
216     AC_LIBOBJ([fcntl])
217   fi
218   gl_FCNTL_MODULE_INDICATOR([fcntl])
219   gl_FCNTL_H
220   gl_FUNC_FDATASYNC
221   if test $HAVE_FDATASYNC = 0; then
222     AC_LIBOBJ([fdatasync])
223   fi
224   gl_UNISTD_MODULE_INDICATOR([fdatasync])
225   gl_FUNC_FDOPENDIR
226   if test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1; then
227     AC_LIBOBJ([fdopendir])
228   fi
229   gl_DIRENT_MODULE_INDICATOR([fdopendir])
230   gl_MODULE_INDICATOR([fdopendir])
231   gl_FILEMODE
232   gl_FUNC_FPENDING
233   if test $gl_cv_func___fpending = no; then
234     AC_LIBOBJ([fpending])
235     gl_PREREQ_FPENDING
236   fi
237   gl_FUNC_FSTATAT
238   if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then
239     AC_LIBOBJ([fstatat])
240   fi
241   gl_SYS_STAT_MODULE_INDICATOR([fstatat])
242   gl_FUNC_FSYNC
243   if test $HAVE_FSYNC = 0; then
244     AC_LIBOBJ([fsync])
245     gl_PREREQ_FSYNC
246   fi
247   gl_UNISTD_MODULE_INDICATOR([fsync])
248   gl_GETLOADAVG
249   if test $HAVE_GETLOADAVG = 0; then
250     AC_LIBOBJ([getloadavg])
251     gl_PREREQ_GETLOADAVG
252   fi
253   gl_STDLIB_MODULE_INDICATOR([getloadavg])
254   gl_FUNC_GETOPT_GNU
255   if test $REPLACE_GETOPT = 1; then
256     AC_LIBOBJ([getopt])
257     AC_LIBOBJ([getopt1])
258     gl_PREREQ_GETOPT
259     dnl Arrange for unistd.h to include getopt.h.
260     GNULIB_GL_UNISTD_H_GETOPT=1
261   fi
262   AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT])
263   gl_MODULE_INDICATOR_FOR_TESTS([getopt-gnu])
264   gl_FUNC_GETOPT_POSIX
265   if test $REPLACE_GETOPT = 1; then
266     AC_LIBOBJ([getopt])
267     AC_LIBOBJ([getopt1])
268     gl_PREREQ_GETOPT
269     dnl Arrange for unistd.h to include getopt.h.
270     GNULIB_GL_UNISTD_H_GETOPT=1
271   fi
272   AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT])
273   gl_GETTIME
274   gl_FUNC_GETTIMEOFDAY
275   if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then
276     AC_LIBOBJ([gettimeofday])
277     gl_PREREQ_GETTIMEOFDAY
278   fi
279   gl_SYS_TIME_MODULE_INDICATOR([gettimeofday])
280   gl_INTTYPES_INCOMPLETE
281   AC_REQUIRE([gl_LARGEFILE])
282   gl_FUNC_LSTAT
283   if test $REPLACE_LSTAT = 1; then
284     AC_LIBOBJ([lstat])
285     gl_PREREQ_LSTAT
286   fi
287   gl_SYS_STAT_MODULE_INDICATOR([lstat])
288   gl_FUNC_MEMRCHR
289   if test $ac_cv_func_memrchr = no; then
290     AC_LIBOBJ([memrchr])
291     gl_PREREQ_MEMRCHR
292   fi
293   gl_STRING_MODULE_INDICATOR([memrchr])
294   gl_FUNC_MKOSTEMP
295   if test $HAVE_MKOSTEMP = 0; then
296     AC_LIBOBJ([mkostemp])
297     gl_PREREQ_MKOSTEMP
298   fi
299   gl_MODULE_INDICATOR([mkostemp])
300   gl_STDLIB_MODULE_INDICATOR([mkostemp])
301   gl_FUNC_MKTIME
302   if test $REPLACE_MKTIME = 1; then
303     AC_LIBOBJ([mktime])
304     gl_PREREQ_MKTIME
305   fi
306   gl_TIME_MODULE_INDICATOR([mktime])
307   gl_MULTIARCH
308   gl_FUNC_PIPE2
309   gl_UNISTD_MODULE_INDICATOR([pipe2])
310   gl_FUNC_PSELECT
311   if test $HAVE_PSELECT = 0 || test $REPLACE_PSELECT = 1; then
312     AC_LIBOBJ([pselect])
313   fi
314   gl_SYS_SELECT_MODULE_INDICATOR([pselect])
315   gl_FUNC_PTHREAD_SIGMASK
316   if test $HAVE_PTHREAD_SIGMASK = 0 || test $REPLACE_PTHREAD_SIGMASK = 1; then
317     AC_LIBOBJ([pthread_sigmask])
318     gl_PREREQ_PTHREAD_SIGMASK
319   fi
320   gl_SIGNAL_MODULE_INDICATOR([pthread_sigmask])
321   gl_FUNC_PUTENV
322   if test $REPLACE_PUTENV = 1; then
323     AC_LIBOBJ([putenv])
324     gl_PREREQ_PUTENV
325   fi
326   gl_STDLIB_MODULE_INDICATOR([putenv])
327   gl_FUNC_READLINK
328   if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
329     AC_LIBOBJ([readlink])
330     gl_PREREQ_READLINK
331   fi
332   gl_UNISTD_MODULE_INDICATOR([readlink])
333   gl_FUNC_READLINKAT
334   if test $HAVE_READLINKAT = 0 || test $REPLACE_READLINKAT = 1; then
335     AC_LIBOBJ([readlinkat])
336   fi
337   gl_UNISTD_MODULE_INDICATOR([readlinkat])
338   gl_FUNC_SIG2STR
339   if test $ac_cv_func_sig2str = no; then
340     AC_LIBOBJ([sig2str])
341     gl_PREREQ_SIG2STR
342   fi
343   gl_SIGNAL_H
344   gl_TYPE_SOCKLEN_T
345   gt_TYPE_SSIZE_T
346   gl_STAT_TIME
347   gl_STAT_BIRTHTIME
348   gl_STDALIGN_H
349   gl_STDDEF_H
350   gl_STDINT_H
351   gl_STDIO_H
352   gl_STDLIB_H
353   gl_FUNC_STPCPY
354   if test $HAVE_STPCPY = 0; then
355     AC_LIBOBJ([stpcpy])
356     gl_PREREQ_STPCPY
357   fi
358   gl_STRING_MODULE_INDICATOR([stpcpy])
359   gl_FUNC_GNU_STRFTIME
360   gl_HEADER_STRING_H
361   gl_FUNC_STRTOIMAX
362   if test $HAVE_DECL_STRTOIMAX = 0 || test $REPLACE_STRTOIMAX = 1; then
363     AC_LIBOBJ([strtoimax])
364     gl_PREREQ_STRTOIMAX
365   fi
366   gl_INTTYPES_MODULE_INDICATOR([strtoimax])
367   gl_FUNC_STRTOUMAX
368   if test $HAVE_DECL_STRTOUMAX = 0 || test $REPLACE_STRTOUMAX = 1; then
369     AC_LIBOBJ([strtoumax])
370     gl_PREREQ_STRTOUMAX
371   fi
372   gl_INTTYPES_MODULE_INDICATOR([strtoumax])
373   gl_FUNC_SYMLINK
374   if test $HAVE_SYMLINK = 0 || test $REPLACE_SYMLINK = 1; then
375     AC_LIBOBJ([symlink])
376   fi
377   gl_UNISTD_MODULE_INDICATOR([symlink])
378   gl_HEADER_SYS_SELECT
379   AC_PROG_MKDIR_P
380   gl_HEADER_SYS_STAT_H
381   AC_PROG_MKDIR_P
382   gl_HEADER_SYS_TIME_H
383   AC_PROG_MKDIR_P
384   gl_SYS_TYPES_H
385   AC_PROG_MKDIR_P
386   gl_HEADER_TIME_H
387   gl_TIME_R
388   if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then
389     AC_LIBOBJ([time_r])
390     gl_PREREQ_TIME_R
391   fi
392   gl_TIME_MODULE_INDICATOR([time_r])
393   gl_TIME_RZ
394   if test "$HAVE_TIMEZONE_T" = 0; then
395     AC_LIBOBJ([time_rz])
396   fi
397   gl_TIME_MODULE_INDICATOR([time_rz])
398   gl_FUNC_TIMEGM
399   if test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1; then
400     AC_LIBOBJ([timegm])
401     gl_PREREQ_TIMEGM
402   fi
403   gl_TIME_MODULE_INDICATOR([timegm])
404   gl_TIMER_TIME
405   gl_TIMESPEC
406   gl_UNISTD_H
407   gl_UTIMENS
408   AC_C_VARARRAYS
409   gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b=false
410   gl_gnulib_enabled_dirfd=false
411   gl_gnulib_enabled_dosname=false
412   gl_gnulib_enabled_euidaccess=false
413   gl_gnulib_enabled_getdtablesize=false
414   gl_gnulib_enabled_getgroups=false
415   gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=false
416   gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1=false
417   gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31=false
418   gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7=false
419   gl_gnulib_enabled_pathmax=false
420   gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=false
421   gl_gnulib_enabled_secure_getenv=false
422   gl_gnulib_enabled_stat=false
423   gl_gnulib_enabled_strtoll=false
424   gl_gnulib_enabled_strtoull=false
425   gl_gnulib_enabled_tempname=false
426   gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec=false
427   func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b ()
428   {
429     if ! $gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b; then
430       AC_LIBOBJ([openat-proc])
431       gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b=true
432     fi
433   }
434   func_gl_gnulib_m4code_dirfd ()
435   {
436     if ! $gl_gnulib_enabled_dirfd; then
437       gl_FUNC_DIRFD
438       if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no; then
439         AC_LIBOBJ([dirfd])
440         gl_PREREQ_DIRFD
441       fi
442       gl_DIRENT_MODULE_INDICATOR([dirfd])
443       gl_gnulib_enabled_dirfd=true
444     fi
445   }
446   func_gl_gnulib_m4code_dosname ()
447   {
448     if ! $gl_gnulib_enabled_dosname; then
449       gl_gnulib_enabled_dosname=true
450     fi
451   }
452   func_gl_gnulib_m4code_euidaccess ()
453   {
454     if ! $gl_gnulib_enabled_euidaccess; then
455       gl_FUNC_EUIDACCESS
456       if test $HAVE_EUIDACCESS = 0; then
457         AC_LIBOBJ([euidaccess])
458         gl_PREREQ_EUIDACCESS
459       fi
460       gl_UNISTD_MODULE_INDICATOR([euidaccess])
461       gl_gnulib_enabled_euidaccess=true
462       if test $HAVE_EUIDACCESS = 0; then
463         func_gl_gnulib_m4code_a9786850e999ae65a836a6041e8e5ed1
464       fi
465       func_gl_gnulib_m4code_6099e9737f757db36c47fa9d9f02e88c
466       if test $HAVE_EUIDACCESS = 0; then
467         func_gl_gnulib_m4code_stat
468       fi
469     fi
470   }
471   func_gl_gnulib_m4code_getdtablesize ()
472   {
473     if ! $gl_gnulib_enabled_getdtablesize; then
474       gl_FUNC_GETDTABLESIZE
475       if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then
476         AC_LIBOBJ([getdtablesize])
477         gl_PREREQ_GETDTABLESIZE
478       fi
479       gl_UNISTD_MODULE_INDICATOR([getdtablesize])
480       gl_gnulib_enabled_getdtablesize=true
481     fi
482   }
483   func_gl_gnulib_m4code_getgroups ()
484   {
485     if ! $gl_gnulib_enabled_getgroups; then
486       gl_FUNC_GETGROUPS
487       if test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1; then
488         AC_LIBOBJ([getgroups])
489       fi
490       gl_UNISTD_MODULE_INDICATOR([getgroups])
491       gl_gnulib_enabled_getgroups=true
492     fi
493   }
494   func_gl_gnulib_m4code_be453cec5eecf5731a274f2de7f2db36 ()
495   {
496     if ! $gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36; then
497       AC_SUBST([LIBINTL])
498       AC_SUBST([LTLIBINTL])
499       gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36=true
500     fi
501   }
502   func_gl_gnulib_m4code_a9786850e999ae65a836a6041e8e5ed1 ()
503   {
504     if ! $gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1; then
505       gl_FUNC_GROUP_MEMBER
506       if test $HAVE_GROUP_MEMBER = 0; then
507         AC_LIBOBJ([group-member])
508         gl_PREREQ_GROUP_MEMBER
509       fi
510       gl_UNISTD_MODULE_INDICATOR([group-member])
511       gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1=true
512       if test $HAVE_GROUP_MEMBER = 0; then
513         func_gl_gnulib_m4code_getgroups
514       fi
515       if test $HAVE_GROUP_MEMBER = 0; then
516         func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec
517       fi
518     fi
519   }
520   func_gl_gnulib_m4code_5264294aa0a5557541b53c8c741f7f31 ()
521   {
522     if ! $gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31; then
523       gl_FUNC_MKTIME_INTERNAL
524       if test $REPLACE_MKTIME = 1; then
525         AC_LIBOBJ([mktime])
526         gl_PREREQ_MKTIME
527       fi
528       gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31=true
529     fi
530   }
531   func_gl_gnulib_m4code_03e0aaad4cb89ca757653bd367a6ccb7 ()
532   {
533     if ! $gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7; then
534       gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7=true
535     fi
536   }
537   func_gl_gnulib_m4code_pathmax ()
538   {
539     if ! $gl_gnulib_enabled_pathmax; then
540       gl_PATHMAX
541       gl_gnulib_enabled_pathmax=true
542     fi
543   }
544   func_gl_gnulib_m4code_6099e9737f757db36c47fa9d9f02e88c ()
545   {
546     if ! $gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c; then
547       gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c=true
548     fi
549   }
550   func_gl_gnulib_m4code_secure_getenv ()
551   {
552     if ! $gl_gnulib_enabled_secure_getenv; then
553       gl_FUNC_SECURE_GETENV
554       if test $HAVE_SECURE_GETENV = 0; then
555         AC_LIBOBJ([secure_getenv])
556         gl_PREREQ_SECURE_GETENV
557       fi
558       gl_STDLIB_MODULE_INDICATOR([secure_getenv])
559       gl_gnulib_enabled_secure_getenv=true
560     fi
561   }
562   func_gl_gnulib_m4code_stat ()
563   {
564     if ! $gl_gnulib_enabled_stat; then
565       gl_FUNC_STAT
566       if test $REPLACE_STAT = 1; then
567         AC_LIBOBJ([stat])
568         gl_PREREQ_STAT
569       fi
570       gl_SYS_STAT_MODULE_INDICATOR([stat])
571       gl_gnulib_enabled_stat=true
572       if test $REPLACE_STAT = 1; then
573         func_gl_gnulib_m4code_dosname
574       fi
575       if test $REPLACE_STAT = 1; then
576         func_gl_gnulib_m4code_pathmax
577       fi
578     fi
579   }
580   func_gl_gnulib_m4code_strtoll ()
581   {
582     if ! $gl_gnulib_enabled_strtoll; then
583       gl_FUNC_STRTOLL
584       if test $HAVE_STRTOLL = 0; then
585         AC_LIBOBJ([strtoll])
586         gl_PREREQ_STRTOLL
587       fi
588       gl_STDLIB_MODULE_INDICATOR([strtoll])
589       gl_gnulib_enabled_strtoll=true
590     fi
591   }
592   func_gl_gnulib_m4code_strtoull ()
593   {
594     if ! $gl_gnulib_enabled_strtoull; then
595       gl_FUNC_STRTOULL
596       if test $HAVE_STRTOULL = 0; then
597         AC_LIBOBJ([strtoull])
598         gl_PREREQ_STRTOULL
599       fi
600       gl_STDLIB_MODULE_INDICATOR([strtoull])
601       gl_gnulib_enabled_strtoull=true
602     fi
603   }
604   func_gl_gnulib_m4code_tempname ()
605   {
606     if ! $gl_gnulib_enabled_tempname; then
607       gl_FUNC_GEN_TEMPNAME
608       gl_gnulib_enabled_tempname=true
609       func_gl_gnulib_m4code_secure_getenv
610     fi
611   }
612   func_gl_gnulib_m4code_682e609604ccaac6be382e4ee3a4eaec ()
613   {
614     if ! $gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec; then
615       gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec=true
616     fi
617   }
618   if test $HAVE_FACCESSAT = 0; then
619     func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b
620   fi
621   if test $HAVE_FACCESSAT = 0; then
622     func_gl_gnulib_m4code_dosname
623   fi
624   if test $HAVE_FACCESSAT = 0; then
625     func_gl_gnulib_m4code_euidaccess
626   fi
627   if test $HAVE_FACCESSAT = 0; then
628     func_gl_gnulib_m4code_03e0aaad4cb89ca757653bd367a6ccb7
629   fi
630   if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then
631     func_gl_gnulib_m4code_getdtablesize
632   fi
633   if test $HAVE_FDOPENDIR = 0; then
634     func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b
635   fi
636   if test $HAVE_FDOPENDIR = 0; then
637     func_gl_gnulib_m4code_dirfd
638   fi
639   if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then
640     func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b
641   fi
642   if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then
643     func_gl_gnulib_m4code_dosname
644   fi
645   if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then
646     func_gl_gnulib_m4code_03e0aaad4cb89ca757653bd367a6ccb7
647   fi
648   if test $REPLACE_GETOPT = 1; then
649     func_gl_gnulib_m4code_be453cec5eecf5731a274f2de7f2db36
650   fi
651   if test $REPLACE_LSTAT = 1; then
652     func_gl_gnulib_m4code_dosname
653   fi
654   if test $REPLACE_LSTAT = 1; then
655     func_gl_gnulib_m4code_stat
656   fi
657   if test $HAVE_MKOSTEMP = 0; then
658     func_gl_gnulib_m4code_tempname
659   fi
660   if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
661     func_gl_gnulib_m4code_stat
662   fi
663   if test $HAVE_READLINKAT = 0; then
664     func_gl_gnulib_m4code_260941c0e5dc67ec9e87d1fb321c300b
665   fi
666   if test $HAVE_READLINKAT = 0; then
667     func_gl_gnulib_m4code_dosname
668   fi
669   if test $HAVE_READLINKAT = 0; then
670     func_gl_gnulib_m4code_03e0aaad4cb89ca757653bd367a6ccb7
671   fi
672   if { test $HAVE_DECL_STRTOIMAX = 0 || test $REPLACE_STRTOIMAX = 1; } && test $ac_cv_type_long_long_int = yes; then
673     func_gl_gnulib_m4code_strtoll
674   fi
675   if { test $HAVE_DECL_STRTOUMAX = 0 || test $REPLACE_STRTOUMAX = 1; } && test $ac_cv_type_unsigned_long_long_int = yes; then
676     func_gl_gnulib_m4code_strtoull
677   fi
678   if test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1; then
679     func_gl_gnulib_m4code_5264294aa0a5557541b53c8c741f7f31
680   fi
681   m4_pattern_allow([^gl_GNULIB_ENABLED_])
682   AM_CONDITIONAL([gl_GNULIB_ENABLED_260941c0e5dc67ec9e87d1fb321c300b], [$gl_gnulib_enabled_260941c0e5dc67ec9e87d1fb321c300b])
683   AM_CONDITIONAL([gl_GNULIB_ENABLED_dirfd], [$gl_gnulib_enabled_dirfd])
684   AM_CONDITIONAL([gl_GNULIB_ENABLED_dosname], [$gl_gnulib_enabled_dosname])
685   AM_CONDITIONAL([gl_GNULIB_ENABLED_euidaccess], [$gl_gnulib_enabled_euidaccess])
686   AM_CONDITIONAL([gl_GNULIB_ENABLED_getdtablesize], [$gl_gnulib_enabled_getdtablesize])
687   AM_CONDITIONAL([gl_GNULIB_ENABLED_getgroups], [$gl_gnulib_enabled_getgroups])
688   AM_CONDITIONAL([gl_GNULIB_ENABLED_be453cec5eecf5731a274f2de7f2db36], [$gl_gnulib_enabled_be453cec5eecf5731a274f2de7f2db36])
689   AM_CONDITIONAL([gl_GNULIB_ENABLED_a9786850e999ae65a836a6041e8e5ed1], [$gl_gnulib_enabled_a9786850e999ae65a836a6041e8e5ed1])
690   AM_CONDITIONAL([gl_GNULIB_ENABLED_5264294aa0a5557541b53c8c741f7f31], [$gl_gnulib_enabled_5264294aa0a5557541b53c8c741f7f31])
691   AM_CONDITIONAL([gl_GNULIB_ENABLED_03e0aaad4cb89ca757653bd367a6ccb7], [$gl_gnulib_enabled_03e0aaad4cb89ca757653bd367a6ccb7])
692   AM_CONDITIONAL([gl_GNULIB_ENABLED_pathmax], [$gl_gnulib_enabled_pathmax])
693   AM_CONDITIONAL([gl_GNULIB_ENABLED_6099e9737f757db36c47fa9d9f02e88c], [$gl_gnulib_enabled_6099e9737f757db36c47fa9d9f02e88c])
694   AM_CONDITIONAL([gl_GNULIB_ENABLED_secure_getenv], [$gl_gnulib_enabled_secure_getenv])
695   AM_CONDITIONAL([gl_GNULIB_ENABLED_stat], [$gl_gnulib_enabled_stat])
696   AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoll], [$gl_gnulib_enabled_strtoll])
697   AM_CONDITIONAL([gl_GNULIB_ENABLED_strtoull], [$gl_gnulib_enabled_strtoull])
698   AM_CONDITIONAL([gl_GNULIB_ENABLED_tempname], [$gl_gnulib_enabled_tempname])
699   AM_CONDITIONAL([gl_GNULIB_ENABLED_682e609604ccaac6be382e4ee3a4eaec], [$gl_gnulib_enabled_682e609604ccaac6be382e4ee3a4eaec])
700   # End of code from modules
701   m4_ifval(gl_LIBSOURCES_LIST, [
702     m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
703       for gl_file in ]gl_LIBSOURCES_LIST[ ; do
704         if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
705           echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
706           exit 1
707         fi
708       done])dnl
709       m4_if(m4_sysval, [0], [],
710         [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
711   ])
712   m4_popdef([gl_LIBSOURCES_DIR])
713   m4_popdef([gl_LIBSOURCES_LIST])
714   m4_popdef([AC_LIBSOURCES])
715   m4_popdef([AC_REPLACE_FUNCS])
716   m4_popdef([AC_LIBOBJ])
717   AC_CONFIG_COMMANDS_PRE([
718     gl_libobjs=
719     gl_ltlibobjs=
720     if test -n "$gl_LIBOBJS"; then
721       # Remove the extension.
722       sed_drop_objext='s/\.o$//;s/\.obj$//'
723       for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
724         gl_libobjs="$gl_libobjs $i.$ac_objext"
725         gl_ltlibobjs="$gl_ltlibobjs $i.lo"
726       done
727     fi
728     AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
729     AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
730   ])
731   gltests_libdeps=
732   gltests_ltlibdeps=
733   m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
734   m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
735   m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
736   m4_pushdef([gltests_LIBSOURCES_LIST], [])
737   m4_pushdef([gltests_LIBSOURCES_DIR], [])
738   gl_COMMON
739   gl_source_base='tests'
740 changequote(,)dnl
741   gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
742 changequote([, ])dnl
743   AC_SUBST([gltests_WITNESS])
744   gl_module_indicator_condition=$gltests_WITNESS
745   m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
746   m4_pattern_allow([^gl_GNULIB_ENABLED_])
747   m4_popdef([gl_MODULE_INDICATOR_CONDITION])
748   m4_ifval(gltests_LIBSOURCES_LIST, [
749     m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
750       for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
751         if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
752           echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
753           exit 1
754         fi
755       done])dnl
756       m4_if(m4_sysval, [0], [],
757         [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
758   ])
759   m4_popdef([gltests_LIBSOURCES_DIR])
760   m4_popdef([gltests_LIBSOURCES_LIST])
761   m4_popdef([AC_LIBSOURCES])
762   m4_popdef([AC_REPLACE_FUNCS])
763   m4_popdef([AC_LIBOBJ])
764   AC_CONFIG_COMMANDS_PRE([
765     gltests_libobjs=
766     gltests_ltlibobjs=
767     if test -n "$gltests_LIBOBJS"; then
768       # Remove the extension.
769       sed_drop_objext='s/\.o$//;s/\.obj$//'
770       for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
771         gltests_libobjs="$gltests_libobjs $i.$ac_objext"
772         gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
773       done
774     fi
775     AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
776     AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
777   ])
778   LIBGNU_LIBDEPS="$gl_libdeps"
779   AC_SUBST([LIBGNU_LIBDEPS])
780   LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
781   AC_SUBST([LIBGNU_LTLIBDEPS])
784 # Like AC_LIBOBJ, except that the module name goes
785 # into gl_LIBOBJS instead of into LIBOBJS.
786 AC_DEFUN([gl_LIBOBJ], [
787   AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
788   gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
791 # Like AC_REPLACE_FUNCS, except that the module name goes
792 # into gl_LIBOBJS instead of into LIBOBJS.
793 AC_DEFUN([gl_REPLACE_FUNCS], [
794   m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
795   AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
798 # Like AC_LIBSOURCES, except the directory where the source file is
799 # expected is derived from the gnulib-tool parameterization,
800 # and alloca is special cased (for the alloca-opt module).
801 # We could also entirely rely on EXTRA_lib..._SOURCES.
802 AC_DEFUN([gl_LIBSOURCES], [
803   m4_foreach([_gl_NAME], [$1], [
804     m4_if(_gl_NAME, [alloca.c], [], [
805       m4_define([gl_LIBSOURCES_DIR], [lib])
806       m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
807     ])
808   ])
811 # Like AC_LIBOBJ, except that the module name goes
812 # into gltests_LIBOBJS instead of into LIBOBJS.
813 AC_DEFUN([gltests_LIBOBJ], [
814   AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
815   gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
818 # Like AC_REPLACE_FUNCS, except that the module name goes
819 # into gltests_LIBOBJS instead of into LIBOBJS.
820 AC_DEFUN([gltests_REPLACE_FUNCS], [
821   m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
822   AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
825 # Like AC_LIBSOURCES, except the directory where the source file is
826 # expected is derived from the gnulib-tool parameterization,
827 # and alloca is special cased (for the alloca-opt module).
828 # We could also entirely rely on EXTRA_lib..._SOURCES.
829 AC_DEFUN([gltests_LIBSOURCES], [
830   m4_foreach([_gl_NAME], [$1], [
831     m4_if(_gl_NAME, [alloca.c], [], [
832       m4_define([gltests_LIBSOURCES_DIR], [tests])
833       m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
834     ])
835   ])
838 # This macro records the list of files which have been installed by
839 # gnulib-tool and may be removed by future gnulib-tool invocations.
840 AC_DEFUN([gl_FILE_LIST], [
841   build-aux/gitlog-to-changelog
842   build-aux/snippet/_Noreturn.h
843   build-aux/snippet/arg-nonnull.h
844   build-aux/snippet/c++defs.h
845   build-aux/snippet/warn-on-use.h
846   build-aux/update-copyright
847   lib/acl-errno-valid.c
848   lib/acl-internal.c
849   lib/acl-internal.h
850   lib/acl.h
851   lib/acl_entries.c
852   lib/alloca.in.h
853   lib/allocator.c
854   lib/allocator.h
855   lib/at-func.c
856   lib/binary-io.c
857   lib/binary-io.h
858   lib/byteswap.in.h
859   lib/c-ctype.c
860   lib/c-ctype.h
861   lib/c-strcase.h
862   lib/c-strcasecmp.c
863   lib/c-strncasecmp.c
864   lib/careadlinkat.c
865   lib/careadlinkat.h
866   lib/close-stream.c
867   lib/close-stream.h
868   lib/count-one-bits.c
869   lib/count-one-bits.h
870   lib/count-trailing-zeros.c
871   lib/count-trailing-zeros.h
872   lib/dirent.in.h
873   lib/dirfd.c
874   lib/dosname.h
875   lib/dtoastr.c
876   lib/dtotimespec.c
877   lib/dup2.c
878   lib/errno.in.h
879   lib/euidaccess.c
880   lib/execinfo.c
881   lib/execinfo.in.h
882   lib/faccessat.c
883   lib/fcntl.c
884   lib/fcntl.in.h
885   lib/fdatasync.c
886   lib/fdopendir.c
887   lib/filemode.c
888   lib/filemode.h
889   lib/fpending.c
890   lib/fpending.h
891   lib/fstatat.c
892   lib/fsync.c
893   lib/ftoastr.c
894   lib/ftoastr.h
895   lib/get-permissions.c
896   lib/getdtablesize.c
897   lib/getgroups.c
898   lib/getloadavg.c
899   lib/getopt.c
900   lib/getopt.in.h
901   lib/getopt1.c
902   lib/getopt_int.h
903   lib/gettext.h
904   lib/gettime.c
905   lib/gettimeofday.c
906   lib/gl_openssl.h
907   lib/group-member.c
908   lib/intprops.h
909   lib/inttypes.in.h
910   lib/lstat.c
911   lib/md5.c
912   lib/md5.h
913   lib/memrchr.c
914   lib/mkostemp.c
915   lib/mktime-internal.h
916   lib/mktime.c
917   lib/openat-priv.h
918   lib/openat-proc.c
919   lib/openat.h
920   lib/pathmax.h
921   lib/pipe2.c
922   lib/pselect.c
923   lib/pthread_sigmask.c
924   lib/putenv.c
925   lib/qcopy-acl.c
926   lib/readlink.c
927   lib/readlinkat.c
928   lib/root-uid.h
929   lib/secure_getenv.c
930   lib/set-permissions.c
931   lib/sha1.c
932   lib/sha1.h
933   lib/sha256.c
934   lib/sha256.h
935   lib/sha512.c
936   lib/sha512.h
937   lib/sig2str.c
938   lib/sig2str.h
939   lib/signal.in.h
940   lib/stat-time.c
941   lib/stat-time.h
942   lib/stat.c
943   lib/stdalign.in.h
944   lib/stddef.in.h
945   lib/stdint.in.h
946   lib/stdio.in.h
947   lib/stdlib.in.h
948   lib/stpcpy.c
949   lib/strftime.c
950   lib/strftime.h
951   lib/string.in.h
952   lib/strtoimax.c
953   lib/strtol.c
954   lib/strtoll.c
955   lib/strtoul.c
956   lib/strtoull.c
957   lib/strtoumax.c
958   lib/symlink.c
959   lib/sys_select.in.h
960   lib/sys_stat.in.h
961   lib/sys_time.in.h
962   lib/sys_types.in.h
963   lib/tempname.c
964   lib/tempname.h
965   lib/time-internal.h
966   lib/time.in.h
967   lib/time_r.c
968   lib/time_rz.c
969   lib/timegm.c
970   lib/timespec-add.c
971   lib/timespec-sub.c
972   lib/timespec.c
973   lib/timespec.h
974   lib/u64.c
975   lib/u64.h
976   lib/unistd.c
977   lib/unistd.in.h
978   lib/utimens.c
979   lib/utimens.h
980   lib/verify.h
981   lib/vla.h
982   lib/xalloc-oversized.h
983   m4/00gnulib.m4
984   m4/absolute-header.m4
985   m4/acl.m4
986   m4/alloca.m4
987   m4/byteswap.m4
988   m4/c-strtod.m4
989   m4/clock_time.m4
990   m4/close-stream.m4
991   m4/count-one-bits.m4
992   m4/count-trailing-zeros.m4
993   m4/dirent_h.m4
994   m4/dirfd.m4
995   m4/dup2.m4
996   m4/environ.m4
997   m4/errno_h.m4
998   m4/euidaccess.m4
999   m4/execinfo.m4
1000   m4/extensions.m4
1001   m4/extern-inline.m4
1002   m4/faccessat.m4
1003   m4/fcntl-o.m4
1004   m4/fcntl.m4
1005   m4/fcntl_h.m4
1006   m4/fdatasync.m4
1007   m4/fdopendir.m4
1008   m4/filemode.m4
1009   m4/fpending.m4
1010   m4/fstatat.m4
1011   m4/fsync.m4
1012   m4/getdtablesize.m4
1013   m4/getgroups.m4
1014   m4/getloadavg.m4
1015   m4/getopt.m4
1016   m4/gettime.m4
1017   m4/gettimeofday.m4
1018   m4/gl-openssl.m4
1019   m4/gnulib-common.m4
1020   m4/group-member.m4
1021   m4/include_next.m4
1022   m4/inttypes.m4
1023   m4/largefile.m4
1024   m4/longlong.m4
1025   m4/lstat.m4
1026   m4/manywarnings.m4
1027   m4/md5.m4
1028   m4/memrchr.m4
1029   m4/mkostemp.m4
1030   m4/mktime.m4
1031   m4/multiarch.m4
1032   m4/nocrash.m4
1033   m4/off_t.m4
1034   m4/pathmax.m4
1035   m4/pipe2.m4
1036   m4/pselect.m4
1037   m4/pthread_sigmask.m4
1038   m4/putenv.m4
1039   m4/readlink.m4
1040   m4/readlinkat.m4
1041   m4/secure_getenv.m4
1042   m4/sha1.m4
1043   m4/sha256.m4
1044   m4/sha512.m4
1045   m4/sig2str.m4
1046   m4/signal_h.m4
1047   m4/socklen.m4
1048   m4/ssize_t.m4
1049   m4/st_dm_mode.m4
1050   m4/stat-time.m4
1051   m4/stat.m4
1052   m4/stdalign.m4
1053   m4/stddef_h.m4
1054   m4/stdint.m4
1055   m4/stdio_h.m4
1056   m4/stdlib_h.m4
1057   m4/stpcpy.m4
1058   m4/strftime.m4
1059   m4/string_h.m4
1060   m4/strtoimax.m4
1061   m4/strtoll.m4
1062   m4/strtoull.m4
1063   m4/strtoumax.m4
1064   m4/symlink.m4
1065   m4/sys_select_h.m4
1066   m4/sys_socket_h.m4
1067   m4/sys_stat_h.m4
1068   m4/sys_time_h.m4
1069   m4/sys_types_h.m4
1070   m4/tempname.m4
1071   m4/time_h.m4
1072   m4/time_r.m4
1073   m4/time_rz.m4
1074   m4/timegm.m4
1075   m4/timer_time.m4
1076   m4/timespec.m4
1077   m4/tm_gmtoff.m4
1078   m4/unistd_h.m4
1079   m4/utimbuf.m4
1080   m4/utimens.m4
1081   m4/utimes.m4
1082   m4/vararrays.m4
1083   m4/warn-on-use.m4
1084   m4/warnings.m4
1085   m4/wchar_t.m4