move temp file removal before possible exit point
[debian/sudo] / aclocal.m4
1 dnl Local m4 macros for autoconf (used by sudo)
2 dnl
3 dnl Copyright (c) 1994-1996, 1998-2005, 2007-2011
4 dnl     Todd C. Miller <Todd.Miller@courtesan.com>
5 dnl
6 dnl XXX - should cache values in all cases!!!
7 dnl
8 dnl checks for programs
9
10 dnl
11 dnl check for sendmail in well-known locations
12 dnl
13 AC_DEFUN([SUDO_PROG_SENDMAIL], [AC_MSG_CHECKING([for sendmail])
14 found=no
15 for p in "/usr/sbin/sendmail" "/usr/lib/sendmail" "/usr/etc/sendmail" "/usr/ucblib/sendmail" "/usr/local/lib/sendmail" "/usr/local/bin/sendmail"; do
16     if test -f "$p"; then
17         found=yes
18         AC_MSG_RESULT([$p])
19         SUDO_DEFINE_UNQUOTED(_PATH_SUDO_SENDMAIL, "$p")
20         break
21     fi
22 done
23 if test X"$found" != X"yes"; then
24     AC_MSG_RESULT([not found])
25 fi
26 ])dnl
27
28 dnl
29 dnl check for vi in well-known locations
30 dnl
31 AC_DEFUN([SUDO_PROG_VI], [AC_MSG_CHECKING([for vi])
32 found=no
33 for editor in "/usr/bin/vi" "/bin/vi" "/usr/ucb/vi" "/usr/bsd/vi" "/usr/local/bin/vi"; do
34     if test -f "$editor"; then
35         found=yes
36         AC_MSG_RESULT([$editor])
37         SUDO_DEFINE_UNQUOTED(_PATH_VI, "$editor")
38         break
39     fi
40 done
41 if test X"$found" != X"yes"; then
42     AC_MSG_RESULT([not found])
43 fi
44 ])dnl
45
46 dnl
47 dnl check for mv in well-known locations
48 dnl
49 AC_DEFUN([SUDO_PROG_MV], [AC_MSG_CHECKING([for mv])
50 found=no
51 for p in "/usr/bin/mv" "/bin/mv" "/usr/ucb/mv" "/usr/sbin/mv"; do
52     if test -f "$p"; then
53         found=yes
54         AC_MSG_RESULT([$p])
55         SUDO_DEFINE_UNQUOTED(_PATH_MV, "$p")
56         break
57     fi
58 done
59 if test X"$found" != X"yes"; then
60     AC_MSG_RESULT([not found])
61 fi
62 ])dnl
63
64 dnl
65 dnl check for bourne shell in well-known locations
66 dnl
67 AC_DEFUN([SUDO_PROG_BSHELL], [AC_MSG_CHECKING([for bourne shell])
68 found=no
69 for p in "/bin/sh" "/usr/bin/sh" "/sbin/sh" "/usr/sbin/sh" "/bin/ksh" "/usr/bin/ksh" "/bin/bash" "/usr/bin/bash"; do
70     if test -f "$p"; then
71         found=yes
72         AC_MSG_RESULT([$p])
73         SUDO_DEFINE_UNQUOTED(_PATH_BSHELL, "$p")
74         break
75     fi
76 done
77 if test X"$found" != X"yes"; then
78     AC_MSG_RESULT([not found])
79 fi
80 ])dnl
81
82 dnl
83 dnl check for utmp file
84 dnl
85 AC_DEFUN([SUDO_PATH_UTMP], [AC_MSG_CHECKING([for utmp file path])
86 found=no
87 for p in "/var/run/utmp" "/var/adm/utmp" "/etc/utmp"; do
88     if test -r "$p"; then
89         found=yes
90         AC_MSG_RESULT([$p])
91         SUDO_DEFINE_UNQUOTED(_PATH_UTMP, "$p")
92         break
93     fi
94 done
95 if test X"$found" != X"yes"; then
96     AC_MSG_RESULT([not found])
97 fi
98 ])dnl
99
100 dnl
101 dnl Where the log file goes, use /var/log if it exists, else /{var,usr}/adm
102 dnl
103 AC_DEFUN([SUDO_LOGFILE], [AC_MSG_CHECKING(for log file location)
104 if test -n "$with_logpath"; then
105     AC_MSG_RESULT($with_logpath)
106     SUDO_DEFINE_UNQUOTED(_PATH_SUDO_LOGFILE, "$with_logpath")
107 elif test -d "/var/log"; then
108     AC_MSG_RESULT(/var/log/sudo.log)
109     SUDO_DEFINE(_PATH_SUDO_LOGFILE, "/var/log/sudo.log")
110 elif test -d "/var/adm"; then
111     AC_MSG_RESULT(/var/adm/sudo.log)
112     SUDO_DEFINE(_PATH_SUDO_LOGFILE, "/var/adm/sudo.log")
113 elif test -d "/usr/adm"; then
114     AC_MSG_RESULT(/usr/adm/sudo.log)
115     SUDO_DEFINE(_PATH_SUDO_LOGFILE, "/usr/adm/sudo.log")
116 else
117     AC_MSG_RESULT(unknown, you will have to set _PATH_SUDO_LOGFILE by hand)
118 fi
119 ])dnl
120
121 dnl
122 dnl Where the timestamp files go.
123 dnl
124 AC_DEFUN([SUDO_TIMEDIR], [AC_MSG_CHECKING(for timestamp file location)
125 timedir="$with_timedir"
126 if test -z "$timedir"; then
127     for d in /var/db /var/lib /var/adm /usr/adm; do
128         if test -d "$d"; then
129             timedir="$d/sudo"
130             break
131         fi
132     done
133 fi
134 AC_MSG_RESULT([$timedir])
135 SUDO_DEFINE_UNQUOTED(_PATH_SUDO_TIMEDIR, "$timedir")
136 ])dnl
137
138 dnl
139 dnl Where the I/O log files go, use /var/log/sudo-io if
140 dnl /var/log exists, else /{var,usr}/adm/sudo-io
141 dnl
142 AC_DEFUN([SUDO_IO_LOGDIR], [
143     AC_MSG_CHECKING(for I/O log dir location)
144     if test "${with_iologdir-yes}" != "yes"; then
145         iolog_dir="$with_iologdir"
146     elif test -d "/var/log"; then
147         iolog_dir="/var/log/sudo-io"
148     elif test -d "/var/adm"; then
149         iolog_dir="/var/adm/sudo-io"
150     else
151         iolog_dir="/usr/adm/sudo-io"
152     fi
153     if test "${with_iologdir}" != "no"; then
154         SUDO_DEFINE_UNQUOTED(_PATH_SUDO_IO_LOGDIR, "$iolog_dir")
155     fi
156     AC_MSG_RESULT($iolog_dir)
157 ])dnl
158
159 dnl
160 dnl SUDO_CHECK_TYPE(TYPE, DEFAULT)
161 dnl XXX - should require the check for unistd.h...
162 dnl
163 AC_DEFUN([SUDO_CHECK_TYPE],
164 [AC_REQUIRE([AC_HEADER_STDC])dnl
165 AC_MSG_CHECKING(for $1)
166 AC_CACHE_VAL(sudo_cv_type_$1,
167 [AC_EGREP_CPP($1, [#include <sys/types.h>
168 #include <stdio.h>
169 #if STDC_HEADERS
170 #include <stdlib.h>
171 #endif
172 #if HAVE_UNISTD_H
173 #include <unistd.h>
174 #endif], sudo_cv_type_$1=yes, sudo_cv_type_$1=no)])dnl
175 AC_MSG_RESULT($sudo_cv_type_$1)
176 if test $sudo_cv_type_$1 = no; then
177   AC_DEFINE($1, $2, [Define if your system lacks the $1 type.])
178 fi
179 ])
180
181 dnl
182 dnl Check for size_t declation
183 dnl
184 AC_DEFUN([SUDO_TYPE_SIZE_T],
185 [SUDO_CHECK_TYPE(size_t, int)])
186
187 dnl
188 dnl Check for ssize_t declation
189 dnl
190 AC_DEFUN([SUDO_TYPE_SSIZE_T],
191 [SUDO_CHECK_TYPE(ssize_t, int)])
192
193 dnl
194 dnl Check for dev_t declation
195 dnl
196 AC_DEFUN([SUDO_TYPE_DEV_T],
197 [SUDO_CHECK_TYPE(dev_t, int)])
198
199 dnl
200 dnl Check for ino_t declation
201 dnl
202 AC_DEFUN([SUDO_TYPE_INO_T],
203 [SUDO_CHECK_TYPE(ino_t, unsigned int)])
204
205 dnl
206 dnl check for working fnmatch(3)
207 dnl
208 AC_DEFUN([SUDO_FUNC_FNMATCH],
209 [AC_MSG_CHECKING([for working fnmatch with FNM_CASEFOLD])
210 AC_CACHE_VAL(sudo_cv_func_fnmatch,
211 [rm -f conftestdata; > conftestdata
212 AC_TRY_RUN([#include <fnmatch.h>
213 main() { exit(fnmatch("/*/bin/echo *", "/usr/bin/echo just a test", FNM_CASEFOLD)); }], [sudo_cv_func_fnmatch=yes], [sudo_cv_func_fnmatch=no],
214   [sudo_cv_func_fnmatch=no])
215 rm -f core core.* *.core])
216 AC_MSG_RESULT($sudo_cv_func_fnmatch)
217 AS_IF([test $sudo_cv_func_fnmatch = yes], [$1], [$2])])
218
219 dnl
220 dnl check for isblank(3)
221 dnl
222 AC_DEFUN([SUDO_FUNC_ISBLANK],
223   [AC_CACHE_CHECK([for isblank], [sudo_cv_func_isblank],
224     [AC_TRY_LINK([#include <ctype.h>], [return (isblank('a'));],
225     sudo_cv_func_isblank=yes, sudo_cv_func_isblank=no)])
226 ] [
227   if test "$sudo_cv_func_isblank" = "yes"; then
228     AC_DEFINE(HAVE_ISBLANK, 1, [Define if you have isblank(3).])
229   else
230     AC_LIBOBJ(isblank)
231   fi
232 ])
233
234 dnl
235 dnl check unsetenv() return value
236 dnl
237 AC_DEFUN([SUDO_FUNC_UNSETENV_VOID],
238   [AC_CACHE_CHECK([whether unsetenv returns void], [sudo_cv_func_unsetenv_void],
239     [AC_RUN_IFELSE([AC_LANG_PROGRAM(
240       [AC_INCLUDES_DEFAULT
241         int unsetenv();
242       ], [
243         [return unsetenv("FOO") != 0;]
244       ])
245     ],
246     [sudo_cv_func_unsetenv_void=no],
247     [sudo_cv_func_unsetenv_void=yes],
248     [sudo_cv_func_unsetenv_void=no])])
249     if test $sudo_cv_func_unsetenv_void = yes; then
250       AC_DEFINE(UNSETENV_VOID, 1,
251         [Define to 1 if the `unsetenv' function returns void instead of `int'.])
252     fi
253   ])
254
255 dnl
256 dnl check for sa_len field in struct sockaddr
257 dnl
258 AC_DEFUN([SUDO_SOCK_SA_LEN], [
259     AC_CHECK_MEMBER([struct sockaddr.sa_len], 
260         [AC_DEFINE(HAVE_SA_LEN, 1, [Define if your struct sockadr has an sa_len field.])],    
261         [],
262         [ #include <sys/types.h>
263           #include <sys/socket.h>] 
264     )]
265 )
266 dnl
267 dnl check for max length of uid_t in string representation.
268 dnl we can't really trust UID_MAX or MAXUID since they may exist
269 dnl only for backwards compatibility.
270 dnl
271 AC_DEFUN([SUDO_UID_T_LEN],
272 [AC_REQUIRE([AC_TYPE_UID_T])
273 AC_MSG_CHECKING(max length of uid_t)
274 AC_CACHE_VAL(sudo_cv_uid_t_len,
275 [rm -f conftestdata
276 AC_TRY_RUN(
277 [#include <stdio.h>
278 #include <pwd.h>
279 #include <limits.h>
280 #include <sys/types.h>
281 #include <sys/param.h>
282 main() {
283   FILE *f;
284   char b[1024];
285   uid_t u = (uid_t) -1;
286
287   if ((f = fopen("conftestdata", "w")) == NULL)
288     exit(1);
289
290   (void) sprintf(b, "%lu", (unsigned long) u);
291   (void) fprintf(f, "%d\n", strlen(b));
292   (void) fclose(f);
293   exit(0);
294 }], sudo_cv_uid_t_len=`cat conftestdata`, sudo_cv_uid_t_len=10, sudo_cv_uid_t_len=10)
295 ])
296 rm -f conftestdata
297 AC_MSG_RESULT($sudo_cv_uid_t_len)
298 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).])
299 ])
300
301 dnl
302 dnl append a libpath to an LDFLAGS style variable
303 dnl
304 AC_DEFUN([SUDO_APPEND_LIBPATH], [
305     if test X"$with_rpath" = X"yes"; then
306         case "$host" in
307             *-*-hpux*)  $1="${$1} -L$2 -Wl,+b,$2"
308                         ;;
309             *)          $1="${$1} -L$2 -Wl,-R$2"
310                         ;;
311         esac
312     else
313         $1="${$1} -L$2"
314     fi
315     if test X"$blibpath" != X"" -a "$1" = "SUDO_LDFLAGS"; then
316         blibpath_add="${blibpath_add}:$2"
317     fi
318 ])
319
320 dnl
321 dnl Determine the mail spool location
322 dnl NOTE: must be run *after* check for paths.h
323 dnl
324 AC_DEFUN([SUDO_MAILDIR], [
325 maildir=no
326 if test X"$ac_cv_header_paths_h" = X"yes"; then
327 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
328 #include <paths.h>],
329 [char *p = _PATH_MAILDIR;])], [maildir=yes], [])
330 fi
331 if test $maildir = no; then
332     # Solaris has maillock.h which defines MAILDIR
333     AC_CHECK_HEADERS(maillock.h, [
334         SUDO_DEFINE(_PATH_MAILDIR, MAILDIR)
335         maildir=yes
336     ])
337     if test $maildir = no; then
338         for d in /var/mail /var/spool/mail /usr/spool/mail; do
339             if test -d "$d"; then
340                 maildir=yes
341                 SUDO_DEFINE_UNQUOTED(_PATH_MAILDIR, "$d")
342                 break
343             fi
344         done
345         if test $maildir = no; then
346             # unable to find mail dir, hope for the best
347             SUDO_DEFINE_UNQUOTED(_PATH_MAILDIR, "/var/mail")
348         fi
349     fi
350 fi
351 ])
352
353 dnl
354 dnl private versions of AC_DEFINE and AC_DEFINE_UNQUOTED that don't support
355 dnl tracing that we use to define paths for pathnames.h so autoheader doesn't
356 dnl put them in config.h.in.  An awful hack.
357 dnl
358 m4_define([SUDO_DEFINE],
359 [cat >>confdefs.h <<\EOF
360 [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
361 EOF
362 ])
363
364 m4_define([SUDO_DEFINE_UNQUOTED],
365 [cat >>confdefs.h <<EOF
366 [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
367 EOF
368 ])
369
370 dnl
371 dnl Pull in libtool macros
372 dnl
373 m4_include([libtool.m4])
374 m4_include([ltoptions.m4])
375 m4_include([ltsugar.m4])
376 m4_include([ltversion.m4])
377 m4_include([lt~obsolete.m4])