Commit | Line | Data |
---|---|---|
805e021f CE |
1 | dnl Use krb5-config to get link paths for Kerberos libraries. |
2 | dnl | |
3 | dnl Provides one macro, RRA_KRB5_CONFIG, which attempts to get compiler and | |
4 | dnl linker flags for a library via krb5-config and sets the appropriate shell | |
5 | dnl variables. Defines the Autoconf variable PATH_KRB5_CONFIG, which can be | |
6 | dnl used to find the default path to krb5-config. | |
7 | dnl | |
8 | dnl Depends on RRA_ENABLE_REDUCED_DEPENDS. | |
9 | dnl | |
10 | dnl The canonical version of this file is maintained in the rra-c-util | |
11 | dnl package, available at <http://www.eyrie.org/~eagle/software/rra-c-util/>. | |
12 | dnl | |
13 | dnl Written by Russ Allbery <rra@stanford.edu> | |
14 | dnl Copyright 2011, 2012 | |
15 | dnl The Board of Trustees of the Leland Stanford Junior University | |
16 | dnl | |
17 | dnl This file is free software; the authors give unlimited permission to copy | |
18 | dnl and/or distribute it, with or without modifications, as long as this | |
19 | dnl notice is preserved. | |
20 | ||
21 | dnl Check for krb5-config in the user's path and set PATH_KRB5_CONFIG. This | |
22 | dnl is moved into a separate macro so that it can be loaded via AC_REQUIRE, | |
23 | dnl meaning it will only be run once even if we link with multiple krb5-config | |
24 | dnl libraries. | |
25 | AC_DEFUN([_RRA_KRB5_CONFIG_PATH], | |
26 | [AC_ARG_VAR([PATH_KRB5_CONFIG], [Path to krb5-config]) | |
27 | AC_PATH_PROG([PATH_KRB5_CONFIG], [krb5-config], [], | |
28 | [${PATH}:/usr/kerberos/bin])]) | |
29 | ||
30 | dnl Check whether the --deps flag is supported by krb5-config. Takes the path | |
31 | dnl to krb5-config to use. Note that this path is not embedded in the cache | |
32 | dnl variable, so this macro implicitly assumes that we will always use the | |
33 | dnl same krb5-config program. | |
34 | AC_DEFUN([_RRA_KRB5_CONFIG_DEPS], | |
35 | [AC_REQUIRE([_RRA_KRB5_CONFIG_PATH]) | |
36 | AC_CACHE_CHECK([for --deps support in krb5-config], | |
37 | [rra_cv_krb5_config_deps], | |
38 | [AS_IF(["$1" 2>&1 | grep deps >/dev/null 2>&1], | |
39 | [rra_cv_krb5_config_deps=yes], | |
40 | [rra_cv_krb5_config_deps=no])])]) | |
41 | ||
42 | dnl Obtain the library flags for a particular library using krb5-config. | |
43 | dnl Takes the path to the krb5-config program to use, the argument to | |
44 | dnl krb5-config to use, and the variable prefix under which to store the | |
45 | dnl library flags. | |
46 | AC_DEFUN([_RRA_KRB5_CONFIG_LIBS], | |
47 | [AC_REQUIRE([_RRA_KRB5_CONFIG_PATH]) | |
48 | AC_REQUIRE([RRA_ENABLE_REDUCED_DEPENDS]) | |
49 | _RRA_KRB5_CONFIG_DEPS([$1]) | |
50 | AS_IF([test x"$rra_reduced_depends" = xfalse \ | |
51 | && test x"$rra_cv_krb5_config_deps" = xyes], | |
52 | [$3[]_LIBS=`"$1" --deps --libs $2 2>/dev/null`], | |
53 | [$3[]_LIBS=`"$1" --libs $2 2>/dev/null`])]) | |
54 | ||
55 | dnl Attempt to find the flags for a library using krb5-config. Takes the | |
56 | dnl following arguments (in order): | |
57 | dnl | |
58 | dnl 1. The root directory for the library in question, generally from an | |
59 | dnl Autoconf --with flag. Used by preference as the path to krb5-config. | |
60 | dnl | |
61 | dnl 2. The argument to krb5-config to retrieve flags for this particular | |
62 | dnl library. | |
63 | dnl | |
64 | dnl 3. The variable prefix to use when setting CPPFLAGS and LIBS variables | |
65 | dnl based on the result of krb5-config. | |
66 | dnl | |
67 | dnl 4. Further actions to take if krb5-config was found and supported that | |
68 | dnl library type. | |
69 | dnl | |
70 | dnl 5. Further actions to take if krb5-config could not be used to get flags | |
71 | dnl for that library type. | |
72 | dnl | |
73 | dnl Special-case a krb5-config argument of krb5 and run krb5-config without an | |
74 | dnl argument if that option was requested and not supported. Old versions of | |
75 | dnl krb5-config didn't take an argument to specify the library type, but | |
76 | dnl always returned the flags for libkrb5. | |
77 | AC_DEFUN([RRA_KRB5_CONFIG], | |
78 | [AC_REQUIRE([_RRA_KRB5_CONFIG_PATH]) | |
79 | rra_krb5_config_$3= | |
80 | rra_krb5_config_$3[]_ok= | |
81 | AS_IF([test x"$1" != x && test -x "$1/bin/krb5-config"], | |
82 | [rra_krb5_config_$3="$1/bin/krb5-config"], | |
83 | [rra_krb5_config_$3="$PATH_KRB5_CONFIG"]) | |
84 | AS_IF([test x"$rra_krb5_config_$3" != x && test -x "$rra_krb5_config_$3"], | |
85 | [AC_CACHE_CHECK([for $2 support in krb5-config], [rra_cv_lib_$3[]_config], | |
86 | [AS_IF(["$rra_krb5_config_$3" 2>&1 | grep $2 >/dev/null 2>&1], | |
87 | [rra_cv_lib_$3[]_config=yes], | |
88 | [rra_cv_lib_$3[]_config=no])]) | |
89 | AS_IF([test "$rra_cv_lib_$3[]_config" = yes], | |
90 | [$3[]_CPPFLAGS=`"$rra_krb5_config_$3" --cflags $2 2>/dev/null` | |
91 | _RRA_KRB5_CONFIG_LIBS([$rra_krb5_config_$3], [$2], [$3]) | |
92 | rra_krb5_config_$3[]_ok=yes], | |
93 | [AS_IF([test x"$2" = xkrb5], | |
94 | [$3[]_CPPFLAGS=`"$rra_krb5_config_$3" --cflags 2>/dev/null` | |
95 | $3[]_LIBS=`"$rra_krb5_config_$3" --libs $2 2>/dev/null` | |
96 | rra_krb5_config_$3[]_ok=yes])])]) | |
97 | AS_IF([test x"$rra_krb5_config_$3[]_ok" = xyes], | |
98 | [$3[]_CPPFLAGS=`echo "$$3[]_CPPFLAGS" | sed 's%-I/usr/include %%'` | |
99 | $3[]_CPPFLAGS=`echo "$$3[]_CPPFLAGS" | sed 's%-I/usr/include$%%'` | |
100 | $4], | |
101 | [$5])]) |