From d06a4a557675b68421f2272d0153ca04128f6994 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Thu, 2 Sep 2010 08:44:27 +0100 Subject: [PATCH 1/1] Autoconf: Add GSSAPI autoconf rules Add rules to autodetect the location of a system's GSSAPI libraries, using the gssapi.m4 script from rra-c-util 2.6 Change-Id: Idabb8fdb138a2dac6983aa4d5fd8a2f558ee08be Reviewed-on: http://gerrit.openafs.org/3943 Tested-by: Christof Hanke Reviewed-by: Derrick Brashear --- configure.ac | 3 + src/cf/gssapi.m4 | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 src/cf/gssapi.m4 diff --git a/configure.ac b/configure.ac index 5c1cd35..08e80cc 100644 --- a/configure.ac +++ b/configure.ac @@ -82,6 +82,9 @@ AS_IF([test x"$KRB5_LIBS" != x], AC_SUBST([BUILD_KRB5]) AC_SUBST([MAKE_KRB5]) +dnl Probe for GSSAPI +RRA_LIB_GSSAPI + if test -d 'doc/man-pages' ; then MAN_MAKEFILE="doc/man-pages/Makefile doc/man-pages/install-man" else diff --git a/src/cf/gssapi.m4 b/src/cf/gssapi.m4 new file mode 100644 index 0000000..0a657ff --- /dev/null +++ b/src/cf/gssapi.m4 @@ -0,0 +1,171 @@ +dnl Find the compiler and linker flags for GSS-API. +dnl +dnl Finds the compiler and linker flags for linking with GSS-API libraries. +dnl Provides the --with-gssapi, --with-gssapi-include, and --with-gssapi-lib +dnl configure option to specify a non-standard path to the GSS-API libraries. +dnl Uses krb5-config where 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_SWITCH to set CPPFLAGS, LDFLAGS, and LIBS to include the +dnl GSS-API libraries, saving the ecurrent values, and RRA_LIB_GSSAPI_RESTORE +dnl to restore those settings to before the last RRA_LIB_GSSAPI_SWITCH. +dnl +dnl Depends on RRA_ENABLE_REDUCED_DEPENDS and RRA_SET_LDFLAGS. +dnl +dnl Written by Russ Allbery +dnl Copyright 2005, 2006, 2007, 2008, 2009 +dnl Board of Trustees, Leland Stanford Jr. University +dnl +dnl See LICENSE for licensing terms. + +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" + CPPFLAGS="$GSSAPI_CPPFLAGS $CPPFLAGS" + LDFLAGS="$GSSAPI_LDFLAGS $LDFLAGS" + LIBS="$GSSAPI_LIBS $LIBS"]) + +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, +dnl rra_gssapi_libdir, and rra_gssapi_includedir. +AC_DEFUN([_RRA_LIB_GSSAPI_PATHS], +[AS_IF([test x"$rra_gssapi_libdir" != x], + [GSSAPI_LDFLAGS="-L$rra_gssapi_libdir"], + [AS_IF([test x"$rra_gssapi_root" != x], + [RRA_SET_LDFLAGS([GSSAPI_LDFLAGS], [$rra_gssapi_root])])]) + AS_IF([test x"$rra_gssapi_includedir" != x], + [GSSAPI_CPPFLAGS="-I$rra_gssapi_includedir"], + [AS_IF([test x"$rra_gssapi_root" != x], + [AS_IF([test x"$rra_gssapi_root" != x/usr], + [GSSAPI_CPPFLAGS="-I${rra_gssapi_root}/include"])])])]) + +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_CHECK_LIB([gss], [gss_import_name], [GSSAPI_LIBS="-lgss"], + [AC_MSG_ERROR([cannot find usable GSS-API library])])])]) + RRA_LIB_GSSAPI_RESTORE]) + +dnl Does the appropriate library checks for GSS-API linkage when we don't +dnl have krb5-config or reduced dependencies. libgss is used as a last +dnl resort, since it may be a non-functional mech-independent wrapper, but +dnl it's the right choice on Solaris 10. +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_CHECK_LIB([gss], [gss_import_name], + [GSSAPI_LIBS="-lgss"], + [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 Sanity-check the results of krb5-config and be sure we can really link a +dnl GSS-API program. If not, fall back on the manual check. +AC_DEFUN([_RRA_LIB_GSSAPI_CHECK], +[RRA_LIB_GSSAPI_SWITCH + AC_CHECK_FUNC([gss_import_name], + [RRA_LIB_GSSAPI_RESTORE], + [RRA_LIB_GSSAPI_RESTORE + GSSAPI_CPPFLAGS= + GSSAPI_LIBS= + _RRA_LIB_GSSAPI_PATHS + _RRA_LIB_GSSAPI_MANUAL])]) + +dnl The main macro. +AC_DEFUN([RRA_LIB_GSSAPI], +[AC_REQUIRE([RRA_ENABLE_REDUCED_DEPENDS]) + rra_gssapi_root= + rra_gssapi_libdir= + rra_gssapi_includedir= + GSSAPI_CPPFLAGS= + GSSAPI_LDFLAGS= + GSSAPI_LIBS= + AC_SUBST([GSSAPI_CPPFLAGS]) + AC_SUBST([GSSAPI_LDFLAGS]) + AC_SUBST([GSSAPI_LIBS]) + + AC_ARG_WITH([gssapi], + [AS_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"])]) + AC_ARG_WITH([gssapi-include], + [AS_HELP_STRING([--with-gssapi-include=DIR], + [Location of GSS-API headers])], + [AS_IF([test x"$withval" != xyes && test x"$withval" != xno], + [rra_gssapi_includedir="$withval"])]) + AC_ARG_WITH([gssapi-lib], + [AS_HELP_STRING([--with-gssapi-lib=DIR], + [Location of GSS-API libraries])], + [AS_IF([test x"$withval" != xyes && test x"$withval" != xno], + [rra_gssapi_libdir="$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 && test -z "$KRB5_CONFIG"], + [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 && test -x "$KRB5_CONFIG"], + [AC_CACHE_CHECK([for gssapi support in krb5-config], + [rra_cv_lib_gssapi_config], + [AS_IF(["$KRB5_CONFIG" 2>&1 | 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 2>/dev/null` + GSSAPI_LIBS=`"$KRB5_CONFIG" --libs gssapi 2>/dev/null`], + [GSSAPI_CPPFLAGS=`"$KRB5_CONFIG" --cflags 2>/dev/null` + GSSAPI_LIBS=`"$KRB5_CONFIG" --libs 2>/dev/null`]) + GSSAPI_CPPFLAGS=`echo "$GSSAPI_CPPFLAGS" \ + | sed 's%-I/usr/include ?%%'` + _RRA_LIB_GSSAPI_CHECK], + [_RRA_LIB_GSSAPI_PATHS + _RRA_LIB_GSSAPI_MANUAL])])]) -- 1.9.4