2021-04-15 17:17:29 +08:00
|
|
|
#***************************************************************************
|
|
|
|
# _ _ ____ _
|
|
|
|
# Project ___| | | | _ \| |
|
|
|
|
# / __| | | | |_) | |
|
|
|
|
# | (__| |_| | _ <| |___
|
|
|
|
# \___|\___/|_| \_\_____|
|
|
|
|
#
|
2023-01-02 20:51:48 +08:00
|
|
|
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
2021-04-15 17:17:29 +08:00
|
|
|
#
|
|
|
|
# This software is licensed as described in the file COPYING, which
|
|
|
|
# you should have received as part of this distribution. The terms
|
|
|
|
# are also available at https://curl.se/docs/copyright.html.
|
|
|
|
#
|
|
|
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
|
|
# copies of the Software, and permit persons to whom the Software is
|
|
|
|
# furnished to do so, under the terms of the COPYING file.
|
|
|
|
#
|
|
|
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
|
|
# KIND, either express or implied.
|
|
|
|
#
|
|
|
|
# SPDX-License-Identifier: curl
|
2022-05-17 17:16:50 +08:00
|
|
|
#
|
2021-04-15 17:17:29 +08:00
|
|
|
#***************************************************************************
|
|
|
|
|
|
|
|
dnl ----------------------------------------------------
|
|
|
|
dnl check for mbedTLS
|
|
|
|
dnl ----------------------------------------------------
|
|
|
|
AC_DEFUN([CURL_WITH_MBEDTLS], [
|
|
|
|
|
|
|
|
if test "x$OPT_MBEDTLS" != xno; then
|
|
|
|
_cppflags=$CPPFLAGS
|
|
|
|
_ldflags=$LDFLAGS
|
configure: do not echo most inherited `LDFLAGS` to config files
`libcurl.pc` `Libs.private` (since 8.11.0, and in `Libs` before 7.20.0)
and `curl-config` `--static-libs` (since 7.17.1, and in `Libs` between
7.7.2-7.25.0). This included all flags inherited from the environment,
in addition to those coming from dependency detections.
To avoid spilling all linker flags inherited from the environment to
the libcurl config files, this patch omits them all, except `-L`, `-F`,
`--library-path=` and `-framework` options, which are still passed.
The rationale for the exceptions is that `LIBS` is passed as-is, and
`LDFLAGS`, `LIBS` are the canonical way to pass custom libs options
to a build. `LIBS` may not work without a matching custom libpath.
This brings autotools behaviour closer to cmake, and `curl-config`
closer to `libcurl.pc`.
Follow-up to 9f56bb608ecfbb8978c6cb72a04d9e8b23162d82 #14681
Follow-up to 4c8adc8fee5e55754da3d8f8d982733a7bf3dece
Reported-by: Peter Marko
Fixes #15533
Closes #15550
2024-11-11 20:21:58 +08:00
|
|
|
_ldflagspc=$LDFLAGSPC
|
2021-04-15 17:17:29 +08:00
|
|
|
ssl_msg=
|
|
|
|
|
|
|
|
if test X"$OPT_MBEDTLS" != Xno; then
|
|
|
|
|
|
|
|
if test "$OPT_MBEDTLS" = "yes"; then
|
|
|
|
OPT_MBEDTLS=""
|
|
|
|
fi
|
|
|
|
|
|
|
|
if test -z "$OPT_MBEDTLS" ; then
|
|
|
|
dnl check for lib first without setting any new path
|
|
|
|
|
|
|
|
AC_CHECK_LIB(mbedtls, mbedtls_havege_init,
|
|
|
|
dnl libmbedtls found, set the variable
|
2024-08-21 17:08:54 +08:00
|
|
|
[
|
|
|
|
AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled])
|
|
|
|
AC_SUBST(USE_MBEDTLS, [1])
|
|
|
|
MBEDTLS_ENABLED=1
|
|
|
|
USE_MBEDTLS="yes"
|
|
|
|
ssl_msg="mbedTLS"
|
|
|
|
test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
|
|
|
|
], [], -lmbedx509 -lmbedcrypto)
|
2021-04-15 17:17:29 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
addld=""
|
|
|
|
addlib=""
|
|
|
|
addcflags=""
|
|
|
|
mbedtlslib=""
|
|
|
|
|
|
|
|
if test "x$USE_MBEDTLS" != "xyes"; then
|
|
|
|
dnl add the path and test again
|
|
|
|
addld=-L$OPT_MBEDTLS/lib$libsuff
|
|
|
|
addcflags=-I$OPT_MBEDTLS/include
|
|
|
|
mbedtlslib=$OPT_MBEDTLS/lib$libsuff
|
|
|
|
|
|
|
|
LDFLAGS="$LDFLAGS $addld"
|
configure: do not echo most inherited `LDFLAGS` to config files
`libcurl.pc` `Libs.private` (since 8.11.0, and in `Libs` before 7.20.0)
and `curl-config` `--static-libs` (since 7.17.1, and in `Libs` between
7.7.2-7.25.0). This included all flags inherited from the environment,
in addition to those coming from dependency detections.
To avoid spilling all linker flags inherited from the environment to
the libcurl config files, this patch omits them all, except `-L`, `-F`,
`--library-path=` and `-framework` options, which are still passed.
The rationale for the exceptions is that `LIBS` is passed as-is, and
`LDFLAGS`, `LIBS` are the canonical way to pass custom libs options
to a build. `LIBS` may not work without a matching custom libpath.
This brings autotools behaviour closer to cmake, and `curl-config`
closer to `libcurl.pc`.
Follow-up to 9f56bb608ecfbb8978c6cb72a04d9e8b23162d82 #14681
Follow-up to 4c8adc8fee5e55754da3d8f8d982733a7bf3dece
Reported-by: Peter Marko
Fixes #15533
Closes #15550
2024-11-11 20:21:58 +08:00
|
|
|
LDFLAGSPC="$LDFLAGSPC $addld"
|
2021-04-15 17:17:29 +08:00
|
|
|
if test "$addcflags" != "-I/usr/include"; then
|
2024-08-21 17:08:54 +08:00
|
|
|
CPPFLAGS="$CPPFLAGS $addcflags"
|
2021-04-15 17:17:29 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
|
2024-08-26 08:11:05 +08:00
|
|
|
[
|
|
|
|
AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled])
|
|
|
|
AC_SUBST(USE_MBEDTLS, [1])
|
|
|
|
MBEDTLS_ENABLED=1
|
|
|
|
USE_MBEDTLS="yes"
|
|
|
|
ssl_msg="mbedTLS"
|
|
|
|
test mbedtls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
|
|
|
|
],
|
|
|
|
[
|
|
|
|
CPPFLAGS=$_cppflags
|
|
|
|
LDFLAGS=$_ldflags
|
configure: do not echo most inherited `LDFLAGS` to config files
`libcurl.pc` `Libs.private` (since 8.11.0, and in `Libs` before 7.20.0)
and `curl-config` `--static-libs` (since 7.17.1, and in `Libs` between
7.7.2-7.25.0). This included all flags inherited from the environment,
in addition to those coming from dependency detections.
To avoid spilling all linker flags inherited from the environment to
the libcurl config files, this patch omits them all, except `-L`, `-F`,
`--library-path=` and `-framework` options, which are still passed.
The rationale for the exceptions is that `LIBS` is passed as-is, and
`LDFLAGS`, `LIBS` are the canonical way to pass custom libs options
to a build. `LIBS` may not work without a matching custom libpath.
This brings autotools behaviour closer to cmake, and `curl-config`
closer to `libcurl.pc`.
Follow-up to 9f56bb608ecfbb8978c6cb72a04d9e8b23162d82 #14681
Follow-up to 4c8adc8fee5e55754da3d8f8d982733a7bf3dece
Reported-by: Peter Marko
Fixes #15533
Closes #15550
2024-11-11 20:21:58 +08:00
|
|
|
LDFLAGSPC=$_ldflagspc
|
2024-08-26 08:11:05 +08:00
|
|
|
], -lmbedx509 -lmbedcrypto)
|
2021-04-15 17:17:29 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
if test "x$USE_MBEDTLS" = "xyes"; then
|
|
|
|
AC_MSG_NOTICE([detected mbedTLS])
|
|
|
|
check_for_ca_bundle=1
|
|
|
|
|
|
|
|
LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
|
|
|
|
|
|
|
|
if test -n "$mbedtlslib"; then
|
|
|
|
dnl when shared libs were found in a path that the run-time
|
|
|
|
dnl linker doesn't search through, we need to add it to
|
|
|
|
dnl CURL_LIBRARY_PATH to prevent further configure tests to fail
|
|
|
|
dnl due to this
|
|
|
|
if test "x$cross_compiling" != "xyes"; then
|
|
|
|
CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$mbedtlslib"
|
|
|
|
export CURL_LIBRARY_PATH
|
|
|
|
AC_MSG_NOTICE([Added $mbedtlslib to CURL_LIBRARY_PATH])
|
|
|
|
fi
|
|
|
|
fi
|
2024-11-15 05:42:20 +08:00
|
|
|
dnl FIXME: Enable when mbedTLS was detected via pkg-config
|
build: omit certain deps from `libcurl.pc` unless found via `pkg-config`
The idea of linking dependencies found to `libcurl.pc` turns out not
to work in practice in some cases.
Specifically: gss, ldap, mbedtls, libmsh3, rustls
A `.pc` may not work or be missing for a couple of reasons:
- not all build methods generate it: mbedTLS, Rustls
- generated file is broken: msh3
Ref: https://github.com/nibanks/msh3/pull/225
- installed package flavour isn't shipping with one:
FreeBSD GSS, OmniOS LDAP, macOS LDAP
The effect of such issues shall be subtle in theory, because
`libcurl.pc` normally lists these dependencies in the `Requires.private`
section meant for static linking. But, e.g. `pkg-config --exists`
requires these to be present, and builds sometimes use this check
regardless of build type. This bug is not present in `pkgconf`; it only
checks for them when `--static` is also passed.
Fix these by adding affected `.pc` references to `libcurl.pc` only when
we detected the dependency via `pkg-config`.
There are a few side-effects of this solution:
- references are never added for dependencies where curl doesn't
implement `pkg-config` detection. These are:
- autotools: ldap, mbedtls, msh3
- cmake: ldap (pending #15273)
- generated `libcurl.pc` depends on the build-time environment.
- generated `libcurl.pc` depends on curl build tool (cmake, autotools).
- generated `libcurl.pc` depends on curl build implementation details.
Make an exception for GNU GSS, where I blindly guess that `gss.pc` is
always available, as no issues were reported.
Other, not mentioned, dependencies continue to be added regardless
of the detection method.
Reported-by: Harmen Stoppels, Thomas, Daniel Engberg, Andy Fiddaman
Fixes #15469
Fixes #15507
Fixes #15535
Fixes https://github.com/curl/curl/pull/15163#issuecomment-2473358444
Closes #15573
2024-11-13 21:44:05 +08:00
|
|
|
if false; then
|
|
|
|
LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE mbedtls"
|
|
|
|
fi
|
2021-04-15 17:17:29 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
fi dnl mbedTLS not disabled
|
|
|
|
|
|
|
|
test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
|
|
|
|
fi
|
|
|
|
|
|
|
|
])
|