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