mirror of
https://github.com/obgm/libcoap.git
synced 2026-10-26 12:41:22 +03:00
configure.ac: Allow using non-vendored TinyDTLS with autotools build
This commit allows using a system-provided version of TinyDTLS when building libcoap. To do so, some potentially backwards-incompatible changes to the way TinyDTLS is handled in the configure-script were made: - The argument `--with-submodule-tinydtls` is added. If it is set to yes, the configure-script will use the TinyDTLS git submodule for DTLS functionality (assuming `--with-tinydtls` is also set). - The configure-script will prefer using the system-provided version of TinyDTLS as long as `--with-submodule-tinydtls` is not explicitly set to yes. - It will however fall back to the vendored version by default if no system-provided version could be found and if `--without-submodule-tinydtls` is not explicitly set. - If a system-provided version of TinyDTLS was found, it will be used automatically if no DTLS backend was selected explicitly (with the lowest priority compared to the other DTLS libraries). However, the submodule will *never* be used automatically, even if `--with-submodule-tinydtls` is set (i.e., to use the submodule, `--with-tinydtls` must be set as well). If TinyDTLS is not installed system-wide (or if the installed version is too old to contain a pkg-config file), the behaviour should be identical to older versions. Otherwise, use the `--with-submodule-tinydtls` option to force usage of the git submodule version if required.
This commit is contained in:
3 files changed
+113
-30
No files matched your search
+97
-27
@@ -318,6 +318,7 @@ AM_CONDITIONAL(BUILD_MANPAGES, [test "x$build_manpages" = "xyes"])
|
||||
gnutls_version_required=3.3.0
|
||||
openssl_version_required=1.1.0
|
||||
mbedtls_version_required=2.7.10
|
||||
tinydtls_version_required=0.8.6
|
||||
|
||||
AC_ARG_ENABLE([dtls],
|
||||
[AS_HELP_STRING([--enable-dtls],
|
||||
@@ -349,11 +350,23 @@ AC_ARG_WITH([tinydtls],
|
||||
[with_tinydtls="$withval"],
|
||||
[with_tinydtls="no"])
|
||||
|
||||
AC_ARG_WITH([submodule-tinydtls],
|
||||
[AS_HELP_STRING([--with-submodule-tinydtls],
|
||||
[Use the TinyDTLS provided in the git submodule over the system-provided version [default=fallback to submodule if --with-tinydtls is explicitly set and no system-provided version was found])])],
|
||||
[with_submodule_tinydtls="$withval"],
|
||||
[with_submodule_tinydtls="explicit_fallback"])
|
||||
|
||||
if test "x$with_gnutls" = "xyes" -o "x$with_openssl" = "xyes" -o "x$with_mbedtls" = "xyes" -o "x$with_tinydtls" = "xyes"; then
|
||||
if test "x$build_dtls" = "x"; then
|
||||
if test "x$build_dtls" = "xno"; then
|
||||
# Give an advice that '--with_gnutls', '--with_openssl', '--with-mbedtls' or '--with-tinydtls' was used but
|
||||
# DTLS support isn't configured.
|
||||
AC_MSG_NOTICE([==> Using the configure options '--with-gnutls', '--with-openssl', '--with-mbedtls' or '--with-tinydtls' without '--enable-dtls' is useles and will be ignored.])
|
||||
AC_MSG_WARN([==> Using the configure options '--with-gnutls', '--with-openssl', '--with-mbedtls' or '--with-tinydtls' without '--enable-dtls' is useless and will be ignored.])
|
||||
fi
|
||||
fi
|
||||
if test "x$with_submodule_tinydtls" = "xyes"; then
|
||||
if test "x$with_tinydtls" = "xno"; then
|
||||
# Give an advice that '--with-submodule-tinydtls' is useless if tinydtls is not also enabled.
|
||||
AC_MSG_WARN([==> Using the configure option '--with-submodule-tinydtls' without '--with-tinydtls' is useless and it will be ignored.])
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -422,7 +435,18 @@ if test "x$build_dtls" = "xyes"; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# TinyDTLS ?
|
||||
if test "${TinyDTLS_CFLAGS+set}" = "set"; then
|
||||
tinydtls_cflags_overridden="yes"
|
||||
fi
|
||||
if test "${TinyDTLS_LIBS+set}" = "set"; then
|
||||
tinydtls_libs_overridden="yes"
|
||||
fi
|
||||
# TinyDTLS
|
||||
PKG_CHECK_MODULES([TinyDTLS],
|
||||
[tinydtls],
|
||||
[have_tinydtls="yes"],
|
||||
[have_tinydtls="no"])
|
||||
|
||||
# TBD ?
|
||||
|
||||
# The user wants to use explicit GnuTLS if '--with-gnutls' was set.
|
||||
@@ -481,15 +505,53 @@ if test "x$build_dtls" = "xyes"; then
|
||||
|
||||
# The user wants to use explicit TinyDTLS if '--with-tinydtls was set'.
|
||||
if test "x$with_tinydtls" = "xyes" ; then
|
||||
if test -d "$srcdir/ext/tinydtls"; then
|
||||
AC_CONFIG_SUBDIRS([ext/tinydtls])
|
||||
have_tinydtls="yes"
|
||||
else
|
||||
have_tinydtls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
fi
|
||||
have_gnutls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
have_openssl="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
have_mbedtls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
AC_MSG_NOTICE([The use of TinyDTLS was explicitly requested with configure option '--with-tinydtls'!])
|
||||
if [ test "x$have_tinydtls" = "xno" ] && [ test "x$with_submodule_tinydtls" = "xexplicit_fallback" ] || [ test "x$with_submodule_tinydtls" = "xyes" ]; then
|
||||
AC_MSG_NOTICE([Using TinyDTLS submodule over system-provided version because either "--with-submodule-tinydtls" was set or no system-provided TinyDTLS was found.])
|
||||
if test -e "$srcdir/ext/tinydtls/dtls.h"; then
|
||||
AC_CONFIG_SUBDIRS([ext/tinydtls])
|
||||
if test "x$enable_shared" = "xyes"; then
|
||||
auto_TinyDTLS_LIBS="-L\$(top_builddir)/ext/tinydtls -ltinydtls"
|
||||
else
|
||||
# Needed as TinyDTLS compiling does not recognize --disable-shared
|
||||
# and still builds libtinydtls.so which gets linked in otherwise
|
||||
auto_TinyDTLS_LIBS="-L\$(top_builddir)/ext/tinydtls -l:libtinydtls.a"
|
||||
fi
|
||||
have_submodule_tinydtls="yes"
|
||||
|
||||
auto_TinyDTLS_CFLAGS="-I \$(top_srcdir)/ext -I \$(top_srcdir)/ext/tinydtls"
|
||||
|
||||
if test "x$tinydtls_cflags_overridden" != "xyes"; then
|
||||
TinyDTLS_CFLAGS="$auto_TinyDTLS_CFLAGS"
|
||||
fi
|
||||
if test "x$tinydtls_libs_overridden" != "xyes"; then
|
||||
TinyDTLS_LIBS="$auto_TinyDTLS_LIBS"
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR([==> You want to build libcoap with DTLS support using the TinyDTLS submodule library but no suitable version could be found!
|
||||
Check whether you have updated the TinyDTLS git submodule, use the system-provided version if available (set '--with-submodule-tinydtls=no'),
|
||||
select a different TLS library or disable the DTLS support using '--disable-dtls'.])
|
||||
have_tinydtls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
have_submodule_tinydtls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
fi
|
||||
elif test "x$have_tinydtls" = "xyes"; then
|
||||
AC_MSG_NOTICE([Using system-provided TinyDTLS])
|
||||
tinydtls_version=`$PKG_CONFIG --modversion tinydtls`
|
||||
AX_CHECK_TINYDTLS_VERSION
|
||||
have_gnutls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
have_mbedtls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
have_openssl="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
else
|
||||
AC_MSG_ERROR([==> You want to build libcoap with DTLS support using the TinyDTLS library but no suitable version could be found!
|
||||
Use the submodule TinyDTLS version (set '--with-submodule-tinydtls=yes' and update the git submodule),
|
||||
ensure that you have a system-provided version of TinyDTLS that can be found using pkg-config (older versions can not),
|
||||
select a different TLS library or disable the DTLS support using '--disable-dtls'.])
|
||||
have_tinydtls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
fi
|
||||
|
||||
have_gnutls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
have_openssl="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
have_mbedtls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
fi
|
||||
|
||||
if test "$TLSCOUNT" -eq 0; then
|
||||
@@ -525,11 +587,21 @@ if test "x$build_dtls" = "xyes"; then
|
||||
have_openssl="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
have_tinydtls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
|
||||
# Note that tinyDTLS is used only when explicitly requested.
|
||||
elif [ test "x$with_tinydtls" = "xyes" ] && [ test "x$have_tinydtls" = "xyes" ]; then
|
||||
AC_MSG_NOTICE([Using auto selected library TinyDTLS for DTLS support!])
|
||||
tinydtls_version=`$PKG_CONFIG --modversion tinydtls`
|
||||
AX_CHECK_TINYDTLS_VERSION
|
||||
with_tinydtls_auto="yes"
|
||||
have_gnutls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
have_mbedtls="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
have_openssl="no" # don't confuse AC_MSG_RESULT at the end of the script
|
||||
|
||||
|
||||
# Note that the TinyDTLS submodule is used only when explicitly requested.
|
||||
# Giving out an error message if we haven't found at least one crypto library.
|
||||
else
|
||||
AC_MSG_ERROR([==> Option '--enable-dtls' is set but none of the needed cryptography libraries GnuTLS, OpenSSL or Mbed TLS could be found!
|
||||
Install at least one of the package(s) that contains the development files for GnuTLS (>= $gnutls_version_required), OpenSSL(>= $openssl_version_required), or Mbed TLS(>= $mbedtls_version_required)
|
||||
AC_MSG_ERROR([==> Option '--enable-dtls' is set but none of the needed cryptography libraries GnuTLS, OpenSSL, Mbed TLS or TinyDTLS could be found!
|
||||
Install at least one of the package(s) that contains the development files for GnuTLS (>= $gnutls_version_required), OpenSSL(>= $openssl_version_required), Mbed TLS(>= $mbedtls_version_required), or TinyDTLS(>= $tinydtls_version_required)
|
||||
or disable the DTLS support using '--disable-dtls'.])
|
||||
fi
|
||||
fi
|
||||
@@ -550,15 +622,9 @@ if test "x$build_dtls" = "xyes"; then
|
||||
DTLS_LIBS="$MbedTLS_LIBS"
|
||||
AC_DEFINE(HAVE_MBEDTLS, [1], [Define if the system has libmbedtls2.7.10])
|
||||
fi
|
||||
if test "x$with_tinydtls" = "xyes"; then
|
||||
DTLS_CFLAGS="-I \$(top_srcdir)/ext/tinydtls"
|
||||
if test "x$enable_shared" = "xyes"; then
|
||||
DTLS_LIBS="-L\$(top_builddir)/ext/tinydtls -ltinydtls"
|
||||
else
|
||||
# Needed as TinyDTLS compiling does not recognize --disable-shared
|
||||
# and still builds libtinydtls.so which gets linked in otherwise
|
||||
DTLS_LIBS="-L\$(top_builddir)/ext/tinydtls -l:libtinydtls.a"
|
||||
fi
|
||||
if test "x$with_tinydtls" = "xyes" -o "x$with_tinydtls_auto" = "xyes"; then
|
||||
DTLS_CFLAGS="$TinyDTLS_CFLAGS"
|
||||
DTLS_LIBS="$TinyDTLS_LIBS"
|
||||
AC_DEFINE(HAVE_LIBTINYDTLS, [1], [Define if the system has libtinydtls])
|
||||
fi
|
||||
AC_SUBST(DTLS_CFLAGS)
|
||||
@@ -965,9 +1031,13 @@ if test "x$with_mbedtls" = "xyes" -o "x$with_mbedtls_auto" = "xyes"; then
|
||||
fi
|
||||
if test "x$with_tinydtls" = "xyes"; then
|
||||
AC_MSG_RESULT([ build DTLS support : "yes"])
|
||||
AC_MSG_RESULT([ --> tinyDTLS around : "yes"])
|
||||
AC_MSG_RESULT([ TINYDTLS_CFLAGS : "$DTLS_CFLAGS"])
|
||||
AC_MSG_RESULT([ TINYDTLS_LIBS : "$DTLS_LIBS"])
|
||||
if test "x$have_submodule_tinydtls" = "xyes"; then
|
||||
AC_MSG_RESULT([ --> TinyDTLS around : "yes" (submodule)])
|
||||
else
|
||||
AC_MSG_RESULT([ --> TinyDTLS around : "yes (found TinyDTLS $tinydtls_version)"])
|
||||
fi
|
||||
AC_MSG_RESULT([ TinyDTLS_CFLAGS : "$DTLS_CFLAGS"])
|
||||
AC_MSG_RESULT([ TinyDTLS_LIBS : "$DTLS_LIBS"])
|
||||
fi
|
||||
if test "x$build_dtls" != "xyes"; then
|
||||
AC_MSG_RESULT([ build DTLS support : "no"])
|
||||
|
||||
@@ -69,3 +69,16 @@ AC_DEFUN([AX_CHECK_MBEDTLS_VERSION],
|
||||
fi
|
||||
]) dnl AX_CHECK_MBEDTLS_VERSION
|
||||
|
||||
AC_DEFUN([AX_CHECK_TINYDTLS_VERSION],
|
||||
[AC_MSG_CHECKING([for compatible TinyDTLS version (>= $tinydtls_version_required)])
|
||||
AS_VERSION_COMPARE([$tinydtls_version], [$tinydtls_version_required],
|
||||
[AC_MSG_RESULT([no])
|
||||
TINYDTLSV=""],
|
||||
[AC_MSG_RESULT([yes $tinydtls_version])
|
||||
TINYDTLSV="$tinydtls_version"],
|
||||
[AC_MSG_RESULT([yes $tinydtls_version])
|
||||
TINYDTLSV="$tinydtls_version"])
|
||||
if test "x$TINYDTLSV" = "x"; then
|
||||
AC_MSG_ERROR([==> TinyDTLS $tinydtls_version too old. TinyDTLS >= $tinydtls_version_required required for suitable DTLS support build.])
|
||||
fi
|
||||
]) dnl AX_CHECK_TINYDTLS_VERSION
|
||||
+3
-3
@@ -27,9 +27,9 @@
|
||||
#undef PACKAGE_URL
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
#include <tinydtls.h>
|
||||
#include <dtls.h>
|
||||
#include <dtls_debug.h>
|
||||
#include <tinydtls/tinydtls.h>
|
||||
#include <tinydtls/dtls.h>
|
||||
#include <tinydtls/dtls_debug.h>
|
||||
|
||||
typedef struct coap_tiny_context_t {
|
||||
struct dtls_context_t *dtls_context;
|
||||
|
||||
Reference in new issue
Block a user