4 # The Initial Developer of the Original Code is International
5 # Business Machines Corporation. Portions created by IBM
6 # Corporation are Copyright (C) 2014 International Business
7 # Machines Corporation. All Rights Reserved.
9 # This program is free software; you can redistribute it and/or modify
10 # it under the terms of the Common Public License as published by
11 # IBM Corporation; either version 1 of the License, or (at your option)
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # Common Public License for more details.
19 # You should have received a copy of the Common Public License
20 # along with this program; if not, a copy can be viewed at
21 # http://www.opensource.org/licenses/cpl1.0.php.
23 # This file is derived from tpm-tool's configure.in.
28 AC_CONFIG_SRCDIR(Makefile.am)
29 AC_CONFIG_HEADER(config.h)
31 SWTPM_VER_MAJOR=`echo $PACKAGE_VERSION | cut -d "." -f1`
32 SWTPM_VER_MINOR=`echo $PACKAGE_VERSION | cut -d "." -f2`
33 SWTPM_VER_MICRO=`echo $PACKAGE_VERSION | cut -d "." -f3`
35 AC_SUBST([SWTPM_VER_MAJOR])
36 AC_SUBST([SWTPM_VER_MINOR])
37 AC_SUBST([SWTPM_VER_MICRO])
39 dnl Check for programs
45 AC_CONFIG_MACRO_DIR([m4])
48 AM_INIT_AUTOMAKE([foreign 1.6])
51 AC_MSG_CHECKING([for debug-enabled build])
52 AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [create a debug build]),
53 [if test "$enableval" = "yes"; then
63 # If the user has not set CFLAGS, do something appropriate
64 test_CFLAGS=${CFLAGS+set}
65 if test "$test_CFLAGS" != set; then
66 if test "$DEBUG" == "yes"; then
67 CFLAGS="-O0 -g -DDEBUG"
71 elif test "$DEBUG" == "yes"; then
72 CFLAGS="$CFLAGS -O0 -g -DDEBUG"
86 AC_ARG_WITH([selinux],
87 AS_HELP_STRING([--with-selinux],
88 [add SELinux policy extensions @<:@default=check@:>@]))
89 m4_divert_text([DEFAULTS], [with_selinux=check])
91 dnl Check for SELinux policy support
93 if test "$with_selinux" != "no"; then
94 if test "$with_selinux" = "check" || test "$with_selinux" = "yes"; then
95 if ! test -f /usr/share/selinux/devel/Makefile; then
96 if test "$with_selinux" = "yes"; then
97 AC_MSG_ERROR("Is selinux-policy-devel installed?")
102 AC_PATH_PROG([SEMODULE], semodule)
103 if test "x$SEMODULE" == "x"; then
104 if test "$with_selinux" = "yes"; then
105 AC_MSG_ERROR("Is selinux-policy-devel installed?")
110 if test "$with_selinux" = "check"; then
115 AM_CONDITIONAL([WITH_SELINUX], [test "x$with_selinux" == "xyes"])
117 GLIB_CFLAGS=$(pkg-config --cflags glib-2.0)
118 if test $? -ne 0; then
119 AC_MSG_ERROR("Is glib-2.0 installed? -- could not get cflags")
121 AC_SUBST([GLIB_CFLAGS])
123 GLIB_LIBS=$(pkg-config --libs glib-2.0)
124 if test $? -ne 0; then
125 AC_MSG_ERROR("Is glib-2.0 installed? -- could not get libs")
127 AC_SUBST([GLIB_LIBS])
129 GTHREAD_LIBS=$(pkg-config --libs gthread-2.0)
130 if test $? -ne 0; then
131 AC_MSG_ERROR("Is glib-2.0 installed? -- could not get libs for gthread-2.0")
133 AC_SUBST([GTHREAD_LIBS])
137 AC_ARG_WITH([openssl],
138 [AS_HELP_STRING([--with-openssl],
139 [build with openssl library])],
146 [AES_set_encrypt_key],
148 AC_MSG_ERROR(Faulty openssl crypto library))
149 AC_CHECK_HEADERS([openssl/aes.h],[],
150 AC_MSG_ERROR(Is openssl-devel/libssl-dev installed?))
151 AC_MSG_RESULT([Building with openssl crypto library])
155 LIBTASN1_LIBS=$(pkg-config --libs libtasn1)
156 if test $? -ne 0; then
157 AC_MSG_ERROR("Is libtasn1-devel installed? -- could not get libs for libtasn1")
159 AC_SUBST([LIBTASN1_LIBS])
161 LIBTPMS_LIBS=$(pkg-config --libs libtpms)
162 if test $? -ne 0; then
163 AC_MSG_ERROR("Is libtpms-devel installed? -- could not get libs for libtpms")
166 TPMLIB_ChooseTPMVersion,,
167 AC_MSG_ERROR("libtpms 0.6 or later is required")
169 AC_SUBST([LIBTPMS_LIBS])
171 AC_PATH_PROG([TPM_NVDEFINE], tpm_nvdefine)
174 if test "x$TPM_NVDEFINE" == "x"; then
175 AC_MSG_ERROR([NVRAM area tools are needed: tpm-tools package])
183 AM_CONDITIONAL([HAVE_TCSD], test "$have_tcsd" != "no")
185 dnl If we have the tcsd package, we can build swtpm_setup, but need netstat also
186 AC_PATH_PROG([NETSTAT], [netstat])
189 if test "x$NETSTAT" == "x" && test "have_tcsd" != "no"; then
190 AC_MSG_ERROR([netstat tool is missing for tests: net-tools package])
195 AC_MSG_CHECKING([for whether to build with CUSE interface])
197 AC_HELP_STRING([--with-cuse],
198 [build with CUSE interface]),
203 if test "$with_cuse" != "no"; then
204 LIBFUSE_CFLAGS=$(pkg-config fuse --cflags 2>/dev/null)
205 if test $? -ne 0; then
206 if test "$with_cuse" = "yes"; then
207 AC_MSG_ERROR("Is fuse-devel installed? -- could not get cflags for libfuse")
216 dnl with_cuse is now yes or no
217 if test "$with_cuse" != "no"; then
218 LIBFUSE_LIBS=$(pkg-config fuse --libs)
219 if test $? -ne 0; then
220 AC_MSG_ERROR("Is fuse-devel installed? -- could not get libs for libfuse")
222 AC_SUBST([LIBFUSE_CFLAGS])
223 AC_SUBST([LIBFUSE_LIBS])
224 AC_DEFINE_UNQUOTED([WITH_CUSE], 1,
225 [whether to build with CUSE interface])
227 AM_CONDITIONAL([WITH_CUSE],[test "$with_cuse" = "yes"])
228 AC_MSG_RESULT($with_cuse)
230 AC_MSG_CHECKING([for whether to build with chardev interface])
234 AC_DEFINE_UNQUOTED([WITH_CHARDEV], 1,
235 [whether to build with chardev interface])
240 AM_CONDITIONAL([WITH_CHARDEV],[test "$with_chardev" = "yes"])
241 AC_MSG_RESULT($with_cuse)
243 AC_ARG_WITH([gnutls],
244 AC_HELP_STRING([--with-gnutls],
245 [build with gnutls library]),
250 if test "x$with_gnutls" != "xno"; then
251 GNUTLS_LDFLAGS=$(pkg-config --libs gnutls)
252 if test $? -ne 0; then
253 if test "x$with_gnutls" == "xyes"; then
254 AC_MSG_ERROR("Is gnutls installed? -- could not get libs for gnutls")
261 if test "x$with_gnutls" != "xno"; then
262 AC_PATH_PROG([GNUTLS_CERTTOOL], certtool)
263 if test "x$GNUTLS_CERTTOOL" == "x"; then
264 if test "x$with_gnutls" == "xyes"; then
265 AC_MSG_ERROR("Could not find certtool. Is gnutls-utils/gnutls-bin installed?")
272 if test "x$with_gnutls" != "xno"; then
273 GNUTLS_CFLAGS=$(pkg-config gnutls --cflags)
274 AC_CHECK_LIB([gnutls], [gnutls_load_file], [
277 [if test "x$with_gnutls" == "xyes"; then
278 AC_MSG_ERROR([GNUTLS >= 3.1.0 library not found: libgnutls.so])
284 if test "x$with_gnutls" != "xno"; then
285 AC_CHECK_HEADER(gnutls/abstract.h, [], \
286 [if test "x$with_gnutls" == "xyes"; then
287 AC_MSG_ERROR([GNUTLS >= 3.1.0 library header not found: gnutls/abstract.h])
293 if test "x$with_gnutls" != "xno"; then
296 AM_CONDITIONAL([WITH_GNUTLS], [test "x$with_gnutls" == "xyes"])
297 AC_SUBST([GNUTLS_LIBS])
299 AC_PATH_PROG([EXPECT], expect)
300 if test "x$EXPECT" == "x"; then
301 AC_MSG_ERROR([expect is required: expect package])
304 AC_PATH_PROG([GAWK], gawk)
305 if test "x$GAWK" == "x"; then
306 AC_MSG_ERROR([gawk is required: gawk package])
309 AC_PATH_PROG([SOCAT], socat)
310 if test "x$SOCAT" == "x"; then
311 AC_MSG_ERROR([socat is required: socat package])
314 AC_PATH_PROG([PYTHON], python)
315 if test "x$PYTHON" == "x"; then
316 AC_MSG_ERROR([python is required: python2 or python3 package])
319 TMP="$($CC -fstack-protector-strong 2>&1)"
320 if echo $TMP | $GREP 'unrecognized command line option' >/dev/null; then
321 HARDENING_CFLAGS="-fstack-protector -Wstack-protector "
323 HARDENING_CFLAGS="-fstack-protector-strong -Wstack-protector "
326 dnl Must not have -O0 but must have a -O for -D_FORTIFY_SOURCE=2
327 TMP1="$(echo $CFLAGS | sed -n 's/.*\(-O0\).*/\1/p')"
328 TMP2="$(echo $CFLAGS | sed -n 's/.*\(-O\).*/\1/p')"
329 if test -z "$TMP1" && test -n "$TPM2"; then
330 HARDENING_CFLAGS+="-D_FORTIFY_SOURCE=2 "
332 dnl Check ld for 'relro' and 'now'
333 if $LD --help 2>&1 | $GREP '\-z relro ' > /dev/null; then
334 HARDENING_CFLAGS+="-Wl,-z,relro "
336 if $LD --help 2>&1 | $GREP '\-z now ' > /dev/null; then
337 HARDENING_CFLAGS+="-Wl,-z,now "
339 AC_SUBST([HARDENING_CFLAGS])
341 AC_ARG_WITH([tss-user],
342 AC_HELP_STRING([--with-tss-user=TSS_USER],
343 [The tss user to use]),
344 [TSS_USER="$withval"],
348 AC_ARG_WITH([tss-group],
349 AC_HELP_STRING([--with-tss-group=TSS_GROUP],
350 [The tss group to use]),
351 [TSS_GROUP="$withval"],
355 AC_SUBST([TSS_GROUP])
357 CFLAGS="$CFLAGS -Wreturn-type -Wsign-compare -Wswitch-enum"
358 CFLAGS="$CFLAGS -Wmissing-prototypes -Wall -Werror"
359 CFLAGS="$CFLAGS -Wformat -Wformat-security"
361 PKG_CHECK_VAR([libtpms_cryptolib], [libtpms], [cryptolib],
362 [], AC_MSG_ERROR([Could not determine libtpms crypto library.]))
364 if test "$libtpms_cryptolib" != "$cryptolib"; then
365 echo "libtpms is using $libtpms_cryptolib; we have to use the same"
366 if test "$cryptolib" == "openssl"; then
367 AC_MSG_ERROR([do not use --with-openssl])
369 AC_MSG_ERROR([use --with-openssl])
377 AC_DEFINE_UNQUOTED([WITH_VTPM_PROXY], 1,
378 [whether to build in vTPM proxy support (Linux only)])
383 CFLAGS="$CFLAGS -D__USE_LINUX_IOCTL_DEFS"
386 AC_CONFIG_FILES([Makefile \
391 include/swtpm/Makefile \
394 src/selinux/Makefile \
396 src/swtpm_bios/Makefile \
397 src/swtpm_cert/Makefile \
398 src/swtpm_ioctl/Makefile \
399 src/swtpm_setup/Makefile \
400 src/swtpm_setup/swtpm_setup.h \
407 AC_CONFIG_FILES([src/swtpm_setup/swtpm_setup.sh],
408 [chmod 755 src/swtpm_setup/swtpm_setup.sh])
412 printf "with_gnutls : %5s (no = swtpm_cert will NOT be built)\n" $with_gnutls
413 printf "with_selinux : %5s (no = SELinux policy extenions will NOT be built)\n" $with_selinux
414 printf "with_cuse : %5s (no = no CUSE interface)\n" $with_cuse
415 printf "with_chardev : %5s (no = no chardev interface)\n" $with_chardev
416 printf "with_swtpm_setup: %5s (no = swtpm_setup will NOT be built)\n" $with_swtpm_setup
417 printf "with_vtpm_proxy : %5s (no = no vtpm proxy support; Linux only)\n" $with_vtpm_proxy
419 echo "cryptolib: $cryptolib"
421 echo "CFLAGS=$CFLAGS"
422 echo "HARDENING_CFLAGS=$HARDENING_CFLAGS"
423 echo "LDFLAGS=$LDFLAGS"
425 echo "TSS_USER=$TSS_USER"
426 echo "TSS_GROUP=$TSS_GROUP"