Imported Upstream version 1.6.6
[debian/sudo] / aclocal.m4
1 dnl Local m4 macors for autoconf (used by sudo)
2 dnl
3 dnl Copyright (c) 1994-1996,1998-2002 Todd C. Miller <Todd.Miller@courtesan.com>
4 dnl
5 dnl XXX - should cache values in all cases!!!
6 dnl
7 dnl checks for programs
8
9 dnl
10 dnl check for sendmail
11 dnl
12 AC_DEFUN(SUDO_PROG_SENDMAIL, [AC_MSG_CHECKING(for sendmail)
13 if test -f "/usr/sbin/sendmail"; then
14     AC_MSG_RESULT(/usr/sbin/sendmail)
15     SUDO_DEFINE(_PATH_SUDO_SENDMAIL, "/usr/sbin/sendmail")
16 elif test -f "/usr/lib/sendmail"; then
17     AC_MSG_RESULT(/usr/lib/sendmail)
18     SUDO_DEFINE(_PATH_SUDO_SENDMAIL, "/usr/lib/sendmail")
19 elif test -f "/usr/etc/sendmail"; then
20     AC_MSG_RESULT(/usr/etc/sendmail)
21     SUDO_DEFINE(_PATH_SUDO_SENDMAIL, "/usr/etc/sendmail")
22 elif test -f "/usr/ucblib/sendmail"; then
23     AC_MSG_RESULT(/usr/ucblib/sendmail)
24     SUDO_DEFINE(_PATH_SUDO_SENDMAIL, "/usr/ucblib/sendmail")
25 elif test -f "/usr/local/lib/sendmail"; then
26     AC_MSG_RESULT(/usr/local/lib/sendmail)
27     SUDO_DEFINE(_PATH_SUDO_SENDMAIL, "/usr/local/lib/sendmail")
28 elif test -f "/usr/local/bin/sendmail"; then
29     AC_MSG_RESULT(/usr/local/bin/sendmail)
30     SUDO_DEFINE(_PATH_SUDO_SENDMAIL, "/usr/local/bin/sendmail")
31 else
32     AC_MSG_RESULT(not found)
33 fi
34 ])dnl
35
36 dnl
37 dnl check for vi
38 dnl
39 AC_DEFUN(SUDO_PROG_VI, [AC_MSG_CHECKING(for vi)
40 if test -f "/usr/bin/vi"; then
41     AC_MSG_RESULT(/usr/bin/vi)
42     SUDO_DEFINE(_PATH_VI, "/usr/bin/vi")
43 elif test -f "/usr/ucb/vi"; then
44     AC_MSG_RESULT(/usr/ucb/vi)
45     SUDO_DEFINE(_PATH_VI, "/usr/ucb/vi")
46 elif test -f "/usr/bsd/vi"; then
47     AC_MSG_RESULT(/usr/bsd/vi)
48     SUDO_DEFINE(_PATH_VI, "/usr/bsd/vi")
49 elif test -f "/bin/vi"; then
50     AC_MSG_RESULT(/bin/vi)
51     SUDO_DEFINE(_PATH_VI, "/bin/vi")
52 elif test -f "/usr/local/bin/vi"; then
53     AC_MSG_RESULT(/usr/local/bin/vi)
54     SUDO_DEFINE(_PATH_VI, "/usr/local/bin/vi")
55 else
56     AC_MSG_RESULT(not found)
57 fi
58 ])dnl
59
60 dnl
61 dnl check for mv
62 dnl
63 AC_DEFUN(SUDO_PROG_MV, [AC_MSG_CHECKING(for mv)
64 if test -f "/usr/bin/mv"; then
65     AC_MSG_RESULT(/usr/bin/mv)
66     SUDO_DEFINE(_PATH_MV, "/usr/bin/mv")
67 elif test -f "/bin/mv"; then
68     AC_MSG_RESULT(/bin/mv)
69     SUDO_DEFINE(_PATH_MV, "/bin/mv")
70 elif test -f "/usr/ucb/mv"; then
71     AC_MSG_RESULT(/usr/ucb/mv)
72     SUDO_DEFINE(_PATH_MV, "/usr/ucb/mv")
73 elif test -f "/usr/sbin/mv"; then
74     AC_MSG_RESULT(/usr/sbin/mv)
75     SUDO_DEFINE(_PATH_MV, "/usr/sbin/mv")
76 else
77     AC_MSG_RESULT(not found)
78 fi
79 ])dnl
80
81 dnl
82 dnl check for bourne shell
83 dnl
84 AC_DEFUN(SUDO_PROG_BSHELL, [AC_MSG_CHECKING(for bourne shell)
85 if test -f "/bin/sh"; then
86     AC_MSG_RESULT(/bin/sh)
87     SUDO_DEFINE(_PATH_BSHELL, "/bin/sh")
88 elif test -f "/usr/bin/sh"; then
89     AC_MSG_RESULT(/usr/bin/sh)
90     SUDO_DEFINE(_PATH_BSHELL, "/usr/bin/sh")
91 elif test -f "/sbin/sh"; then
92     AC_MSG_RESULT(/sbin/sh)
93     SUDO_DEFINE(_PATH_BSHELL, "/sbin/sh")
94 elif test -f "/usr/sbin/sh"; then
95     AC_MSG_RESULT(/usr/sbin/sh)
96     SUDO_DEFINE(_PATH_BSHELL, "/usr/sbin/sh")
97 elif test -f "/bin/ksh"; then
98     AC_MSG_RESULT(/bin/ksh)
99     SUDO_DEFINE(_PATH_BSHELL, "/bin/ksh")
100 elif test -f "/usr/bin/ksh"; then
101     AC_MSG_RESULT(/usr/bin/ksh)
102     SUDO_DEFINE(_PATH_BSHELL, "/usr/bin/ksh")
103 elif test -f "/bin/bash"; then
104     AC_MSG_RESULT(/bin/bash)
105     SUDO_DEFINE(_PATH_BSHELL, "/bin/bash")
106 elif test -f "/usr/bin/bash"; then
107     AC_MSG_RESULT(/usr/bin/bash)
108     SUDO_DEFINE(_PATH_BSHELL, "/usr/bin/bash")
109 else
110     AC_MSG_RESULT(not found)
111 fi
112 ])dnl
113
114 dnl
115 dnl Where the log file goes, use /var/log if it exists, else /{var,usr}/adm
116 dnl
117 AC_DEFUN(SUDO_LOGFILE, [AC_MSG_CHECKING(for log file location)
118 if test -n "$with_logpath"; then
119     AC_MSG_RESULT($with_logpath)
120     SUDO_DEFINE_UNQUOTED(_PATH_SUDO_LOGFILE, "$with_logpath")
121 elif test -d "/var/log"; then
122     AC_MSG_RESULT(/var/log/sudo.log)
123     SUDO_DEFINE(_PATH_SUDO_LOGFILE, "/var/log/sudo.log")
124 elif test -d "/var/adm"; then
125     AC_MSG_RESULT(/var/adm/sudo.log)
126     SUDO_DEFINE(_PATH_SUDO_LOGFILE, "/var/adm/sudo.log")
127 elif test -d "/usr/adm"; then
128     AC_MSG_RESULT(/usr/adm/sudo.log)
129     SUDO_DEFINE(_PATH_SUDO_LOGFILE, "/usr/adm/sudo.log")
130 else
131     AC_MSG_RESULT(unknown, you will have to set _PATH_SUDO_LOGFILE by hand)
132 fi
133 ])dnl
134
135 dnl
136 dnl Where the log file goes, use /var/log if it exists, else /{var,usr}/adm
137 dnl
138 AC_DEFUN(SUDO_TIMEDIR, [AC_MSG_CHECKING(for timestamp file location)
139 if test -n "$with_timedir"; then
140     AC_MSG_RESULT($with_timedir)
141     SUDO_DEFINE_UNQUOTED(_PATH_SUDO_TIMEDIR, "$with_timedir")
142     timedir="$with_timedir"
143 elif test -d "/var/run"; then
144     AC_MSG_RESULT(/var/run/sudo)
145     SUDO_DEFINE(_PATH_SUDO_TIMEDIR, "/var/run/sudo")
146     timedir="/var/run/sudo"
147 else
148     AC_MSG_RESULT(/tmp/.odus)
149     SUDO_DEFINE(_PATH_SUDO_TIMEDIR, "/tmp/.odus")
150     timedir="/tmp/.odus"
151 fi
152 ])dnl
153
154 dnl
155 dnl check for fullly working void
156 dnl
157 AC_DEFUN(SUDO_FULL_VOID, [AC_MSG_CHECKING(for full void implementation)
158 AC_TRY_COMPILE(, [void *foo;
159 foo = (void *)0; (void *)"test";], AC_DEFINE(VOID, void, [Define to "void" if your compiler supports void pointers, else use "char"].)
160 AC_MSG_RESULT(yes), AC_DEFINE(VOID, char)
161 AC_MSG_RESULT(no))])
162
163 dnl
164 dnl SUDO_CHECK_TYPE(TYPE, DEFAULT)
165 dnl XXX - should require the check for unistd.h...
166 dnl
167 AC_DEFUN(SUDO_CHECK_TYPE,
168 [AC_REQUIRE([AC_HEADER_STDC])dnl
169 AC_MSG_CHECKING(for $1)
170 AC_CACHE_VAL(sudo_cv_type_$1,
171 [AC_EGREP_CPP($1, [#include <sys/types.h>
172 #include <stdio.h>
173 #if STDC_HEADERS
174 #include <stdlib.h>
175 #endif
176 #if HAVE_UNISTD_H
177 #include <unistd.h>
178 #endif], sudo_cv_type_$1=yes, sudo_cv_type_$1=no)])dnl
179 AC_MSG_RESULT($sudo_cv_type_$1)
180 if test $sudo_cv_type_$1 = no; then
181   AC_DEFINE($1, $2, [Define if your system lacks the $1 type.])
182 fi
183 ])
184
185 dnl
186 dnl Check for size_t declation
187 dnl
188 AC_DEFUN(SUDO_TYPE_SIZE_T,
189 [SUDO_CHECK_TYPE(size_t, int)])
190
191 dnl
192 dnl Check for ssize_t declation
193 dnl
194 AC_DEFUN(SUDO_TYPE_SSIZE_T,
195 [SUDO_CHECK_TYPE(ssize_t, int)])
196
197 dnl
198 dnl Check for dev_t declation
199 dnl
200 AC_DEFUN(SUDO_TYPE_DEV_T,
201 [SUDO_CHECK_TYPE(dev_t, int)])
202
203 dnl
204 dnl Check for ino_t declation
205 dnl
206 AC_DEFUN(SUDO_TYPE_INO_T,
207 [SUDO_CHECK_TYPE(ino_t, unsigned int)])
208
209 dnl
210 dnl check for POSIX utime() using struct utimbuf
211 dnl
212 AC_DEFUN(SUDO_FUNC_UTIME_POSIX,
213 [AC_MSG_CHECKING(for POSIX utime)
214 AC_CACHE_VAL(sudo_cv_func_utime_posix,
215 [rm -f conftestdata; > conftestdata
216 AC_TRY_RUN([#include <sys/types.h>
217 #include <sys/time.h>
218 #include <utime.h>
219 main() {
220 struct utimbuf ut;
221 ut.actime = ut.modtime = time(0);
222 utime("conftestdata", &ut);
223 exit(0);
224 }], sudo_cv_func_utime_posix=yes, sudo_cv_func_utime_posix=no,
225   sudo_cv_func_utime_posix=no)
226 rm -f core core.* *.core])dnl
227 AC_MSG_RESULT($sudo_cv_func_utime_posix)
228 if test $sudo_cv_func_utime_posix = yes; then
229   AC_DEFINE(HAVE_UTIME_POSIX, 1, [Define if you have a POSIX utime() (uses struct utimbuf).])
230 fi
231 ])
232
233 dnl
234 dnl check for working fnmatch(3)
235 dnl
236 AC_DEFUN(SUDO_FUNC_FNMATCH,
237 [AC_MSG_CHECKING(for working fnmatch with FNM_CASEFOLD)
238 AC_CACHE_VAL(sudo_cv_func_fnmatch,
239 [rm -f conftestdata; > conftestdata
240 AC_TRY_RUN([#include <fnmatch.h>
241 main() { exit(fnmatch("/*/bin/echo *", "/usr/bin/echo just a test", FNM_CASEFOLD)); }
242 ], sudo_cv_func_fnmatch=yes, sudo_cv_func_fnmatch=no,
243   sudo_cv_func_fnmatch=no)
244 rm -f core core.* *.core])dnl
245 AC_MSG_RESULT($sudo_cv_func_fnmatch)
246 if test $sudo_cv_func_fnmatch = yes; then
247   [$1]
248 else
249   [$2]
250 fi
251 ])
252
253 dnl
254 dnl check for isblank(3)
255 dnl
256 AC_DEFUN([SUDO_FUNC_ISBLANK],
257   [AC_CACHE_CHECK([for isblank], sudo_cv_func_isblank,
258     [AC_TRY_LINK([#include <ctype.h>], [(void)isblank(1);],
259     sudo_cv_func_isblank=yes, sudo_cv_func_isblank=no)])
260 ] [
261   if test "$sudo_cv_func_isblank" = "yes"; then
262     AC_DEFINE(HAVE_ISBLANK, 1, [Define if you have isblank(3).])
263   fi
264 ])
265
266 dnl
267 dnl check for sa_len field in struct sockaddr
268 dnl
269 AC_DEFUN(SUDO_SOCK_SA_LEN,
270 [AC_MSG_CHECKING(for sa_len field in struct sockaddr)
271 AC_CACHE_VAL(sudo_cv_sock_sa_len,
272 [AC_TRY_RUN([#include <sys/types.h>
273 #include <sys/socket.h>
274 main() {
275 struct sockaddr s;
276 s.sa_len = 0;
277 exit(0);
278 }], sudo_cv_sock_sa_len=yes, sudo_cv_sock_sa_len=no,
279   sudo_cv_sock_sa_len=no)
280 rm -f core core.* *.core])dnl
281 AC_MSG_RESULT($sudo_cv_sock_sa_len)
282 if test $sudo_cv_sock_sa_len = yes; then
283   AC_DEFINE(HAVE_SA_LEN, 1, [Define if your struct sockadr has an sa_len field.])
284 fi
285 ])
286
287 dnl
288 dnl check for max length of uid_t in string representation.
289 dnl we can't really trust UID_MAX or MAXUID since they may exist
290 dnl only for backwards compatibility.
291 dnl
292 AC_DEFUN(SUDO_UID_T_LEN,
293 [AC_REQUIRE([AC_TYPE_UID_T])
294 AC_MSG_CHECKING(max length of uid_t)
295 AC_CACHE_VAL(sudo_cv_uid_t_len,
296 [rm -f conftestdata
297 AC_TRY_RUN(
298 [#include <stdio.h>
299 #include <pwd.h>
300 #include <limits.h>
301 #include <sys/types.h>
302 #include <sys/param.h>
303 main() {
304   FILE *f;
305   char b[1024];
306   uid_t u = (uid_t) -1;
307
308   if ((f = fopen("conftestdata", "w")) == NULL)
309     exit(1);
310
311   (void) sprintf(b, "%u", u);
312   (void) fprintf(f, "%d\n", strlen(b));
313   (void) fclose(f);
314   exit(0);
315 }], sudo_cv_uid_t_len=`cat conftestdata`, sudo_cv_uid_t_len=10)
316 ])
317 rm -f conftestdata
318 AC_MSG_RESULT($sudo_cv_uid_t_len)
319 AC_DEFINE_UNQUOTED(MAX_UID_T_LEN, $sudo_cv_uid_t_len, [Define to the max length of a uid_t in string context (excluding the NUL).])
320 ])
321
322 dnl
323 dnl check for "long long"
324 dnl XXX hard to cache since it includes 2 tests
325 dnl
326 AC_DEFUN(SUDO_LONG_LONG, [AC_MSG_CHECKING(for long long support)
327 AC_TRY_LINK(, [long long foo = 1000; foo /= 10;], AC_DEFINE(HAVE_LONG_LONG, 1, [Define if your compiler supports the "long long" type.])
328 [AC_TRY_RUN([main() {if (sizeof(long long) == sizeof(long)) exit(0); else exit(1);}], AC_DEFINE(LONG_IS_QUAD, 1, [Define if sizeof(long) == sizeof(long long).]))]
329 AC_MSG_RESULT(yes), AC_MSG_RESULT(no))])
330
331 dnl
332 dnl private versions of AC_DEFINE and AC_DEFINE_UNQUOTED that don't support
333 dnl tracing that we use to define paths for pathnames.h so autoheader doesn't
334 dnl put them in config.h.in.  An awful hack.
335 dnl
336 m4_define([SUDO_DEFINE],
337 [cat >>confdefs.h <<\EOF
338 [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
339 EOF
340 ])
341
342 m4_define([SUDO_DEFINE_UNQUOTED],
343 [cat >>confdefs.h <<EOF
344 [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
345 EOF
346 ])