blob: c9e6ab1c8113938ae08e631654fb6e3004780128 [file] [log] [blame]
Wichert Akkerman76baf7c1999-02-19 00:21:36 +00001dnl ### A macro to find the include directory, useful for cross-compiling.
2AC_DEFUN(AC_INCLUDEDIR,
3[AC_REQUIRE([AC_PROG_AWK])dnl
4AC_SUBST(includedir)
5AC_MSG_CHECKING(for primary include directory)
6includedir=/usr/include
7if test -n "$GCC"
8then
9 >conftest.c
10 new_includedir=`
11 $CC -v -E conftest.c 2>&1 | $AWK '
12 /^End of search list/ { print last; exit }
13 { last = [$]1 }
14 '
15 `
16 rm -f conftest.c
17 if test -n "$new_includedir" && test -d "$new_includedir"
18 then
19 includedir=$new_includedir
20 fi
21fi
22AC_MSG_RESULT($includedir)
23])
24
25dnl ### A macro to automatically set different CC and HOSTCC if using gcc.
26define(AC_PROG_HOSTCC,
27[AC_SUBST(HOSTCC)dnl
28if test -z "$HOSTCC"
29then
30 HOSTCC="$CC"
31 if test -n "$GCC"
32 then
33 # Find out if gcc groks our host.
34 worked=
35 last=
36 for i in $1
37 do
38 test "x$i" = "x$last" && continue
39 last="$i"
40 CC="$HOSTCC -b $i"
41 AC_MSG_CHECKING([for working $CC])
42 AC_TRY_LINK(,,
43 worked=1
44 break
45 )
46 AC_MSG_RESULT(no)
47 done
48 if test -z "$worked"
49 then
50 CC="$HOSTCC"
51 else
52 AC_MSG_RESULT(yes)
53 fi
54 fi
55fi
56])
57
58dnl ### A macro to set gcc warning flags.
59define(AC_WARNFLAGS,
60[AC_SUBST(WARNFLAGS)
61if test -z "$WARNFLAGS"
62then
63 if test -n "$GCC"
64 then
65 # If we're using gcc we want warning flags.
66 WARNFLAGS=-Wall
67 fi
68fi
69])
70
Wichert Akkermanea78f0f1999-11-29 15:34:02 +000071dnl ### A macro to determine if we have a "MP" type procfs
72AC_DEFUN(AC_MP_PROCFS,
73[AC_MSG_CHECKING(for MP procfs)
74AC_CACHE_VAL(ac_cv_mp_procfs,
75[AC_TRY_RUN([
76#include <stdio.h>
77#include <signal.h>
78#include <sys/procfs.h>
79
80main()
81{
82 int pid;
83 char proc[32];
84 FILE *ctl;
85 FILE *status;
86 int cmd;
87 struct pstatus pstatus;
88
89 if ((pid = fork()) == 0) {
90 pause();
91 exit(0);
92 }
93 sprintf(proc, "/proc/%d/ctl", pid);
94 if ((ctl = fopen(proc, "w")) == NULL)
95 goto fail;
96 sprintf(proc, "/proc/%d/status", pid);
97 if ((status = fopen (proc, "r")) == NULL)
98 goto fail;
99 cmd = PCSTOP;
100 if (write (fileno (ctl), &cmd, sizeof cmd) < 0)
101 goto fail;
102 if (read (fileno (status), &pstatus, sizeof pstatus) < 0)
103 goto fail;
104 kill(pid, SIGKILL);
105 exit(0);
106fail:
107 kill(pid, SIGKILL);
108 exit(1);
109}
110],
111ac_cv_mp_procfs=yes,
112ac_cv_mp_procfs=no,
113[
114# Guess or punt.
115case "$host_os" in
116svr4.2*|svr5*)
117 ac_cv_mp_procfs=yes
118 ;;
119*)
120 ac_cv_mp_procfs=no
121 ;;
122esac
123])])
124AC_MSG_RESULT($ac_cv_mp_procfs)
125if test "$ac_cv_mp_procfs" = yes
126then
127 AC_DEFINE(HAVE_MP_PROCFS)
128fi
129])
130
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000131dnl ### A macro to determine if procfs is pollable.
132AC_DEFUN(AC_POLLABLE_PROCFS,
133[AC_MSG_CHECKING(for pollable procfs)
134AC_CACHE_VAL(ac_cv_pollable_procfs,
135[AC_TRY_RUN([
136#include <stdio.h>
137#include <signal.h>
138#include <sys/procfs.h>
139#include <sys/stropts.h>
140#include <poll.h>
141
Wichert Akkermanea78f0f1999-11-29 15:34:02 +0000142#ifdef HAVE_MP_PROCFS
143#define PIOCSTOP PCSTOP
144#define POLLWANT POLLWRNORM
145#define PROC "/proc/%d/ctl"
146#define PROC_MODE "w"
147int IOCTL (int fd, int cmd, int arg) {
148 return write (fd, &cmd, sizeof cmd);
149}
150#else
151#define POLLWANT POLLPRI
152#define PROC "/proc/%d"
153#define PROC_MODE "r+"
154#define IOCTL ioctl
155#endif
156
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000157main()
158{
159 int pid;
160 char proc[32];
161 FILE *pfp;
162 struct pollfd pfd;
163
164 if ((pid = fork()) == 0) {
165 pause();
166 exit(0);
167 }
Wichert Akkermanea78f0f1999-11-29 15:34:02 +0000168 sprintf(proc, PROC, pid);
169 if ((pfp = fopen(proc, PROC_MODE)) == NULL)
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000170 goto fail;
Wichert Akkermanea78f0f1999-11-29 15:34:02 +0000171 if (IOCTL(fileno(pfp), PIOCSTOP, NULL) < 0)
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000172 goto fail;
173 pfd.fd = fileno(pfp);
Wichert Akkermanea78f0f1999-11-29 15:34:02 +0000174 pfd.events = POLLWANT;
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000175 if (poll(&pfd, 1, 0) < 0)
176 goto fail;
Wichert Akkermanea78f0f1999-11-29 15:34:02 +0000177 if (!(pfd.revents & POLLWANT))
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000178 goto fail;
179 kill(pid, SIGKILL);
180 exit(0);
181fail:
182 kill(pid, SIGKILL);
183 exit(1);
184}
185],
186ac_cv_pollable_procfs=yes,
187ac_cv_pollable_procfs=no,
188[
189# Guess or punt.
190case "$host_os" in
Wichert Akkermanea78f0f1999-11-29 15:34:02 +0000191solaris2*|irix5*|svr4.2uw*|svr5*)
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000192 ac_cv_pollable_procfs=yes
193 ;;
194*)
195 ac_cv_pollable_procfs=no
196 ;;
197esac
198])])
199AC_MSG_RESULT($ac_cv_pollable_procfs)
200if test "$ac_cv_pollable_procfs" = yes
201then
202 AC_DEFINE(HAVE_POLLABLE_PROCFS)
203fi
204])
205
206dnl ### A macro to determine if the prstatus structure has a pr_syscall member.
207AC_DEFUN(AC_STRUCT_PR_SYSCALL,
208[AC_MSG_CHECKING(for pr_syscall in struct prstatus)
209AC_CACHE_VAL(ac_cv_struct_pr_syscall,
210[AC_TRY_COMPILE([#include <sys/procfs.h>],
John Hughes25299712001-03-06 10:10:06 +0000211[#ifdef HAVE_MP_PROCFS
212pstatus_t s;
213s.pr_lwp.pr_syscall
214#else
215prstatus_t s;
216s.pr_syscall
217#endif],
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000218ac_cv_struct_pr_syscall=yes,
219ac_cv_struct_pr_syscall=no)])
220AC_MSG_RESULT($ac_cv_struct_pr_syscall)
221if test "$ac_cv_struct_pr_syscall" = yes
222then
223 AC_DEFINE(HAVE_PR_SYSCALL)
224fi
225])
226
227dnl ### A macro to detect the presence of the sig_atomic_t in signal.h
228AC_DEFUN(AC_SIG_ATOMIC_T,
229[AC_MSG_CHECKING(for sig_atomic_t in signal.h)
230AC_CACHE_VAL(ac_cv_sig_atomic_t,
231[AC_TRY_COMPILE([#include <signal.h>],
232[sig_atomic_t x;],
233ac_cv_sig_atomic_t=yes,
234ac_cv_sig_atomic_t=no)])
235AC_MSG_RESULT($ac_cv_sig_atomic_t)
236if test "$ac_cv_sig_atomic_t" = yes
237then
238 AC_DEFINE(HAVE_SIG_ATOMIC_T)
239fi
240])
241
John Hughes58265892001-10-18 15:13:53 +0000242dnl ### A macro to detect the presence of the siginfo_t in signal.h
243AC_DEFUN(AC_SIGINFO_T,
244[AC_MSG_CHECKING(for siginfo_t in signal.h)
245AC_CACHE_VAL(ac_cv_siginfo_t,
246[AC_TRY_COMPILE([#include <signal.h>],
247[siginfo_t x;],
248ac_cv_siginfo_t=yes,
249ac_cv_siginfo_t=no)])
250AC_MSG_RESULT($ac_cv_siginfo_t)
251if test "$ac_cv_siginfo_t" = yes
252then
253 AC_DEFINE(HAVE_SIGINFO_T)
254fi
255])
256
Wichert Akkerman76baf7c1999-02-19 00:21:36 +0000257dnl ### A macro to determine if sys_errlist is declared.
258AC_DEFUN(AC_DECL_SYS_ERRLIST,
259[AC_MSG_CHECKING([for sys_errlist declaration])
260AC_CACHE_VAL(ac_cv_decl_sys_errlist,
261[AC_TRY_COMPILE([#include <sys/types.h>
262#include <errno.h>
263#include <stdio.h>
264/* Somebody might declare sys_errlist in unistd.h. */
265#ifdef HAVE_UNISTD_H
266#include <unistd.h>
267#endif], [char *msg = *(sys_errlist + 1);],
268 ac_cv_decl_sys_errlist=yes, ac_cv_decl_sys_errlist=no)])dnl
269AC_MSG_RESULT($ac_cv_decl_sys_errlist)
270if test $ac_cv_decl_sys_errlist = yes; then
271 AC_DEFINE(SYS_ERRLIST_DECLARED)
272fi
273])
274
275dnl ### A macro to determine if _sys_siglist is declared.
276AC_DEFUN(AC_DECL__SYS_SIGLIST,
277[AC_MSG_CHECKING([for _sys_siglist declaration])
278AC_CACHE_VAL(ac_cv_decl__sys_siglist,
279[AC_TRY_COMPILE([#include <sys/types.h>
280#include <signal.h>
281/* Somebody might declare _sys_siglist in unistd.h. */
282#ifdef HAVE_UNISTD_H
283#include <unistd.h>
284#endif], [char *msg = *(_sys_siglist + 1);],
285 ac_cv_decl__sys_siglist=yes, ac_cv_decl__sys_siglist=no)])dnl
286AC_MSG_RESULT($ac_cv_decl__sys_siglist)
287if test $ac_cv_decl__sys_siglist = yes; then
288 AC_DEFINE(SYS_SIGLIST_DECLARED)
289fi
290])
291
292dnl ### A macro to determine if the msghdr structure has a msg_control member.
293AC_DEFUN(AC_STRUCT_MSG_CONTROL,
294[AC_MSG_CHECKING(for msg_control in struct msghdr)
295AC_CACHE_VAL(ac_cv_struct_msg_control,
296[AC_TRY_COMPILE([#include <sys/types.h>
297#include <sys/socket.h>],
298[#undef msg_control
299struct msghdr m; m.msg_control;],
300ac_cv_struct_msg_control=yes,
301ac_cv_struct_msg_control=no)])
302AC_MSG_RESULT($ac_cv_struct_msg_control)
303if test "$ac_cv_struct_msg_control" = yes
304then
305 AC_DEFINE(HAVE_MSG_CONTROL)
306fi
307])
Ulrich Drepperb8601b01999-12-24 08:02:15 +0000308
309dnl ### A macro to determine whether stat64 is defined.
310AC_DEFUN(AC_STAT64,
John Hughes8fe2c982001-03-06 09:45:18 +0000311[AC_MSG_CHECKING(for stat64 in (asm|sys)/stat.h)
Ulrich Drepperb8601b01999-12-24 08:02:15 +0000312AC_CACHE_VAL(ac_cv_type_stat64,
John Hughes8fe2c982001-03-06 09:45:18 +0000313[AC_TRY_COMPILE([#ifdef linux
314#include <asm/stat.h>
315#else
316#include <sys/stat.h>
317#endif],
Ulrich Drepperb8601b01999-12-24 08:02:15 +0000318[struct stat64 st;],
319ac_cv_type_stat64=yes,
Wichert Akkerman5597f892000-01-27 00:41:54 +0000320ac_cv_type_stat64=no)])
Ulrich Drepperb8601b01999-12-24 08:02:15 +0000321AC_MSG_RESULT($ac_cv_type_stat64)
322if test "$ac_cv_type_stat64" = yes
323then
324 AC_DEFINE(HAVE_STAT64)
325fi
326])
Wichert Akkerman16a03d22000-08-10 02:14:04 +0000327
328dnl ### A macro to determine whether we have long long
329AC_DEFUN(AC_LONG_LONG,
330[AC_MSG_CHECKING(for long long)
331AC_CACHE_VAL(ac_cv_type_long_long,
332[AC_TRY_COMPILE([],
333[long long x = 20;],
334ac_cv_type_long_long=yes,
335ac_cv_type_long_long=no)])
336AC_MSG_RESULT($ac_cv_type_long_long)
337if test "$ac_cv_type_long_long" = yes
338then
339 AC_DEFINE(HAVE_LONG_LONG)
340fi
341])
Wichert Akkermanf1850652001-02-16 20:29:03 +0000342
John Hughes70623be2001-03-08 13:59:00 +0000343dnl ### A macro to determine if off_t is a long long
344AC_DEFUN(AC_OFF_T_IS_LONG_LONG,
345[AC_MSG_CHECKING(for long long off_t)
346AC_CACHE_VAL(ac_cv_have_long_long_off_t,
347[AC_TRY_RUN([#include <sys/types.h>
348main () {
349 if (sizeof (off_t) == sizeof (long long) &&
350 sizeof (off_t) > sizeof (long))
351 return 0;
352 return 1;
353}
354],
355ac_cv_have_long_long_off_t=yes,
356ac_cv_have_long_long_off_t=no,
357[# Should try to guess here
358ac_cv_have_long_long_off_t=no
359])])
360AC_MSG_RESULT($ac_cv_have_long_long_off_t)
361if test "$ac_cv_have_long_long_off_t" = yes
362then
363 AC_DEFINE(HAVE_LONG_LONG_OFF_T)
364fi
365])
366
367dnl ### A macro to determine if rlim_t is a long long
368AC_DEFUN(AC_RLIM_T_IS_LONG_LONG,
369[AC_MSG_CHECKING(for long long rlim_t)
370AC_CACHE_VAL(ac_cv_have_long_long_rlim_t,
371[AC_TRY_RUN([#include <sys/types.h>
372#include <sys/time.h>
373#include <sys/resource.h>
374main () {
375 if (sizeof (rlim_t) == sizeof (long long) &&
376 sizeof (rlim_t) > sizeof (long))
377 return 0;
378 return 1;
379}
380],
381ac_cv_have_long_long_rlim_t=yes,
382ac_cv_have_long_long_rlim_t=no,
383[# Should try to guess here
384ac_cv_have_long_long_rlim_t=no
385])])
386AC_MSG_RESULT($ac_cv_have_long_long_rlim_t)
387if test "$ac_cv_have_long_long_rlim_t" = yes
388then
389 AC_DEFINE(HAVE_LONG_LONG_RLIM_T)
390fi
391])
392
Wichert Akkermanf1850652001-02-16 20:29:03 +0000393dnl ### A macro to determine whether sin6_scope_id is available.
394AC_DEFUN(AC_SIN6_SCOPE_ID,
395[AC_MSG_CHECKING(for sin6_scope_id in sockaddr_in6)
396AC_CACHE_VAL(ac_cv_have_sin6_scope_id,
397[AC_TRY_COMPILE([#include <netinet/in.h>],
398[ struct sockaddr_in6 s; s.sin6_scope_id = 0; ],
399ac_cv_have_sin6_scope_id=yes,
400ac_cv_have_sin6_scope_id=no)])
401AC_MSG_RESULT($ac_cv_have_sin6_scope_id)
402if test "$ac_cv_have_sin6_scope_id" = "yes" ; then
403 AC_DEFINE(HAVE_SIN6_SCOPE_ID)
404else
405 AC_MSG_CHECKING(for sin6_scope_id in linux sockaddr_in6)
406 AC_CACHE_VAL(ac_cv_have_sin6_scope_id_linux,
407 [AC_TRY_COMPILE([#include <linux/in6.h>],
408 [ struct sockaddr_in6 s; s.sin6_scope_id = 0; ],
409 ac_cv_have_sin6_scope_id_linux=yes,
410 ac_cv_have_sin6_scope_id_linux=no)])
411 AC_MSG_RESULT($ac_cv_have_sin6_scope_id_linux)
412 if test "$ac_cv_have_sin6_scope_id_linux" = "yes" ; then
413 AC_DEFINE(HAVE_SIN6_SCOPE_ID)
414 AC_DEFINE(HAVE_SIN6_SCOPE_ID_LINUX)
415 fi
416fi
417])
418
John Hughesc0fc3fd2001-03-08 16:10:40 +0000419dnl ### A macro to check for st_flags in struct stat
420AC_DEFUN(AC_ST_FLAGS,
421[AC_MSG_CHECKING(for st_flags in struct stat)
422AC_CACHE_VAL(ac_cv_have_st_flags,
423[AC_TRY_COMPILE([#include <sys/stat.h>],
424[struct stat buf;
425buf.st_flags = 0;],
426ac_cv_have_st_flags=yes,
427ac_cv_have_st_flags=no)])
428AC_MSG_RESULT($ac_cv_have_st_flags)
429if test "$ac_cv_have_st_flags" = yes
430then
431 AC_DEFINE(HAVE_ST_FLAGS)
432fi
433])
434
435dnl ### A macro to check for st_aclcnt in struct stat
436AC_DEFUN(AC_ST_ACLCNT,
437[AC_MSG_CHECKING(for st_aclcnt in struct stat)
438AC_CACHE_VAL(ac_cv_have_st_aclcnt,
439[AC_TRY_COMPILE([#include <sys/stat.h>],
440[struct stat buf;
441buf.st_aclcnt = 0;],
442ac_cv_have_st_aclcnt=yes,
443ac_cv_have_st_aclcnt=no)])
444AC_MSG_RESULT($ac_cv_have_st_aclcnt)
445if test "$ac_cv_have_st_aclcnt" = yes
446then
447 AC_DEFINE(HAVE_ST_ACLCNT)
448fi
449])
450
451dnl ### A macro to check for st_level in struct stat
452AC_DEFUN(AC_ST_LEVEL,
453[AC_MSG_CHECKING(for st_level in struct stat)
454AC_CACHE_VAL(ac_cv_have_st_level,
455[AC_TRY_COMPILE([#include <sys/stat.h>],
456[struct stat buf;
457buf.st_level = 0;],
458ac_cv_have_st_level=yes,
459ac_cv_have_st_level=no)])
460AC_MSG_RESULT($ac_cv_have_st_level)
461if test "$ac_cv_have_st_level" = yes
462then
463 AC_DEFINE(HAVE_ST_LEVEL)
464fi
465])
466
467dnl ### A macro to check for st_fstype in struct stat
468AC_DEFUN(AC_ST_FSTYPE,
469[AC_MSG_CHECKING(for st_fstype in struct stat)
470AC_CACHE_VAL(ac_cv_have_st_fstype,
471[AC_TRY_COMPILE([#include <sys/stat.h>],
472[struct stat buf;
473buf.st_fstype[0] = 0;],
474ac_cv_have_st_fstype=yes,
475ac_cv_have_st_fstype=no)])
476AC_MSG_RESULT($ac_cv_have_st_fstype)
477if test "$ac_cv_have_st_fstype" = yes
478then
479 AC_DEFINE(HAVE_ST_FSTYPE)
480fi
481])
482
483dnl ### A macro to check for st_gen in struct stat
484AC_DEFUN(AC_ST_GEN,
485[AC_MSG_CHECKING(for st_gen in struct stat)
486AC_CACHE_VAL(ac_cv_have_st_gen,
487[AC_TRY_COMPILE([#include <sys/stat.h>],
488[struct stat buf;
489buf.st_gen = 0;],
490ac_cv_have_st_gen=yes,
491ac_cv_have_st_gen=no)])
492AC_MSG_RESULT($ac_cv_have_st_gen)
493if test "$ac_cv_have_st_gen" = yes
494then
495 AC_DEFINE(HAVE_ST_GEN)
496fi
497])
498
John Hughesb8a85a42001-03-28 08:05:27 +0000499dnl ### A macro to determine endianness of long long
500AC_DEFUN(AC_LITTLE_ENDIAN_LONG_LONG,
501[AC_MSG_CHECKING(for little endian long long)
502AC_CACHE_VAL(ac_cv_have_little_endian_long_long,
503[AC_TRY_RUN([
504int main () {
505 union {
506 long long ll;
507 long l [2];
508 } u;
509 u.ll = 0x12345678;
510 if (u.l[0] == 0x12345678)
511 return 0;
512 return 1;
513}
514],
515ac_cv_have_little_endian_long_long=yes,
516ac_cv_have_little_endian_long_long=no,
517[# Should try to guess here
518ac_cv_have_little_endian_long_long=no
519])])
520AC_MSG_RESULT($ac_cv_have_little_endian_long_long)
521if test "$ac_cv_have_little_endian_long_long" = yes
522then
523 AC_DEFINE(HAVE_LITTLE_ENDIAN_LONG_LONG)
524fi
525])
526