This commit was generated by cvs2svn to track changes on a CVS vendor
[deliverable/binutils-gdb.git] / readline / aclocal.m4
1 dnl
2 dnl Bash specific tests
3 dnl
4 dnl Some derived from PDKSH 5.1.3 autoconf tests
5 dnl
6 dnl
7 dnl Check if dup2() does not clear the close on exec flag
8 dnl
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,
12 [AC_TRY_RUN([
13 #include <sys/types.h>
14 #include <fcntl.h>
15 main()
16 {
17 int fd1, fd2, fl;
18 fd1 = open("/dev/null", 2);
19 if (fcntl(fd1, 2, 1) < 0)
20 exit(1);
21 fd2 = dup2(fd1, 1);
22 if (fd2 < 0)
23 exit(2);
24 fl = fcntl(fd2, 1, 0);
25 /* fl will be 1 if dup2 did not reset the close-on-exec flag. */
26 exit(fl != 1);
27 }
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])
31 ])
32 AC_MSG_RESULT($bash_cv_dup2_broken)
33 if test $bash_cv_dup2_broken = yes; then
34 AC_DEFINE(DUP2_BROKEN)
35 fi
36 ])
37
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,
43 [
44 AC_TRY_LINK([#include <signal.h>],[
45 sigset_t ss;
46 struct sigaction sa;
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,
51 [
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,
56 [
57 AC_TRY_LINK([
58 #include <signal.h>
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
64 )]
65 )]
66 )
67 ])
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)
75 fi
76 ])
77
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,
83 [AC_TRY_RUN([
84 #ifdef HAVE_UNISTD_H
85 # include <unistd.h>
86 #endif
87 main()
88 {
89 # ifdef GETPGRP_VOID
90 # define getpgID() getpgrp()
91 # else
92 # define getpgID() getpgrp(0)
93 # define setpgid(x,y) setpgrp(x,y)
94 # endif
95 int pid1, pid2, fds[2];
96 int status;
97 char ok;
98
99 switch (pid1 = fork()) {
100 case -1:
101 exit(1);
102 case 0:
103 setpgid(0, getpid());
104 exit(0);
105 }
106 setpgid(pid1, pid1);
107
108 sleep(2); /* let first child die */
109
110 if (pipe(fds) < 0)
111 exit(2);
112
113 switch (pid2 = fork()) {
114 case -1:
115 exit(3);
116 case 0:
117 setpgid(0, pid1);
118 ok = getpgID() == pid1;
119 write(fds[1], &ok, 1);
120 exit(0);
121 }
122 setpgid(pid2, pid1);
123
124 close(fds[1]);
125 if (read(fds[0], &ok, 1) != 1)
126 exit(4);
127 wait(&status);
128 wait(&status);
129 exit(ok ? 0 : 5);
130 }
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])
134 ])
135 AC_MSG_RESULT($bash_cv_pgrp_pipe)
136 if test $bash_cv_pgrp_pipe = yes; then
137 AC_DEFINE(PGRP_PIPE)
138 fi
139 ])
140
141 dnl
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
144 dnl
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>
151 #if STDC_HEADERS
152 #include <stdlib.h>
153 #endif
154 $2
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
158 AC_DEFINE($4)
159 fi])
160 if test $bash_cv_type_$1 = no; then
161 AC_DEFINE($1, $3)
162 fi
163 ])
164
165 dnl
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.
170 dnl
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,[
177 AC_TRY_RUN([
178 #include <sys/types.h>
179 #include <sys/time.h>
180 #include <sys/resource.h>
181 main()
182 {
183 #ifdef HAVE_QUAD_T
184 struct rlimit rl;
185 if (sizeof(rl.rlim_cur) == sizeof(quad_t))
186 exit(0);
187 #endif
188 exit(1);
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])])
192 ])
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)
198 fi
199 ])
200
201 dnl
202 dnl Check for sys_siglist[] or _sys_siglist[]
203 dnl
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,
207 [AC_TRY_COMPILE([
208 #include <sys/types.h>
209 #include <signal.h>
210 #ifdef HAVE_UNISTD_H
211 #include <unistd.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)
218 fi
219 ])
220
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,
225 [AC_TRY_RUN([
226 #include <sys/types.h>
227 #include <signal.h>
228 #ifdef HAVE_UNISTD_H
229 #include <unistd.h>
230 #endif
231 #ifndef UNDER_SYS_SIGLIST_DECLARED
232 extern char *_sys_siglist[];
233 #endif
234 main()
235 {
236 char *msg = (char *)_sys_siglist[2];
237 exit(msg == 0);
238 }],
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)
245 fi
246 ])
247
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,
252 [AC_TRY_RUN([
253 #include <sys/types.h>
254 #include <signal.h>
255 #ifdef HAVE_UNISTD_H
256 #include <unistd.h>
257 #endif
258 #ifndef SYS_SIGLIST_DECLARED
259 extern char *sys_siglist[];
260 #endif
261 main()
262 {
263 char *msg = sys_siglist[2];
264 exit(msg == 0);
265 }],
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)
272 fi
273 ])
274
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[];
281 extern int sys_nerr;
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)
287 fi
288 ])
289
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,
295 [AC_TRY_RUN([
296 #include <stdio.h>
297 #include <sys/types.h>
298 #include <fcntl.h>
299 #ifdef HAVE_UNISTD_H
300 # include <unistd.h>
301 #endif /* HAVE_UNISTD_H */
302 #if defined(HAVE_DIRENT_H)
303 # include <dirent.h>
304 #else
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>
311 # endif /* SYSDIR */
312 # ifdef HAVE_NDIR_H
313 # include <ndir.h>
314 # endif
315 #endif /* HAVE_DIRENT_H */
316 main()
317 {
318 DIR *dir;
319 int fd;
320 unlink("/tmp/not_a_directory");
321 fd = open("/tmp/not_a_directory", O_WRONLY|O_CREAT, 0666);
322 write(fd, "\n", 1);
323 close(fd);
324 dir = opendir("/tmp/not_a_directory");
325 unlink("/tmp/not_a_directory");
326 exit (dir == 0);
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]
330 )])
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)
334 fi
335 ])
336
337 dnl
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>
342 #include <signal.h>
343 #ifdef signal
344 #undef signal
345 #endif
346 #ifdef __cplusplus
347 extern "C"
348 #endif
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)
354 fi
355 ])
356
357 AC_DEFUN(BASH_TYPE_INT32_T,
358 [
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)
363 else
364 AC_CHECK_TYPE(int32_t, int)
365 fi
366 ])
367
368 AC_DEFUN(BASH_TYPE_U_INT32_T,
369 [
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)
374 else
375 AC_CHECK_TYPE(u_int32_t, unsigned int)
376 fi
377 ])
378
379 AC_DEFUN(BASH_TYPE_PTRDIFF_T,
380 [
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)
385 else
386 AC_CHECK_TYPE(ptrdiff_t, int)
387 fi
388 ])
389
390 AC_DEFUN(BASH_TYPE_BITS64_T,
391 [
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)
398 else
399 AC_CHECK_TYPE(bits64_t, double)
400 fi
401 ])
402
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)
413 fi
414 ])
415
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,
420 [AC_TRY_LINK([
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)
427 fi
428 ])
429
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)
439 fi
440 ])
441
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)
451 fi
452 ])
453
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,
457 [AC_TRY_RUN([
458 #ifdef HAVE_UNISTD_H
459 # include <unistd.h>
460 #endif
461 #ifndef __STDC__
462 # ifndef const
463 # define const
464 # endif
465 #endif
466 char *
467 getenv (name)
468 #if defined (__linux__) || defined (__bsdi__) || defined (convex)
469 const char *name;
470 #else
471 char const *name;
472 #endif /* !__linux__ && !__bsdi__ && !convex */
473 {
474 return "42";
475 }
476 main()
477 {
478 char *s;
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
481 why not. */
482 #if defined (NeXT)
483 exit(1);
484 #endif
485 s = getenv("ABCDE");
486 exit(s == 0); /* force optimizer to leave getenv in */
487 }
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]
491 )])
492 AC_MSG_RESULT($bash_cv_getenv_redef)
493 if test $bash_cv_getenv_redef = yes; then
494 AC_DEFINE(CAN_REDEFINE_GETENV)
495 fi
496 ])
497
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,
501 [AC_TRY_RUN([
502 #include <stdio.h>
503 #ifdef __STDC__
504 typedef int (*_bashfunc)(const char *, ...);
505 #else
506 typedef int (*_bashfunc)();
507 #endif
508 main()
509 {
510 _bashfunc pf;
511 pf = (_bashfunc) printf;
512 exit(pf == 0);
513 }
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]
517 )])
518 AC_MSG_RESULT($bash_cv_printf_declared)
519 if test $bash_cv_printf_declared = yes; then
520 AC_DEFINE(PRINTF_DECLARED)
521 fi
522 ])
523
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,
527 [AC_TRY_RUN([
528 main()
529 {
530 long maxfds = ulimit(4, 0L);
531 exit (maxfds == -1L);
532 }
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]
536 )])
537 AC_MSG_RESULT($bash_cv_ulimit_maxfds)
538 if test $bash_cv_ulimit_maxfds = yes; then
539 AC_DEFINE(ULIMIT_MAXFDS)
540 fi
541 ])
542
543 AC_DEFUN(BASH_CHECK_LIB_TERMCAP,
544 [
545 if test "X$bash_cv_termcap_lib" = "X"; then
546 _bash_needmsg=yes
547 else
548 AC_MSG_CHECKING(which library has the termcap functions)
549 _bash_needmsg=
550 fi
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)
558 fi
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
566 TERMCAP_DEP=
567 elif test $bash_cv_termcap_lib = libncurses; then
568 TERMCAP_LIB=-lncurses
569 TERMCAP_DEP=
570 else
571 TERMCAP_LIB=-lcurses
572 TERMCAP_DEP=
573 fi
574 ])
575
576 AC_DEFUN(BASH_FUNC_GETCWD,
577 [AC_MSG_CHECKING([if getcwd() calls popen()])
578 AC_CACHE_VAL(bash_cv_getcwd_calls_popen,
579 [AC_TRY_RUN([
580 #include <stdio.h>
581 #ifdef HAVE_UNISTD_H
582 #include <unistd.h>
583 #endif
584
585 #ifndef __STDC__
586 #ifndef const
587 #define const
588 #endif
589 #endif
590
591 int popen_called;
592
593 FILE *
594 popen(command, type)
595 const char *command;
596 const char *type;
597 {
598 popen_called = 1;
599 return (FILE *)NULL;
600 }
601
602 FILE *_popen(command, type)
603 const char *command;
604 const char *type;
605 {
606 return (popen (command, type));
607 }
608
609 int
610 pclose(stream)
611 FILE *stream;
612 {
613 return 0;
614 }
615
616 int
617 _pclose(stream)
618 FILE *stream;
619 {
620 return 0;
621 }
622
623 main()
624 {
625 char lbuf[32];
626 popen_called = 0;
627 getcwd(lbuf, 32);
628 exit (popen_called);
629 }
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]
633 )])
634 AC_MSG_RESULT($bash_cv_getcwd_calls_popen)
635 if test $bash_cv_getcwd_calls_popen = yes; then
636 AC_DEFINE(GETCWD_BROKEN)
637 fi
638 ])
639
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,
644 [AC_TRY_COMPILE([
645 #include <stdio.h>
646 #include <sys/types.h>
647 #ifdef HAVE_UNISTD_H
648 # include <unistd.h>
649 #endif /* HAVE_UNISTD_H */
650 #if defined(HAVE_DIRENT_H)
651 # include <dirent.h>
652 #else
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>
659 # endif /* SYSDIR */
660 # ifdef HAVE_NDIR_H
661 # include <ndir.h>
662 # endif
663 #endif /* HAVE_DIRENT_H */
664 ],[
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)
670 fi
671 ])
672
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,
677 [AC_TRY_COMPILE([
678 #include <stdio.h>
679 #include <sys/types.h>
680 #ifdef HAVE_UNISTD_H
681 # include <unistd.h>
682 #endif /* HAVE_UNISTD_H */
683 #if defined(HAVE_DIRENT_H)
684 # include <dirent.h>
685 #else
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>
692 # endif /* SYSDIR */
693 # ifdef HAVE_NDIR_H
694 # include <ndir.h>
695 # endif
696 #endif /* HAVE_DIRENT_H */
697 ],[
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)
703 fi
704 ])
705
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,
711 [AC_TRY_RUN([
712 #include <signal.h>
713 #ifdef HAVE_UNISTD_H
714 #include <unistd.h>
715 #endif
716
717 typedef RETSIGTYPE sigfunc();
718
719 int nsigint;
720
721 #ifdef HAVE_POSIX_SIGNALS
722 sigfunc *
723 set_signal_handler(sig, handler)
724 int sig;
725 sigfunc *handler;
726 {
727 struct sigaction act, oact;
728 act.sa_handler = handler;
729 act.sa_flags = 0;
730 sigemptyset (&act.sa_mask);
731 sigemptyset (&oact.sa_mask);
732 sigaction (sig, &act, &oact);
733 return (oact.sa_handler);
734 }
735 #else
736 #define set_signal_handler(s, h) signal(s, h)
737 #endif
738
739 RETSIGTYPE
740 sigint(s)
741 int s;
742 {
743 nsigint++;
744 }
745
746 main()
747 {
748 nsigint = 0;
749 set_signal_handler(SIGINT, sigint);
750 kill((int)getpid(), SIGINT);
751 kill((int)getpid(), SIGINT);
752 exit(nsigint != 2);
753 }
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]
757 )])
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)
761 fi
762 ])
763
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)
772 fi
773 ])
774
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,
780 [AC_TRY_RUN([
781 #include <sys/types.h>
782 #ifdef HAVE_SYS_WAIT_H
783 #include <sys/wait.h>
784 #endif
785 #ifdef HAVE_UNISTD_H
786 #include <unistd.h>
787 #endif
788 #include <signal.h>
789
790 /* Add more tests in here as appropriate. */
791 main()
792 {
793 /* signal type */
794 #if !defined (HAVE_POSIX_SIGNALS) && !defined (HAVE_BSD_SIGNALS)
795 exit(1);
796 #endif
797
798 /* signals and tty control. */
799 #if !defined (SIGTSTP) || !defined (SIGSTOP) || !defined (SIGCONT)
800 exit (1);
801 #endif
802
803 /* process control */
804 #if !defined (WNOHANG) || !defined (WUNTRACED)
805 exit(1);
806 #endif
807
808 /* Posix systems have tcgetpgrp and waitpid. */
809 #if defined (_POSIX_VERSION) && !defined (HAVE_TCGETPGRP)
810 exit(1);
811 #endif
812
813 #if defined (_POSIX_VERSION) && !defined (HAVE_WAITPID)
814 exit(1);
815 #endif
816
817 /* Other systems have TIOCSPGRP/TIOCGPRGP and wait3. */
818 #if !defined (_POSIX_VERSION) && !defined (HAVE_WAIT3)
819 exit(1);
820 #endif
821
822 exit(0);
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]
826 )])
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)
830 fi
831 ])
832
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,
838 [AC_TRY_RUN([
839 #include <sys/types.h>
840 #include <sys/stat.h>
841 #ifdef HAVE_UNISTD_H
842 #include <unistd.h>
843 #endif
844
845 /* Add more tests in here as appropriate. */
846 main()
847 {
848 int fd;
849
850 #if defined (HAVE_MKFIFO)
851 exit (0);
852 #endif
853
854 #if !defined (S_IFIFO) && (defined (_POSIX_VERSION) && !defined (S_ISFIFO))
855 exit (1);
856 #endif
857
858 #if defined (NeXT)
859 exit (1);
860 #endif
861
862 fd = mknod ("/tmp/sh-np-autoconf", 0666 | S_IFIFO, 0);
863 if (fd == -1)
864 exit (1);
865 close(fd);
866 unlink ("/tmp/sh-np-autoconf");
867 exit(0);
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]
871 )])
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)
875 fi
876 ])
877
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,
882 [AC_TRY_RUN([
883 #ifdef HAVE_UNISTD_H
884 #include <unistd.h>
885 #endif
886 #include <sys/types.h>
887 #include <signal.h>
888 #include <setjmp.h>
889
890 main()
891 {
892 #if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
893 exit (1);
894 #else
895
896 int code;
897 sigset_t set, oset;
898 sigjmp_buf xx;
899
900 /* get the mask */
901 sigemptyset(&set);
902 sigemptyset(&oset);
903 sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set);
904 sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset);
905
906 /* save it */
907 code = sigsetjmp(xx, 1);
908 if (code)
909 exit(0); /* could get sigmask and compare to oset here. */
910
911 /* change it */
912 sigaddset(&set, SIGINT);
913 sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL);
914
915 /* and siglongjmp */
916 siglongjmp(xx, 10);
917 exit(1);
918 #endif
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]
922 )])
923 AC_MSG_RESULT($bash_cv_func_sigsetjmp)
924 if test $bash_cv_func_sigsetjmp = present; then
925 AC_DEFINE(HAVE_POSIX_SIGSETJMP)
926 fi
927 ])
928
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)
938 fi
939 ])
940
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)
950 ])])
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)
957 else
958 AC_MSG_RESULT(not found)
959 fi
960 ])
961
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)
971 fi
972 ])
973
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)
983 fi
984 ])
985
986 dnl
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).
991 dnl
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)
1000 fi
1001 ])
1002
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>
1007 #include <pwd.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)
1016 fi
1017 ])
1018
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
1026 else
1027 bash_cv_dev_fd=absent
1028 fi
1029 ])
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/")
1037 fi
1038 ])
1039
1040 dnl
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.
1046 dnl
1047 AC_DEFUN(BASH_CHECK_SOCKLIB,
1048 [
1049 if test "X$bash_cv_have_socklib" = "X"; then
1050 _bash_needmsg=
1051 else
1052 AC_MSG_CHECKING(for socket library)
1053 _bash_needmsg=yes
1054 fi
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)
1060 _bash_needmsg=
1061 fi
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
1065 _bash_needmsg=
1066 else
1067 AC_MSG_CHECKING(for libnsl)
1068 _bash_needmsg=yes
1069 fi
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)
1075 _bash_needmsg=
1076 fi
1077 if test $bash_cv_have_libnsl = yes; then
1078 LIBS="-lsocket -lnsl $LIBS"
1079 else
1080 LIBS="-lsocket $LIBS"
1081 fi
1082 AC_DEFINE(HAVE_LIBSOCKET)
1083 AC_DEFINE(HAVE_GETPEERNAME)
1084 fi
1085 ])
1086
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
1098 else
1099 bash_cv_mail_dir=unknown
1100 fi
1101 ])
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")
1111 else
1112 AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "unknown")
1113 fi
1114 ])
1115
1116 dnl
1117 dnl Check if HPUX needs _KERNEL defined for RLIMIT_* definitions
1118 dnl
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,
1122 [AC_TRY_COMPILE([
1123 #include <sys/types.h>
1124 #include <sys/resource.h>
1125 ],
1126 [
1127 int f;
1128 f = RLIMIT_DATA;
1129 ], bash_cv_kernel_rlimit=no,
1130 [AC_TRY_COMPILE([
1131 #include <sys/types.h>
1132 #define _KERNEL
1133 #include <sys/resource.h>
1134 #undef _KERNEL
1135 ],
1136 [
1137 int f;
1138 f = RLIMIT_DATA;
1139 ], bash_cv_kernel_rlimit=yes, bash_cv_kernel_rlimit=no)]
1140 )])
1141 AC_MSG_RESULT($bash_cv_kernel_rlimit)
1142 if test $bash_cv_kernel_rlimit = yes; then
1143 AC_DEFINE(RLIMIT_NEEDS_KERNEL)
1144 fi
1145 ])
1146
1147 AC_DEFUN(BASH_FUNC_STRCOLL,
1148 [
1149 AC_MSG_CHECKING(whether or not strcoll and strcmp differ)
1150 AC_CACHE_VAL(bash_cv_func_strcoll_broken,
1151 [AC_TRY_RUN([
1152 #include <stdio.h>
1153 #if defined (HAVE_LOCALE_H)
1154 #include <locale.h>
1155 #endif
1156
1157 main(c, v)
1158 int c;
1159 char *v[];
1160 {
1161 int r1, r2;
1162 char *deflocale, *defcoll;
1163
1164 #ifdef HAVE_SETLOCALE
1165 deflocale = setlocale(LC_ALL, "");
1166 defcoll = setlocale(LC_COLLATE, "");
1167 #endif
1168
1169 #ifdef HAVE_STRCOLL
1170 /* These two values are taken from tests/glob-test. */
1171 r1 = strcoll("abd", "aXd");
1172 #else
1173 r1 = 0;
1174 #endif
1175 r2 = strcmp("abd", "aXd");
1176
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
1179 same. */
1180
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);
1185 }
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]
1189 )])
1190 AC_MSG_RESULT($bash_cv_func_strcoll_broken)
1191 if test $bash_cv_func_strcoll_broken = yes; then
1192 AC_DEFINE(STRCOLL_BROKEN)
1193 fi
1194 ])
1195
1196 dnl
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)
1200 dnl
1201 AC_DEFUN(BASH_LARGE_FILE_SUPPORT,
1202 [AC_MSG_CHECKING(whether large file support needs explicit enabling)
1203 ac_getconfs=''
1204 ac_result=yes
1205 ac_set=''
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 ;;
1211 esac
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"
1218 done
1219 case "$ac_result$ac_getconfs" in
1220 yes) ac_result=no ;;
1221 esac
1222 case "$ac_result$ac_set" in
1223 yes?*) ac_result="yes, but $ac_set is already set, so use its settings"
1224 esac
1225 AC_MSG_RESULT($ac_result)
1226 case $ac_result in
1227 yes)
1228 for ac_shellvar in $ac_shellvars; do
1229 eval $ac_shellvar=\$ac_test_$ac_shellvar
1230 done ;;
1231 esac
1232 ])
1233
1234 dnl
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
1240 dnl
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,
1245 [AC_TRY_RUN(
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>
1250 #include <signal.h>
1251 static int caught = 0;
1252 void ucatch (isig) int isig; { caught = 1; }
1253 main ()
1254 {
1255 #if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
1256 exit (1);
1257 #else
1258 struct sigaction act, oact;
1259 int i, status;
1260
1261 act.sa_handler = ucatch;
1262 /* Might want to add SA_RESTART here, but bash's set_signal_handler
1263 does not. */
1264 act.sa_flags = 0;
1265 sigemptyset(&act.sa_mask);
1266 sigemptyset(&oact.sa_mask);
1267 i = fork ();
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);
1271 status = wait(&i);
1272 if (status == -1) wait(&i);
1273 exit (status == -1);
1274 #endif
1275 }
1276 ], bash_cv_sys_restartable_syscalls=yes, bash_cv_sys_restartable_syscalls=no,
1277 AC_MSG_WARN(cannot check restartable syscalls if cross compiling))
1278 ])
1279 if test $bash_cv_sys_restartable_syscalls = yes; then
1280 AC_DEFINE(HAVE_RESTARTABLE_SYSCALLS)
1281 fi
1282 ])
1283 dnl
1284 dnl Check for 64-bit off_t -- used for malloc alignment
1285 dnl
1286 dnl C does not allow duplicate case labels, so the compile will fail if
1287 dnl sizeof(off_t) is > 4.
1288 dnl
1289 AC_DEFUN(BASH_CHECK_OFF_T_64,
1290 [AC_CACHE_CHECK(for 64-bit off_t, bash_cv_off_t_64,
1291 AC_TRY_COMPILE([
1292 #ifdef HAVE_UNISTD_H
1293 #include <unistd.h>
1294 #endif
1295 #include <sys/types.h>
1296 ],[
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)
1301 fi])
This page took 0.080266 seconds and 5 git commands to generate.