aboutsummaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
authorRuss Allbery <rra@stanford.edu>2008-01-04 02:13:41 +0000
committerRuss Allbery <rra@stanford.edu>2008-01-04 02:13:41 +0000
commit71ab261ffdb5be4c70c1e5575ee1547913ea77fa (patch)
treea12269f87d70b58a599e7ed45143d8d5cff79721 /m4
parenta7f692f43917e4a1f3cc2b9f6dbb87ab66ca96d1 (diff)
The build system now probes for GSS-API, Kerberos v5 and v4, and AFS
libraries as necessary rather than hard-coding libraries. Building on systems without strong shared library dependencies and building against static libraries should now work. Building kasetkey (for AFS kaserver synchronization) is now optional and not enabled by default. Pass --with-afs to enable it. This allows wallet to be easily built in an environment without AFS.
Diffstat (limited to 'm4')
-rw-r--r--m4/afs.m494
-rw-r--r--m4/gssapi.m4136
-rw-r--r--m4/krb4.m4143
-rw-r--r--m4/krb5.m4164
-rw-r--r--m4/lib-depends.m423
-rw-r--r--m4/remctl.m469
6 files changed, 629 insertions, 0 deletions
diff --git a/m4/afs.m4 b/m4/afs.m4
new file mode 100644
index 0000000..66a3f08
--- /dev/null
+++ b/m4/afs.m4
@@ -0,0 +1,94 @@
+dnl afs.m4 -- Find the compiler and linker flags for OpenAFS.
+dnl $Id$
+dnl
+dnl If --with-afs is given, finds the compiler and linker flags for building
+dnl with OpenAFS libraries; sets AFS_CPPFLAGS, AFS_LDFLAGS, and AFS_LIBS as
+dnl appropriate; and defines HAVE_AFS. Provides the macro RRA_LIB_AFS, which
+dnl takes no arguments.
+dnl
+dnl This function also sets rra_afs to true if AFS was requested, which can be
+dnl checked to determine if further checks should be done.
+dnl
+dnl Also provides RRA_LIB_AFS_SET to set CPPFLAGS, LDFLAGS, and LIBS to
+dnl include the AFS libraries; RRA_LIB_AFS_SWITCH to do the same but save the
+dnl current values first; and RRA_LIB_AFS_RESTORE to restore those settings to
+dnl before the last RRA_LIB_AFS_SWITCH.
+dnl
+dnl Written by Russ Allbery <rra@stanford.edu>
+dnl Based on code developed by Derrick Brashear and Ken Hornstein of Sine
+dnl Nomine Associates, on behalf of Stanford University.
+dnl Copyright 2006, 2007, 2008
+dnl Board of Trustees, Leland Stanford Jr. University
+dnl See LICENSE for licensing terms.
+
+dnl Set CPPFLAGS, LDFLAGS, and LIBS to values including the AFS settings.
+AC_DEFUN([RRA_LIB_AFS_SET],
+[CPPFLAGS="$AFS_CPPFLAGS $CPPFLAGS"
+ LDFLAGS="$AFS_LDFLAGS $LDFLAGS"
+ LIBS="$AFS_LIBS $LIBS"])
+
+dnl Save the current CPPFLAGS, LDFLAGS, and LIBS settings and switch to
+dnl versions that include the AFS flags. Used as a wrapper, with
+dnl RRA_LIB_AFS_RESTORE, around tests.
+AC_DEFUN([RRA_LIB_AFS_SWITCH],
+[rra_afs_save_CPPFLAGS="$CPPFLAGS"
+ rra_afs_save_LDFLAGS="$LDFLAGS"
+ rra_afs_save_LIBS="$LIBS"
+ RRA_LIB_AFS_SET])
+
+dnl Restore CPPFLAGS, LDFLAGS, and LIBS to their previous values (before
+dnl RRA_LIB_AFS_SWITCH was called).
+AC_DEFUN([RRA_LIB_AFS_RESTORE],
+[CPPFLAGS="$rra_afs_save_CPPFLAGS"
+ LDFLAGS="$rra_afs_save_LDFLAGS"
+ LIBS="$rra_afs_save_LIBS"])
+
+dnl The function that does the work checking for the AFS libraries.
+AC_DEFUN([_RRA_LIB_AFS_CHECK],
+[RRA_LIB_AFS_SET
+ LIBS=
+ AC_SEARCH_LIBS([pthread_getspecific], [pthread])
+ AC_SEARCH_LIBS([res_search], [resolv], ,
+ [AC_SEARCH_LIBS([__res_search], [resolv])])
+ AC_SEARCH_LIBS([gethostbyname], [nsl])
+ AC_SEARCH_LIBS([socket], [socket], ,
+ [AC_CHECK_LIB([nsl], [socket], [LIBS="-lnsl -lsocket $LIBS"], ,
+ [-lsocket])])
+ AFS_LIBS="$AFS_LIBS $LIBS"
+ LIBS="$AFS_LIBS"
+ AC_CACHE_CHECK([whether linking with AFS libraries work], [rra_cv_lib_afs],
+ [AC_TRY_LINK(
+[#include <afs/param.h>
+#include <afs/kautils.h>],
+[char cell[256] = "EXAMPLE.COM";
+char realm[256];
+int local;
+
+ka_CellToRealm(cell, realm, &local);],
+ [rra_cv_lib_afs=yes],
+ [rra_cv_lib_afs=no])])
+ AS_IF([test "$rra_cv_lib_afs" = no],
+ [AC_MSG_ERROR([unable to link test AFS program])])
+ RRA_LIB_AFS_RESTORE])
+
+dnl The public entry point. Sets up the --with option and only does the
+dnl library check if AFS linkage was requested.
+AC_DEFUN([RRA_LIB_AFS],
+[rra_afs=false
+ AFS_CPPFLAGS=
+ AFS_LDFLAGS=
+ AFS_LIBS="-lafsauthent -lafsrpc"
+ AC_SUBST([AFS_CPPFLAGS])
+ AC_SUBST([AFS_LDFLAGS])
+ AC_SUBST([AFS_LIBS])
+ AC_ARG_WITH([afs],
+ [AC_HELP_STRING([--with-afs@<:@=DIR@:>@],
+ [Compile with AFS kaserver sync support])],
+ [AS_IF([test x"$withval" != xno],
+ [rra_afs=true
+ AS_IF([test x"$withval" != xyes],
+ [AFS_CPPFLAGS="-I${withval}/include"
+ AFS_LDFLAGS="-L${withval}/lib"])
+ _RRA_LIB_AFS_CHECK
+ AC_DEFINE([HAVE_AFS], 1,
+ [Define to enable AFS kaserver support.])])])])
diff --git a/m4/gssapi.m4 b/m4/gssapi.m4
new file mode 100644
index 0000000..bf6acff
--- /dev/null
+++ b/m4/gssapi.m4
@@ -0,0 +1,136 @@
+dnl gssapi.m4 -- Find the compiler and linker flags for GSS-API.
+dnl $Id$
+dnl
+dnl Finds the compiler and linker flags for linking with GSS-API libraries
+dnl and sets the substitution variables GSSAPI_CPPFLAGS, GSSAPI_LDFLAGS, and
+dnl GSSAPI_LIBS. Provides the --with-gssapi configure option to specify a
+dnl non-standard path to the GSS-API libraries. Uses krb5-config where
+dnl available unless reduced dependencies is requested.
+dnl
+dnl Provides the macro RRA_LIB_GSSAPI and sets the substitution variables
+dnl GSSAPI_CPPFLAGS, GSSAPI_LDFLAGS, and GSSAPI_LIBS. Also provides
+dnl RRA_LIB_GSSAPI_SET to set CPPFLAGS, LDFLAGS, and LIBS to include the
+dnl GSS-API libraries; RRA_LIB_GSSAPI_SWITCH to do the same but save the
+dnl current values first; and RRA_LIB_GSSAPI_RESTORE to restore those settings
+dnl to before the last RRA_LIB_GSSAPI_SWITCH.
+dnl
+dnl Written by Russ Allbery <rra@stanford.edu>
+dnl Copyright 2005, 2006, 2007, 2008
+dnl Board of Trustees, Leland Stanford Jr. University
+dnl See LICENSE for licensing terms.
+
+dnl Set CPPFLAGS, LDFLAGS, and LIBS to values including the GSS-API settings.
+AC_DEFUN([RRA_LIB_GSSAPI_SET],
+[CPPFLAGS="$GSSAPI_CPPFLAGS $CPPFLAGS"
+ LDFLAGS="$GSSAPI_LDFLAGS $LDFLAGS"
+ LIBS="$GSSAPI_LIBS $LIBS"])
+
+dnl Save the current CPPFLAGS, LDFLAGS, and LIBS settings and switch to
+dnl versions that include the GSS-API flags. Used as a wrapper, with
+dnl RRA_LIB_GSSAPI_RESTORE, around tests.
+AC_DEFUN([RRA_LIB_GSSAPI_SWITCH],
+[rra_gssapi_save_CPPFLAGS="$CPPFLAGS"
+ rra_gssapi_save_LDFLAGS="$LDFLAGS"
+ rra_gssapi_save_LIBS="$LIBS"
+ RRA_LIB_GSSAPI_SET])
+
+dnl Restore CPPFLAGS, LDFLAGS, and LIBS to their previous values (before
+dnl RRA_LIB_GSSAPI_SWITCH was called).
+AC_DEFUN([RRA_LIB_GSSAPI_RESTORE],
+[CPPFLAGS="$rra_gssapi_save_CPPFLAGS"
+ LDFLAGS="$rra_gssapi_save_LDFLAGS"
+ LIBS="$rra_gssapi_save_LIBS"])
+
+dnl Set GSSAPI_CPPFLAGS and GSSAPI_LDFLAGS based on rra_gssapi_root.
+AC_DEFUN([_RRA_LIB_GSSAPI_PATHS],
+[AS_IF([test x"$rra_gssapi_root" != x],
+ [AS_IF([test x"$rra_gssapi_root" != x/usr],
+ [GSSAPI_CPPFLAGS="-I${rra_gssapi_root}/include"])
+ GSSAPI_LDFLAGS="-L${rra_gssapi_root}/lib"])])
+
+dnl Does the appropriate library checks for reduced-dependency GSS-API
+dnl linkage.
+AC_DEFUN([_RRA_LIB_GSSAPI_REDUCED],
+[RRA_LIB_GSSAPI_SWITCH
+ AC_CHECK_LIB([gssapi_krb5], [gss_import_name], [GSSAPI_LIBS="-lgssapi_krb5"],
+ [AC_CHECK_LIB([gssapi], [gss_import_name], [GSSAPI_LIBS="-lgssapi"],
+ [AC_MSG_ERROR([cannot find usable GSS-API library])])])])
+
+dnl Does the appropriate library checks for GSS-API linkage when we don't
+dnl have krb5-config or reduced dependencies.
+AC_DEFUN([_RRA_LIB_GSSAPI_MANUAL],
+[RRA_LIB_GSSAPI_SWITCH
+ rra_gssapi_extra=
+ LIBS=
+ AC_SEARCH_LIBS([res_search], [resolv], ,
+ [AC_SEARCH_LIBS([__res_search], [resolv])])
+ AC_SEARCH_LIBS([gethostbyname], [nsl])
+ AC_SEARCH_LIBS([socket], [socket], ,
+ [AC_CHECK_LIB([nsl], [socket], [LIBS="-lnsl -lsocket $LIBS"], ,
+ [-lsocket])])
+ AC_SEARCH_LIBS([crypt], [crypt])
+ rra_gssapi_extra="$LIBS"
+ LIBS="$rra_gssapi_save_LIBS"
+ AC_CHECK_LIB([gssapi], [gss_import_name],
+ [GSSAPI_LIBS="-lgssapi -lkrb5 -lasn1 -lroken -lcrypto -lcom_err"
+ GSSAPI_LIBS="$GSSAPI_LIBS $rra_gssapi_extra"],
+ [AC_CHECK_LIB([krb5support], [krb5int_getspecific],
+ [rra_gssapi_extra="-lkrb5support $rra_gssapi_extra"],
+ [AC_CHECK_LIB([pthreads], [pthread_setspecific],
+ [rra_gssapi_pthread="-lpthreads"],
+ [AC_CHECK_LIB([pthread], [pthread_setspecific],
+ [rra_gssapi_pthread="-lpthread"])])
+ AC_CHECK_LIB([krb5support], [krb5int_setspecific],
+ [rra_gssapi_extra="-lkrb5support $rra_gssapi_extra"
+ rra_gssapi_extra="$rra_gssapi_extra $rra_gssapi_pthread"],
+ [$rra_gssapi_pthread])])
+ AC_CHECK_LIB([com_err], [error_message],
+ [rra_gssapi_extra="-lcom_err $rra_gssapi_extra"])
+ AC_CHECK_LIB([k5crypto], [krb5int_hash_md5],
+ [rra_gssapi_extra="-lk5crypto $rra_gssapi_extra"])
+ rra_gssapi_extra="-lkrb5 $rra_gssapi_extra"
+ AC_CHECK_LIB([gssapi_krb5], [gss_import_name],
+ [GSSAPI_LIBS="-lgssapi_krb5 $rra_gssapi_extra"],
+ [AC_MSG_ERROR([cannot find usable GSS-API library])],
+ [$rra_gssapi_extra])],
+ [-lkrb5 -lasn1 -lroken -lcrypto -lcom_err $rra_gssapi_extra])
+ RRA_LIB_GSSAPI_RESTORE])
+
+dnl The main macro.
+AC_DEFUN([RRA_LIB_GSSAPI],
+[AC_REQUIRE([RRA_ENABLE_REDUCED_DEPENDS])
+rra_gssapi_root=
+GSSAPI_CPPFLAGS=
+GSSAPI_LDFLAGS=
+GSSAPI_LIBS=
+AC_SUBST([GSSAPI_CPPFLAGS])
+AC_SUBST([GSSAPI_LDFLAGS])
+AC_SUBST([GSSAPI_LIBS])
+AC_ARG_WITH([gssapi],
+ [AC_HELP_STRING([--with-gssapi=DIR],
+ [Location of GSS-API headers and libraries])],
+ [AS_IF([test x"$withval" != xyes && test x"$withval" != xno],
+ [rra_gssapi_root="$withval"])])
+AS_IF([test x"$rra_reduced_depends" = xtrue],
+ [_RRA_LIB_GSSAPI_PATHS
+ _RRA_LIB_GSSAPI_REDUCED],
+ [AC_ARG_VAR([KRB5_CONFIG], [Path to krb5-config])
+ AS_IF([test x"$rra_gssapi_root" != x],
+ [AS_IF([test -x "${rra_gssapi_root}/bin/krb5-config"],
+ [KRB5_CONFIG="${rra_gssapi_root}/bin/krb5-config"])],
+ [AC_PATH_PROG([KRB5_CONFIG], [krb5-config])])
+ AS_IF([test x"$KRB5_CONFIG" != x],
+ [AC_CACHE_CHECK([for gssapi support in krb5-config],
+ [rra_cv_lib_gssapi_config],
+ [AS_IF(["$KRB5_CONFIG" | grep gssapi > /dev/null 2>&1],
+ [rra_cv_lib_gssapi_config=yes],
+ [rra_cv_lib_gssapi_config=no])])
+ AS_IF([test "$rra_cv_lib_gssapi_config" = yes],
+ [GSSAPI_CPPFLAGS=`"$KRB5_CONFIG" --cflags gssapi`
+ GSSAPI_LIBS=`"$KRB5_CONFIG" --libs gssapi`],
+ [GSSAPI_CPPFLAGS=`"$KRB5_CONFIG" --cflags`
+ GSSAPI_LIBS=`"$KRB5_CONFIG" --libs`])
+ GSSAPI_CPPFLAGS=`echo "$GSSAPI_CPPFLAGS" \
+ | sed 's%-I/usr/include ?%%'`],
+ [_RRA_LIB_GSSAPI_PATHS
+ _RRA_LIB_GSSAPI_MANUAL])])])
diff --git a/m4/krb4.m4 b/m4/krb4.m4
new file mode 100644
index 0000000..997a3a4
--- /dev/null
+++ b/m4/krb4.m4
@@ -0,0 +1,143 @@
+dnl krb4.m4 -- Find the compiler and linker flags for Kerberos v4.
+dnl $Id$
+dnl
+dnl Finds the compiler and linker flags for linking with Kerberos v4 libraries
+dnl and sets the substitution variables KRB4_CPPFLAGS, KRB4_LDFLAGS, and
+dnl KRB4_LIBS. Provides the --with-krb4 configure option to specify a
+dnl non-standard path to the Kerberos libraries. Uses krb5-config where
+dnl available unless reduced dependencies is requested.
+dnl
+dnl Provides the macro RRA_LIB_KRB4 and sets the substitution variables
+dnl KRB4_CPPFLAGS, KRB4_LDFLAGS, and KRB4_LIBS. Also provides
+dnl RRA_LIB_KRB4_SET to set CPPFLAGS, LDFLAGS, and LIBS to include the
+dnl Kerberos libraries; RRA_LIB_KRB4_SWITCH to do the same but save the
+dnl current values first; and RRA_LIB_KRB4_RESTORE to restore those settings
+dnl to before the last RRA_LIB_KRB4_SWITCH.
+dnl
+dnl Written by Russ Allbery <rra@stanford.edu>
+dnl Copyright 2005, 2006, 2007, 2008
+dnl Board of Trustees, Leland Stanford Jr. University
+dnl See LICENSE for licensing terms.
+
+dnl Set CPPFLAGS, LDFLAGS, and LIBS to values including the Kerberos v4
+dnl settings.
+AC_DEFUN([RRA_LIB_KRB4_SET],
+[CPPFLAGS="$KRB4_CPPFLAGS $CPPFLAGS"
+ LDFLAGS="$KRB4_LDFLAGS $LDFLAGS"
+ LIBS="$KRB4_LIBS $LIBS"])
+
+dnl Save the current CPPFLAGS, LDFLAGS, and LIBS settings and switch to
+dnl versions that include the Kerberos v4 flags. Used as a wrapper, with
+dnl RRA_LIB_KRB4_RESTORE, around tests.
+AC_DEFUN([RRA_LIB_KRB4_SWITCH],
+[rra_krb4_save_CPPFLAGS="$CPPFLAGS"
+ rra_krb4_save_LDFLAGS="$LDFLAGS"
+ rra_krb4_save_LIBS="$LIBS"
+ RRA_LIB_KRB4_SET])
+
+dnl Restore CPPFLAGS, LDFLAGS, and LIBS to their previous values (before
+dnl RRA_LIB_KRB4_SWITCH was called).
+AC_DEFUN([RRA_LIB_KRB4_RESTORE],
+[CPPFLAGS="$rra_krb4_save_CPPFLAGS"
+ LDFLAGS="$rra_krb4_save_LDFLAGS"
+ LIBS="$rra_krb4_save_LIBS"])
+
+dnl Set KRB4_CPPFLAGS and KRB4_LDFLAGS based on rra_krb4_root.
+AC_DEFUN([_RRA_LIB_KRB4_PATHS],
+[AS_IF([test x"$rra_krb4_root" != x],
+ [AS_IF([test x"$rra_krb4_root" != x/usr],
+ [KRB4_CPPFLAGS="-I${rra_krb4_root}/include"])
+ KRB4_LDFLAGS="-L${rra_krb4_root}/lib"])])
+
+dnl Does the appropriate library checks for reduced-dependency Kerberos v4
+dnl linkage.
+AC_DEFUN([_RRA_LIB_KRB4_REDUCED],
+[RRA_LIB_KRB4_SWITCH
+ AC_CHECK_LIB([krb4], [krb_get_svc_in_tkt], [KRB4_LIBS="-lkrb4"],
+ [AC_CHECK_LIB([krb], [krb_get_svc_in_tkt], [KRB4_LIBS="-lkrb"],
+ [AC_MSG_ERROR([cannot find usable Kerberos v4 library])])])
+ RRA_LIB_KRB4_RESTORE])
+
+dnl Does the appropriate library checks for Kerberos v4 linkage when we don't
+dnl have krb5-config or reduced dependencies.
+AC_DEFUN([_RRA_LIB_KRB4_MANUAL],
+[RRA_LIB_KRB4_SWITCH
+ rra_krb4_extra=
+ LIBS=
+ AC_SEARCH_LIBS([res_search], [resolv], ,
+ [AC_SEARCH_LIBS([__res_search], [resolv])])
+ AC_SEARCH_LIBS([gethostbyname], [nsl])
+ AC_SEARCH_LIBS([socket], [socket], ,
+ [AC_CHECK_LIB([nsl], [socket], [LIBS="-lnsl -lsocket $LIBS"], ,
+ [-lsocket])])
+ AC_SEARCH_LIBS([crypt], [crypt])
+ rra_krb4_extra="$LIBS"
+ LIBS="$rra_krb4_save_LIBS"
+ AC_CHECK_LIB([crypto], [des_set_key],
+ [rra_krb4_extra="-lcrypto $rra_krb4_extra"],
+ [AC_CHECK_LIB([des], [des_set_key],
+ [rra_krb4_extra="-ldes $rra_krb4_extra"])])
+ AC_CHECK_LIB([krb], [krb_get_svc_in_tkt],
+ [KRB4_LIBS="-lkrb $rra_krb4_extra"],
+ [rra_krb4_extra="-ldes425 -lkrb5 -lk5crypto -lcom_err $rra_krb4_extra"
+ AC_CHECK_LIB([krb5support], [krb5int_getspecific],
+ [rra_krb4_extra="$rra_krb4_extra -lkrb5support"],
+ [AC_CHECK_LIB([pthreads], [pthread_setspecific],
+ [rra_krb4_pthread="-lpthreads"],
+ [AC_CHECK_LIB([pthread], [pthread_setspecific],
+ [rra_krb4_pthread="-lpthread"])])
+ AC_CHECK_LIB([krb5support], [krb5int_setspecific],
+ [rra_krb4_extra="-lkrb5support $rra_krb4_pthread"],
+ [$rra_krb4_pthread])])
+ AC_CHECK_LIB([krb4], [krb_get_svc_in_tkt],
+ [KRB4_LIBS="-lkrb4 $rra_krb4_extra"],
+ [AC_MSG_ERROR([cannot find usable Kerberos v4 library])],
+ [$rra_krb4_extra])],
+ [$rra_krb4_extra])
+ RRA_LIB_KRB4_RESTORE])
+
+dnl Additional checks for portability that apply to either way that we find
+dnl the right libraries.
+AC_DEFUN([_RRA_LIB_KRB4_EXTRA],
+[RRA_LIB_KRB4_SWITCH
+ AC_CHECK_HEADERS([kerberosIV/krb.h])
+ RRA_LIB_KRB4_RESTORE])
+
+dnl The main macro.
+AC_DEFUN([RRA_LIB_KRB4],
+[AC_REQUIRE([RRA_ENABLE_REDUCED_DEPENDS])
+rra_krb4_root=
+KRB4_CPPFLAGS=
+KRB4_LDFLAGS=
+KRB4_LIBS=
+AC_SUBST([KRB4_CPPFLAGS])
+AC_SUBST([KRB4_LDFLAGS])
+AC_SUBST([KRB4_LIBS])
+AC_ARG_WITH([krb4],
+ [AC_HELP_STRING([--with-krb4=DIR],
+ [Location of Kerberos v4 headers and libraries])],
+ [AS_IF([test x"$withval" != xyes && test x"$withval" != xno],
+ [rra_krb4_root="$withval"])])
+AS_IF([test x"$rra_reduced_depends" = xtrue],
+ [_RRA_LIB_KRB4_PATHS
+ _RRA_LIB_KRB4_REDUCED],
+ [AC_ARG_VAR([KRB5_CONFIG], [Path to krb5-config])
+ AS_IF([test x"$rra_krb4_root" != x],
+ [AS_IF([test -x "${rra_krb4_root}/bin/krb5-config"],
+ [KRB5_CONFIG="${rra_krb4_root}/bin/krb5-config"])],
+ [AC_PATH_PROG([KRB5_CONFIG], [krb5-config])])
+ AS_IF([test x"$KRB5_CONFIG" != x],
+ [AC_CACHE_CHECK([for krb4 support in krb5-config],
+ [rra_cv_lib_krb4_config],
+ [AS_IF(["$KRB5_CONFIG" | grep krb4 > /dev/null 2>&1],
+ [rra_cv_lib_krb4_config=yes],
+ [rra_cv_lib_krb4_config=no])])
+ AS_IF([test "$rra_cv_lib_krb4_config" = yes],
+ [KRB4_CPPFLAGS=`"$KRB5_CONFIG" --cflags krb4`
+ KRB4_LIBS=`"$KRB5_CONFIG" --libs krb4`],
+ [_RRA_LIB_KRB4_PATHS
+ _RRA_LIB_KRB4_MANUAL])
+ KRB4_CPPFLAGS=`echo "$KRB5_CPPFLAGS" | sed 's%-I/usr/include ?%%'`],
+ [_RRA_LIB_KRB4_PATHS
+ _RRA_LIB_KRB4_MANUAL])])
+ _RRA_LIB_KRB4_EXTRA])
diff --git a/m4/krb5.m4 b/m4/krb5.m4
new file mode 100644
index 0000000..2474b47
--- /dev/null
+++ b/m4/krb5.m4
@@ -0,0 +1,164 @@
+dnl krb5.m4 -- Find the compiler and linker flags for Kerberos v5.
+dnl $Id$
+dnl
+dnl Finds the compiler and linker flags for linking with Kerberos v5 libraries
+dnl and sets the substitution variables KRB5_CPPFLAGS, KRB5_LDFLAGS, and
+dnl KRB5_LIBS. Provides the --with-krb5 configure option to specify a
+dnl non-standard path to the Kerberos libraries. Uses krb5-config where
+dnl available unless reduced dependencies is requested.
+dnl
+dnl Provides the macro RRA_LIB_KRB5 and sets the substitution variables
+dnl KRB5_CPPFLAGS, KRB5_LDFLAGS, and KRB5_LIBS. Also provides
+dnl RRA_LIB_KRB5_SET to set CPPFLAGS, LDFLAGS, and LIBS to include the
+dnl Kerberos libraries; RRA_LIB_KRB5_SWITCH to do the same but save the
+dnl current values first; and RRA_LIB_KRB5_RESTORE to restore those settings
+dnl to before the last RRA_LIB_KRB5_SWITCH.
+dnl
+dnl Written by Russ Allbery <rra@stanford.edu>
+dnl Copyright 2005, 2006, 2007, 2008
+dnl Board of Trustees, Leland Stanford Jr. University
+dnl See LICENSE for licensing terms.
+
+dnl Set CPPFLAGS, LDFLAGS, and LIBS to values including the Kerberos v5
+dnl settings.
+AC_DEFUN([RRA_LIB_KRB5_SET],
+[CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
+ LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
+ LIBS="$KRB5_LIBS $LIBS"])
+
+dnl Save the current CPPFLAGS, LDFLAGS, and LIBS settings and switch to
+dnl versions that include the Kerberos v5 flags. Used as a wrapper, with
+dnl RRA_LIB_KRB5_RESTORE, around tests.
+AC_DEFUN([RRA_LIB_KRB5_SWITCH],
+[rra_krb5_save_CPPFLAGS="$CPPFLAGS"
+ rra_krb5_save_LDFLAGS="$LDFLAGS"
+ rra_krb5_save_LIBS="$LIBS"
+ RRA_LIB_KRB5_SET])
+
+dnl Restore CPPFLAGS, LDFLAGS, and LIBS to their previous values (before
+dnl RRA_LIB_KRB5_SWITCH was called).
+AC_DEFUN([RRA_LIB_KRB5_RESTORE],
+[CPPFLAGS="$rra_krb5_save_CPPFLAGS"
+ LDFLAGS="$rra_krb5_save_LDFLAGS"
+ LIBS="$rra_krb5_save_LIBS"])
+
+dnl Set KRB5_CPPFLAGS and KRB5_LDFLAGS based on rra_krb5_root.
+AC_DEFUN([_RRA_LIB_KRB5_PATHS],
+[AS_IF([test x"$rra_krb5_root" != x],
+ [AS_IF([test x"$rra_krb5_root" != x/usr],
+ [KRB5_CPPFLAGS="-I${rra_krb5_root}/include"])
+ KRB5_LDFLAGS="-L${rra_krb5_root}/lib"])])
+
+dnl Does the appropriate library checks for reduced-dependency Kerberos v5
+dnl linkage.
+AC_DEFUN([_RRA_LIB_KRB5_REDUCED],
+[RRA_LIB_KRB5_SWITCH
+ AC_CHECK_LIB([krb5], [krb5_init_context], [KRB5_LIBS="-lkrb5"],
+ [AC_MSG_ERROR([cannot find usable Kerberos v5 library])])
+ LIBS="$KRB5_LIBS $LIBS"
+ AC_CHECK_FUNCS([krb5_get_error_message],
+ [AC_CHECK_FUNCS([krb5_free_error_message])],
+ [AC_CHECK_FUNCS([krb5_get_err_txt], ,
+ [AC_CHECK_LIB([ksvc], [krb5_svc_get_msg],
+ [KRB5_LIBS="$KRB5_LIBS -lksvc"
+ AC_DEFINE([HAVE_KRB5_SVC_GET_MSG], [1])
+ AC_CHECK_HEADERS([ibm_svc/krb5_svc.h])],
+ [AC_CHECK_LIB([com_err], [com_err],
+ [KRB5_LIBS="$KRB5_LIBS -lcom_err"],
+ [AC_MSG_ERROR([cannot find usable com_err library])])
+ AC_CHECK_HEADERS([et/com_err.h])])])])
+ RRA_LIB_KRB5_RESTORE])
+
+dnl Does the appropriate library checks for Kerberos v5 linkage when we don't
+dnl have krb5-config or reduced dependencies.
+AC_DEFUN([_RRA_LIB_KRB5_MANUAL],
+[RRA_LIB_KRB5_SWITCH
+ rra_krb5_extra=
+ LIBS=
+ AC_SEARCH_LIBS([res_search], [resolv], ,
+ [AC_SEARCH_LIBS([__res_search], [resolv])])
+ AC_SEARCH_LIBS([gethostbyname], [nsl])
+ AC_SEARCH_LIBS([socket], [socket], ,
+ [AC_CHECK_LIB([nsl], [socket], [LIBS="-lnsl -lsocket $LIBS"], ,
+ [-lsocket])])
+ AC_SEARCH_LIBS([crypt], [crypt])
+ rra_krb5_extra="$LIBS"
+ LIBS="$rra_krb5_save_LIBS"
+ AC_CHECK_LIB([krb5], [krb5_init_context],
+ [KRB5_LIBS="-lkrb5 -lasn1 -lroken -lcrypto -lcom_err $rra_krb5_extra"],
+ [AC_CHECK_LIB([krb5support], [krb5int_getspecific],
+ [rra_krb5_extra="-lkrb5support $rra_krb5_extra"],
+ [AC_CHECK_LIB([pthreads], [pthread_setspecific],
+ [rra_krb5_pthread="-lpthreads"],
+ [AC_CHECK_LIB([pthread], [pthread_setspecific],
+ [rra_krb5_pthread="-lpthread"])])
+ AC_CHECK_LIB([krb5support], [krb5int_setspecific],
+ [rra_krb5_extra="-lkrb5support $rra_krb5_extra $rra_krb5_pthread"],
+ [$rra_krb5_pthread])])
+ AC_CHECK_LIB([com_err], [error_message],
+ [rra_krb5_extra="-lcom_err $rra_krb5_extra"])
+ AC_CHECK_LIB([ksvc], [krb5_svc_get_msg],
+ [rra_krb5_extra="-lksvc $rra_krb5_extra"])
+ AC_CHECK_LIB([k5crypto], [krb5int_hash_md5],
+ [rra_krb5_extra="-lk5crypto $rra_krb5_extra"])
+ AC_CHECK_LIB([k5profile], [profile_get_values],
+ [rra_krb5_extra="-lk5profile $rra_krb5_extra"])
+ AC_CHECK_LIB([krb5], [krb5_cc_default],
+ [KRB5_LIBS="-lkrb5 $rra_krb5_extra"],
+ [AC_MSG_ERROR([cannot find usable Kerberos v5 library])],
+ [$rra_krb5_extra])],
+ [-lasn1 -lroken -lcrypto -lcom_err $rra_krb5_extra])
+ LIBS="$KRB5_LIBS $LIBS"
+ AC_CHECK_FUNCS([krb5_get_error_message],
+ [AC_CHECK_FUNCS([krb5_free_error_message])],
+ [AC_CHECK_FUNCS([krb5_get_err_txt], ,
+ [AC_CHECK_FUNCS([krb5_svc_get_msg],
+ [AC_CHECK_HEADERS([ibm_svc/krb5_svc.h])],
+ [AC_CHECK_HEADERS([et/com_err.h])])])])
+ RRA_LIB_KRB5_RESTORE])
+
+dnl The main macro.
+AC_DEFUN([RRA_LIB_KRB5],
+[AC_REQUIRE([RRA_ENABLE_REDUCED_DEPENDS])
+rra_krb5_root=
+KRB5_CPPFLAGS=
+KRB5_LDFLAGS=
+KRB5_LIBS=
+AC_SUBST([KRB5_CPPFLAGS])
+AC_SUBST([KRB5_LDFLAGS])
+AC_SUBST([KRB5_LIBS])
+AC_ARG_WITH([krb5],
+ [AC_HELP_STRING([--with-krb5=DIR],
+ [Location of Kerberos v5 headers and libraries])],
+ [AS_IF([test x"$withval" != xyes && test x"$withval" != xno],
+ [rra_krb5_root="$withval"])])
+AS_IF([test x"$rra_reduced_depends" = xtrue],
+ [_RRA_LIB_KRB5_PATHS
+ _RRA_LIB_KRB5_REDUCED],
+ [AC_ARG_VAR([KRB5_CONFIG], [Path to krb5-config])
+ AS_IF([test x"$rra_krb5_root" != x],
+ [AS_IF([test -x "${rra_krb5_root}/bin/krb5-config"],
+ [KRB5_CONFIG="${rra_krb5_root}/bin/krb5-config"])],
+ [AC_PATH_PROG([KRB5_CONFIG], [krb5-config])])
+ AS_IF([test x"$KRB5_CONFIG" != x],
+ [AC_CACHE_CHECK([for krb5 support in krb5-config],
+ [rra_cv_lib_krb5_config],
+ [AS_IF(["$KRB5_CONFIG" | grep krb5 > /dev/null 2>&1],
+ [rra_cv_lib_krb5_config=yes],
+ [rra_cv_lib_krb5_config=no])])
+ AS_IF([test "$rra_cv_lib_krb5_config" = yes],
+ [KRB5_CPPFLAGS=`"$KRB5_CONFIG" --cflags krb5`
+ KRB5_LIBS=`"$KRB5_CONFIG" --libs krb5`],
+ [KRB5_CPPFLAGS=`"$KRB5_CONFIG" --cflags`
+ KRB5_LIBS=`"$KRB5_CONFIG" --libs`])
+ KRB5_CPPFLAGS=`echo "$KRB5_CPPFLAGS" | sed 's%-I/usr/include ?%%'`
+ RRA_LIB_KRB5_SWITCH
+ AC_CHECK_FUNCS([krb5_get_error_message],
+ [AC_CHECK_FUNCS([krb5_free_error_message])],
+ [AC_CHECK_FUNCS([krb5_get_err_txt], ,
+ [AC_CHECK_FUNCS([krb5_svc_get_msg],
+ [AC_CHECK_HEADERS([ibm_svc/krb5_svc.h])],
+ [AC_CHECK_HEADERS([et/com_err.h])])])])
+ RRA_LIB_KRB5_RESTORE],
+ [_RRA_LIB_KRB5_PATHS
+ _RRA_LIB_KRB5_MANUAL])])])
diff --git a/m4/lib-depends.m4 b/m4/lib-depends.m4
new file mode 100644
index 0000000..54a8f43
--- /dev/null
+++ b/m4/lib-depends.m4
@@ -0,0 +1,23 @@
+dnl lib-depends.m4 -- Provides option to change library probes.
+dnl $Id$
+dnl
+dnl This file provides RRA_ENABLE_REDUCED_DEPENDS, which adds the configure
+dnl option --enable-reduced-depends to request that library probes assume
+dnl shared libraries are in use and dependencies of libraries should not be
+dnl probed. If this option is given, the shell variable rra_reduced_depends
+dnl is set to true; otherwise, it is set to false.
+dnl
+dnl This macro doesn't do much but is defined separately so that other macros
+dnl can require it with AC_REQUIRE.
+dnl
+dnl Written by Russ Allbery <rra@stanford.edu>
+dnl Copyright 2005, 2006, 2007
+dnl Board of Trustees, Leland Stanford Jr. University
+dnl See LICENSE for licensing terms.
+
+AC_DEFUN([RRA_ENABLE_REDUCED_DEPENDS],
+[rra_reduced_depends=false
+AC_ARG_ENABLE([reduced-depends],
+ [AC_HELP_STRING([--enable-reduced-depends],
+ [Try to minimize shared library dependencies])],
+ [AS_IF([test x"$enableval" = xyes], [rra_reduced_depends=true])])])
diff --git a/m4/remctl.m4 b/m4/remctl.m4
new file mode 100644
index 0000000..2941f19
--- /dev/null
+++ b/m4/remctl.m4
@@ -0,0 +1,69 @@
+dnl remctl.m4 -- Find the compiler and linker flags for remctl.
+dnl $Id$
+dnl
+dnl This file provides RRA_LIB_REMCTL, which finds the compiler and linker
+dnl flags for linking with remctl libraries and sets the substitution
+dnl variables REMCTL_CPPFLAGS, REMCTL_LDFLAGS, and REMCTL_LIBS. Also provides
+dnl RRA_LIB_REMCTL_SET to set CPPFLAGS, LDFLAGS, and LIBS to include the
+dnl remctl libraries; RRA_LIB_REMCTL_SWITCH to do the same but save the
+dnl current values first; and RRA_LIB_REMCTL_RESTORE to restore those settings
+dnl to before the last RRA_LIB_REMCTL_SWITCH.
+dnl
+dnl This macro depends on RRA_ENABLE_REDUCED_DEPENDS and RRA_LIB_GSSAPI.
+dnl
+dnl Written by Russ Allbery <rra@stanford.edu>
+dnl Copyright 2008 Board of Trustees, Leland Stanford Jr. University
+dnl See LICENSE for licensing terms.
+
+dnl Set CPPFLAGS, LDFLAGS, and LIBS to values including the Kerberos v5
+dnl settings.
+AC_DEFUN([RRA_LIB_REMCTL_SET],
+[CPPFLAGS="$REMCTL_CPPFLAGS $CPPFLAGS"
+ LDFLAGS="$REMCTL_LDFLAGS $LDFLAGS"
+ LIBS="$REMCTL_LIBS $LIBS"])
+
+dnl Save the current CPPFLAGS, LDFLAGS, and LIBS settings and switch to
+dnl versions that include the Kerberos v5 flags. Used as a wrapper, with
+dnl RRA_LIB_REMCTL_RESTORE, around tests.
+AC_DEFUN([RRA_LIB_REMCTL_SWITCH],
+[rra_remctl_save_CPPFLAGS="$CPPFLAGS"
+ rra_remctl_save_LDFLAGS="$LDFLAGS"
+ rra_remctl_save_LIBS="$LIBS"
+ RRA_LIB_REMCTL_SET])
+
+dnl Restore CPPFLAGS, LDFLAGS, and LIBS to their previous values (before
+dnl RRA_LIB_REMCTL_SWITCH was called).
+AC_DEFUN([RRA_LIB_REMCTL_RESTORE],
+[CPPFLAGS="$rra_remctl_save_CPPFLAGS"
+ LDFLAGS="$rra_remctl_save_LDFLAGS"
+ LIBS="$rra_remctl_save_LIBS"])
+
+dnl Set REMCTL_CPPFLAGS and REMCTL_LDFLAGS based on rra_remctl_root.
+AC_DEFUN([_RRA_LIB_REMCTL_PATHS],
+[AS_IF([test x"$rra_remctl_root" != x],
+ [AS_IF([test x"$rra_remctl_root" != x/usr],
+ [REMCTL_CPPFLAGS="-I${rra_remctl_root}/include"])
+ REMCTL_LDFLAGS="-L${rra_remctl_root}/lib"])])
+
+dnl The main macro.
+AC_DEFUN([RRA_LIB_REMCTL],
+[AC_REQUIRE([RRA_ENABLE_REDUCED_DEPENDS])
+rra_remctl_root=
+REMCTL_CPPFLAGS=
+REMCTL_LDFLAGS=
+REMCTL_LIBS=
+AC_SUBST([REMCTL_CPPFLAGS])
+AC_SUBST([REMCTL_LDFLAGS])
+AC_SUBST([REMCTL_LIBS])
+AC_ARG_WITH([remctl],
+ [AC_HELP_STRING([--with-remctl=DIR],
+ [Location of remctl headers and libraries])],
+ [AS_IF([test x"$withval" != xyes && test x"$withval" != xno],
+ [rra_remctl_root="$withval"])])
+_RRA_LIB_REMCTL_PATHS
+AS_IF([test x"$rra_reduced_depends" = xtrue],
+ [REMCTL_LIBS="-lremctl"],
+ [RRA_LIB_GSSAPI
+ REMCTL_CPPFLAGS="$REMCTL_CPPFLAGS $GSSAPI_CPPFLAGS"
+ REMCTL_LDFLAGS="$REMCTL_LDFLAGS $GSSAPI_LDFLAGS"
+ REMCTL_LIBS="-lremctl $GSSAPI_LIBS"])])