257 lines
10 KiB
Plaintext
257 lines
10 KiB
Plaintext
#;*****************************************************************************;
|
|
# Copyright (c) 2018 Fraunhofer SIT sponsored by Infineon Technologies AG
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are met:
|
|
#
|
|
# 1. Redistributions of source code must retain the above copyright notice,
|
|
# this list of conditions and the following disclaimer.
|
|
#
|
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
# this list of conditions and the following disclaimer in the documentation
|
|
# and/or other materials provided with the distribution.
|
|
#
|
|
# 3. Neither the name of tpm2-tss-engine nor the names of its contributors
|
|
# may be used to endorse or promote products derived from this software
|
|
# without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
# THE POSSIBILITY OF SUCH DAMAGE.
|
|
#;*****************************************************************************;
|
|
AC_PREREQ([2.68])
|
|
|
|
AC_INIT([tpm2-tss-engine],
|
|
[m4_esyscmd_s([cat ./VERSION])],
|
|
[https://github.com/tpm2-software/tpm2-tss-engine/issues],
|
|
[],
|
|
[https://github.com/tpm2-software/tpm2-tss-engine])
|
|
|
|
dnl Let's be FHS-conform by default.
|
|
if test "$prefix" = '/usr'; then
|
|
test "$sysconfdir" = '${prefix}/etc' && sysconfdir="/etc"
|
|
test "$sharedstatedir" = '${prefix}/com' && sharedstatedir="/var"
|
|
test "$localstatedir" = '${prefix}/var' && localstatedir="/var"
|
|
fi
|
|
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
AC_CONFIG_SRCDIR([src/tpm2-tss-engine.c])
|
|
AC_CONFIG_AUX_DIR([build-aux])
|
|
|
|
# propagate configure arguments to distcheck
|
|
AC_SUBST([DISTCHECK_CONFIGURE_FLAGS],[$ac_configure_args])
|
|
|
|
AC_CANONICAL_SYSTEM
|
|
|
|
AM_INIT_AUTOMAKE([foreign subdir-objects -Wall -Wno-portability])
|
|
#Backward compatible setting of "silent-rules"
|
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
|
AM_MAINTAINER_MODE([enable])
|
|
|
|
AX_IS_RELEASE([dash-version])
|
|
AX_CHECK_ENABLE_DEBUG([info])
|
|
|
|
AC_PROG_CC
|
|
AC_PROG_CC_C99
|
|
AM_PROG_CC_C_O
|
|
LT_INIT()
|
|
|
|
AC_PROG_MKDIR_P
|
|
AC_PROG_LN_S
|
|
|
|
AC_CONFIG_HEADERS([src/config.h])
|
|
|
|
AC_ARG_ENABLE([tctienvvar],
|
|
[AS_HELP_STRING([--disable-tctienvvar],
|
|
[Disable setting the TCTI option from an environment variable])],,
|
|
[enable_tctienvvar=yes])
|
|
AS_IF([test "x$enable_tctienvvar" = xyes], [AC_DEFINE([ENABLE_TCTIENVVAR], [1],
|
|
'Enable getting TCTI from env variable')])
|
|
|
|
AC_CONFIG_FILES([Makefile])
|
|
|
|
AC_ARG_ENABLE([defaultflags],
|
|
[AS_HELP_STRING([--disable-defaultflags],
|
|
[Disable default preprocessor, compiler, and linker flags.])],,
|
|
[enable_defaultflags=yes])
|
|
AS_IF([test "x$enable_defaultflags" = "xyes"],
|
|
[
|
|
AX_ADD_COMPILER_FLAG([-std=gnu99])
|
|
AX_ADD_COMPILER_FLAG([-Wall])
|
|
AX_ADD_COMPILER_FLAG([-Wextra])
|
|
AX_ADD_COMPILER_FLAG([-Wformat-security])
|
|
AS_IF([test "x$ax_is_release" = "xno"], [AX_ADD_COMPILER_FLAG([-Werror])])
|
|
AX_ADD_COMPILER_FLAG([-fstack-protector-all])
|
|
AX_ADD_COMPILER_FLAG([-fpic])
|
|
AX_ADD_COMPILER_FLAG([-fPIC])
|
|
|
|
# work around GCC bug #53119
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119
|
|
AX_ADD_COMPILER_FLAG([-Wno-missing-braces])
|
|
|
|
AX_ADD_LINK_FLAG([-Wl,--no-undefined])
|
|
AX_ADD_LINK_FLAG([-Wl,-z,noexecstack])
|
|
AX_ADD_LINK_FLAG([-Wl,-z,now])
|
|
AX_ADD_LINK_FLAG([-Wl,-z,relro])
|
|
])
|
|
|
|
AX_CODE_COVERAGE
|
|
m4_ifdef([_AX_CODE_COVERAGE_RULES],
|
|
[AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [true])],
|
|
[AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [false])])
|
|
AX_ADD_AM_MACRO_STATIC([])
|
|
|
|
PKG_PROG_PKG_CONFIG([0.25])
|
|
PKG_CHECK_MODULES([CRYPTO], [libcrypto >= 1.0.2g],
|
|
[ac_enginesdir=`$PKG_CONFIG --variable=enginesdir libcrypto`])
|
|
PKG_CHECK_MODULES([TSS2_ESYS], [tss2-esys >= 2.3])
|
|
PKG_CHECK_MODULES([TSS2_MU], [tss2-mu])
|
|
PKG_CHECK_MODULES([TSS2_TCTILDR], [tss2-tctildr])
|
|
AC_CHECK_LIB([crypto], EC_KEY_METHOD_set_compute_key,
|
|
[AM_CONDITIONAL([HAVE_OPENSSL_ECDH], true)],
|
|
[AM_CONDITIONAL([HAVE_OPENSSL_ECDH], false)])
|
|
AC_CHECK_LIB([crypto], EVP_PKEY_meth_set_digest_custom,
|
|
[AM_CONDITIONAL([HAVE_OPENSSL_DIGEST_SIGN], true)],
|
|
[AM_CONDITIONAL([HAVE_OPENSSL_DIGEST_SIGN], false)])
|
|
AS_IF([test "x$ac_cv_lib_crypto_EVP_PKEY_meth_set_digest_custom" = xyes],
|
|
[AC_DEFINE([HAVE_OPENSSL_DIGEST_SIGN], [1],
|
|
Have required functionality from OpenSSL to support digest and sign)])
|
|
|
|
AC_PATH_PROG([PANDOC], [pandoc])
|
|
AS_IF([test -z "$PANDOC"],
|
|
[AC_MSG_WARN([Required executable pandoc not found, man pages will not be built])])
|
|
AM_CONDITIONAL([HAVE_PANDOC],[test -n "$PANDOC"])
|
|
AM_CONDITIONAL([HAVE_MAN_PAGES],[test -d "${srcdir}/man/man1" -o -n "$PANDOC"])
|
|
|
|
AC_PATH_PROG([EXPECT], [expect])
|
|
AS_IF([test -z "$EXPECT"],
|
|
[AC_MSG_WARN([Required executable expect not found, some tests might fail])])
|
|
|
|
AC_ARG_WITH([enginesdir],
|
|
[AS_HELP_STRING([--with-enginesdir],
|
|
[Set the OpenSSL engine directory (default: use pkg-config)])],
|
|
[],
|
|
[with_enginesdir=$ac_enginesdir])
|
|
AS_IF([test -z "$with_enginesdir"],
|
|
[AC_MSG_WARN([Empty enginesdir, using $libdir/engines instead.])])
|
|
# This weirdness is necessary to enable distcheck via DISTCHECK_CONFIGURE_FLAGS
|
|
AS_IF([test -z "$with_enginesdir"],
|
|
[with_enginesdir=$libdir/engines])
|
|
AC_SUBST(ENGINESDIR, "$with_enginesdir")
|
|
|
|
AC_ARG_WITH([completionsdir],
|
|
[AS_HELP_STRING([--with-completionsdir],
|
|
[Set the bash completions directory (default: use pkg-config)])],
|
|
[],
|
|
[with_completionsdir=`$PKG_CONFIG --variable=completionsdir bash-completion`])
|
|
AS_IF([test -z "$with_completionsdir"],
|
|
[AC_MSG_WARN([Empty completionsdir, using $datarootdir/bash-completion/completions instead.])])
|
|
AS_IF([test -z "$with_completionsdir"],
|
|
[with_completionsdir=$datarootdir/bash-completion/completions])
|
|
AC_SUBST(completionsdir, "$with_completionsdir")
|
|
|
|
AC_ARG_ENABLE([unit],
|
|
[AS_HELP_STRING([--enable-unit],
|
|
[build cmocka unit tests])],,
|
|
[enable_unit=no])
|
|
AS_IF([test "x$enable_unit" != "xno" ],
|
|
[PKG_CHECK_MODULES([CMOCKA], [cmocka >= 1.0])])
|
|
AM_CONDITIONAL([UNIT], [test "x$enable_unit" != xno])
|
|
|
|
AC_ARG_ENABLE([integration],
|
|
[AS_HELP_STRING([--enable-integration],
|
|
[build integration tests against TPM])],,
|
|
[enable_integration=no])
|
|
AM_CONDITIONAL([INTEGRATION], [test "x$enable_integration" != xno])
|
|
|
|
# Use physical TPM device for testing
|
|
AC_ARG_WITH([device],
|
|
[AS_HELP_STRING([--with-device=<device>],[TPM device for testing])],
|
|
[AS_IF([test \( -w "$with_device" \) -a \( -r "$with_device" \)],
|
|
[AC_MSG_RESULT([success])
|
|
AX_NORMALIZE_PATH([with_device])
|
|
with_device_set=yes],
|
|
[AC_MSG_ERROR([TPM device provided does not exist or is not writable])])],
|
|
[with_device_set=no])
|
|
AM_CONDITIONAL([TESTDEVICE],[test "x$with_device_set" = xyes])
|
|
|
|
AC_CHECK_FUNC([backtrace_symbols_fd],[AC_DEFINE([HAVE_EXECINFO],[1], ['Define to 1 if you have the <execinfo.h> header file.'])])
|
|
|
|
# Integration test with simulator
|
|
AS_IF([test "x$enable_integration" = xyes && test "x$with_device_set" = xno],
|
|
[integration_args=""
|
|
AC_CHECK_PROG([tpm2_startup], [tpm2_startup], [yes])
|
|
AS_IF([test "x$tpm2_startup" != xyes],
|
|
[AC_MSG_ERROR([Integration tests require the tpm2_startup executable])])
|
|
AC_CHECK_PROG([swtpm], [swtpm], [yes])
|
|
AC_CHECK_PROG([tpm_server], [tpm_server], [yes])
|
|
AS_IF([test "x$swtpm" != xyes && test "x$tpm_server" != xyes],
|
|
[AC_MSG_ERROR([Integration tests require either the swtpm or the tpm_server executable])])
|
|
AC_CHECK_PROG([realpath], [realpath], [yes])
|
|
AS_IF([test "x$realpath" != xyes],
|
|
[AC_MSG_ERROR([Integration tests require the realpath executable])])
|
|
AC_CHECK_PROG([ss], [ss], [yes])
|
|
AS_IF([test "x$ss" != xyes],
|
|
[AC_MSG_ERROR([Integration tests require the ss executable])])
|
|
AS_IF([test "x$enable_tctienvvar" != xyes],
|
|
[AC_MSG_ERROR([Integration tests require building with TCTI environment variable support])])
|
|
AC_SUBST([INTEGRATION_ARGS], [$integration_args])
|
|
])
|
|
|
|
# Integration test with physical device
|
|
AS_IF([test "x$enable_integration" = xyes && test "x$with_device_set" = xyes ],
|
|
[integration_args="$with_device"
|
|
AC_CHECK_PROG([realpath], [realpath], [yes])
|
|
AS_IF([test "x$realpath" != xyes],
|
|
[AC_MSG_ERROR([Integration tests require the realpath executable])])
|
|
AS_IF([test "x$enable_tctienvvar" != xyes],
|
|
[AC_MSG_ERROR([Integration tests require building with TCTI environment variable support])])
|
|
AC_SUBST([INTEGRATION_ARGS], [$integration_args])
|
|
])
|
|
|
|
AX_VALGRIND_CHECK
|
|
|
|
#
|
|
# sanitizer compiler flags
|
|
#
|
|
AC_ARG_WITH([sanitizer],
|
|
[AS_HELP_STRING([--with-sanitizer={none,address,undefined}],
|
|
[build with the given sanitizer])],,
|
|
[with_sanitizer=none])
|
|
AS_CASE(["x$with_sanitizer"],
|
|
["xnone"],
|
|
[],
|
|
["xaddress"],
|
|
[
|
|
SANITIZER_CFLAGS="-fsanitize=address -fno-omit-frame-pointer"
|
|
SANITIZER_LDFLAGS="-lasan"
|
|
],
|
|
["xundefined"],
|
|
[
|
|
SANITIZER_CFLAGS="-fsanitize=undefined"
|
|
SANITIZER_LDFLAGS="-lubsan"
|
|
],
|
|
[AC_MSG_ERROR([Bad value for --with-sanitizer])])
|
|
AC_SUBST([SANITIZER_CFLAGS])
|
|
AC_SUBST([SANITIZER_LDFLAGS])
|
|
|
|
AC_OUTPUT
|
|
|
|
AC_MSG_RESULT([
|
|
$PACKAGE_NAME $VERSION
|
|
man-pages: $PANDOC
|
|
enginesdir: $with_enginesdir
|
|
completionsdir: $with_completionsdir
|
|
device: $with_device
|
|
])
|
|
|