@@ -1,211 +1,156 @@ -#!/bin/bash -norc -dnl This file is an input file used by the GNU "autoconf" program to -dnl generate the file "configure", which is run during Tcl installation -dnl to configure the system for the local environment. -dnl -dnl This file contains code to generate "tls" using either the -dnl OpenSSL libraries or libraries from the commercial BSAFE SSL-C -dnl product from RSA Security. In the United States, it is necessary -dnl to use the RSA BSAFE libraries for any product developed for -dnl commercial use. Licensing information for BSAFE SSL-C may be -dnl obtained from RSA Data Scurity Inc., San Mateo, California, USA. -dnl Their home page on the web is "www.rsasecurity.com". -# -# RCS: @(#) $Id: configure.in,v 1.31 2015/07/07 17:16:02 andreas_kupries Exp $ - - -#-------------------------------------------------------------------- -# macro used to verify that the configure script can find the sources -#-------------------------------------------------------------------- - -AC_INIT([tls], [1.6.7]) - -TEA_INIT([3.8]) - -AC_CONFIG_AUX_DIR(tclconfig) - -#-------------------------------------------------------------------- -# Load the tclConfig.sh file -#-------------------------------------------------------------------- - -TEA_PATH_TCLCONFIG -TEA_LOAD_TCLCONFIG - -#----------------------------------------------------------------------- -# Handle the --prefix=... option by defaulting to what Tcl gave. -# Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. -#----------------------------------------------------------------------- - -TEA_PREFIX - -#----------------------------------------------------------------------- -# Standard compiler checks. -# This sets up CC by using the CC env var, or looks for gcc otherwise. -# This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create -# the basic setup necessary to compile executables. -#----------------------------------------------------------------------- - -TEA_SETUP_COMPILER - -#----------------------------------------------------------------------- -# __CHANGE__ -# Specify the C source files to compile in TEA_ADD_SOURCES, -# public headers that need to be installed in TEA_ADD_HEADERS, -# stub library C source files to compile in TEA_ADD_STUB_SOURCES, -# and runtime Tcl library files in TEA_ADD_TCL_SOURCES. -# This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS -# and PKG_TCL_SOURCES. -#----------------------------------------------------------------------- - -TEA_ADD_SOURCES([]) -TEA_ADD_HEADERS([]) -TEA_ADD_INCLUDES([]) -TEA_ADD_LIBS([]) -TEA_ADD_CFLAGS([]) -TEA_ADD_STUB_SOURCES([]) -TEA_ADD_TCL_SOURCES([]) - -#-------------------------------------------------------------------- -# A few miscellaneous platform-specific items: -# -# Define a special symbol for Windows (BUILD_sample in this case) so -# that we create the export library with the dll. See sha1.h on how -# to use this. -# -# Windows creates a few extra files that need to be cleaned up. -# You can add more files to clean if your extension creates any extra -# files. -# -# Define any extra compiler flags in the PACKAGE_CFLAGS variable. -# These will be appended to the current set of compiler flags for -# your system. -#-------------------------------------------------------------------- - -if test "${TEA_PLATFORM}" = "windows" ; then - AC_DEFINE(BUILD_tls) - AC_DEFINE(WINDOWS) - CLEANFILES="pkgIndex.tcl *.lib *.dll *.exp *.ilk *.pdb vc*.pch" -else - CLEANFILES="pkgIndex.tcl" -fi -AC_SUBST(CLEANFILES) - -#-------------------------------------------------------------------- -# Choose which headers you need. Extension authors should try very -# hard to only rely on the Tcl public header files. Internal headers -# contain private data structures and are subject to change without -# notice. -# This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG -#-------------------------------------------------------------------- - -TEA_PUBLIC_TCL_HEADERS - -#-------------------------------------------------------------------- -# Check whether --enable-threads or --disable-threads was given. -#-------------------------------------------------------------------- - -TEA_ENABLE_THREADS - -#-------------------------------------------------------------------- -# The statement below defines a collection of symbols related to -# building as a shared library instead of a static library. -#-------------------------------------------------------------------- - -TEA_ENABLE_SHARED - -#-------------------------------------------------------------------- -# This macro figures out what flags to use with the compiler/linker -# when building shared/static debug/optimized objects. This information -# can be taken from the tclConfig.sh file, but this figures it all out. -#-------------------------------------------------------------------- - -TEA_CONFIG_CFLAGS - -#-------------------------------------------------------------------- -# Set the default compiler switches based on the --enable-symbols option. -#-------------------------------------------------------------------- - -TEA_ENABLE_SYMBOLS - -#-------------------------------------------------------------------- -# Everyone should be linking against the Tcl stub library. If you -# can't for some reason, remove this definition. If you aren't using -# stubs, you also need to modify the SHLIB_LD_LIBS setting below to -# link against the non-stubbed Tcl library. Add Tk too if necessary. -#-------------------------------------------------------------------- - -AC_DEFINE(USE_TCL_STUBS) - -#-------------------------------------------------------------------- -# If the variable OPENSSL is set, we will build with the OpenSSL -# libraries. If it is not set, then we will use RSA BSAFE SSL-C -# libraries instead of the default OpenSSL libaries. -#-------------------------------------------------------------------- - -OPENSSL="1" - -TLS_CHECK_SSL - -#-------------------------------------------------------------------- -# Determine if we should use the patented encryption code -#-------------------------------------------------------------------- - -AC_ARG_ENABLE(patents, [ --enable-patents Use patented code. Default is enabled], PATENTS=${enableval}, PATENTS=yes) - -if test ${PATENTS} = no; then - AC_DEFINE([NO_PATENTS]) -fi - -#-------------------------------------------------------------------- -# This macro generates a line to use when building a library. It -# depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, -# and TEA_LOAD_TCLCONFIG macros above. -#-------------------------------------------------------------------- - -TEA_MAKE_LIB - -#-------------------------------------------------------------------- -# Shared libraries and static libraries have different names. -# Also, windows libraries and unix libraries have different names. -# For the OpenSSL version, I chose to use the same library names that -# OpenSSL uses as its default names. -#-------------------------------------------------------------------- - -if test "${TEA_PLATFORM}" = "windows" ; then - if test "$GCC" = "yes"; then - TEA_ADD_LIBS([-L${SSL_LIB_DIR_NATIVE}]) - else - TEA_ADD_LIBS([-libpath:${SSL_LIB_DIR_NATIVE}]) - fi - if test -n "${OPENSSL}"; then - TEA_ADD_LIBS([ssleay32.lib libeay32.lib]) - else - TEA_ADD_LIBS([sslc32.lib]) - fi -else - # Subst runtime dir here, use -R and -L where necessary. [Bug 1742859] - LIB_RUNTIME_DIR=${SSL_LIB_DIR} - eval "LD_SEARCH_FLAGS=\"${LD_SEARCH_FLAGS}\"" - if test -n "${OPENSSL}"; then - TEA_ADD_LIBS([${LD_SEARCH_FLAGS} -L${SSL_LIB_DIR} -lssl -lcrypto ${GCCPATH} ${GCCLIB}]) - else - TEA_ADD_LIBS([${LD_SEARCH_FLAGS} -L${SSL_LIB_DIR} -lsslc]) - fi -fi - -#-------------------------------------------------------------------- -# Find tclsh so that we can run pkg_mkIndex to generate the pkgIndex.tcl -# file during the install process. Don't run the TCLSH_PROG through -# ${CYGPATH} because it's being used directly by make. -# Require that we use a tclsh shell version 8.2 or later since earlier -# versions have bugs in the pkg_mkIndex routine. -# Add WISH as well if this is a Tk extension. -#-------------------------------------------------------------------- - -TEA_PROG_TCLSH - -#-------------------------------------------------------------------- -# Finally, substitute all of the various values into the Makefile. -#-------------------------------------------------------------------- - -AC_OUTPUT([Makefile]) +dnl Define ourselves +AC_INIT(tcltls, 1.7.0) + +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.a" +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 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='true' + 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='true' + 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 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]) +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 + ], + [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 Produce output +AC_OUTPUT(Makefile pkgIndex.tcl)