diff options
author | Russ Allbery <rra@stanford.edu> | 2008-01-04 02:13:41 +0000 |
---|---|---|
committer | Russ Allbery <rra@stanford.edu> | 2008-01-04 02:13:41 +0000 |
commit | 71ab261ffdb5be4c70c1e5575ee1547913ea77fa (patch) | |
tree | a12269f87d70b58a599e7ed45143d8d5cff79721 /m4/gssapi.m4 | |
parent | a7f692f43917e4a1f3cc2b9f6dbb87ab66ca96d1 (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/gssapi.m4')
-rw-r--r-- | m4/gssapi.m4 | 136 |
1 files changed, 136 insertions, 0 deletions
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])])]) |