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