blob: 4d7b6b26bba0139706d4f01f75860b14dbd301e6 [file] [log] [blame]
Peter Huewe9f7cc082019-05-02 18:16:28 +02001# SPDX-License-Identifier: BSD-2-Clause
Tadeusz Struk0d1b9a12020-01-21 12:35:42 -08002# Copyright (c) 2015 - 2020 Intel Corporation
3# Copyright (c) 2018 - 2020 Fraunhofer SIT sponsored by Infineon Technologies AG
Philip Tricca8ffb6542018-03-04 19:51:53 -08004# All rights reserved.
Philip Triccac054cf92018-11-11 11:06:00 -08005
Philip Tricca1a94dd82017-08-16 14:32:55 -07006AC_INIT([tpm2-tss],
Tadeusz Struk70da4f22020-03-11 15:42:08 -07007 [2.4.0],
Philip Triccadc1f15d2018-03-04 19:53:25 -08008 [https://github.com/tpm2-software/tpm2-tss/issues],
Philip Triccad97ed642017-08-25 14:19:27 -07009 [],
Philip Triccadc1f15d2018-03-04 19:53:25 -080010 [https://github.com/tpm2-software/tpm2-tss])
Philip Triccaa509a682015-09-14 15:34:52 -070011AC_CONFIG_MACRO_DIR([m4])
Philip Tricca71aa9852015-08-25 00:26:22 -070012AM_INIT_AUTOMAKE([foreign
13 subdir-objects])
Andreas Fuchs3c965e72017-11-24 16:16:20 +010014m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) #Backward compatible setting of "silent-rules"
15
Tadeusz Struk90f094f2019-01-31 13:53:16 -080016AC_CONFIG_HEADERS([config.h])
17
Juergen Repp6da95b02019-10-10 11:46:03 +020018AC_CONFIG_FILES([Makefile Doxyfile lib/tss2-sys.pc lib/tss2-esys.pc lib/tss2-mu.pc lib/tss2-tcti-device.pc lib/tss2-tcti-mssim.pc lib/tss2-rc.pc lib/tss2-tctildr.pc lib/tss2-fapi.pc])
Philip Tricca1a94dd82017-08-16 14:32:55 -070019
20# propagate configure arguments to distcheck
21AC_SUBST([DISTCHECK_CONFIGURE_FLAGS],[$ac_configure_args])
22
Safayet N Ahmed1354f492018-11-03 16:02:49 -040023AC_CANONICAL_HOST
24
Andreas Fuchs4f811102019-05-15 19:02:36 +020025AX_IS_RELEASE(dash-version)
26AX_CHECK_ENABLE_DEBUG([info])
27
Andreas Fuchs4f811102019-05-15 19:02:36 +020028AC_PROG_CC
Jonas Witschelc41705d2020-01-02 16:41:25 +010029AC_PROG_CXX
Philip Triccaebb398e2019-07-15 22:05:12 -070030AC_PROG_LN_S
Alon Bar-Lev7da23912019-05-31 01:23:41 +030031AC_USE_SYSTEM_EXTENSIONS
Andreas Fuchs4f811102019-05-15 19:02:36 +020032LT_INIT()
Philip Tricca0590c2e2019-06-28 10:20:02 -070033LT_LIB_DLLOAD
Andreas Fuchs4f811102019-05-15 19:02:36 +020034PKG_INSTALLDIR()
35
Safayet N Ahmed1354f492018-11-03 16:02:49 -040036# Check OS and set library and compile flags accordingly
37case "${host_os}" in
38 *nto-qnx*)
Tadeusz Struk118020d2020-01-29 12:26:24 -080039 HOSTOS='QNX'
Safayet N Ahmed1354f492018-11-03 16:02:49 -040040 ADD_COMPILER_FLAG([-D_QNX_SOURCE])
Safayet N Ahmed1354f492018-11-03 16:02:49 -040041 LIBSOCKET_LDFLAGS="-lsocket"
42 ;;
Tadeusz Struk118020d2020-01-29 12:26:24 -080043 *bsd* | *BSD*)
44 HOSTOS='BSD'
45 LIBSOCKET_LDFLAGS=""
46 ;;
Safayet N Ahmed1354f492018-11-03 16:02:49 -040047 *)
Tadeusz Struk118020d2020-01-29 12:26:24 -080048 #Assume linux
49 HOSTOS='Linux'
Safayet N Ahmed1354f492018-11-03 16:02:49 -040050 LIBSOCKET_LDFLAGS=""
51 ;;
52esac
Safayet N Ahmed1354f492018-11-03 16:02:49 -040053AC_SUBST([LIBSOCKET_LDFLAGS])
Tadeusz Struk118020d2020-01-29 12:26:24 -080054AC_SUBST([HOSTOS])
Safayet N Ahmed1354f492018-11-03 16:02:49 -040055
Jonas Witschelf47fe602019-12-20 12:58:06 +010056# runstatedir is only defined in the yet unreleased Autoconf 2.70
57AC_ARG_WITH([runstatedir],
58 AS_HELP_STRING([--with-runstatedir=<dir>],
59 [replacement for --runstatedir in Autoconf <2.70]),
60 [runstatedir="$withval"])
61AS_IF([test -z "$runstatedir"], [runstatedir="${localstatedir}/run"])
62AC_SUBST([runstatedir])
63
Jonas Witschel1aedc962019-12-22 01:51:11 +010064AX_RECURSIVE_EVAL([$sysconfdir], [SYSCONFDIR])
65AC_DEFINE_UNQUOTED([SYSCONFDIR], ["$SYSCONFDIR"], [System config dir])
Juergen Repp6da95b02019-10-10 11:46:03 +020066
67AC_ARG_WITH([userstatedir],
68 [AS_HELP_STRING([--with-userstatedir=<dir>],
69 [sets the relative path in the user's home (default is ".local/share")])],,
70 [with_userstatedir=.local/share])
71AC_SUBST(userstatedir, $with_userstatedir)
72
Jonas Witschelc43f3c22019-12-20 13:28:17 +010073AC_ARG_WITH([sysusersdir],
74 [AS_HELP_STRING([--with-sysusersdir=<dir>],
75 [sets the sysusers.d directory (default is "${sysconfdir}/sysusers.d")])],,
76 [with_sysusersdir="${sysconfdir}/sysusers.d"])
77AC_SUBST(sysusersdir, $with_sysusersdir)
78
Juergen Repp6da95b02019-10-10 11:46:03 +020079AC_ARG_WITH([tmpfilesdir],
80 [AS_HELP_STRING([--with-tmpfilesdir=<dir>],
Jonas Witschelde73fda2019-12-20 11:39:06 +010081 [sets the tmpfiles.d directory (default is "${sysconfdir}/tmpfiles.d")])],,
Juergen Repp6da95b02019-10-10 11:46:03 +020082 [with_tmpfilesdir="${sysconfdir}/tmpfiles.d"])
83AC_SUBST(tmpfilesdir, $with_tmpfilesdir)
84
Philip Tricca4334dee2016-08-09 19:56:28 -070085AC_ARG_ENABLE([unit],
86 [AS_HELP_STRING([--enable-unit],
Дилян Палаузов7fa81e32019-03-10 10:53:36 +000087 [build cmocka unit tests])],,
Philip Tricca4334dee2016-08-09 19:56:28 -070088 [enable_unit=no])
Philip Tricca38db7552018-02-27 07:58:25 -080089m4_define([cmocka_min_version], [1.0])
90m4_define([cmocka_err], [Unit test enabled, but cmocka missing or version requirements not met. cmocka version must be >= cmocka_min_version])
Philip Tricca4334dee2016-08-09 19:56:28 -070091AS_IF([test "x$enable_unit" != xno],
92 [PKG_CHECK_MODULES([CMOCKA],
Дилян Палаузов3e0e1402019-04-07 15:59:48 +000093 [cmocka >= cmocka_min_version],,
Philip Tricca38db7552018-02-27 07:58:25 -080094 [AC_MSG_ERROR([cmocka_err])])])
Philip Tricca4334dee2016-08-09 19:56:28 -070095AM_CONDITIONAL([UNIT], [test "x$enable_unit" != xno])
Philip Tricca77683c72017-12-04 16:05:52 -080096
Juergen Reppff821bd2017-12-11 15:21:42 +010097AC_ARG_ENABLE([esapi],
Дилян Палаузов142f0d72019-03-06 13:24:59 +000098 [AS_HELP_STRING([--disable-esapi],
Дилян Палаузов59c03f92019-03-06 14:23:53 +000099 [don't build the esapi layer])],,
Juergen Reppff821bd2017-12-11 15:21:42 +0100100 [enable_esapi=yes])
Juergen Reppbebbc7a2018-06-22 14:03:12 +0200101
Juergen Reppbebbc7a2018-06-22 14:03:12 +0200102AM_CONDITIONAL(ESAPI, test "x$enable_esapi" = "xyes")
103
Tadeusz Strukea697202020-02-20 14:11:43 -0800104AC_CHECK_FUNC([strndup],[],[AC_MSG_ERROR([strndup function not found])])
Juergen Repp6da95b02019-10-10 11:46:03 +0200105AC_CHECK_FUNCS([reallocarray])
106AC_ARG_ENABLE([fapi],
107 [AS_HELP_STRING([--enable-fapi],
108 [build the fapi layer (default is yes)])],
109 [enable_fapi=$enableval],
110 [enable_fapi=yes])
111
112AM_CONDITIONAL(FAPI, test "x$enable_fapi" = "xyes")
113
114AC_ARG_ENABLE([fapi-async-tests],
115 AS_HELP_STRING([--enable-fapi-async-tests],
116 [Force fapi to spin asynchronously. (NOT FOR PRODUCTION!)]),,
117 [enable_fapi_async_tests=no])
118AS_IF([test "x$enable_fapi_async_tests" = "xyes"],
119 AC_DEFINE([TEST_FAPI_ASYNC], [1], [FAPI forced async spinning]))
120AS_IF([test "x$enable_fapi_async_tests" = "xyes"],
121 AC_MSG_WARN("FAPI compiled with asynchronous spinning testing. NOT FOR PRODUCTION!"))
122
Tadeusz Struk3f2489b2018-08-22 10:01:11 -0700123AC_ARG_ENABLE([tcti-device-async],
124 AS_HELP_STRING([--enable-tcti-device-async],
125 [Enable asynchronus operation on TCTI device
Дилян Палаузов7fa81e32019-03-10 10:53:36 +0000126 (note: This needs to be supported by the kernel driver).]),,
Tadeusz Struk3f2489b2018-08-22 10:01:11 -0700127 [enable_tcti_device_async=no])
128AS_IF([test "x$enable_tcti_device_async" = "xyes"],
Tadeusz Struk90f094f2019-01-31 13:53:16 -0800129 AC_DEFINE([TCTI_ASYNC],[1], [TCTI ASYNC MODE]))
Tadeusz Struk3f2489b2018-08-22 10:01:11 -0700130
Tadeusz Strukfa423ad2018-11-27 13:20:38 -0800131AC_ARG_ENABLE([tcti-partial-reads],
132 AS_HELP_STRING([--enable-tcti-partial-reads],
133 [Enable partial reads for TCTI device
Дилян Палаузов7fa81e32019-03-10 10:53:36 +0000134 (note: This needs to be supported by the kernel driver).]),,
Tadeusz Strukfa423ad2018-11-27 13:20:38 -0800135 [enable_tcti_partial_reads=no])
136AS_IF([test "x$enable_tcti_partial_reads" = "xyes"],
Tadeusz Struk90f094f2019-01-31 13:53:16 -0800137 AC_DEFINE([TCTI_PARTIAL_READ],[1], [TCTI PARTIAL READ MODE]))
Tadeusz Strukfa423ad2018-11-27 13:20:38 -0800138
Juergen Reppbebbc7a2018-06-22 14:03:12 +0200139AC_ARG_WITH([crypto],
140 [AS_HELP_STRING([--with-crypto={gcrypt,ossl}],
Дилян Палаузов59c03f92019-03-06 14:23:53 +0000141 [sets the ESAPI crypto backend (default is OpenSSL)])],,
Tadeusz Struka5ff71a2018-10-23 16:04:25 -0700142 [with_crypto=ossl])
Juergen Reppbebbc7a2018-06-22 14:03:12 +0200143
144AM_CONDITIONAL(ESYS_OSSL, test "x$with_crypto" = "xossl")
145AM_CONDITIONAL(ESYS_GCRYPT, test "x$with_crypto" = "xgcrypt")
146
Дилян Палаузовc3fc89d2019-03-28 13:32:12 +0000147AS_IF([test "x$enable_esapi" = xyes],
148 [AS_IF([test "x$with_crypto" = xgcrypt], [
Tadeusz Struk3c98f732020-01-28 14:39:06 -0800149 AM_PATH_LIBGCRYPT([1.6.0], [], [AC_MSG_ERROR([Missing required gcrypt library])])
150 TSS2_ESYS_CFLAGS_CRYPTO="$LIBGCRYPT_CFLAGS"
151 TSS2_ESYS_LDFLAGS_CRYPTO="$LIBGCRYPT_LIBS"
Дилян Палаузовc3fc89d2019-03-28 13:32:12 +0000152 ], [test "x$with_crypto" = xossl], [
Дилян Палаузовc3fc89d2019-03-28 13:32:12 +0000153 PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto])
Jonas Witschel71ab0122019-05-19 17:38:27 +0200154 AC_DEFINE([OSSL], [1], [OpenSSL cryptographic backend])
155 TSS2_ESYS_CFLAGS_CRYPTO="$LIBCRYPTO_CFLAGS"
156 TSS2_ESYS_LDFLAGS_CRYPTO="$LIBCRYPTO_LIBS"
Дилян Палаузовc3fc89d2019-03-28 13:32:12 +0000157 ], AC_MSG_ERROR([Bad value for --with-crypto $with_crypto]))])
Jonas Witschel71ab0122019-05-19 17:38:27 +0200158AC_SUBST([TSS2_ESYS_CFLAGS_CRYPTO])
159AC_SUBST([TSS2_ESYS_LDFLAGS_CRYPTO])
Juergen Reppff821bd2017-12-11 15:21:42 +0100160
Juergen Repp6da95b02019-10-10 11:46:03 +0200161AS_IF([test "x$enable_fapi" != xno -a "x$enable_esapi" = "xno"],
162 AC_MSG_ERROR([ESAPI has to be enabled to compile FAPI.]))
163
164AS_IF([test "x$enable_fapi" != xno -a "x$with_crypto" != "xossl"],
165 AC_MSG_ERROR([FAPI has to be compiled with OpenSSL]))
166
167AS_IF([test "x$enable_fapi" = xyes ],
Jonas Witschel7edb1942019-12-20 15:32:06 +0100168 PKG_CHECK_MODULES([JSON_C], [json-c]))
Juergen Repp6da95b02019-10-10 11:46:03 +0200169
170AS_IF([test "x$enable_fapi" = xyes ],
171 PKG_CHECK_MODULES([CURL], [libcurl]))
172
Juergen Reppff821bd2017-12-11 15:21:42 +0100173AC_ARG_WITH([tctidefaultmodule],
174 [AS_HELP_STRING([--with-tctidefaultmodule],
Дилян Палаузов9a93f962019-03-10 10:48:44 +0000175[The default TCTI module for ESAPI. (Default: libtss2-tcti-default.so)])],
Andreas Fuchs037c8782018-03-21 18:52:38 +0100176 [AC_DEFINE_UNQUOTED([ESYS_TCTI_DEFAULT_MODULE],
Andreas Fuchsfefb6b02018-08-29 13:30:35 +0200177 ["$with_tctidefaultmodule"],
Дилян Палаузов2f3d20e2019-03-18 12:46:25 +0000178 ["The default TCTI library file"])],
179 [with_tctidefaultmodule=libtss2-tcti-default.so])
Juergen Reppff821bd2017-12-11 15:21:42 +0100180
181AC_ARG_WITH([tctidefaultconfig],
182 [AS_HELP_STRING([--with-tctidefaultconfig],
183 [The default tcti module's configuration.])],
Andreas Fuchs037c8782018-03-21 18:52:38 +0100184 [AC_DEFINE_UNQUOTED([ESYS_TCTI_DEFAULT_CONFIG],
Andreas Fuchsfefb6b02018-08-29 13:30:35 +0200185 ["$with_tctidefaultconfig"],
Дилян Палаузов11273022019-03-10 11:27:15 +0000186 ["The default TCTIs configuration string"])])
Andreas Fuchs037c8782018-03-21 18:52:38 +0100187
Andreas Fuchs2b085e92018-05-02 16:42:47 +0200188AC_ARG_ENABLE([tcti-device],
Дилян Палаузов142f0d72019-03-06 13:24:59 +0000189 [AS_HELP_STRING([--disable-tcti-device],
Дилян Палаузов59c03f92019-03-06 14:23:53 +0000190 [don't build the tcti-device module])],,
Andreas Fuchs2b085e92018-05-02 16:42:47 +0200191 [enable_tcti_device=yes])
192AM_CONDITIONAL([ENABLE_TCTI_DEVICE], [test "x$enable_tcti_device" != xno])
John Andersen443455b2019-01-16 12:58:36 -0800193AS_IF([test "x$enable_tcti_device" = "xyes"],
194 AC_DEFINE([TCTI_DEVICE],[1], [TCTI FOR DEV TPM]))
Andreas Fuchs2b085e92018-05-02 16:42:47 +0200195
196AC_ARG_ENABLE([tcti-mssim],
Дилян Палаузов142f0d72019-03-06 13:24:59 +0000197 [AS_HELP_STRING([--disable-tcti-mssim],
Дилян Палаузов11273022019-03-10 11:27:15 +0000198 [don't build the tcti-mssim module])],,
Andreas Fuchs2b085e92018-05-02 16:42:47 +0200199 [enable_tcti_mssim=yes])
200AM_CONDITIONAL([ENABLE_TCTI_MSSIM], [test "x$enable_tcti_mssim" != xno])
Tadeusz Struk7ab3cbb2019-01-31 14:30:18 -0800201AS_IF([test "x$enable_tcti_mssim" = "xyes"],
202 AC_DEFINE([TCTI_MSSIM],[1], [TCTI FOR MS SIMULATOR]))
Andreas Fuchs2b085e92018-05-02 16:42:47 +0200203
John Andersen443455b2019-01-16 12:58:36 -0800204AC_ARG_ENABLE([tcti-fuzzing],
205 [AS_HELP_STRING([--enable-tcti-fuzzing],
Дилян Палаузов7fa81e32019-03-10 10:53:36 +0000206 [build the tcti-fuzzing module])],,
John Andersen443455b2019-01-16 12:58:36 -0800207 [enable_tcti_fuzzing=no])
208AM_CONDITIONAL([ENABLE_TCTI_FUZZING], [test "x$enable_tcti_fuzzing" != xno])
209AS_IF([test "x$enable_tcti_fuzzing" = "xyes"],
210 AC_DEFINE([TCTI_FUZZING],[1], [TCTI FOR FUZZING]))
211
Philip Tricca0590c2e2019-06-28 10:20:02 -0700212AC_ARG_ENABLE([nodl],
213 [AS_HELP_STRING([--enable-nodl],
214 [link against TCTIs directly, do not use dlopen])],
215 [],
216 [enable_nodl=no])
217AM_CONDITIONAL([NO_DL], [test "x$enable_nodl" = "xyes"])
218AS_IF([test "x$enable_nodl" = "xyes"],
219 [AC_DEFINE([NO_DL],[1], [disable use of dlopen])])
220
Philip Tricca99d41422017-06-18 15:11:50 -0700221#
Javier Martinez Canillas0075f882018-04-13 12:49:37 +0200222# udev
223#
224AC_ARG_WITH([udevrulesdir],
Дилян Палаузов59c03f92019-03-06 14:23:53 +0000225 [AS_HELP_STRING([--with-udevrulesdir=DIR],[udev rules directory])],,
Javier Martinez Canillas0075f882018-04-13 12:49:37 +0200226 [with_udevrulesdir=${libdir}/udev/rules.d])
227AX_NORMALIZE_PATH([with_udevrulesdir])
228AC_SUBST([udevrulesdir], [$with_udevrulesdir])
229AC_ARG_WITH([udevrulesprefix],
230 [AS_HELP_STRING([--with-udevrulesprefix=XY],[prefix for udev rules file])],
231 [AC_SUBST([udevrulesprefix],[$with_udevrulesprefix])])
232AM_CONDITIONAL(WITH_UDEVRULESPREFIX, [test -n "$with_udevrulesprefix"])
233#
Philip Tricca99075432018-04-25 19:02:05 -0700234# enable integration tests and check for simulator binary
Philip Tricca99d41422017-06-18 15:11:50 -0700235#
Philip Tricca99075432018-04-25 19:02:05 -0700236AC_ARG_ENABLE([integration],
237 [AS_HELP_STRING([--enable-integration],
Дилян Палаузов7fa81e32019-03-10 10:53:36 +0000238 [build and execute integration tests])],,
Philip Tricca99075432018-04-25 19:02:05 -0700239 [enable_integration=no])
Tadeusz Struk118020d2020-01-29 12:26:24 -0800240AS_IF([test "x$enable_integration" = "xyes" -a "$HOSTOS" = "Linux"],
Philip Tricca154b81d2018-07-06 12:41:07 -0700241 [ERROR_IF_NO_PROG([tpm_server])
Jonas Witschel8b9285d2018-12-27 23:53:21 +0100242 ERROR_IF_NO_PROG([ss])
Philip Tricca35ab16e2018-07-06 13:03:17 -0700243 ERROR_IF_NO_PROG([ps])
244 ERROR_IF_NO_PROG([echo])
245 ERROR_IF_NO_PROG([kill])
Jonas Witschel303412c2018-12-27 23:55:55 +0100246 ERROR_IF_NO_PROG([stdbuf])
Philip Tricca35ab16e2018-07-06 13:03:17 -0700247 ERROR_IF_NO_PROG([sleep])
248 ERROR_IF_NO_PROG([cat])
249 ERROR_IF_NO_PROG([realpath])
250 ERROR_IF_NO_PROG([dirname])
251 ERROR_IF_NO_PROG([basename])
252 ERROR_IF_NO_PROG([mktemp])
253 ERROR_IF_NO_PROG([od])
254 ERROR_IF_NO_PROG([awk])
255 ERROR_IF_NO_PROG([expr])
256 ERROR_IF_NO_PROG([grep])
257 ERROR_IF_NO_PROG([env])
258 ERROR_IF_NO_PROG([rm])
Дилян Палаузовc3fc89d2019-03-28 13:32:12 +0000259 AS_IF([test "x$with_crypto" != xossl -o "x$enable_esapi" != xyes],
260 PKG_CHECK_MODULES([LIBCRYPTO],[libcrypto]))
Philip Tricca99075432018-04-25 19:02:05 -0700261 AC_CHECK_HEADER(uthash.h, [], [AC_MSG_ERROR([Can not find uthash.h. Please install uthash-dev])])
Tadeusz Struk91e7bd62018-07-23 11:30:02 -0700262 AS_IF([test "x$enable_tcti_mssim" = xno],
263 AC_MSG_ERROR([Integration tests can not be enabled without the TCTI_MSSIM module]))
Philip Tricca99075432018-04-25 19:02:05 -0700264 AC_SUBST([ENABLE_INTEGRATION], [$enable_integration])])
265AM_CONDITIONAL([ENABLE_INTEGRATION],[test "x$enable_integration" = "xyes"])
John Andersen4eab6da2019-01-16 13:59:16 -0800266#
Dan Robertson948a3522019-08-21 21:09:32 -0400267# sanitizer compiler flags
268#
269AC_ARG_WITH([sanitizer],
270 [AS_HELP_STRING([--with-sanitizer={none,address,undefined}],
271 [build with the given sanitizer])],,
272 [with_sanitizer=none])
273AS_CASE(["x$with_sanitizer"],
274 ["xnone"],
275 [],
276 ["xaddress"],
277 [
278 SANITIZER_CFLAGS="-fsanitize=address -fno-omit-frame-pointer"
279 SANITIZER_LDFLAGS="-lasan"
280 ],
281 ["xundefined"],
282 [
283 SANITIZER_CFLAGS="-fsanitize=undefined"
284 SANITIZER_LDFLAGS="-lubsan"
285 ],
286 [AC_MSG_ERROR([Bad value for --with-sanitizer])])
287AC_SUBST([SANITIZER_CFLAGS])
288AC_SUBST([SANITIZER_LDFLAGS])
289#
John Andersen4eab6da2019-01-16 13:59:16 -0800290# fuzz testing
291#
292AC_ARG_WITH([fuzzing],
293 [AS_HELP_STRING([--with-fuzzing={none,libfuzzer,ossfuzz}],
Дилян Палаузов59c03f92019-03-06 14:23:53 +0000294 [fuzzing to build with (default is none)])],,
John Andersen4eab6da2019-01-16 13:59:16 -0800295 [with_fuzzing=none])
296AS_CASE(["x$with_fuzzing"],
297 ["xnone"],
298 [],
299 ["xlibfuzzer"],
300 [ADD_FUZZING_FLAG([-fsanitize=fuzzer])],
301 ["xossfuzz"],
302 [AS_IF([test "x$LIB_FUZZING_ENGINE" = "x"],
303 AC_MSG_ERROR([OSS Fuzz testing requires LIB_FUZZING_ENGINE environment variable be set]))
304 ADD_FUZZING_FLAG([-lFuzzingEngine])],
305 [AC_MSG_ERROR([Bad value for --with-fuzzing])])
306AM_CONDITIONAL([ENABLE_FUZZING],[test "x$with_fuzzing" != "xnone"])
307AS_IF([test "x$with_fuzzing" != "xnone"],
William Roberts60c26e42019-12-20 17:15:04 -0600308 [AS_IF([test "x$enable_tcti_fuzzing" = xno],
Tadeusz Strukdcb8ac02019-03-01 12:01:08 -0800309 AC_MSG_ERROR([Fuzz tests can not be enabled without the TCTI_FUZZING module]))
310 AS_IF([test "x$GEN_FUZZ" != "x1"],
311 AC_MSG_ERROR([Fuzz tests can not be enabled without "GEN_FUZZ=1" variable]))])
Tadeusz Struk1bc0f082018-04-18 11:53:26 -0700312
Peter Huewef59aee32019-02-19 22:56:21 +0100313AX_VALGRIND_CHECK
314
David R. Bild1e49b4c2017-11-28 18:09:42 -0600315gl_LD_VERSION_SCRIPT
316
Andreas Fuchs80e84852018-02-27 22:45:09 +0100317AC_ARG_WITH([maxloglevel],
318 [AS_HELP_STRING([--with-maxloglevel={none,error,warning,info,debug,trace}],
Дилян Палаузов59c03f92019-03-06 14:23:53 +0000319 [sets the maximum log level (default is trace)])],,
Andreas Fuchs80e84852018-02-27 22:45:09 +0100320 [with_maxloglevel=trace])
Philip Triccafeae8b12018-11-04 19:53:12 -0800321AS_CASE(["x$with_maxloglevel"],
322 ["xnone"],
323 [AC_DEFINE_UNQUOTED([MAXLOGLEVEL], [0], ["Logging disabled"])],
324 ["xerror"],
325 [AC_DEFINE_UNQUOTED([MAXLOGLEVEL], [2], ["Error log level"])],
326 ["xwarning"],
327 [AC_DEFINE_UNQUOTED([MAXLOGLEVEL], [3], ["Warning log level"])],
328 ["xinfo"],
329 [AC_DEFINE_UNQUOTED([MAXLOGLEVEL], [4], ["Info log level"])],
330 ["xdebug"],
331 [AC_DEFINE_UNQUOTED([MAXLOGLEVEL], [5], ["Debug log level"])],
332 ["xtrace"],
333 [AC_DEFINE_UNQUOTED([MAXLOGLEVEL], [6], ["Trace log level"])],
334 [AC_MSG_ERROR([Bad value for --with-maxloglevel])])
Andreas Fuchsbc490762018-01-03 14:36:38 +0100335
Philip Tricca085755d2018-11-11 12:43:29 -0800336AC_ARG_ENABLE([defaultflags],
Philip Tricca6751b3c2018-11-20 00:19:13 -0800337 [AS_HELP_STRING([--disable-defaultflags],
Дилян Палаузов11273022019-03-10 11:27:15 +0000338 [Disable default preprocessor, compiler, and linker flags.])],,
Philip Tricca085755d2018-11-11 12:43:29 -0800339 [enable_defaultflags=yes])
340AS_IF([test "x$enable_defaultflags" = "xyes"],
341 [
Philip Tricca085755d2018-11-11 12:43:29 -0800342 AS_IF([test "x$enable_debug" = "xno"],
Jonas Witschel27c4f892019-07-25 12:26:39 +0200343 [ADD_COMPILER_FLAG([-O2])
344 AX_ADD_FORTIFY_SOURCE])
Philip Tricca085755d2018-11-11 12:43:29 -0800345 ADD_COMPILER_FLAG([-std=c99])
346 ADD_COMPILER_FLAG([-Wall])
347 ADD_COMPILER_FLAG([-Wextra])
348 ADD_COMPILER_FLAG([-Wformat-security])
Andreas Fuchs70c3f9e2019-05-22 14:47:53 +0200349 AS_IF([test "x$ax_is_release" = "xno"],
350 [ADD_COMPILER_FLAG([-Werror])])
Philip Tricca085755d2018-11-11 12:43:29 -0800351 ADD_COMPILER_FLAG([-fstack-protector-all])
352 ADD_COMPILER_FLAG([-fpic])
353 ADD_COMPILER_FLAG([-fPIC])
354 # work around GCC bug #53119
355 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119
356 ADD_COMPILER_FLAG([-Wno-missing-braces])
William Roberts22727172018-12-07 10:34:53 -0800357 ADD_COMPILER_FLAG([-Wstrict-overflow=5])
Philip Tricca085755d2018-11-11 12:43:29 -0800358 ADD_LINK_FLAG([-Wl,--no-undefined])
359 ADD_LINK_FLAG([-Wl,-z,noexecstack])
360 ADD_LINK_FLAG([-Wl,-z,now])
361 ADD_LINK_FLAG([-Wl,-z,relro])
362 ])
Philip Triccab43de642017-03-04 21:29:10 -0800363
Tadeusz Struk01ed0d42019-02-07 08:32:58 -0800364AC_ARG_ENABLE([weakcrypto],
365 [AS_HELP_STRING([--disable-weakcrypto],
Дилян Палаузов59c03f92019-03-06 14:23:53 +0000366 [Disable crypto algorithms considered weak])],,
Tadeusz Struk01ed0d42019-02-07 08:32:58 -0800367 [enable_weakcrypto=no])
368AS_IF([test "x$enable_weakcrypto" = "xyes"],
369 AC_DEFINE([DISABLE_WEAK_CRYPTO],[1],[DISABLE WEAK CRYPTO ALGORITHMS]))
Philip Tricca99075432018-04-25 19:02:05 -0700370
Tadeusz Struk01ed0d42019-02-07 08:32:58 -0800371AC_SUBST([PATH])
Philip Triccaf8915802017-03-14 17:01:50 -0700372
Juergen Reppac598362018-07-17 13:36:38 +0200373dnl --------- Physical TPM device -----------------------
374
375AC_ARG_WITH([ptpm],
Tadeusz Strukc6a4a7d2018-08-21 13:21:22 -0700376 [AS_HELP_STRING([--with-ptpm=<device>],[TPM device])],
Juergen Reppac598362018-07-17 13:36:38 +0200377 [AS_IF([test \( -w "$with_ptpm" \) -a \( -r "$with_ptpm" \)],
378 [AC_MSG_RESULT([success])
379 AC_SUBST([PTPM],[$with_ptpm])
380 AX_NORMALIZE_PATH([with_ptpm])
381 with_ptpm_set=yes],
382 [AC_MSG_ERROR([TPM device provided does not exist or is not writable])])],
383 [with_ptpm_set=no])
384AM_CONDITIONAL([PTPM],[test "x$with_ptpm_set" = "xyes"])
385
386AC_ARG_WITH([ptpmtests],
387 [AS_HELP_STRING([--with-ptpmtests=<case>],[Comma-separated values of possible tests: destructive,mandatory,optional] default is mandatory)],
Дилян Палаузов65c5a9e2019-03-10 11:32:31 +0000388 [AS_IF([test "x" = x$(echo $with_ptpmtests | sed 's/destructive//g' | sed 's/mandatory//g' | sed 's/optional//g' | sed 's/,//g') ],
Juergen Reppac598362018-07-17 13:36:38 +0200389 [AC_MSG_RESULT([success])
390 with_ptpmtests_set=yes],
391 [AC_MSG_ERROR([Illegal test type for pTPM tests.])])],
392 [with_ptpmtests="mandatory"])
393
394if echo $with_ptpmtests | grep destructive > /dev/null; then
395 enable_ptpm_destructive="yes"
396fi
397AM_CONDITIONAL([PTPMDESTRUCTIVE],[test "x$enable_ptpm_destructive" = "xyes"])
398
399if echo $with_ptpmtests | grep optional > /dev/null; then
400 enable_ptpm_optional="yes"
401fi
402AM_CONDITIONAL([PTPMOPTIONAL],[test "x$enable_ptpm_optional" = "xyes"])
403
404if echo $with_ptpmtests | grep mandatory > /dev/null; then
405 enable_ptpm_mandatory="yes"
406fi
407AM_CONDITIONAL([PTPMMANDATORY],[test "x$enable_ptpm_mandatory" = "xyes"])
408
Дилян Палаузов1a1222e2019-03-28 12:31:48 +0000409AM_CONDITIONAL([TESTPTPM],[test "x$with_ptpm_set" = xyes])
Juergen Reppac598362018-07-17 13:36:38 +0200410
Andreas Fuchs2968c712018-02-01 18:22:47 +0100411dnl --------- Doxy Gen -----------------------
Andreas Fuchsbc169cb2018-04-10 12:02:10 +0200412DX_DOXYGEN_FEATURE(ON)
413DX_DOT_FEATURE(OFF)
Andreas Fuchs2968c712018-02-01 18:22:47 +0100414DX_HTML_FEATURE(ON)
415DX_CHM_FEATURE(OFF)
416DX_CHI_FEATURE(OFF)
417DX_MAN_FEATURE(ON)
Jonas Witscheldd54f332018-11-14 22:17:34 +0100418DX_RTF_FEATURE(ON)
Andreas Fuchs2968c712018-02-01 18:22:47 +0100419DX_XML_FEATURE(OFF)
420DX_PDF_FEATURE(OFF)
421DX_PS_FEATURE(OFF)
Jonas Witscheldd54f332018-11-14 22:17:34 +0100422DX_INIT_DOXYGEN($PACKAGE_NAME, [Doxyfile], [doxygen-doc])
Andreas Fuchse5273b32018-04-26 16:16:24 +0200423AM_CONDITIONAL(DOXYMAN, [test $DX_FLAG_man -eq 1])
Andreas Fuchs2968c712018-02-01 18:22:47 +0100424
Jonas Witscheldd672362018-11-17 15:25:41 +0100425AS_IF([test "x$enable_doxygen_doc" != xno],
Tadeusz Struk81eacdd2018-11-12 11:57:02 -0800426 [ERROR_IF_NO_PROG([doxygen])])
427
Andreas Fuchs61cb7fb2017-11-22 10:23:01 +0100428AX_CODE_COVERAGE
Jonas Witschel648fa842019-01-07 22:15:06 +0100429m4_ifdef([_AX_CODE_COVERAGE_RULES],
430 [AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [true])],
431 [AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [false])])
Joshua Lockb7b42322019-01-25 16:10:14 +0000432AX_ADD_AM_MACRO_STATIC([])
Andreas Fuchs61cb7fb2017-11-22 10:23:01 +0100433
Andreas Fuchs2b085e92018-05-02 16:42:47 +0200434AM_COND_IF([ENABLE_TCTI_DEVICE], [],
435 [AM_COND_IF([ENABLE_TCTI_MSSIM], [],
John Andersen443455b2019-01-16 12:58:36 -0800436 [AM_COND_IF([ENABLE_TCTI_FUZZING], [],
437 [AC_MSG_WARN("No build-in TCTI module enabled")])])])
438
439AM_COND_IF([ENABLE_TCTI_FUZZING], [
440 AM_COND_IF([ENABLE_TCTI_DEVICE],
Дилян Палаузов1451d4d2019-03-22 19:27:29 +0000441 AC_MSG_ERROR([Fuzzing TCTI is meant to be built as the only TCTI: use --disable-tcti-device --disable-tcti-mssim]))
John Andersen443455b2019-01-16 12:58:36 -0800442 AM_COND_IF([ENABLE_TCTI_MSSIM],
Дилян Палаузов1451d4d2019-03-22 19:27:29 +0000443 AC_MSG_ERROR([Fuzzing TCTI is meant to be built as the only TCTI: use --disable-tcti-device --disable-tcti-mssim]))
Tadeusz Struk2985b4d2019-03-18 11:15:49 -0700444 AS_IF([test "x$CC" != "xclang"],
445 AC_MSG_ERROR("Fuzzing TCTI can only be used with clang"), [])
John Andersen443455b2019-01-16 12:58:36 -0800446 ], [])
Andreas Fuchs2b085e92018-05-02 16:42:47 +0200447
Дилян Палаузов946c3cd2019-03-14 22:29:17 +0000448AC_OUTPUT
449
Juergen Reppff821bd2017-12-11 15:21:42 +0100450AC_MSG_RESULT([
451 $PACKAGE_NAME $VERSION
452 esapi: $enable_esapi
Juergen Repp6da95b02019-10-10 11:46:03 +0200453 fapi: $enable_fapi
Juergen Reppff821bd2017-12-11 15:21:42 +0100454 tctidefaultmodule: $with_tctidefaultmodule
455 tctidefaultconfig: $with_tctidefaultconfig
456 unit: $enable_unit
John Andersen4eab6da2019-01-16 13:59:16 -0800457 fuzzing: $with_fuzzing
Juergen Reppff821bd2017-12-11 15:21:42 +0100458 debug: $enable_debug
Philip Triccafb0b72f2018-03-04 19:39:24 -0800459 maxloglevel: $with_maxloglevel
Andreas Fuchs2968c712018-02-01 18:22:47 +0100460 doxygen: $DX_FLAG_doc $enable_doxygen_doc
Tadeusz Struk3f2489b2018-08-22 10:01:11 -0700461 tcti-device-async: $enable_tcti_device_async
Tadeusz Strukfa423ad2018-11-27 13:20:38 -0800462 tcti-partial-read: $enable_tcti_partial_reads
Tadeusz Struka5ff71a2018-10-23 16:04:25 -0700463 crypto backend: $with_crypto
Juergen Repp6da95b02019-10-10 11:46:03 +0200464 sysconfdir: $sysconfdir
465 localstatedir: $localstatedir
466 runstatedir: $runstatedir
Jonas Witschelc43f3c22019-12-20 13:28:17 +0100467 sysusersdir: $sysusersdir
Juergen Repp6da95b02019-10-10 11:46:03 +0200468 tmpfilesdir: $tmpfilesdir
469 userstatedir: [\$HOME/]$with_userstatedir
Juergen Reppff821bd2017-12-11 15:21:42 +0100470])