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 or --with-gssapi-include or --with-gssapi-lib are given. 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 Also provides RRA_INCLUDES_KRB5, which are the headers to include when dnl probing the Kerberos library properties. dnl dnl Depends on RRA_KRB5_CONFIG, RRA_ENABLE_REDUCED_DEPENDS, and dnl RRA_SET_LDFLAGS. dnl dnl The canonical version of this file is maintained in the rra-c-util dnl package, available at . dnl dnl Written by Russ Allbery dnl Copyright 2005-2009, 2011-2012 dnl The Board of Trustees of the Leland Stanford Junior University dnl dnl This file is free software; the authors give unlimited permission to copy dnl and/or distribute it, with or without modifications, as long as this dnl notice is preserved. dnl dnl SPDX-License-Identifier: FSFULLR dnl Headers to include when probing for Kerberos library properties. AC_DEFUN([RRA_INCLUDES_GSSAPI], [[ #ifdef HAVE_GSSAPI_GSSAPI_H # include #else # include #endif #ifdef HAVE_GSSAPI_GSSAPI_KRB5_H # include #endif ]]) 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]) AC_SEARCH_LIBS([roken_concat], [roken]) rra_gssapi_extra="$LIBS" LIBS="$rra_gssapi_save_LIBS" AC_CHECK_LIB([gssapi], [gss_import_name], [GSSAPI_LIBS="-lgssapi -lkrb5 -lasn1 -lcrypto -lcom_err $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 -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 Determine GSS-API compiler and linker flags from krb5-config. AC_DEFUN([_RRA_LIB_GSSAPI_CONFIG], [RRA_KRB5_CONFIG([${rra_gssapi_root}], [gssapi], [GSSAPI], [_RRA_LIB_GSSAPI_CHECK], [_RRA_LIB_GSSAPI_PATHS _RRA_LIB_GSSAPI_MANUAL])]) dnl Check for a header using a file existence check rather than using dnl AC_CHECK_HEADERS. This is used if there were arguments to configure dnl specifying the GSS-API library path, since we may have one header in the dnl default include path and another under our explicitly-configured GSS-API dnl location. AC_DEFUN([_RRA_LIB_GSSAPI_CHECK_HEADER], [AC_MSG_CHECKING([for $1]) AS_IF([test -f "${rra_gssapi_incroot}/$1"], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), [1], [Define to 1 if you have the <$1> header file.]) AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])]) dnl Determine the GSS-API header location and probe for some other dnl characteristics of the libraries. We use a file existence check rather dnl than letting the compiler probe for the right header location AC_DEFUN([_RRA_LIB_GSSAPI_EXTRA], [rra_gssapi_incroot= AS_IF([test x"$rra_gssapi_includedir" != x], [rra_gssapi_incroot="$rra_gssapi_includedir"], [AS_IF([test x"$rra_gssapi_root" != x], [rra_gssapi_incroot="${rra_gssapi_root}/include"])]) AS_IF([test x"$rra_gssapi_incroot" = x], [AC_CHECK_HEADERS([gssapi/gssapi.h gssapi/gssapi_krb5.h])], [_RRA_LIB_GSSAPI_CHECK_HEADER([gssapi/gssapi.h]) _RRA_LIB_GSSAPI_CHECK_HEADER([gssapi/gssapi_krb5.h])]) AC_CHECK_DECL([GSS_C_NT_USER_NAME], [AC_DEFINE([HAVE_GSS_RFC_OIDS], 1, [Define to 1 if the GSS-API library uses RFC-compliant OIDs.])], [], [RRA_INCLUDES_GSSAPI])]) 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], [AS_IF([test x"$rra_gssapi_includedir" = x \ && test x"$rra_gssapi_libdir" = x], [_RRA_LIB_GSSAPI_CONFIG], [_RRA_LIB_GSSAPI_PATHS _RRA_LIB_GSSAPI_MANUAL])]) RRA_LIB_GSSAPI_SWITCH _RRA_LIB_GSSAPI_EXTRA RRA_LIB_GSSAPI_RESTORE])