Imported Upstream version 1.8.7
[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-2013
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 check for working fnmatch(3)
161 dnl
162 AC_DEFUN([SUDO_FUNC_FNMATCH],
163 [AC_MSG_CHECKING([for working fnmatch with FNM_CASEFOLD])
164 AC_CACHE_VAL(sudo_cv_func_fnmatch,
165 [rm -f conftestdata; > conftestdata
166 AC_TRY_RUN([#include <fnmatch.h>
167 main() { exit(fnmatch("/*/bin/echo *", "/usr/bin/echo just a test", FNM_CASEFOLD)); }], [sudo_cv_func_fnmatch=yes], [sudo_cv_func_fnmatch=no],
168   [sudo_cv_func_fnmatch=no])
169 rm -f core core.* *.core])
170 AC_MSG_RESULT($sudo_cv_func_fnmatch)
171 AS_IF([test $sudo_cv_func_fnmatch = yes], [$1], [$2])])
172
173 dnl
174 dnl Attempt to check for working PIE support.
175 dnl This is a bit of a hack but on Solaris 10 with GNU ld and GNU as
176 dnl we can end up with strange values from malloc().
177 dnl A better check would be to verify that ASLR works with PIE.
178 dnl
179 AC_DEFUN([SUDO_WORKING_PIE],
180 [AC_MSG_CHECKING([for working PIE support])
181 AC_CACHE_VAL(sudo_cv_working_pie,
182 [rm -f conftestdata; > conftestdata
183 AC_TRY_RUN(AC_INCLUDES_DEFAULT([])
184 [main() { char *p = malloc(1024); if (p == NULL) return 1; memset(p, 0, 1024); return 0; }], [sudo_cv_working_pie=yes], [sudo_cv_working_pie=no],
185   [sudo_cv_working_pie=no])
186 rm -f core core.* *.core])
187 AC_MSG_RESULT($sudo_cv_working_pie)
188 AS_IF([test $sudo_cv_working_pie = yes], [$1], [$2])])
189
190 dnl
191 dnl check for isblank(3)
192 dnl
193 AC_DEFUN([SUDO_FUNC_ISBLANK],
194   [AC_CACHE_CHECK([for isblank], [sudo_cv_func_isblank],
195     [AC_TRY_LINK([#include <ctype.h>], [return (isblank('a'));],
196     sudo_cv_func_isblank=yes, sudo_cv_func_isblank=no)])
197 ] [
198   if test "$sudo_cv_func_isblank" = "yes"; then
199     AC_DEFINE(HAVE_ISBLANK, 1, [Define if you have isblank(3).])
200   else
201     AC_LIBOBJ(isblank)
202   fi
203 ])
204
205 AC_DEFUN([SUDO_CHECK_LIB], [
206     _sudo_check_lib_extras=`echo "$5"|sed -e 's/[       ]*//g' -e 's/-l/_/g'`
207     AC_MSG_CHECKING([for $2 in -l$1${5+ }$5])
208     AC_CACHE_VAL([sudo_cv_lib_$1''_$2$_sudo_check_lib_extras], [
209         SUDO_CHECK_LIB_OLIBS="$LIBS"
210         LIBS="$LIBS -l$1${5+ }$5"
211         AC_LINK_IFELSE(
212             [AC_LANG_CALL([], [$2])],
213             [eval sudo_cv_lib_$1''_$2$_sudo_check_lib_extras=yes],
214             [eval sudo_cv_lib_$1''_$2$_sudo_check_lib_extras=no]
215         )
216         LIBS="$SUDO_CHECK_LIB_OLIBS"
217     ])
218     if eval test \$sudo_cv_lib_$1''_$2$_sudo_check_lib_extras = "yes"; then
219         AC_MSG_RESULT([yes])
220         $3
221     else
222         AC_MSG_RESULT([no])
223         $4
224     fi
225 ])
226
227 dnl
228 dnl check unsetenv() return value
229 dnl
230 AC_DEFUN([SUDO_FUNC_UNSETENV_VOID],
231   [AC_CACHE_CHECK([whether unsetenv returns void], [sudo_cv_func_unsetenv_void],
232     [AC_RUN_IFELSE([AC_LANG_PROGRAM(
233       [AC_INCLUDES_DEFAULT
234         int unsetenv();
235       ], [
236         [return unsetenv("FOO") != 0;]
237       ])
238     ],
239     [sudo_cv_func_unsetenv_void=no],
240     [sudo_cv_func_unsetenv_void=yes],
241     [sudo_cv_func_unsetenv_void=no])])
242     if test $sudo_cv_func_unsetenv_void = yes; then
243       AC_DEFINE(UNSETENV_VOID, 1,
244         [Define to 1 if the `unsetenv' function returns void instead of `int'.])
245     fi
246   ])
247
248 dnl
249 dnl check putenv() argument for const
250 dnl
251 AC_DEFUN([SUDO_FUNC_PUTENV_CONST],
252 [AC_CACHE_CHECK([whether putenv takes a const argument],
253 sudo_cv_func_putenv_const,
254 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
255 int putenv(const char *string) {return 0;}], [])],
256     [sudo_cv_func_putenv_const=yes],
257     [sudo_cv_func_putenv_const=no])
258   ])
259   if test $sudo_cv_func_putenv_const = yes; then
260     AC_DEFINE(PUTENV_CONST, const, [Define to const if the `putenv' takes a const argument.])
261   else
262     AC_DEFINE(PUTENV_CONST, [])
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_CHECK_MEMBER([struct sockaddr.sa_len], 
271         [AC_DEFINE(HAVE_STRUCT_SOCKADDR_SA_LEN, 1, [Define if your struct sockadr has an sa_len field.])],    
272         [],
273         [ #include <sys/types.h>
274           #include <sys/socket.h>] 
275     )]
276 )
277 dnl
278 dnl check for max length of uid_t in string representation.
279 dnl we can't really trust UID_MAX or MAXUID since they may exist
280 dnl only for backwards compatibility.
281 dnl
282 AC_DEFUN([SUDO_UID_T_LEN],
283 [AC_REQUIRE([AC_TYPE_UID_T])
284 AC_MSG_CHECKING(max length of uid_t)
285 AC_CACHE_VAL(sudo_cv_uid_t_len,
286 [rm -f conftestdata
287 AC_TRY_RUN(
288 [#include <stdio.h>
289 #include <pwd.h>
290 #include <limits.h>
291 #include <sys/types.h>
292 #include <sys/param.h>
293 main() {
294   FILE *f;
295   char b[1024];
296   uid_t u = (uid_t) -1;
297
298   if ((f = fopen("conftestdata", "w")) == NULL)
299     exit(1);
300
301   (void) sprintf(b, "%lu", (unsigned long) u);
302   (void) fprintf(f, "%d\n", strlen(b));
303   (void) fclose(f);
304   exit(0);
305 }], sudo_cv_uid_t_len=`cat conftestdata`, sudo_cv_uid_t_len=10, sudo_cv_uid_t_len=10)
306 ])
307 rm -f conftestdata
308 AC_MSG_RESULT($sudo_cv_uid_t_len)
309 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).])
310 ])
311
312 dnl
313 dnl Append a libpath to an LDFLAGS style variable if not already present.
314 dnl Also appends to the _R version unless rpath is disabled.
315 dnl
316 AC_DEFUN([SUDO_APPEND_LIBPATH], [
317     case "${$1}" in
318         *"-L$2"|*"-L$2 ")
319             ;;
320         *)
321             $1="${$1} -L$2"
322             if test X"$enable_rpath" = X"yes"; then
323                 $1_R="${$1_R} -R$2"
324             fi
325             ;;
326     esac
327 ])
328
329 dnl
330 dnl Append a directory to CPPFLAGS if not already present.
331 dnl
332 AC_DEFUN([SUDO_APPEND_CPPFLAGS], [
333     case "${CPPFLAGS}" in
334         *"$1"|*"$1 ")
335             ;;
336         *)
337             if test X"${CPPFLAGS}" = X""; then
338                 CPPFLAGS="$1"
339             else
340                 CPPFLAGS="${CPPFLAGS} $1"
341             fi
342             ;;
343     esac
344 ])
345
346 dnl
347 dnl Determine the mail spool location
348 dnl NOTE: must be run *after* check for paths.h
349 dnl
350 AC_DEFUN([SUDO_MAILDIR], [
351 maildir=no
352 if test X"$ac_cv_header_paths_h" = X"yes"; then
353 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
354 #include <paths.h>],
355 [char *p = _PATH_MAILDIR;])], [maildir=yes], [])
356 fi
357 if test $maildir = no; then
358     # Solaris has maillock.h which defines MAILDIR
359     AC_CHECK_HEADERS(maillock.h, [
360         SUDO_DEFINE(_PATH_MAILDIR, MAILDIR)
361         maildir=yes
362     ])
363     if test $maildir = no; then
364         for d in /var/mail /var/spool/mail /usr/spool/mail; do
365             if test -d "$d"; then
366                 maildir=yes
367                 SUDO_DEFINE_UNQUOTED(_PATH_MAILDIR, "$d")
368                 break
369             fi
370         done
371         if test $maildir = no; then
372             # unable to find mail dir, hope for the best
373             SUDO_DEFINE_UNQUOTED(_PATH_MAILDIR, "/var/mail")
374         fi
375     fi
376 fi
377 ])
378
379 dnl
380 dnl private versions of AC_DEFINE and AC_DEFINE_UNQUOTED that don't support
381 dnl tracing that we use to define paths for pathnames.h so autoheader doesn't
382 dnl put them in config.h.in.  An awful hack.
383 dnl
384 m4_define([SUDO_DEFINE],
385 [cat >>confdefs.h <<\EOF
386 [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
387 EOF
388 ])
389
390 m4_define([SUDO_DEFINE_UNQUOTED],
391 [cat >>confdefs.h <<EOF
392 [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
393 EOF
394 ])
395
396 dnl
397 dnl Pull in libtool macros
398 dnl
399 m4_include([m4/libtool.m4])
400 m4_include([m4/ltoptions.m4])
401 m4_include([m4/ltsugar.m4])
402 m4_include([m4/ltversion.m4])
403 m4_include([m4/lt~obsolete.m4])
404 dnl
405 dnl Pull in other non-standard macros
406 dnl
407 m4_include([m4/ax_check_compile_flag.m4])
408 m4_include([m4/ax_check_link_flag.m4])