dnl Define ourselves
AC_INIT(tcltls, 1.7.3)
dnl Checks for programs.
AC_PROG_CC
AC_PROG_MAKE_SET
AC_PROG_INSTALL
AC_GNU_SOURCE
dnl Determine system information
DC_CHK_OS_INFO
dnl Look for appropriate headers
AC_CHECK_HEADERS(unistd.h stdlib.h string.h strings.h)
dnl Perform Tcl Extension required stuff
TCLEXT_INIT
if test "$TCLEXT_BUILD" != 'static'; then
dnl Determine how to make shared objects
DC_GET_SHOBJFLAGS
EXTENSION_TARGET="tcltls.${SHOBJEXT}"
else
AC_CHECK_TOOL([AR], [ar], [false])
AC_CHECK_TOOL([RANLIB], [ranlib], [:])
EXTENSION_TARGET="tcltls.${AREXT}"
fi
AC_SUBST(EXTENSION_TARGET)
AC_SUBST(TCLEXT_BUILD)
dnl Determine what SSL library to link with
AC_ARG_WITH([ssl], AS_HELP_STRING([--with-ssl=<name>], [name of ssl library to build against (openssl, libressl, nss, auto)]), [
if test "$withval" = "no"; then
AC_MSG_ERROR([You may not specify --without-ssl])
fi
if test "$withval" = "yes"; then
AC_MSG_ERROR([If you specify --with-ssl then you must provide a value])
fi
tcltls_ssl_lib="$withval"
], [
tcltls_ssl_lib='auto'
])
dnl Enable support for building the same library every time
tcltls_deterministic='false'
AC_ARG_ENABLE([deterministic], AS_HELP_STRING([--enable-deterministic], [enable deterministic parameters]), [
if test "$enableval" = "yes"; then
tcltls_deterministic='true'
fi
])
if test "$tcltls_deterministic" = 'true'; then
GEN_DH_PARAMS_ARGS='fallback'
else
GEN_DH_PARAMS_ARGS=''
fi
AC_SUBST(GEN_DH_PARAMS_ARGS)
dnl Allow the user to manually disable protocols
dnl ## SSLv2: Disabled by default
tcltls_ssl_ssl2='false'
AC_ARG_ENABLE([sslv2], AS_HELP_STRING([--enable-sslv2], [enable SSLv2 protocol]), [
if test "$enableval" = "yes"; then
tcltls_ssl_ssl2='force'
fi
])
dnl ## SSLv3: Disabled by default
tcltls_ssl_ssl3='false'
AC_ARG_ENABLE([sslv3], AS_HELP_STRING([--enable-sslv3], [enable SSLv3 protocol]), [
if test "$enableval" = "yes"; then
tcltls_ssl_ssl3='force'
fi
])
dnl ## TLSv1.0: Enabled by default
tcltls_ssl_tls1_0='true'
AC_ARG_ENABLE([tlsv1.0], AS_HELP_STRING([--disable-tlsv1.0], [disable TLSv1.0 protocol]), [
if test "$enableval" = "no"; then
tcltls_ssl_tls1_0='false'
fi
])
dnl ## TLSv1.1: Enabled by default
tcltls_ssl_tls1_1='true'
AC_ARG_ENABLE([tlsv1.1], AS_HELP_STRING([--disable-tlsv1.1], [disable TLSv1.1 protocol]), [
if test "$enableval" = "no"; then
tcltls_ssl_tls1_1='false'
fi
])
dnl ## TLSv1.1: Enabled by default
tcltls_ssl_tls1_2='true'
AC_ARG_ENABLE([tlsv1.2], AS_HELP_STRING([--disable-tlsv1.2], [disable TLSv1.2 protocol]), [
if test "$enableval" = "no"; then
tcltls_ssl_tls1_2='false'
fi
])
dnl Enable support for a debugging build
tcltls_debug='false'
AC_ARG_ENABLE([debug], AS_HELP_STRING([--enable-debug], [enable debugging parameters]), [
if test "$enableval" = "yes"; then
tcltls_debug='true'
fi
])
if test "$tcltls_debug" = 'true'; then
AC_DEFINE(TCLEXT_TCLTLS_DEBUG, [1], [Enable debugging build])
fi
dnl Find "xxd" so we can build the tls.tcl.h file
AC_CHECK_PROG([XXD], [xxd], [xxd], [__xxd__not__found])
dnl Find "pkg-config" since we need to use it
AC_CHECK_TOOL([PKGCONFIG], [pkg-config], [false])
dnl Determine if we have been asked to statically link to the SSL library
TCLEXT_TLS_STATIC_SSL='no'
AC_ARG_ENABLE([static-ssl], AS_HELP_STRING([--enable-static-ssl], [enable statically linking to the specified SSL library]), [
if test "$enableval" = 'yes'; then
TCLEXT_TLS_STATIC_SSL='yes'
fi
])
dnl XXX:TODO: Automatically determine the SSL library to use
dnl defaulting to OpenSSL for compatibility reasons
if test "$tcltls_ssl_lib" = 'auto'; then
tcltls_ssl_lib='openssl'
fi
AC_MSG_CHECKING([which TLS library to use])
TCLTLS_SSL_LIB="${tcltls_ssl_lib}"
AC_SUBST(TCLTLS_SSL_LIB)
AC_MSG_RESULT([$tcltls_ssl_lib])
dnl Manually rewrite libressl to OpenSSL since we use the
dnl compatibility interface
if test "$tcltls_ssl_lib" = "libressl"; then
tcltls_ssl_lib='openssl'
fi
AS_CASE([$tcltls_ssl_lib],
[openssl], [
TCLTLS_SSL_OPENSSL
AC_DEFINE([TCLTLS_SSL_OPENSSL], [1], [Define if the backend being used is OpenSSL (or the LibreSSL OpenSSL compatibility interface)])
],
[nss], [
TCLTLS_SSL_LIBS=""
TCLTLS_SSL_CFLAGS=""
TCLTLS_SSL_CPPFLAGS=""
],
[
AC_MSG_ERROR([Unsupported SSL library: $tcltls_ssl_lib])
]
)
dnl Determine how to use this SSL library
AC_MSG_CHECKING([how to use $tcltls_ssl_lib])
LIBS="${LIBS} ${TCLTLS_SSL_LIBS}"
CFLAGS="${CFLAGS} ${TCLTLS_SSL_CFLAGS}"
CPPFLAGS="${CPPFLAGS} ${TCLTLS_SSL_CPPFLAGS}"
AC_MSG_RESULT([$TCLTLS_SSL_CPPFLAGS $TCLTLS_SSL_CFLAGS $TCLTLS_SSL_LIBS])
dnl Sync the RPATH if requested
if test "$TCLEXT_BUILD" != 'static'; then
if test "$TCLEXT_TLS_STATIC_SSL" = 'yes'; then
DC_SYNC_RPATH([no])
else
DC_SYNC_RPATH([yes])
fi
fi
dnl Produce output
AC_OUTPUT(Makefile pkgIndex.tcl)