Annotation of embedaddon/sudo/m4/sudo.m4, revision 1.1
1.1 ! misho 1: dnl Local m4 macros for autoconf (used by sudo)
! 2: dnl
! 3: dnl Copyright (c) 1994-1996, 1998-2005, 2007-2014
! 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 Parent directory for time stamp dir.
! 123: dnl
! 124: AC_DEFUN([SUDO_RUNDIR], [AC_MSG_CHECKING(for sudo run dir location)
! 125: rundir="$with_rundir"
! 126: if test -z "$rundir"; then
! 127: for d in /var/run /var/db /var/lib /var/adm /usr/adm; do
! 128: if test -d "$d"; then
! 129: rundir="$d/sudo"
! 130: break
! 131: fi
! 132: done
! 133: fi
! 134: AC_MSG_RESULT([$rundir])
! 135: SUDO_DEFINE_UNQUOTED(_PATH_SUDO_TIMEDIR, "$rundir/ts")
! 136: ])dnl
! 137:
! 138: dnl
! 139: dnl Parent directory for the lecture status dir.
! 140: dnl
! 141: AC_DEFUN([SUDO_VARDIR], [AC_MSG_CHECKING(for sudo var dir location)
! 142: vardir="$with_vardir"
! 143: if test -z "$vardir"; then
! 144: for d in /var/db /var/lib /var/adm /usr/adm; do
! 145: if test -d "$d"; then
! 146: vardir="$d/sudo"
! 147: break
! 148: fi
! 149: done
! 150: fi
! 151: AC_MSG_RESULT([$vardir])
! 152: SUDO_DEFINE_UNQUOTED(_PATH_SUDO_LECTURE_DIR, "$vardir/lectured")
! 153: ])dnl
! 154:
! 155: dnl
! 156: dnl Where the I/O log files go, use /var/log/sudo-io if
! 157: dnl /var/log exists, else /{var,usr}/adm/sudo-io
! 158: dnl
! 159: AC_DEFUN([SUDO_IO_LOGDIR], [
! 160: AC_MSG_CHECKING(for I/O log dir location)
! 161: if test "${with_iologdir-yes}" != "yes"; then
! 162: iolog_dir="$with_iologdir"
! 163: elif test -d "/var/log"; then
! 164: iolog_dir="/var/log/sudo-io"
! 165: elif test -d "/var/adm"; then
! 166: iolog_dir="/var/adm/sudo-io"
! 167: else
! 168: iolog_dir="/usr/adm/sudo-io"
! 169: fi
! 170: if test "${with_iologdir}" != "no"; then
! 171: SUDO_DEFINE_UNQUOTED(_PATH_SUDO_IO_LOGDIR, "$iolog_dir")
! 172: fi
! 173: AC_MSG_RESULT($iolog_dir)
! 174: ])dnl
! 175:
! 176: dnl
! 177: dnl check for working fnmatch(3)
! 178: dnl
! 179: AC_DEFUN([SUDO_FUNC_FNMATCH],
! 180: [AC_MSG_CHECKING([for working fnmatch with FNM_CASEFOLD])
! 181: AC_CACHE_VAL(sudo_cv_func_fnmatch,
! 182: [rm -f conftestdata; > conftestdata
! 183: AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <fnmatch.h>
! 184: main() { exit(fnmatch("/*/bin/echo *", "/usr/bin/echo just a test", FNM_CASEFOLD)); }]])], [sudo_cv_func_fnmatch=yes], [sudo_cv_func_fnmatch=no],
! 185: [sudo_cv_func_fnmatch=no])
! 186: rm -f core core.* *.core])
! 187: AC_MSG_RESULT($sudo_cv_func_fnmatch)
! 188: AS_IF([test $sudo_cv_func_fnmatch = yes], [$1], [$2])])
! 189:
! 190: dnl
! 191: dnl Attempt to check for working PIE support.
! 192: dnl This is a bit of a hack but on Solaris 10 with GNU ld and GNU as
! 193: dnl we can end up with strange values from malloc().
! 194: dnl A better check would be to verify that ASLR works with PIE.
! 195: dnl
! 196: AC_DEFUN([SUDO_WORKING_PIE],
! 197: [AC_MSG_CHECKING([for working PIE support])
! 198: AC_CACHE_VAL(sudo_cv_working_pie,
! 199: [rm -f conftestdata; > conftestdata
! 200: AC_RUN_IFELSE([AC_LANG_SOURCE([AC_INCLUDES_DEFAULT
! 201: 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],
! 202: [sudo_cv_working_pie=no])
! 203: rm -f core core.* *.core])
! 204: AC_MSG_RESULT($sudo_cv_working_pie)
! 205: AS_IF([test $sudo_cv_working_pie = yes], [$1], [$2])])
! 206:
! 207: dnl
! 208: dnl check for isblank(3)
! 209: dnl
! 210: AC_DEFUN([SUDO_FUNC_ISBLANK],
! 211: [AC_CACHE_CHECK([for isblank], [sudo_cv_func_isblank],
! 212: [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <ctype.h>]], [[return (isblank('a'));]])],
! 213: [sudo_cv_func_isblank=yes], [sudo_cv_func_isblank=no])])
! 214: ] [
! 215: if test "$sudo_cv_func_isblank" = "yes"; then
! 216: AC_DEFINE(HAVE_ISBLANK, 1, [Define if you have isblank(3).])
! 217: else
! 218: AC_LIBOBJ(isblank)
! 219: fi
! 220: ])
! 221:
! 222: AC_DEFUN([SUDO_CHECK_LIB], [
! 223: _sudo_check_lib_extras=`echo "$5"|sed -e 's/[ ]*//g' -e 's/-l/_/g'`
! 224: AC_MSG_CHECKING([for $2 in -l$1${5+ }$5])
! 225: AC_CACHE_VAL([sudo_cv_lib_$1''_$2$_sudo_check_lib_extras], [
! 226: SUDO_CHECK_LIB_OLIBS="$LIBS"
! 227: LIBS="$LIBS -l$1${5+ }$5"
! 228: AC_LINK_IFELSE(
! 229: [AC_LANG_CALL([], [$2])],
! 230: [eval sudo_cv_lib_$1''_$2$_sudo_check_lib_extras=yes],
! 231: [eval sudo_cv_lib_$1''_$2$_sudo_check_lib_extras=no]
! 232: )
! 233: LIBS="$SUDO_CHECK_LIB_OLIBS"
! 234: ])
! 235: if eval test \$sudo_cv_lib_$1''_$2$_sudo_check_lib_extras = "yes"; then
! 236: AC_MSG_RESULT([yes])
! 237: $3
! 238: else
! 239: AC_MSG_RESULT([no])
! 240: $4
! 241: fi
! 242: ])
! 243:
! 244: dnl
! 245: dnl check unsetenv() return value
! 246: dnl
! 247: AC_DEFUN([SUDO_FUNC_UNSETENV_VOID],
! 248: [AC_CACHE_CHECK([whether unsetenv returns void], [sudo_cv_func_unsetenv_void],
! 249: [AC_RUN_IFELSE([AC_LANG_PROGRAM(
! 250: [AC_INCLUDES_DEFAULT
! 251: int unsetenv();
! 252: ], [
! 253: [return unsetenv("FOO") != 0;]
! 254: ])
! 255: ],
! 256: [sudo_cv_func_unsetenv_void=no],
! 257: [sudo_cv_func_unsetenv_void=yes],
! 258: [sudo_cv_func_unsetenv_void=no])])
! 259: if test $sudo_cv_func_unsetenv_void = yes; then
! 260: AC_DEFINE(UNSETENV_VOID, 1,
! 261: [Define to 1 if the `unsetenv' function returns void instead of `int'.])
! 262: fi
! 263: ])
! 264:
! 265: dnl
! 266: dnl check putenv() argument for const
! 267: dnl
! 268: AC_DEFUN([SUDO_FUNC_PUTENV_CONST],
! 269: [AC_CACHE_CHECK([whether putenv takes a const argument],
! 270: sudo_cv_func_putenv_const,
! 271: [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
! 272: int putenv(const char *string) {return 0;}], [])],
! 273: [sudo_cv_func_putenv_const=yes],
! 274: [sudo_cv_func_putenv_const=no])
! 275: ])
! 276: if test $sudo_cv_func_putenv_const = yes; then
! 277: AC_DEFINE(PUTENV_CONST, const, [Define to const if the `putenv' takes a const argument.])
! 278: else
! 279: AC_DEFINE(PUTENV_CONST, [])
! 280: fi
! 281: ])
! 282:
! 283: dnl
! 284: dnl check for sa_len field in struct sockaddr
! 285: dnl
! 286: AC_DEFUN([SUDO_SOCK_SA_LEN], [
! 287: AC_CHECK_MEMBER([struct sockaddr.sa_len],
! 288: [AC_DEFINE(HAVE_STRUCT_SOCKADDR_SA_LEN, 1, [Define if your struct sockaddr has an sa_len field.])],
! 289: [], [
! 290: # include <sys/types.h>
! 291: # include <sys/socket.h>]
! 292: )]
! 293: )
! 294:
! 295: dnl
! 296: dnl check for sin_len field in struct sockaddr_in
! 297: dnl
! 298: AC_DEFUN([SUDO_SOCK_SIN_LEN], [
! 299: AC_CHECK_MEMBER([struct sockaddr_in.sin_len],
! 300: [AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN_SIN_LEN, 1, [Define if your struct sockaddr_in has a sin_len field.])],
! 301: [], [
! 302: # include <sys/types.h>
! 303: # include <sys/socket.h>]
! 304: )]
! 305: )
! 306:
! 307: dnl
! 308: dnl check for max length of uid_t in string representation.
! 309: dnl we can't really trust UID_MAX or MAXUID since they may exist
! 310: dnl only for backwards compatibility.
! 311: dnl
! 312: AC_DEFUN([SUDO_UID_T_LEN],
! 313: [AC_REQUIRE([AC_TYPE_UID_T])
! 314: AC_MSG_CHECKING(max length of uid_t)
! 315: AC_CACHE_VAL(sudo_cv_uid_t_len,
! 316: [rm -f conftestdata
! 317: AC_RUN_IFELSE([AC_LANG_SOURCE([[
! 318: #include <stdio.h>
! 319: #include <pwd.h>
! 320: #include <limits.h>
! 321: #include <sys/types.h>
! 322: #include <sys/param.h>
! 323: main() {
! 324: FILE *f;
! 325: char b[1024];
! 326: uid_t u = (uid_t) -1;
! 327:
! 328: if ((f = fopen("conftestdata", "w")) == NULL)
! 329: exit(1);
! 330:
! 331: (void) sprintf(b, "%lu", (unsigned long) u);
! 332: (void) fprintf(f, "%d\n", strlen(b));
! 333: (void) fclose(f);
! 334: exit(0);
! 335: }]])], [sudo_cv_uid_t_len=`cat conftestdata`], [sudo_cv_uid_t_len=10], [sudo_cv_uid_t_len=10])
! 336: ])
! 337: rm -f conftestdata
! 338: AC_MSG_RESULT($sudo_cv_uid_t_len)
! 339: 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).])
! 340: ])
! 341:
! 342: dnl
! 343: dnl Append a libpath to an LDFLAGS style variable if not already present.
! 344: dnl Also appends to the _R version unless rpath is disabled.
! 345: dnl
! 346: AC_DEFUN([SUDO_APPEND_LIBPATH], [
! 347: case "${$1}" in
! 348: *"-L$2"|*"-L$2 ")
! 349: ;;
! 350: *)
! 351: $1="${$1} -L$2"
! 352: if test X"$enable_rpath" = X"yes"; then
! 353: $1_R="${$1_R} -R$2"
! 354: fi
! 355: ;;
! 356: esac
! 357: ])
! 358:
! 359: dnl
! 360: dnl Append a directory to CPPFLAGS if not already present.
! 361: dnl
! 362: AC_DEFUN([SUDO_APPEND_CPPFLAGS], [
! 363: case "${CPPFLAGS}" in
! 364: *"$1"|*"$1 ")
! 365: ;;
! 366: *)
! 367: if test X"${CPPFLAGS}" = X""; then
! 368: CPPFLAGS="$1"
! 369: else
! 370: CPPFLAGS="${CPPFLAGS} $1"
! 371: fi
! 372: ;;
! 373: esac
! 374: ])
! 375:
! 376: dnl
! 377: dnl Determine the mail spool location
! 378: dnl NOTE: must be run *after* check for paths.h
! 379: dnl
! 380: AC_DEFUN([SUDO_MAILDIR], [
! 381: maildir=no
! 382: if test X"$ac_cv_header_paths_h" = X"yes"; then
! 383: AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
! 384: #include <paths.h>],
! 385: [char *p = _PATH_MAILDIR;])], [maildir=yes], [])
! 386: fi
! 387: if test $maildir = no; then
! 388: # Solaris has maillock.h which defines MAILDIR
! 389: AC_CHECK_HEADERS(maillock.h, [
! 390: SUDO_DEFINE(_PATH_MAILDIR, MAILDIR)
! 391: maildir=yes
! 392: ])
! 393: if test $maildir = no; then
! 394: for d in /var/mail /var/spool/mail /usr/spool/mail; do
! 395: if test -d "$d"; then
! 396: maildir=yes
! 397: SUDO_DEFINE_UNQUOTED(_PATH_MAILDIR, "$d")
! 398: break
! 399: fi
! 400: done
! 401: if test $maildir = no; then
! 402: # unable to find mail dir, hope for the best
! 403: SUDO_DEFINE_UNQUOTED(_PATH_MAILDIR, "/var/mail")
! 404: fi
! 405: fi
! 406: fi
! 407: ])
! 408:
! 409: dnl
! 410: dnl private versions of AC_DEFINE and AC_DEFINE_UNQUOTED that don't support
! 411: dnl tracing that we use to define paths for pathnames.h so autoheader doesn't
! 412: dnl put them in config.h.in. An awful hack.
! 413: dnl
! 414: m4_define([SUDO_DEFINE],
! 415: [cat >>confdefs.h <<\EOF
! 416: [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
! 417: EOF
! 418: ])
! 419:
! 420: m4_define([SUDO_DEFINE_UNQUOTED],
! 421: [cat >>confdefs.h <<EOF
! 422: [@%:@define] $1 m4_if($#, 2, [$2], $#, 3, [$2], 1)
! 423: EOF
! 424: ])
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>