blob: 905e7f2648c5961f034b93bd1abde4628b220bb0 [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>],
211[struct prstatus s; s.pr_syscall;],
212ac_cv_struct_pr_syscall=yes,
213ac_cv_struct_pr_syscall=no)])
214AC_MSG_RESULT($ac_cv_struct_pr_syscall)
215if test "$ac_cv_struct_pr_syscall" = yes
216then
217 AC_DEFINE(HAVE_PR_SYSCALL)
218fi
219])
220
221dnl ### A macro to detect the presence of the sig_atomic_t in signal.h
222AC_DEFUN(AC_SIG_ATOMIC_T,
223[AC_MSG_CHECKING(for sig_atomic_t in signal.h)
224AC_CACHE_VAL(ac_cv_sig_atomic_t,
225[AC_TRY_COMPILE([#include <signal.h>],
226[sig_atomic_t x;],
227ac_cv_sig_atomic_t=yes,
228ac_cv_sig_atomic_t=no)])
229AC_MSG_RESULT($ac_cv_sig_atomic_t)
230if test "$ac_cv_sig_atomic_t" = yes
231then
232 AC_DEFINE(HAVE_SIG_ATOMIC_T)
233fi
234])
235
236dnl ### A macro to determine if sys_errlist is declared.
237AC_DEFUN(AC_DECL_SYS_ERRLIST,
238[AC_MSG_CHECKING([for sys_errlist declaration])
239AC_CACHE_VAL(ac_cv_decl_sys_errlist,
240[AC_TRY_COMPILE([#include <sys/types.h>
241#include <errno.h>
242#include <stdio.h>
243/* Somebody might declare sys_errlist in unistd.h. */
244#ifdef HAVE_UNISTD_H
245#include <unistd.h>
246#endif], [char *msg = *(sys_errlist + 1);],
247 ac_cv_decl_sys_errlist=yes, ac_cv_decl_sys_errlist=no)])dnl
248AC_MSG_RESULT($ac_cv_decl_sys_errlist)
249if test $ac_cv_decl_sys_errlist = yes; then
250 AC_DEFINE(SYS_ERRLIST_DECLARED)
251fi
252])
253
254dnl ### A macro to determine if _sys_siglist is declared.
255AC_DEFUN(AC_DECL__SYS_SIGLIST,
256[AC_MSG_CHECKING([for _sys_siglist declaration])
257AC_CACHE_VAL(ac_cv_decl__sys_siglist,
258[AC_TRY_COMPILE([#include <sys/types.h>
259#include <signal.h>
260/* Somebody might declare _sys_siglist in unistd.h. */
261#ifdef HAVE_UNISTD_H
262#include <unistd.h>
263#endif], [char *msg = *(_sys_siglist + 1);],
264 ac_cv_decl__sys_siglist=yes, ac_cv_decl__sys_siglist=no)])dnl
265AC_MSG_RESULT($ac_cv_decl__sys_siglist)
266if test $ac_cv_decl__sys_siglist = yes; then
267 AC_DEFINE(SYS_SIGLIST_DECLARED)
268fi
269])
270
271dnl ### A macro to determine if the msghdr structure has a msg_control member.
272AC_DEFUN(AC_STRUCT_MSG_CONTROL,
273[AC_MSG_CHECKING(for msg_control in struct msghdr)
274AC_CACHE_VAL(ac_cv_struct_msg_control,
275[AC_TRY_COMPILE([#include <sys/types.h>
276#include <sys/socket.h>],
277[#undef msg_control
278struct msghdr m; m.msg_control;],
279ac_cv_struct_msg_control=yes,
280ac_cv_struct_msg_control=no)])
281AC_MSG_RESULT($ac_cv_struct_msg_control)
282if test "$ac_cv_struct_msg_control" = yes
283then
284 AC_DEFINE(HAVE_MSG_CONTROL)
285fi
286])
Ulrich Drepperb8601b01999-12-24 08:02:15 +0000287
288dnl ### A macro to determine whether stat64 is defined.
289AC_DEFUN(AC_STAT64,
290[AC_MSG_CHECKING(for stat64 in asm/stat.h)
291AC_CACHE_VAL(ac_cv_type_stat64,
292[AC_TRY_COMPILE([#include <asm/stat.h>],
293[struct stat64 st;],
294ac_cv_type_stat64=yes,
295ac_cv_type_stat64no)])
296AC_MSG_RESULT($ac_cv_type_stat64)
297if test "$ac_cv_type_stat64" = yes
298then
299 AC_DEFINE(HAVE_STAT64)
300fi
301])