Branch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
# libgcrypt.m4 - Autoconf macros to detect libgcrypt
# Copyright (C) 2002, 2003, 2004, 2011, 2014, 2018, 2020,
# 2024 g10 Code GmbH
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This file is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Last-changed: 2025-09-23
dnl
dnl Find gpgrt-config, which uses .pc file
dnl (minimum pkg-config functionality, supporting cross build)
dnl
dnl _AM_PATH_GPGRT_CONFIG
AC_DEFUN([_AM_PATH_GPGRT_CONFIG],[dnl
AC_PATH_PROG(GPGRT_CONFIG, gpgrt-config, no, [$prefix/bin:$PATH])
if test "$GPGRT_CONFIG" != "no"; then
# Determine gpgrt_libdir
#
# Get the prefix of gpgrt-config assuming it's something like:
# <PREFIX>/bin/gpgrt-config
gpgrt_prefix=${GPGRT_CONFIG%/*/*}
possible_libdir1=${gpgrt_prefix}/lib
# Determine by using system libdir-format with CC, it's like:
# Normal style: /usr/lib
# GNU cross style: /usr/<triplet>/lib
# Debian style: /usr/lib/<multiarch-name>
# Fedora/openSUSE style: /usr/lib, /usr/lib32 or /usr/lib64
# It is assumed that CC is specified to the one of host on cross build.
if libdir_candidates=$(${CC:-cc} -print-search-dirs | \
sed -n -e "/^libraries/{s/libraries: =//;s/:/\\
/g;p;}"); then
# From the output of -print-search-dirs, select valid pkgconfig dirs.
libdir_candidates=$(for dir in $libdir_candidates; do
if p=$(cd $dir 2>/dev/null && pwd); then
test -d "$p/pkgconfig" && echo $p;
fi
done)
for possible_libdir0 in $libdir_candidates; do
# possible_libdir0:
# Fallback candidate, the one of system-installed (by $CC)
# (/usr/<triplet>/lib, /usr/lib/<multiarch-name> or /usr/lib32)
# possible_libdir1:
# Another candidate, user-locally-installed
# (<gpgrt_prefix>/lib)
# possible_libdir2
# Most preferred
# (<gpgrt_prefix>/<triplet>/lib,
# <gpgrt_prefix>/lib/<multiarch-name> or <gpgrt_prefix>/lib32)
if test "${possible_libdir0##*/}" = "lib"; then
possible_prefix0=${possible_libdir0%/lib}
possible_prefix0_triplet=${possible_prefix0##*/}
if test -z "$possible_prefix0_triplet"; then
continue
fi
possible_libdir2=${gpgrt_prefix}/$possible_prefix0_triplet/lib
else
possible_prefix0=${possible_libdir0%%/lib*}
possible_libdir2=${gpgrt_prefix}${possible_libdir0#$possible_prefix0}
fi
if test -f ${possible_libdir2}/pkgconfig/gpg-error.pc; then
gpgrt_libdir=${possible_libdir2}
elif test -f ${possible_libdir1}/pkgconfig/gpg-error.pc; then
gpgrt_libdir=${possible_libdir1}
elif test -f ${possible_libdir0}/pkgconfig/gpg-error.pc; then
gpgrt_libdir=${possible_libdir0}
fi
if test -n "$gpgrt_libdir"; then break; fi
done
fi
if test -z "$gpgrt_libdir"; then
# No valid pkgconfig dir in any of the system directories, fallback
gpgrt_libdir=${possible_libdir1}
fi
else
unset GPGRT_CONFIG
fi
if test -n "$gpgrt_libdir"; then
# Add the --libdir option to GPGRT_CONFIG
GPGRT_CONFIG="$GPGRT_CONFIG --libdir=$gpgrt_libdir"
# Make sure if gpgrt-config really works, by testing config gpg-error
if ! $GPGRT_CONFIG gpg-error --exists; then
# If it doesn't work, clear the GPGRT_CONFIG variable.
unset GPGRT_CONFIG
fi
else
# GPGRT_CONFIG found but no suitable dir for --libdir found.
# This is a failure. Clear the GPGRT_CONFIG variable.
unset GPGRT_CONFIG
fi
])
dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION,
dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS.
dnl MINIMUM-VERSION is a string with the version number optionally prefixed
dnl with the API version to also check the API compatibility. Example:
dnl a MINIMUM-VERSION of 1:1.2.5 won't pass the test unless the installed
dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1. Using
dnl this features allows preventing build against newer versions of libgcrypt
dnl with a changed API.
dnl
dnl If a prefix option is not used, the config script is first
dnl searched in $SYSROOT/bin and then along $PATH. If the used
dnl config script does not match the host specification the script
dnl is added to the gpg_config_script_warn variable.
dnl
AC_DEFUN([AM_PATH_LIBGCRYPT],
[ AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([_AM_PATH_GPGRT_CONFIG])dnl
AC_ARG_WITH(libgcrypt-prefix,
AS_HELP_STRING([--with-libgcrypt-prefix=PFX],
[prefix where LIBGCRYPT is installed (optional)]),
libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="")
if test x"${LIBGCRYPT_CONFIG}" = x ; then
if test x"${libgcrypt_config_prefix}" != x ; then
LIBGCRYPT_CONFIG="${libgcrypt_config_prefix}/bin/libgcrypt-config"
fi
fi
use_gpgrt_config=""
if test x"$GPGRT_CONFIG" != x && test "$GPGRT_CONFIG" != "no"; then
if $GPGRT_CONFIG libgcrypt --exists; then
LIBGCRYPT_CONFIG="$GPGRT_CONFIG libgcrypt"
AC_MSG_NOTICE([Use gpgrt-config as libgcrypt-config])
use_gpgrt_config=yes
fi
fi
if test -z "$use_gpgrt_config"; then
if test x"${LIBGCRYPT_CONFIG}" = x ; then
case "${SYSROOT}" in
/*)
if test -x "${SYSROOT}/bin/libgcrypt-config" ; then
LIBGCRYPT_CONFIG="${SYSROOT}/bin/libgcrypt-config"
fi
;;
'')
;;
*)
AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.])
;;
esac
fi
AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no)
fi
tmp=ifelse([$1], ,1:1.2.0,$1)
if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
else
req_libgcrypt_api=0
min_libgcrypt_version="$tmp"
fi
AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version)
ok=no
if test "$LIBGCRYPT_CONFIG" != "no" ; then
req_major=`echo $min_libgcrypt_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
req_minor=`echo $min_libgcrypt_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
req_micro=`echo $min_libgcrypt_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
if test -z "$use_gpgrt_config"; then
libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
else
libgcrypt_config_version=`$LIBGCRYPT_CONFIG --modversion`
fi
major=`echo $libgcrypt_config_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
minor=`echo $libgcrypt_config_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
micro=`echo $libgcrypt_config_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
if test "$major" -gt "$req_major"; then
ok=yes
else
if test "$major" -eq "$req_major"; then
if test "$minor" -gt "$req_minor"; then
ok=yes
else
if test "$minor" -eq "$req_minor"; then
if test "$micro" -ge "$req_micro"; then
ok=yes
fi
fi
fi
fi
fi
fi
if test $ok = yes; then
AC_MSG_RESULT([yes ($libgcrypt_config_version)])
else
AC_MSG_RESULT(no)
fi
if test $ok = yes; then
# If we have a recent libgcrypt, we should also check that the
# API is compatible
if test "$req_libgcrypt_api" -gt 0 ; then
if test -z "$use_gpgrt_config"; then
tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
else
tmp=`$LIBGCRYPT_CONFIG --variable=api_version 2>/dev/null || echo 0`
fi
if test "$tmp" -gt 0 ; then
AC_MSG_CHECKING([LIBGCRYPT API version])
if test "$req_libgcrypt_api" -eq "$tmp" ; then
AC_MSG_RESULT([okay])
else
ok=no
AC_MSG_RESULT([does not match. want=$req_libgcrypt_api got=$tmp])
fi
fi
fi
fi
if test $ok = yes; then
LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
ifelse([$2], , :, [$2])
if test -z "$use_gpgrt_config"; then
libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none`
else
libgcrypt_config_host=`$LIBGCRYPT_CONFIG --variable=host 2>/dev/null || echo none`
fi
if test x"$libgcrypt_config_host" != xnone ; then
if test x"$libgcrypt_config_host" != x"$host" ; then
AC_MSG_WARN([[
***
*** The config script "$LIBGCRYPT_CONFIG" was
*** built for $libgcrypt_config_host and thus may not match the
*** used host $host.
*** You may want to use the configure option --with-libgcrypt-prefix
*** to specify a matching config script or use \$SYSROOT.
***]])
gpg_config_script_warn="$gpg_config_script_warn libgcrypt"
fi
fi
else
LIBGCRYPT_CFLAGS=""
LIBGCRYPT_LIBS=""
ifelse([$3], , :, [$3])
fi
AC_SUBST(LIBGCRYPT_CFLAGS)
AC_SUBST(LIBGCRYPT_LIBS)
])