Imported Debian patch 1.6.8p9-2
[debian/sudo] / aclocal.m4
1 dnl Local m4 macors for autoconf (used by sudo)
2 dnl
3 dnl Copyright (c) 1994-1996,1998-2003 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 elif test -d "/var/adm"; then
148     AC_MSG_RESULT(/var/adm/sudo)
149     SUDO_DEFINE(_PATH_SUDO_TIMEDIR, "/var/adm/sudo")
150     timedir="/var/adm/sudo"
151 else
152     AC_MSG_RESULT(/usr/adm/sudo)
153     SUDO_DEFINE(_PATH_SUDO_TIMEDIR, "/usr/adm/sudo")
154     timedir="/usr/adm/sudo"
155 fi
156 ])dnl
157
158 dnl
159 dnl check for fullly working void
160 dnl
161 AC_DEFUN(SUDO_FULL_VOID, [AC_MSG_CHECKING(for full void implementation)
162 AC_TRY_COMPILE(, [void *foo;
163 foo = (void *)0; (void *)"test";], AC_DEFINE(VOID, void, [Define to "void" if your compiler supports void pointers, else use "char"].)
164 AC_MSG_RESULT(yes), AC_DEFINE(VOID, char)
165 AC_MSG_RESULT(no))])
166
167 dnl
168 dnl SUDO_CHECK_TYPE(TYPE, DEFAULT)
169 dnl XXX - should require the check for unistd.h...
170 dnl
171 AC_DEFUN(SUDO_CHECK_TYPE,
172 [AC_REQUIRE([AC_HEADER_STDC])dnl
173 AC_MSG_CHECKING(for $1)
174 AC_CACHE_VAL(sudo_cv_type_$1,
175 [AC_EGREP_CPP($1, [#include <sys/types.h>
176 #include <stdio.h>
177 #if STDC_HEADERS
178 #include <stdlib.h>
179 #endif
180 #if HAVE_UNISTD_H
181 #include <unistd.h>
182 #endif], sudo_cv_type_$1=yes, sudo_cv_type_$1=no)])dnl
183 AC_MSG_RESULT($sudo_cv_type_$1)
184 if test $sudo_cv_type_$1 = no; then
185   AC_DEFINE($1, $2, [Define if your system lacks the $1 type.])
186 fi
187 ])
188
189 dnl
190 dnl Check for size_t declation
191 dnl
192 AC_DEFUN(SUDO_TYPE_SIZE_T,
193 [SUDO_CHECK_TYPE(size_t, int)])
194
195 dnl
196 dnl Check for ssize_t declation
197 dnl
198 AC_DEFUN(SUDO_TYPE_SSIZE_T,
199 [SUDO_CHECK_TYPE(ssize_t, int)])
200
201 dnl
202 dnl Check for dev_t declation
203 dnl
204 AC_DEFUN(SUDO_TYPE_DEV_T,
205 [SUDO_CHECK_TYPE(dev_t, int)])
206
207 dnl
208 dnl Check for ino_t declation
209 dnl
210 AC_DEFUN(SUDO_TYPE_INO_T,
211 [SUDO_CHECK_TYPE(ino_t, unsigned int)])
212
213 dnl
214 dnl check for working fnmatch(3)
215 dnl
216 AC_DEFUN(SUDO_FUNC_FNMATCH,
217 [AC_MSG_CHECKING(for working fnmatch with FNM_CASEFOLD)
218 AC_CACHE_VAL(sudo_cv_func_fnmatch,
219 [rm -f conftestdata; > conftestdata
220 AC_TRY_RUN([#include <fnmatch.h>
221 main() { exit(fnmatch("/*/bin/echo *", "/usr/bin/echo just a test", FNM_CASEFOLD)); }
222 ], sudo_cv_func_fnmatch=yes, sudo_cv_func_fnmatch=no,
223   sudo_cv_func_fnmatch=no)
224 rm -f core core.* *.core])dnl
225 AC_MSG_RESULT($sudo_cv_func_fnmatch)
226 if test $sudo_cv_func_fnmatch = yes; then
227   [$1]
228 else
229   [$2]
230 fi
231 ])
232
233 dnl
234 dnl check for isblank(3)
235 dnl
236 AC_DEFUN([SUDO_FUNC_ISBLANK],
237   [AC_CACHE_CHECK([for isblank], sudo_cv_func_isblank,
238     [AC_TRY_LINK([#include <ctype.h>], [(void)isblank(1);],
239     sudo_cv_func_isblank=yes, sudo_cv_func_isblank=no)])
240 ] [
241   if test "$sudo_cv_func_isblank" = "yes"; then
242     AC_DEFINE(HAVE_ISBLANK, 1, [Define if you have isblank(3).])
243   fi
244 ])
245
246 dnl
247 dnl check for sa_len field in struct sockaddr
248 dnl
249 AC_DEFUN(SUDO_SOCK_SA_LEN,
250 [AC_MSG_CHECKING(for sa_len field in struct sockaddr)
251 AC_CACHE_VAL(sudo_cv_sock_sa_len,
252 [AC_TRY_RUN([#include <sys/types.h>
253 #include <sys/socket.h>
254 main() {
255 struct sockaddr s;
256 s.sa_len = 0;
257 exit(0);
258 }], sudo_cv_sock_sa_len=yes, sudo_cv_sock_sa_len=no,
259   sudo_cv_sock_sa_len=no)
260 rm -f core core.* *.core])dnl
261 AC_MSG_RESULT($sudo_cv_sock_sa_len)
262 if test $sudo_cv_sock_sa_len = yes; then
263   AC_DEFINE(HAVE_SA_LEN, 1, [Define if your struct sockadr has an sa_len field.])
264 fi
265 ])
266
267 dnl
268 dnl check for max length of uid_t in string representation.
269 dnl we can't really trust UID_MAX or MAXUID since they may exist
270 dnl only for backwards compatibility.
271 dnl
272 AC_DEFUN(SUDO_UID_T_LEN,
273 [AC_REQUIRE([AC_TYPE_UID_T])
274 AC_MSG_CHECKING(max length of uid_t)
275 AC_CACHE_VAL(sudo_cv_uid_t_len,
276 [rm -f conftestdata
277 AC_TRY_RUN(
278 [#include <stdio.h>
279 #include <pwd.h>
280 #include <limits.h>
281 #include <sys/types.h>
282 #include <sys/param.h>
283 main() {
284   FILE *f;
285   char b[1024];
286   uid_t u = (uid_t) -1;
287
288   if ((f = fopen("conftestdata", "w")) == NULL)
289     exit(1);
290
291   (void) sprintf(b, "%lu", (unsigned long) u);
292   (void) fprintf(f, "%d\n", strlen(b));
293   (void) fclose(f);
294   exit(0);
295 }], sudo_cv_uid_t_len=`cat conftestdata`, sudo_cv_uid_t_len=10)
296 ])
297 rm -f conftestdata
298 AC_MSG_RESULT($sudo_cv_uid_t_len)
299 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).])
300 ])
301
302 dnl
303 dnl check for "long long"
304 dnl XXX hard to cache since it includes 2 tests
305 dnl
306 AC_DEFUN(SUDO_LONG_LONG, [AC_MSG_CHECKING(for long long support)
307 AC_TRY_LINK(, [long long foo = 1000; foo /= 10;], AC_DEFINE(HAVE_LONG_LONG, 1, [Define if your compiler supports the "long long" type.])
308 [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).]))]
309 AC_MSG_RESULT(yes), AC_MSG_RESULT(no))])
310
311 dnl
312 dnl append a libpath to an LDFLAGS style variable
313 dnl
314 AC_DEFUN(SUDO_APPEND_LIBPATH, [
315     if test X"$with_rpath" = X"yes"; then
316         $1="${$1} -L$2 -R$2"
317     else
318         $1="${$1} -L$2"
319     fi
320     if test X"$blibpath" != X"" -a "$1" = "SUDO_LDFLAGS"; then
321         blibpath_add="${blibpath_add}:$2"
322     fi
323 ])
324
325 dnl
326 dnl private versions of AC_DEFINE and AC_DEFINE_UNQUOTED that don't support
327 dnl tracing that we use to define paths for pathnames.h so autoheader doesn't
328 dnl put them in config.h.in.  An awful hack.
329 dnl
330 m4_define([SUDO_DEFINE],
331 [cat >>confdefs.h <<\EOF
332 [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
333 EOF
334 ])
335
336 m4_define([SUDO_DEFINE_UNQUOTED],
337 [cat >>confdefs.h <<EOF
338 [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
339 EOF
340 ])