Imported Debian patch 1.6.9p11-1
[debian/sudo] / aclocal.m4
1 dnl Local m4 macros for autoconf (used by sudo)
2 dnl
3 dnl Copyright (c) 1994-1996,1998-2007 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)); }], [sudo_cv_func_fnmatch=yes], [sudo_cv_func_fnmatch=no],
222   [sudo_cv_func_fnmatch=no])
223 rm -f core core.* *.core])
224 AC_MSG_RESULT($sudo_cv_func_fnmatch)
225 AS_IF([test $sudo_cv_func_fnmatch = yes], [$1], [$2])])
226
227 dnl
228 dnl check for isblank(3)
229 dnl
230 AC_DEFUN([SUDO_FUNC_ISBLANK],
231   [AC_CACHE_CHECK([for isblank], sudo_cv_func_isblank,
232     [AC_TRY_LINK([#include <ctype.h>], [return (isblank('a'));],
233     sudo_cv_func_isblank=yes, sudo_cv_func_isblank=no)])
234 ] [
235   if test "$sudo_cv_func_isblank" = "yes"; then
236     AC_DEFINE(HAVE_ISBLANK, 1, [Define if you have isblank(3).])
237   fi
238 ])
239
240 dnl
241 dnl check for sa_len field in struct sockaddr
242 dnl
243 AC_DEFUN(SUDO_SOCK_SA_LEN,
244 [AC_MSG_CHECKING(for sa_len field in struct sockaddr)
245 AC_CACHE_VAL(sudo_cv_sock_sa_len,
246 [AC_TRY_RUN([#include <sys/types.h>
247 #include <sys/socket.h>
248 main() {
249 struct sockaddr s;
250 s.sa_len = 0;
251 exit(0);
252 }], sudo_cv_sock_sa_len=yes, sudo_cv_sock_sa_len=no,
253   sudo_cv_sock_sa_len=no)
254 rm -f core core.* *.core])dnl
255 AC_MSG_RESULT($sudo_cv_sock_sa_len)
256 if test $sudo_cv_sock_sa_len = yes; then
257   AC_DEFINE(HAVE_SA_LEN, 1, [Define if your struct sockadr has an sa_len field.])
258 fi
259 ])
260
261 dnl
262 dnl check for max length of uid_t in string representation.
263 dnl we can't really trust UID_MAX or MAXUID since they may exist
264 dnl only for backwards compatibility.
265 dnl
266 AC_DEFUN(SUDO_UID_T_LEN,
267 [AC_REQUIRE([AC_TYPE_UID_T])
268 AC_MSG_CHECKING(max length of uid_t)
269 AC_CACHE_VAL(sudo_cv_uid_t_len,
270 [rm -f conftestdata
271 AC_TRY_RUN(
272 [#include <stdio.h>
273 #include <pwd.h>
274 #include <limits.h>
275 #include <sys/types.h>
276 #include <sys/param.h>
277 main() {
278   FILE *f;
279   char b[1024];
280   uid_t u = (uid_t) -1;
281
282   if ((f = fopen("conftestdata", "w")) == NULL)
283     exit(1);
284
285   (void) sprintf(b, "%lu", (unsigned long) u);
286   (void) fprintf(f, "%d\n", strlen(b));
287   (void) fclose(f);
288   exit(0);
289 }], sudo_cv_uid_t_len=`cat conftestdata`, sudo_cv_uid_t_len=10)
290 ])
291 rm -f conftestdata
292 AC_MSG_RESULT($sudo_cv_uid_t_len)
293 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).])
294 ])
295
296 dnl
297 dnl Check for presence of long long and for sizeof(long long) == sizeof(long)
298 dnl
299 AC_DEFUN(SUDO_TYPE_LONG_LONG,
300 [AC_CHECK_TYPES(long long, [AC_DEFINE(HAVE_LONG_LONG, 1, [Define if your compiler supports the "long long" type.])]
301 [AC_MSG_CHECKING(for long and long long equivalence)
302 AC_CACHE_VAL(sudo_cv_type_long_is_quad,
303 [AC_TRY_RUN([
304 main() {
305 if (sizeof(long long) == sizeof(long)) exit(0);
306 else exit(1);
307 }], [sudo_cv_type_long_is_quad=yes],
308 [sudo_cv_type_long_is_quad=no], [sudo_cv_type_long_is_quad=no])
309 rm -f core core.* *.core])dnl
310 AC_MSG_RESULT($sudo_cv_type_long_is_quad)
311 if test $sudo_cv_type_long_is_quad = yes; then
312   AC_DEFINE(LONG_IS_QUAD, 1, [Define if sizeof(long) == sizeof(long long).])
313 fi
314 ])])
315
316 dnl
317 dnl append a libpath to an LDFLAGS style variable
318 dnl
319 AC_DEFUN(SUDO_APPEND_LIBPATH, [
320     if test X"$with_rpath" = X"yes"; then
321         $1="${$1} -L$2 -R$2"
322     else
323         $1="${$1} -L$2"
324     fi
325     if test X"$blibpath" != X"" -a "$1" = "SUDO_LDFLAGS"; then
326         blibpath_add="${blibpath_add}:$2"
327     fi
328 ])
329
330 dnl
331 dnl private versions of AC_DEFINE and AC_DEFINE_UNQUOTED that don't support
332 dnl tracing that we use to define paths for pathnames.h so autoheader doesn't
333 dnl put them in config.h.in.  An awful hack.
334 dnl
335 m4_define([SUDO_DEFINE],
336 [cat >>confdefs.h <<\EOF
337 [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
338 EOF
339 ])
340
341 m4_define([SUDO_DEFINE_UNQUOTED],
342 [cat >>confdefs.h <<EOF
343 [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
344 EOF
345 ])