2
dnl Bash specific tests
4
dnl Some derived from PDKSH 5.1.3 autoconf tests
7
dnl Check if dup2() does not clear the close on exec flag
9
AC_DEFUN(BASH_DUP2_CLOEXEC_CHECK,
10
[AC_MSG_CHECKING(if dup2 fails to clear the close-on-exec flag)
11
AC_CACHE_VAL(bash_cv_dup2_broken,
13
#include <sys/types.h>
18
fd1 = open("/dev/null", 2);
19
if (fcntl(fd1, 2, 1) < 0)
24
fl = fcntl(fd2, 1, 0);
25
/* fl will be 1 if dup2 did not reset the close-on-exec flag. */
28
], bash_cv_dup2_broken=yes, bash_cv_dup2_broken=no,
29
[AC_MSG_WARN(cannot check dup2 if cross compiling -- defaulting to no)
30
bash_cv_dup2_broken=no])
32
AC_MSG_RESULT($bash_cv_dup2_broken)
33
if test $bash_cv_dup2_broken = yes; then
34
AC_DEFINE(DUP2_BROKEN)
38
dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7)
39
AC_DEFUN(BASH_SIGNAL_CHECK,
40
[AC_REQUIRE([AC_TYPE_SIGNAL])
41
AC_MSG_CHECKING(for type of signal functions)
42
AC_CACHE_VAL(bash_cv_signal_vintage,
44
AC_TRY_LINK([#include <signal.h>],[
47
sigemptyset(&ss); sigsuspend(&ss);
48
sigaction(SIGINT, &sa, (struct sigaction *) 0);
49
sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0);
50
], bash_cv_signal_vintage=posix,
52
AC_TRY_LINK([#include <signal.h>], [
53
int mask = sigmask(SIGINT);
54
sigsetmask(mask); sigblock(mask); sigpause(mask);
55
], bash_cv_signal_vintage=4.2bsd,
59
RETSIGTYPE foo() { }], [
60
int mask = sigmask(SIGINT);
61
sigset(SIGINT, foo); sigrelse(SIGINT);
62
sighold(SIGINT); sigpause(SIGINT);
63
], bash_cv_signal_vintage=svr3, bash_cv_signal_vintage=v7
68
AC_MSG_RESULT($bash_cv_signal_vintage)
69
if test "$bash_cv_signal_vintage" = posix; then
70
AC_DEFINE(HAVE_POSIX_SIGNALS)
71
elif test "$bash_cv_signal_vintage" = "4.2bsd"; then
72
AC_DEFINE(HAVE_BSD_SIGNALS)
73
elif test "$bash_cv_signal_vintage" = svr3; then
74
AC_DEFINE(HAVE_USG_SIGHOLD)
78
dnl Check if the pgrp of setpgrp() can't be the pid of a zombie process.
79
AC_DEFUN(BASH_PGRP_SYNC,
80
[AC_REQUIRE([AC_FUNC_GETPGRP])
81
AC_MSG_CHECKING(whether pgrps need synchronization)
82
AC_CACHE_VAL(bash_cv_pgrp_pipe,
90
# define getpgID() getpgrp()
92
# define getpgID() getpgrp(0)
93
# define setpgid(x,y) setpgrp(x,y)
95
int pid1, pid2, fds[2];
99
switch (pid1 = fork()) {
103
setpgid(0, getpid());
108
sleep(2); /* let first child die */
113
switch (pid2 = fork()) {
118
ok = getpgID() == pid1;
119
write(fds[1], &ok, 1);
125
if (read(fds[0], &ok, 1) != 1)
131
], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes,
132
[AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no)
133
bash_cv_pgrp_pipe=no])
135
AC_MSG_RESULT($bash_cv_pgrp_pipe)
136
if test $bash_cv_pgrp_pipe = yes; then
142
dnl check for typedef'd symbols in header files, but allow the caller to
143
dnl specify the include files to be checked in addition to the default
145
dnl BASH_CHECK_TYPE(TYPE, HEADERS, DEFAULT[, VALUE-IF-FOUND])
146
AC_DEFUN(BASH_CHECK_TYPE,
147
[AC_REQUIRE([AC_HEADER_STDC])dnl
148
AC_MSG_CHECKING(for $1)
149
AC_CACHE_VAL(bash_cv_type_$1,
150
[AC_EGREP_CPP($1, [#include <sys/types.h>
155
], bash_cv_type_$1=yes, bash_cv_type_$1=no)])
156
AC_MSG_RESULT($bash_cv_type_$1)
157
ifelse($#, 4, [if test $bash_cv_type_$1 = yes; then
160
if test $bash_cv_type_$1 = no; then
166
dnl Type of struct rlimit fields: some systems (OSF/1, NetBSD, RISC/os 5.0)
167
dnl have a rlim_t, others (4.4BSD based systems) use quad_t, others use
168
dnl long and still others use int (HP-UX 9.01, SunOS 4.1.3). To simplify
169
dnl matters, this just checks for rlim_t, quad_t, or long.
171
AC_DEFUN(BASH_RLIMIT_TYPE,
172
[AC_MSG_CHECKING(for size and type of struct rlimit fields)
173
AC_CACHE_VAL(bash_cv_type_rlimit,
174
[AC_TRY_COMPILE([#include <sys/types.h>
175
#include <sys/resource.h>],
176
[rlim_t xxx;], bash_cv_type_rlimit=rlim_t,[
178
#include <sys/types.h>
179
#include <sys/time.h>
180
#include <sys/resource.h>
185
if (sizeof(rl.rlim_cur) == sizeof(quad_t))
189
}], bash_cv_type_rlimit=quad_t, bash_cv_type_rlimit=long,
190
[AC_MSG_WARN(cannot check quad_t if cross compiling -- defaulting to long)
191
bash_cv_type_rlimit=long])])
193
AC_MSG_RESULT($bash_cv_type_rlimit)
194
if test $bash_cv_type_rlimit = quad_t; then
195
AC_DEFINE(RLIMTYPE, quad_t)
196
elif test $bash_cv_type_rlimit = rlim_t; then
197
AC_DEFINE(RLIMTYPE, rlim_t)
202
dnl Check for sys_siglist[] or _sys_siglist[]
204
AC_DEFUN(BASH_DECL_UNDER_SYS_SIGLIST,
205
[AC_MSG_CHECKING([for _sys_siglist in signal.h or unistd.h])
206
AC_CACHE_VAL(bash_cv_decl_under_sys_siglist,
208
#include <sys/types.h>
212
#endif], [ char *msg = _sys_siglist[2]; ],
213
bash_cv_decl_under_sys_siglist=yes, bash_cv_decl_under_sys_siglist=no,
214
[AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no)])])dnl
215
AC_MSG_RESULT($bash_cv_decl_under_sys_siglist)
216
if test $bash_cv_decl_under_sys_siglist = yes; then
217
AC_DEFINE(UNDER_SYS_SIGLIST_DECLARED)
221
AC_DEFUN(BASH_UNDER_SYS_SIGLIST,
222
[AC_REQUIRE([BASH_DECL_UNDER_SYS_SIGLIST])
223
AC_MSG_CHECKING([for _sys_siglist in system C library])
224
AC_CACHE_VAL(bash_cv_under_sys_siglist,
226
#include <sys/types.h>
231
#ifndef UNDER_SYS_SIGLIST_DECLARED
232
extern char *_sys_siglist[];
236
char *msg = (char *)_sys_siglist[2];
239
bash_cv_under_sys_siglist=yes, bash_cv_under_sys_siglist=no,
240
[AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no)
241
bash_cv_under_sys_siglist=no])])
242
AC_MSG_RESULT($bash_cv_under_sys_siglist)
243
if test $bash_cv_under_sys_siglist = yes; then
244
AC_DEFINE(HAVE_UNDER_SYS_SIGLIST)
248
AC_DEFUN(BASH_SYS_SIGLIST,
249
[AC_REQUIRE([AC_DECL_SYS_SIGLIST])
250
AC_MSG_CHECKING([for sys_siglist in system C library])
251
AC_CACHE_VAL(bash_cv_sys_siglist,
253
#include <sys/types.h>
258
#ifndef SYS_SIGLIST_DECLARED
259
extern char *sys_siglist[];
263
char *msg = sys_siglist[2];
266
bash_cv_sys_siglist=yes, bash_cv_sys_siglist=no,
267
[AC_MSG_WARN(cannot check for sys_siglist if cross compiling -- defaulting to no)
268
bash_cv_sys_siglist=no])])
269
AC_MSG_RESULT($bash_cv_sys_siglist)
270
if test $bash_cv_sys_siglist = yes; then
271
AC_DEFINE(HAVE_SYS_SIGLIST)
275
dnl Check for sys_errlist[] and sys_nerr, check for declaration
276
AC_DEFUN(BASH_SYS_ERRLIST,
277
[AC_MSG_CHECKING([for sys_errlist and sys_nerr])
278
AC_CACHE_VAL(bash_cv_sys_errlist,
279
[AC_TRY_LINK([#include <errno.h>],
280
[extern char *sys_errlist[];
282
char *msg = sys_errlist[sys_nerr - 1];],
283
bash_cv_sys_errlist=yes, bash_cv_sys_errlist=no)])dnl
284
AC_MSG_RESULT($bash_cv_sys_errlist)
285
if test $bash_cv_sys_errlist = yes; then
286
AC_DEFINE(HAVE_SYS_ERRLIST)
290
dnl Check to see if opendir will open non-directories (not a nice thing)
291
AC_DEFUN(BASH_FUNC_OPENDIR_CHECK,
292
[AC_REQUIRE([AC_HEADER_DIRENT])dnl
293
AC_MSG_CHECKING(if opendir() opens non-directories)
294
AC_CACHE_VAL(bash_cv_opendir_not_robust,
297
#include <sys/types.h>
301
#endif /* HAVE_UNISTD_H */
302
#if defined(HAVE_DIRENT_H)
305
# define dirent direct
306
# ifdef HAVE_SYS_NDIR_H
307
# include <sys/ndir.h>
308
# endif /* SYSNDIR */
309
# ifdef HAVE_SYS_DIR_H
310
# include <sys/dir.h>
315
#endif /* HAVE_DIRENT_H */
320
unlink("/tmp/not_a_directory");
321
fd = open("/tmp/not_a_directory", O_WRONLY|O_CREAT, 0666);
324
dir = opendir("/tmp/not_a_directory");
325
unlink("/tmp/not_a_directory");
327
}], bash_cv_opendir_not_robust=yes,bash_cv_opendir_not_robust=no,
328
[AC_MSG_WARN(cannot check opendir if cross compiling -- defaulting to no)
329
bash_cv_opendir_not_robust=no]
331
AC_MSG_RESULT($bash_cv_opendir_not_robust)
332
if test $bash_cv_opendir_not_robust = yes; then
333
AC_DEFINE(OPENDIR_NOT_ROBUST)
338
AC_DEFUN(BASH_TYPE_SIGHANDLER,
339
[AC_MSG_CHECKING([whether signal handlers are of type void])
340
AC_CACHE_VAL(bash_cv_void_sighandler,
341
[AC_TRY_COMPILE([#include <sys/types.h>
349
void (*signal ()) ();],
350
[int i;], bash_cv_void_sighandler=yes, bash_cv_void_sighandler=no)])dnl
351
AC_MSG_RESULT($bash_cv_void_sighandler)
352
if test $bash_cv_void_sighandler = yes; then
353
AC_DEFINE(VOID_SIGHANDLER)
357
AC_DEFUN(BASH_TYPE_INT32_T,
359
if test "$ac_cv_sizeof_int" = 4; then
360
AC_CHECK_TYPE(int32_t, int)
361
elif test "$ac_cv_sizeof_long" = 4; then
362
AC_CHECK_TYPE(int32_t, long)
364
AC_CHECK_TYPE(int32_t, int)
368
AC_DEFUN(BASH_TYPE_U_INT32_T,
370
if test "$ac_cv_sizeof_int" = 4; then
371
AC_CHECK_TYPE(u_int32_t, unsigned int)
372
elif test "$ac_cv_sizeof_long" = 4; then
373
AC_CHECK_TYPE(u_int32_t, unsigned long)
375
AC_CHECK_TYPE(u_int32_t, unsigned int)
379
AC_DEFUN(BASH_TYPE_PTRDIFF_T,
381
if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_char_p"; then
382
AC_CHECK_TYPE(ptrdiff_t, int)
383
elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_char_p"; then
384
AC_CHECK_TYPE(ptrdiff_t, long)
386
AC_CHECK_TYPE(ptrdiff_t, int)
390
AC_DEFUN(BASH_TYPE_BITS64_T,
392
if test "$ac_sv_sizeof_char_p" = 8; then
393
AC_CHECK_TYPE(bits64_t, char *)
394
elif test "$ac_cv_sizeof_double" = 8; then
395
AC_CHECK_TYPE(bits64_t, double)
396
elif test "$ac_cv_sizeof_long" = 8; then
397
AC_CHECK_TYPE(bits64_t, long)
399
AC_CHECK_TYPE(bits64_t, double)
403
AC_DEFUN(BASH_FUNC_STRSIGNAL,
404
[AC_MSG_CHECKING([for the existence of strsignal])
405
AC_CACHE_VAL(bash_cv_have_strsignal,
406
[AC_TRY_LINK([#include <sys/types.h>
407
#include <signal.h>],
408
[char *s = (char *)strsignal(2);],
409
bash_cv_have_strsignal=yes, bash_cv_have_strsignal=no)])
410
AC_MSG_RESULT($bash_cv_have_strsignal)
411
if test $bash_cv_have_strsignal = yes; then
412
AC_DEFINE(HAVE_STRSIGNAL)
416
AC_DEFUN(BASH_FUNC_LSTAT,
417
[dnl Cannot use AC_CHECK_FUNCS(lstat) because Linux defines lstat() as an
418
dnl inline function in <sys/stat.h>.
419
AC_CACHE_CHECK([for lstat], bash_cv_func_lstat,
421
#include <sys/types.h>
422
#include <sys/stat.h>
423
],[ lstat(".",(struct stat *)0); ],
424
bash_cv_func_lstat=yes, bash_cv_func_lstat=no)])
425
if test $bash_cv_func_lstat = yes; then
426
AC_DEFINE(HAVE_LSTAT)
430
AC_DEFUN(BASH_STRUCT_TERMIOS_LDISC,
431
[AC_MSG_CHECKING([for a c_line member of struct termios])
432
AC_CACHE_VAL(bash_cv_termios_ldisc,
433
[AC_TRY_COMPILE([#include <sys/types.h>
434
#include <termios.h>],[struct termios t; int i; i = t.c_line;],
435
bash_cv_termios_ldisc=yes, bash_cv_termios_ldisc=no)])dnl
436
AC_MSG_RESULT($bash_cv_termios_ldisc)
437
if test $bash_cv_termios_ldisc = yes; then
438
AC_DEFINE(TERMIOS_LDISC)
442
AC_DEFUN(BASH_STRUCT_TERMIO_LDISC,
443
[AC_MSG_CHECKING([for a c_line member of struct termio])
444
AC_CACHE_VAL(bash_cv_termio_ldisc,
445
[AC_TRY_COMPILE([#include <sys/types.h>
446
#include <termio.h>],[struct termio t; int i; i = t.c_line;],
447
bash_cv_termio_ldisc=yes, bash_cv_termio_ldisc=no)])dnl
448
AC_MSG_RESULT($bash_cv_termio_ldisc)
449
if test $bash_cv_termio_ldisc = yes; then
450
AC_DEFINE(TERMIO_LDISC)
454
AC_DEFUN(BASH_FUNC_GETENV,
455
[AC_MSG_CHECKING(to see if getenv can be redefined)
456
AC_CACHE_VAL(bash_cv_getenv_redef,
468
#if defined (__linux__) || defined (__bsdi__) || defined (convex)
472
#endif /* !__linux__ && !__bsdi__ && !convex */
479
/* The next allows this program to run, but does not allow bash to link
480
when it redefines getenv. I'm not really interested in figuring out
486
exit(s == 0); /* force optimizer to leave getenv in */
488
], bash_cv_getenv_redef=yes, bash_cv_getenv_redef=no,
489
[AC_MSG_WARN(cannot check getenv redefinition if cross compiling -- defaulting to yes)
490
bash_cv_getenv_redef=yes]
492
AC_MSG_RESULT($bash_cv_getenv_redef)
493
if test $bash_cv_getenv_redef = yes; then
494
AC_DEFINE(CAN_REDEFINE_GETENV)
498
AC_DEFUN(BASH_FUNC_PRINTF,
499
[AC_MSG_CHECKING(for declaration of printf in <stdio.h>)
500
AC_CACHE_VAL(bash_cv_printf_declared,
504
typedef int (*_bashfunc)(const char *, ...);
506
typedef int (*_bashfunc)();
511
pf = (_bashfunc) printf;
514
], bash_cv_printf_declared=yes, bash_cv_printf_declared=no,
515
[AC_MSG_WARN(cannot check printf declaration if cross compiling -- defaulting to yes)
516
bash_cv_printf_declared=yes]
518
AC_MSG_RESULT($bash_cv_printf_declared)
519
if test $bash_cv_printf_declared = yes; then
520
AC_DEFINE(PRINTF_DECLARED)
524
AC_DEFUN(BASH_FUNC_ULIMIT_MAXFDS,
525
[AC_MSG_CHECKING(whether ulimit can substitute for getdtablesize)
526
AC_CACHE_VAL(bash_cv_ulimit_maxfds,
530
long maxfds = ulimit(4, 0L);
531
exit (maxfds == -1L);
533
], bash_cv_ulimit_maxfds=yes, bash_cv_ulimit_maxfds=no,
534
[AC_MSG_WARN(cannot check ulimit if cross compiling -- defaulting to no)
535
bash_cv_ulimit_maxfds=no]
537
AC_MSG_RESULT($bash_cv_ulimit_maxfds)
538
if test $bash_cv_ulimit_maxfds = yes; then
539
AC_DEFINE(ULIMIT_MAXFDS)
543
AC_DEFUN(BASH_CHECK_LIB_TERMCAP,
545
if test "X$bash_cv_termcap_lib" = "X"; then
548
AC_MSG_CHECKING(which library has the termcap functions)
551
AC_CACHE_VAL(bash_cv_termcap_lib,
552
[AC_CHECK_LIB(termcap, tgetent, bash_cv_termcap_lib=libtermcap,
553
[AC_CHECK_LIB(curses, tgetent, bash_cv_termcap_lib=libcurses,
554
[AC_CHECK_LIB(ncurses, tgetent, bash_cv_termcap_lib=libncurses,
555
bash_cv_termcap_lib=gnutermcap)])])])
556
if test "X$_bash_needmsg" = "Xyes"; then
557
AC_MSG_CHECKING(which library has the termcap functions)
559
AC_MSG_RESULT(using $bash_cv_termcap_lib)
560
if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then
561
LDFLAGS="$LDFLAGS -L./lib/termcap"
562
TERMCAP_LIB="./lib/termcap/libtermcap.a"
563
TERMCAP_DEP="./lib/termcap/libtermcap.a"
564
elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then
565
TERMCAP_LIB=-ltermcap
567
elif test $bash_cv_termcap_lib = libncurses; then
568
TERMCAP_LIB=-lncurses
576
AC_DEFUN(BASH_FUNC_GETCWD,
577
[AC_MSG_CHECKING([if getcwd() calls popen()])
578
AC_CACHE_VAL(bash_cv_getcwd_calls_popen,
602
FILE *_popen(command, type)
606
return (popen (command, type));
630
], bash_cv_getcwd_calls_popen=no, bash_cv_getcwd_calls_popen=yes,
631
[AC_MSG_WARN(cannot check whether getcwd calls popen if cross compiling -- defaulting to no)
632
bash_cv_getcwd_calls_popen=no]
634
AC_MSG_RESULT($bash_cv_getcwd_calls_popen)
635
if test $bash_cv_getcwd_calls_popen = yes; then
636
AC_DEFINE(GETCWD_BROKEN)
640
AC_DEFUN(BASH_STRUCT_DIRENT_D_INO,
641
[AC_REQUIRE([AC_HEADER_DIRENT])
642
AC_MSG_CHECKING(if struct dirent has a d_ino member)
643
AC_CACHE_VAL(bash_cv_dirent_has_dino,
646
#include <sys/types.h>
649
#endif /* HAVE_UNISTD_H */
650
#if defined(HAVE_DIRENT_H)
653
# define dirent direct
654
# ifdef HAVE_SYS_NDIR_H
655
# include <sys/ndir.h>
656
# endif /* SYSNDIR */
657
# ifdef HAVE_SYS_DIR_H
658
# include <sys/dir.h>
663
#endif /* HAVE_DIRENT_H */
665
struct dirent d; int z; z = d.d_ino;
666
], bash_cv_dirent_has_dino=yes, bash_cv_dirent_has_dino=no)])
667
AC_MSG_RESULT($bash_cv_dirent_has_dino)
668
if test $bash_cv_dirent_has_dino = yes; then
669
AC_DEFINE(STRUCT_DIRENT_HAS_D_INO)
673
AC_DEFUN(BASH_STRUCT_DIRENT_D_FILENO,
674
[AC_REQUIRE([AC_HEADER_DIRENT])
675
AC_MSG_CHECKING(if struct dirent has a d_fileno member)
676
AC_CACHE_VAL(bash_cv_dirent_has_d_fileno,
679
#include <sys/types.h>
682
#endif /* HAVE_UNISTD_H */
683
#if defined(HAVE_DIRENT_H)
686
# define dirent direct
687
# ifdef HAVE_SYS_NDIR_H
688
# include <sys/ndir.h>
689
# endif /* SYSNDIR */
690
# ifdef HAVE_SYS_DIR_H
691
# include <sys/dir.h>
696
#endif /* HAVE_DIRENT_H */
698
struct dirent d; int z; z = d.d_fileno;
699
], bash_cv_dirent_has_d_fileno=yes, bash_cv_dirent_has_d_fileno=no)])
700
AC_MSG_RESULT($bash_cv_dirent_has_d_fileno)
701
if test $bash_cv_dirent_has_d_fileno = yes; then
702
AC_DEFINE(STRUCT_DIRENT_HAS_D_FILENO)
706
AC_DEFUN(BASH_REINSTALL_SIGHANDLERS,
707
[AC_REQUIRE([AC_TYPE_SIGNAL])
708
AC_REQUIRE([BASH_SIGNAL_CHECK])
709
AC_MSG_CHECKING([if signal handlers must be reinstalled when invoked])
710
AC_CACHE_VAL(bash_cv_must_reinstall_sighandlers,
717
typedef RETSIGTYPE sigfunc();
721
#ifdef HAVE_POSIX_SIGNALS
723
set_signal_handler(sig, handler)
727
struct sigaction act, oact;
728
act.sa_handler = handler;
730
sigemptyset (&act.sa_mask);
731
sigemptyset (&oact.sa_mask);
732
sigaction (sig, &act, &oact);
733
return (oact.sa_handler);
736
#define set_signal_handler(s, h) signal(s, h)
749
set_signal_handler(SIGINT, sigint);
750
kill((int)getpid(), SIGINT);
751
kill((int)getpid(), SIGINT);
754
], bash_cv_must_reinstall_sighandlers=no, bash_cv_must_reinstall_sighandlers=yes,
755
[AC_MSG_WARN(cannot check signal handling if cross compiling -- defaulting to no)
756
bash_cv_must_reinstall_sighandlers=no]
758
AC_MSG_RESULT($bash_cv_must_reinstall_sighandlers)
759
if test $bash_cv_must_reinstall_sighandlers = yes; then
760
AC_DEFINE(MUST_REINSTALL_SIGHANDLERS)
764
AC_DEFUN(BASH_FUNC_SBRK_DECLARED,
765
[AC_MSG_CHECKING(for declaration of sbrk in <unistd.h>)
766
AC_CACHE_VAL(bash_cv_sbrk_declared,
767
[AC_EGREP_HEADER(sbrk, unistd.h,
768
bash_cv_sbrk_declared=yes, bash_cv_sbrk_declared=no)])
769
AC_MSG_RESULT($bash_cv_sbrk_declared)
770
if test $bash_cv_sbrk_declared = yes; then
771
AC_DEFINE(SBRK_DECLARED)
775
dnl check that some necessary job control definitions are present
776
AC_DEFUN(BASH_JOB_CONTROL_MISSING,
777
[AC_REQUIRE([BASH_SIGNAL_CHECK])
778
AC_MSG_CHECKING(for presence of necessary job control definitions)
779
AC_CACHE_VAL(bash_cv_job_control_missing,
781
#include <sys/types.h>
782
#ifdef HAVE_SYS_WAIT_H
783
#include <sys/wait.h>
790
/* Add more tests in here as appropriate. */
794
#if !defined (HAVE_POSIX_SIGNALS) && !defined (HAVE_BSD_SIGNALS)
798
/* signals and tty control. */
799
#if !defined (SIGTSTP) || !defined (SIGSTOP) || !defined (SIGCONT)
803
/* process control */
804
#if !defined (WNOHANG) || !defined (WUNTRACED)
808
/* Posix systems have tcgetpgrp and waitpid. */
809
#if defined (_POSIX_VERSION) && !defined (HAVE_TCGETPGRP)
813
#if defined (_POSIX_VERSION) && !defined (HAVE_WAITPID)
817
/* Other systems have TIOCSPGRP/TIOCGPRGP and wait3. */
818
#if !defined (_POSIX_VERSION) && !defined (HAVE_WAIT3)
823
}], bash_cv_job_control_missing=present, bash_cv_job_control_missing=missing,
824
[AC_MSG_WARN(cannot check job control if cross-compiling -- defaulting to missing)
825
bash_cv_job_control_missing=missing]
827
AC_MSG_RESULT($bash_cv_job_control_missing)
828
if test $bash_cv_job_control_missing = missing; then
829
AC_DEFINE(JOB_CONTROL_MISSING)
833
dnl check whether named pipes are present
834
dnl this requires a previous check for mkfifo, but that is awkward to specify
835
AC_DEFUN(BASH_SYS_NAMED_PIPES,
836
[AC_MSG_CHECKING(for presence of named pipes)
837
AC_CACHE_VAL(bash_cv_sys_named_pipes,
839
#include <sys/types.h>
840
#include <sys/stat.h>
845
/* Add more tests in here as appropriate. */
850
#if defined (HAVE_MKFIFO)
854
#if !defined (S_IFIFO) && (defined (_POSIX_VERSION) && !defined (S_ISFIFO))
862
fd = mknod ("/tmp/sh-np-autoconf", 0666 | S_IFIFO, 0);
866
unlink ("/tmp/sh-np-autoconf");
868
}], bash_cv_sys_named_pipes=present, bash_cv_sys_named_pipes=missing,
869
[AC_MSG_WARN(cannot check for named pipes if cross-compiling -- defaulting to missing)
870
bash_cv_sys_named_pipes=missing]
872
AC_MSG_RESULT($bash_cv_sys_named_pipes)
873
if test $bash_cv_sys_named_pipes = missing; then
874
AC_DEFINE(NAMED_PIPES_MISSING)
878
AC_DEFUN(BASH_FUNC_POSIX_SETJMP,
879
[AC_REQUIRE([BASH_SIGNAL_CHECK])
880
AC_MSG_CHECKING(for presence of POSIX-style sigsetjmp/siglongjmp)
881
AC_CACHE_VAL(bash_cv_func_sigsetjmp,
886
#include <sys/types.h>
892
#if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
903
sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set);
904
sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset);
907
code = sigsetjmp(xx, 1);
909
exit(0); /* could get sigmask and compare to oset here. */
912
sigaddset(&set, SIGINT);
913
sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL);
919
}], bash_cv_func_sigsetjmp=present, bash_cv_func_sigsetjmp=missing,
920
[AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing)
921
bash_cv_func_sigsetjmp=missing]
923
AC_MSG_RESULT($bash_cv_func_sigsetjmp)
924
if test $bash_cv_func_sigsetjmp = present; then
925
AC_DEFINE(HAVE_POSIX_SIGSETJMP)
929
AC_DEFUN(BASH_HAVE_TIOCGWINSZ,
930
[AC_MSG_CHECKING(for TIOCGWINSZ in sys/ioctl.h)
931
AC_CACHE_VAL(bash_cv_tiocgwinsz_in_ioctl,
932
[AC_TRY_COMPILE([#include <sys/types.h>
933
#include <sys/ioctl.h>], [int x = TIOCGWINSZ;],
934
bash_cv_tiocgwinsz_in_ioctl=yes,bash_cv_tiocgwinsz_in_ioctl=no)])
935
AC_MSG_RESULT($bash_cv_tiocgwinsz_in_ioctl)
936
if test $bash_cv_tiocgwinsz_in_ioctl = yes; then
937
AC_DEFINE(GWINSZ_IN_SYS_IOCTL)
941
AC_DEFUN(BASH_STRUCT_WINSIZE,
942
[AC_MSG_CHECKING(for struct winsize in sys/ioctl.h and termios.h)
943
AC_CACHE_VAL(bash_cv_struct_winsize_header,
944
[AC_TRY_COMPILE([#include <sys/types.h>
945
#include <sys/ioctl.h>], [struct winsize x;],
946
bash_cv_struct_winsize_header=ioctl_h,
947
[AC_TRY_COMPILE([#include <sys/types.h>
948
#include <termios.h>], [struct winsize x;],
949
bash_cv_struct_winsize_header=termios_h, bash_cv_struct_winsize_header=other)
951
if test $bash_cv_struct_winsize_header = ioctl_h; then
952
AC_MSG_RESULT(sys/ioctl.h)
953
AC_DEFINE(STRUCT_WINSIZE_IN_SYS_IOCTL)
954
elif test $bash_cv_struct_winsize_header = termios_h; then
955
AC_MSG_RESULT(termios.h)
956
AC_DEFINE(STRUCT_WINSIZE_IN_TERMIOS)
958
AC_MSG_RESULT(not found)
962
AC_DEFUN(BASH_HAVE_TIOCSTAT,
963
[AC_MSG_CHECKING(for TIOCSTAT in sys/ioctl.h)
964
AC_CACHE_VAL(bash_cv_tiocstat_in_ioctl,
965
[AC_TRY_COMPILE([#include <sys/types.h>
966
#include <sys/ioctl.h>], [int x = TIOCSTAT;],
967
bash_cv_tiocstat_in_ioctl=yes,bash_cv_tiocstat_in_ioctl=no)])
968
AC_MSG_RESULT($bash_cv_tiocstat_in_ioctl)
969
if test $bash_cv_tiocstat_in_ioctl = yes; then
970
AC_DEFINE(TIOCSTAT_IN_SYS_IOCTL)
974
AC_DEFUN(BASH_HAVE_FIONREAD,
975
[AC_MSG_CHECKING(for FIONREAD in sys/ioctl.h)
976
AC_CACHE_VAL(bash_cv_fionread_in_ioctl,
977
[AC_TRY_COMPILE([#include <sys/types.h>
978
#include <sys/ioctl.h>], [int x = FIONREAD;],
979
bash_cv_fionread_in_ioctl=yes,bash_cv_fionread_in_ioctl=no)])
980
AC_MSG_RESULT($bash_cv_fionread_in_ioctl)
981
if test $bash_cv_fionread_in_ioctl = yes; then
982
AC_DEFINE(FIONREAD_IN_SYS_IOCTL)
987
dnl See if speed_t is declared in <sys/types.h>. Some versions of linux
988
dnl require a definition of speed_t each time <termcap.h> is included,
989
dnl but you can only get speed_t if you include <termios.h> (on some
990
dnl versions) or <sys/types.h> (on others).
992
AC_DEFUN(BASH_MISC_SPEED_T,
993
[AC_MSG_CHECKING(for speed_t in sys/types.h)
994
AC_CACHE_VAL(bash_cv_speed_t_in_sys_types,
995
[AC_TRY_COMPILE([#include <sys/types.h>], [speed_t x;],
996
bash_cv_speed_t_in_sys_types=yes,bash_cv_speed_t_in_sys_types=no)])
997
AC_MSG_RESULT($bash_cv_speed_t_in_sys_types)
998
if test $bash_cv_speed_t_in_sys_types = yes; then
999
AC_DEFINE(SPEED_T_IN_SYS_TYPES)
1003
AC_DEFUN(BASH_CHECK_GETPW_FUNCS,
1004
[AC_MSG_CHECKING(whether programs are able to redeclare getpw functions)
1005
AC_CACHE_VAL(bash_cv_can_redecl_getpw,
1006
[AC_TRY_COMPILE([#include <sys/types.h>
1008
extern struct passwd *getpwent();
1009
extern struct passwd *getpwuid();
1010
extern struct passwd *getpwnam();],
1011
[struct passwd *z; z = getpwent(); z = getpwuid(0); z = getpwnam("root");],
1012
bash_cv_can_redecl_getpw=yes,bash_cv_can_redecl_getpw=no)])
1013
AC_MSG_RESULT($bash_cv_can_redecl_getpw)
1014
if test $bash_cv_can_redecl_getpw = no; then
1015
AC_DEFINE(HAVE_GETPW_DECLS)
1019
AC_DEFUN(BASH_CHECK_DEV_FD,
1020
[AC_MSG_CHECKING(whether /dev/fd is available)
1021
AC_CACHE_VAL(bash_cv_dev_fd,
1022
[if test -d /dev/fd && test -r /dev/fd/0; then
1023
bash_cv_dev_fd=standard
1024
elif test -d /proc/self/fd && test -r /proc/self/fd/0; then
1025
bash_cv_dev_fd=whacky
1027
bash_cv_dev_fd=absent
1030
AC_MSG_RESULT($bash_cv_dev_fd)
1031
if test $bash_cv_dev_fd = "standard"; then
1032
AC_DEFINE(HAVE_DEV_FD)
1033
AC_DEFINE(DEV_FD_PREFIX, "/dev/fd/")
1034
elif test $bash_cv_dev_fd = "whacky"; then
1035
AC_DEFINE(HAVE_DEV_FD)
1036
AC_DEFINE(DEV_FD_PREFIX, "/proc/self/fd/")
1041
dnl Check for the presence of getpeername (the only networking function
1042
dnl bash currently requires) in libsocket. If libsocket is present,
1043
dnl check for libnsl and add it to LIBS if it's there, since most
1044
dnl systems with libsocket require linking with libnsl as well.
1045
dnl This should only be called if getpeername was not found in libc.
1047
AC_DEFUN(BASH_CHECK_SOCKLIB,
1049
if test "X$bash_cv_have_socklib" = "X"; then
1052
AC_MSG_CHECKING(for socket library)
1055
AC_CACHE_VAL(bash_cv_have_socklib,
1056
[AC_CHECK_LIB(socket, getpeername,
1057
bash_cv_have_socklib=yes, bash_cv_have_socklib=no, -lnsl)])
1058
if test "X$_bash_needmsg" = Xyes; then
1059
AC_MSG_RESULT($bash_cv_have_socklib)
1062
if test $bash_cv_have_socklib = yes; then
1063
# check for libnsl, add it to LIBS if present
1064
if test "X$bash_cv_have_libnsl" = "X"; then
1067
AC_MSG_CHECKING(for libnsl)
1070
AC_CACHE_VAL(bash_cv_have_libnsl,
1071
[AC_CHECK_LIB(nsl, t_open,
1072
bash_cv_have_libnsl=yes, bash_cv_have_libnsl=no)])
1073
if test "X$_bash_needmsg" = Xyes; then
1074
AC_MSG_RESULT($bash_cv_have_libnsl)
1077
if test $bash_cv_have_libnsl = yes; then
1078
LIBS="-lsocket -lnsl $LIBS"
1080
LIBS="-lsocket $LIBS"
1082
AC_DEFINE(HAVE_LIBSOCKET)
1083
AC_DEFINE(HAVE_GETPEERNAME)
1087
AC_DEFUN(BASH_DEFAULT_MAIL_DIR,
1088
[AC_MSG_CHECKING(for default mail directory)
1089
AC_CACHE_VAL(bash_cv_mail_dir,
1090
[if test -d /var/mail; then
1091
bash_cv_mail_dir=/var/mail
1092
elif test -d /usr/mail; then
1093
bash_cv_mail_dir=/usr/mail
1094
elif test -d /var/spool/mail; then
1095
bash_cv_mail_dir=/var/spool/mail
1096
elif test -d /usr/spool/mail; then
1097
bash_cv_mail_dir=/usr/spool/mail
1099
bash_cv_mail_dir=unknown
1102
AC_MSG_RESULT($bash_cv_mail_dir)
1103
if test $bash_cv_mail_dir = "/var/mail"; then
1104
AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/var/mail")
1105
elif test $bash_cv_mail_dir = "/usr/mail"; then
1106
AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/usr/mail")
1107
elif test $bash_cv_mail_dir = "/var/spool/mail"; then
1108
AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/var/spool/mail")
1109
elif test $bash_cv_mail_dir = "/usr/spool/mail"; then
1110
AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/usr/spool/mail")
1112
AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "unknown")
1117
dnl Check if HPUX needs _KERNEL defined for RLIMIT_* definitions
1119
AC_DEFUN(BASH_KERNEL_RLIMIT_CHECK,
1120
[AC_MSG_CHECKING([whether $host_os needs _KERNEL for RLIMIT defines])
1121
AC_CACHE_VAL(bash_cv_kernel_rlimit,
1123
#include <sys/types.h>
1124
#include <sys/resource.h>
1129
], bash_cv_kernel_rlimit=no,
1131
#include <sys/types.h>
1133
#include <sys/resource.h>
1139
], bash_cv_kernel_rlimit=yes, bash_cv_kernel_rlimit=no)]
1141
AC_MSG_RESULT($bash_cv_kernel_rlimit)
1142
if test $bash_cv_kernel_rlimit = yes; then
1143
AC_DEFINE(RLIMIT_NEEDS_KERNEL)
1147
AC_DEFUN(BASH_FUNC_STRCOLL,
1149
AC_MSG_CHECKING(whether or not strcoll and strcmp differ)
1150
AC_CACHE_VAL(bash_cv_func_strcoll_broken,
1153
#if defined (HAVE_LOCALE_H)
1162
char *deflocale, *defcoll;
1164
#ifdef HAVE_SETLOCALE
1165
deflocale = setlocale(LC_ALL, "");
1166
defcoll = setlocale(LC_COLLATE, "");
1170
/* These two values are taken from tests/glob-test. */
1171
r1 = strcoll("abd", "aXd");
1175
r2 = strcmp("abd", "aXd");
1177
/* These two should both be greater than 0. It is permissible for
1178
a system to return different values, as long as the sign is the
1181
/* Exit with 1 (failure) if these two values are both > 0, since
1182
this tests whether strcoll(3) is broken with respect to strcmp(3)
1183
in the default locale. */
1184
exit (r1 > 0 && r2 > 0);
1186
], bash_cv_func_strcoll_broken=yes, bash_cv_func_strcoll_broken=no,
1187
[AC_MSG_WARN(cannot check strcoll if cross compiling -- defaulting to no)
1188
bash_cv_func_strcoll_broken=no]
1190
AC_MSG_RESULT($bash_cv_func_strcoll_broken)
1191
if test $bash_cv_func_strcoll_broken = yes; then
1192
AC_DEFINE(STRCOLL_BROKEN)
1197
dnl If available, use support for large files unless the user specified
1198
dnl one of the CPPFLAGS, LDFLAGS, or LIBS variables (<eggert@twinsun.com>
1199
dnl via GNU patch 2.5)
1201
AC_DEFUN(BASH_LARGE_FILE_SUPPORT,
1202
[AC_MSG_CHECKING(whether large file support needs explicit enabling)
1206
ac_shellvars='CPPFLAGS LDFLAGS LIBS'
1207
for ac_shellvar in $ac_shellvars; do
1208
case $ac_shellvar in
1209
CPPFLAGS) ac_lfsvar=LFS_CFLAGS ac_lfs64var=LFS64_CFLAGS ;;
1210
*) ac_lfsvar=LFS_$ac_shellvar ac_lfs64var=LFS64_$ac_shellvar ;;
1212
eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar
1213
(getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; }
1214
ac_getconf=`getconf $ac_lfsvar`
1215
ac_getconf64=`getconf $ac_lfs64var`
1216
ac_getconfs=$ac_getconfs$ac_getconf\ $ac_getconf64
1217
eval ac_test_$ac_shellvar="\$ac_getconf\ \$ac_getconf64"
1219
case "$ac_result$ac_getconfs" in
1220
yes) ac_result=no ;;
1222
case "$ac_result$ac_set" in
1223
yes?*) ac_result="yes, but $ac_set is already set, so use its settings"
1225
AC_MSG_RESULT($ac_result)
1228
for ac_shellvar in $ac_shellvars; do
1229
eval $ac_shellvar=\$ac_test_$ac_shellvar
1235
dnl AC_SYS_RESTARTABLE_SYSCALLS tests only for restarted system calls
1236
dnl after a signal handler has been installed with signal(). Since
1237
dnl Bash uses sigaction() if it is available, we need to check whether
1238
dnl or not a signal handler installed with sigaction and SA_RESTART
1239
dnl causes system calls to be restarted after the signal is caught
1241
AC_DEFUN(BASH_SYS_RESTARTABLE_SYSCALLS,
1242
[AC_REQUIRE([BASH_SIGNAL_CHECK])
1243
AC_CACHE_CHECK(for restartable system calls with posix sigaction,
1244
bash_cv_sys_restartable_syscalls,
1246
[/* Exit 0 (true) if wait returns something other than -1,
1247
i.e. the pid of the child, which means that wait was restarted
1248
after getting the signal. */
1249
#include <sys/types.h>
1251
static int caught = 0;
1252
void ucatch (isig) int isig; { caught = 1; }
1255
#if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
1258
struct sigaction act, oact;
1261
act.sa_handler = ucatch;
1262
/* Might want to add SA_RESTART here, but bash's set_signal_handler
1265
sigemptyset(&act.sa_mask);
1266
sigemptyset(&oact.sa_mask);
1268
/* A possible race condition here, but in practice it never happens. */
1269
if (i == 0) { sleep (3); kill (getppid (), SIGINT); sleep (3); exit (0); }
1270
sigaction(SIGINT, &act, &oact);
1272
if (status == -1) wait(&i);
1273
exit (status == -1);
1276
], bash_cv_sys_restartable_syscalls=yes, bash_cv_sys_restartable_syscalls=no,
1277
AC_MSG_WARN(cannot check restartable syscalls if cross compiling))
1279
if test $bash_cv_sys_restartable_syscalls = yes; then
1280
AC_DEFINE(HAVE_RESTARTABLE_SYSCALLS)
1284
dnl Check for 64-bit off_t -- used for malloc alignment
1286
dnl C does not allow duplicate case labels, so the compile will fail if
1287
dnl sizeof(off_t) is > 4.
1289
AC_DEFUN(BASH_CHECK_OFF_T_64,
1290
[AC_CACHE_CHECK(for 64-bit off_t, bash_cv_off_t_64,
1292
#ifdef HAVE_UNISTD_H
1295
#include <sys/types.h>
1297
switch (0) case 0: case (sizeof (off_t) <= 4):;
1298
], bash_cv_off_t_64=no, bash_cv_off_t_64=yes))
1299
if test $bash_cv_off_t_64 = yes; then
1300
AC_DEFINE(HAVE_OFF_T_64)