]> git.proxmox.com Git - swtpm.git/blame - configure.ac
man: Add documentation about --seccomp option to man pages
[swtpm.git] / configure.ac
CommitLineData
f163b202
SB
1#
2# configure.ac
3#
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.
8#
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)
12# any later version.
13#
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.
18#
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.
22#
23# This file is derived from tpm-tool's configure.in.
24#
25
f1a8a1cb 26AC_INIT(swtpm, 0.2.0)
f163b202
SB
27AC_PREREQ(2.12)
28AC_CONFIG_SRCDIR(Makefile.am)
29AC_CONFIG_HEADER(config.h)
30
31SWTPM_VER_MAJOR=`echo $PACKAGE_VERSION | cut -d "." -f1`
32SWTPM_VER_MINOR=`echo $PACKAGE_VERSION | cut -d "." -f2`
33SWTPM_VER_MICRO=`echo $PACKAGE_VERSION | cut -d "." -f3`
34
35AC_SUBST([SWTPM_VER_MAJOR])
36AC_SUBST([SWTPM_VER_MINOR])
37AC_SUBST([SWTPM_VER_MICRO])
38
39dnl Check for programs
40AC_PROG_CC
41AC_PROG_INSTALL
42AC_PROG_LN_S
908afaf5 43LT_INIT
f163b202 44
f163b202
SB
45AC_CONFIG_MACRO_DIR([m4])
46AC_CANONICAL_TARGET
c3fdf688 47AC_CANONICAL_HOST
f163b202
SB
48AM_INIT_AUTOMAKE([foreign 1.6])
49
50DEBUG=""
51AC_MSG_CHECKING([for debug-enabled build])
52AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [create a debug build]),
53 [if test "$enableval" = "yes"; then
54 DEBUG="yes"
55 AC_MSG_RESULT([yes])
56 else
57 DEBUG="no"
58 AC_MSG_RESULT([no])
59 fi],
60 [DEBUG="no",
61 AC_MSG_RESULT([no])])
62
63# If the user has not set CFLAGS, do something appropriate
64test_CFLAGS=${CFLAGS+set}
65if test "$test_CFLAGS" != set; then
33be7be2 66 if test "$DEBUG" = "yes"; then
f163b202
SB
67 CFLAGS="-O0 -g -DDEBUG"
68 else
69 CFLAGS="-g -O2"
70 fi
33be7be2 71elif test "$DEBUG" = "yes"; then
f163b202
SB
72 CFLAGS="$CFLAGS -O0 -g -DDEBUG"
73fi
74
e46a2b66
SB
75AC_HEADER_STDC
76AC_C_CONST
77AC_C_INLINE
78
79AC_TYPE_SIZE_T
80AC_TYPE_SIGNAL
81
baecda40
SB
82AC_PROG_CC
83AC_PROG_INSTALL
3cb54a5d 84AC_PROG_MKDIR_P
e46a2b66 85
ec37bb56
SB
86AC_ARG_WITH([selinux],
87 AS_HELP_STRING([--with-selinux],
88 [add SELinux policy extensions @<:@default=check@:>@]))
89m4_divert_text([DEFAULTS], [with_selinux=check])
90
91dnl Check for SELinux policy support
92
93if 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?")
98 else
99 with_selinux="no"
100 fi
101 fi
102 AC_PATH_PROG([SEMODULE], semodule)
33be7be2 103 if test "x$SEMODULE" = "x"; then
ec37bb56
SB
104 if test "$with_selinux" = "yes"; then
105 AC_MSG_ERROR("Is selinux-policy-devel installed?")
106 else
107 with_selinux="no"
108 fi
109 fi
110 if test "$with_selinux" = "check"; then
111 with_selinux="yes"
112 fi
113 fi
114fi
33be7be2 115AM_CONDITIONAL([WITH_SELINUX], [test "x$with_selinux" = "xyes"])
ec37bb56 116
b096be26
SB
117if test "$prefix" = "/usr" && test "$sysconfdir" = '${prefix}/etc'; then
118 sysconfdir="/etc"
119fi
120if test "$prefix" = "" && test "$datarootdir" = '${prefix}/share'; then
121 datarootdir="/usr/share"
122fi
d16b86b7
SB
123if test "$prefix" = "/usr" && test "$localstatedir" = '${prefix}/var'; then
124 localstatedir="/var"
125fi
0432b653
SB
126SYSCONFDIR=`eval echo $sysconfdir`
127DATAROOTDIR=`eval echo $datarootdir`
d16b86b7 128LOCALSTATEDIR=`eval echo $localstatedir`
0432b653
SB
129AC_SUBST([SYSCONFDIR])
130AC_SUBST([DATAROOTDIR])
d16b86b7 131AC_SUBST([LOCALSTATEDIR])
b096be26 132
7849b6c6 133cryptolib=openssl
3bbdd7bc
SB
134
135AC_ARG_WITH([openssl],
7849b6c6
SB
136 [AS_HELP_STRING([--with-openssl],
137 [build with openssl library])],
138 [],
139 [])
3bbdd7bc
SB
140
141case "$cryptolib" in
3bbdd7bc 142openssl)
7849b6c6
SB
143 AC_CHECK_LIB(crypto,
144 [AES_set_encrypt_key],
b78b6af2 145 [true],
7849b6c6
SB
146 AC_MSG_ERROR(Faulty openssl crypto library))
147 AC_CHECK_HEADERS([openssl/aes.h],[],
148 AC_MSG_ERROR(Is openssl-devel/libssl-dev installed?))
149 AC_MSG_RESULT([Building with openssl crypto library])
150 ;;
3bbdd7bc 151esac
833a5416 152
baecda40
SB
153LIBTASN1_LIBS=$(pkg-config --libs libtasn1)
154if test $? -ne 0; then
155 AC_MSG_ERROR("Is libtasn1-devel installed? -- could not get libs for libtasn1")
156fi
157AC_SUBST([LIBTASN1_LIBS])
f163b202 158
baecda40
SB
159LIBTPMS_LIBS=$(pkg-config --libs libtpms)
160if test $? -ne 0; then
161 AC_MSG_ERROR("Is libtpms-devel installed? -- could not get libs for libtpms")
162fi
fbc596ab 163AC_CHECK_LIB(tpms,
b78b6af2 164 TPMLIB_ChooseTPMVersion,[true],
fbc596ab
SB
165 AC_MSG_ERROR("libtpms 0.6 or later is required")
166)
baecda40 167AC_SUBST([LIBTPMS_LIBS])
f163b202 168
5478de0a
SB
169AC_CHECK_LIB(c, clock_gettime, LIBRT_LIBS="", LIBRT_LIBS="-lrt")
170AC_SUBST([LIBRT_LIBS])
171
e46a2b66 172AC_PATH_PROG([TPM_NVDEFINE], tpm_nvdefine)
ef606d4a 173if test "x$TPM_NVDEFINE" = "x"; then
64faf455 174 have_tcsd=no
ef606d4a
SB
175 AC_MSG_WARN([NVRAM area tools are needed for TPM 1.2 certificate injection: tpm-tools package])
176else
177 have_tcsd=yes
178fi
64faf455
SB
179with_swtpm_setup=yes
180AM_CONDITIONAL([HAVE_TCSD], test "$have_tcsd" != "no")
e46a2b66 181
5cd844d0
SB
182dnl If we have the tcsd package, we can build swtpm_setup, but need netstat also
183AC_PATH_PROG([NETSTAT], [netstat])
184case $host_os in
185linux-*)
33be7be2 186 if test "x$NETSTAT" = "x" && test "have_tcsd" != "no"; then
64faf455 187 AC_MSG_ERROR([netstat tool is missing for tests: net-tools package])
5cd844d0
SB
188 fi
189 ;;
190esac
191
09d1a532
SB
192AC_MSG_CHECKING([for whether to build with CUSE interface])
193AC_ARG_WITH([cuse],
194 AC_HELP_STRING([--with-cuse],
195 [build with CUSE interface]),
196 [],
197 [with_cuse=check]
198)
f163b202 199
09d1a532
SB
200if test "$with_cuse" != "no"; then
201 LIBFUSE_CFLAGS=$(pkg-config fuse --cflags 2>/dev/null)
202 if test $? -ne 0; then
203 if test "$with_cuse" = "yes"; then
204 AC_MSG_ERROR("Is fuse-devel installed? -- could not get cflags for libfuse")
205 else
206 with_cuse=no
207 fi
208 else
209 with_cuse=yes
210 fi
498433f7 211fi
09d1a532
SB
212
213dnl with_cuse is now yes or no
214if test "$with_cuse" != "no"; then
215 LIBFUSE_LIBS=$(pkg-config fuse --libs)
216 if test $? -ne 0; then
217 AC_MSG_ERROR("Is fuse-devel installed? -- could not get libs for libfuse")
218 fi
219 AC_SUBST([LIBFUSE_CFLAGS])
220 AC_SUBST([LIBFUSE_LIBS])
221 AC_DEFINE_UNQUOTED([WITH_CUSE], 1,
222 [whether to build with CUSE interface])
ebf1557d
SB
223
224 GLIB_CFLAGS=$(pkg-config --cflags glib-2.0)
225 if test $? -ne 0; then
226 AC_MSG_ERROR("Is glib-2.0 installed? -- could not get cflags")
227 fi
228 AC_SUBST([GLIB_CFLAGS])
229
230 GLIB_LIBS=$(pkg-config --libs glib-2.0)
231 if test $? -ne 0; then
232 AC_MSG_ERROR("Is glib-2.0 installed? -- could not get libs")
233 fi
234 AC_SUBST([GLIB_LIBS])
235
236 GTHREAD_LIBS=$(pkg-config --libs gthread-2.0)
237 if test $? -ne 0; then
238 AC_MSG_ERROR("Is glib-2.0 installed? -- could not get libs for gthread-2.0")
239 fi
240 AC_SUBST([GTHREAD_LIBS])
baecda40 241fi
09d1a532
SB
242AM_CONDITIONAL([WITH_CUSE],[test "$with_cuse" = "yes"])
243AC_MSG_RESULT($with_cuse)
f163b202 244
498433f7
SB
245AC_MSG_CHECKING([for whether to build with chardev interface])
246case $host_os in
247linux-*)
248 with_chardev=yes
249 AC_DEFINE_UNQUOTED([WITH_CHARDEV], 1,
250 [whether to build with chardev interface])
251 ;;
252*)
253 with_chardev=no
254esac
255AM_CONDITIONAL([WITH_CHARDEV],[test "$with_chardev" = "yes"])
256AC_MSG_RESULT($with_cuse)
257
10002933
SB
258AC_ARG_WITH([gnutls],
259 AC_HELP_STRING([--with-gnutls],
260 [build with gnutls library]),
261 [],
262 [with_gnutls=check]
263)
264
e46a2b66
SB
265if test "x$with_gnutls" != "xno"; then
266 GNUTLS_LDFLAGS=$(pkg-config --libs gnutls)
267 if test $? -ne 0; then
33be7be2 268 if test "x$with_gnutls" = "xyes"; then
e46a2b66
SB
269 AC_MSG_ERROR("Is gnutls installed? -- could not get libs for gnutls")
270 else
271 with_gnutls=no
272 fi
273 fi
274fi
f163b202 275
1828edee
SB
276if test "x$with_gnutls" != "xno"; then
277 AC_PATH_PROG([GNUTLS_CERTTOOL], certtool)
33be7be2
SB
278 if test "x$GNUTLS_CERTTOOL" = "x"; then
279 if test "x$with_gnutls" = "xyes"; then
1828edee
SB
280 AC_MSG_ERROR("Could not find certtool. Is gnutls-utils/gnutls-bin installed?")
281 else
282 with_gnutls=no
283 fi
284 fi
285fi
286
e46a2b66 287if test "x$with_gnutls" != "xno"; then
571a8eed 288 ORIG_CFLAGS="$CFLAGS"
baecda40 289 GNUTLS_CFLAGS=$(pkg-config gnutls --cflags)
571a8eed 290 CFLAGS="$CFLAGS $GNUTLS_CFLAGS $GNUTLS_LDFLAGS"
10002933 291 AC_CHECK_LIB([gnutls], [gnutls_load_file], [
baecda40
SB
292 GNUTLS_LIBS=-lgnutls
293 ],
33be7be2 294 [if test "x$with_gnutls" = "xyes"; then
e46a2b66
SB
295 AC_MSG_ERROR([GNUTLS >= 3.1.0 library not found: libgnutls.so])
296 else
297 with_gnutls="no"
298 fi])
571a8eed 299 CFLAGS="$ORIG_CFLAGS"
e46a2b66
SB
300fi
301
302if test "x$with_gnutls" != "xno"; then
571a8eed
SB
303 ORIG_CFLAGS="$CFLAGS"
304 CFLAGS="$CFLAGS $GNUTLS_CFLAGS"
e46a2b66 305 AC_CHECK_HEADER(gnutls/abstract.h, [], \
33be7be2 306 [if test "x$with_gnutls" = "xyes"; then
e46a2b66
SB
307 AC_MSG_ERROR([GNUTLS >= 3.1.0 library header not found: gnutls/abstract.h])
308 else
309 with_gnutls="no"
310 fi])
571a8eed 311 CFLAGS="$ORIG_CFLAGS"
e46a2b66
SB
312fi
313
314if test "x$with_gnutls" != "xno"; then
315 with_gnutls="yes"
316fi
33be7be2 317AM_CONDITIONAL([WITH_GNUTLS], [test "x$with_gnutls" = "xyes"])
baecda40 318AC_SUBST([GNUTLS_LIBS])
f163b202 319
48abfbb1 320AC_PATH_PROG([EXPECT], expect)
33be7be2 321if test "x$EXPECT" = "x"; then
48abfbb1
SB
322 AC_MSG_ERROR([expect is required: expect package])
323fi
324
b080afb5 325AC_PATH_PROG([GAWK], gawk)
33be7be2 326if test "x$GAWK" = "x"; then
b080afb5
SB
327 AC_MSG_ERROR([gawk is required: gawk package])
328fi
329
8cb126e4 330AC_PATH_PROG([SOCAT], socat)
33be7be2 331if test "x$SOCAT" = "x"; then
8cb126e4
SB
332 AC_MSG_ERROR([socat is required: socat package])
333fi
334
b4372fe5 335AC_PATH_PROG([PYTHON], python3)
33be7be2 336if test "x$PYTHON" = "x"; then
b4372fe5 337 AC_MSG_ERROR([python3 is required])
dbb399de
SB
338fi
339
5eeea357
SB
340AC_ARG_ENABLE([hardening],
341 AS_HELP_STRING([--disable-hardening], [Disable hardening flags]))
a76b4eeb 342
5eeea357
SB
343if test "x$enable_hardening" != "xno"; then
344 TMP="$($CC -fstack-protector-strong $srcdir/include/swtpm/tpm_ioctl.h 2>&1)"
345 if echo $TMP | $GREP 'unrecognized command line option' >/dev/null; then
346 HARDENING_CFLAGS="-fstack-protector -Wstack-protector "
347 else
348 HARDENING_CFLAGS="-fstack-protector-strong -Wstack-protector "
349 fi
350
351 dnl Must not have -O0 but must have a -O for -D_FORTIFY_SOURCE=2
352 TMP1="$(echo $CFLAGS | sed -n 's/.*\(-O0\).*/\1/p')"
353 TMP2="$(echo $CFLAGS | sed -n 's/.*\(-O\).*/\1/p')"
354 if test -z "$TMP1" && test -n "$TPM2"; then
355 HARDENING_CFLAGS="$HARDENING_CFLAGS -D_FORTIFY_SOURCE=2 "
356 fi
357 dnl Check ld for 'relro' and 'now'
358 if $LD --help 2>&1 | $GREP '\-z relro ' > /dev/null; then
359 HARDENING_CFLAGS="$HARDENING_CFLAGS -Wl,-z,relro "
360 fi
361 if $LD --help 2>&1 | $GREP '\-z now ' > /dev/null; then
362 HARDENING_CFLAGS="$HARDENING_CFLAGS -Wl,-z,now "
363 fi
364 AC_SUBST([HARDENING_CFLAGS])
a76b4eeb 365fi
e6085e96 366
b8421f3d
SB
367AC_ARG_ENABLE([test-coverage],
368 AS_HELP_STRING([--enable-test-coverage], [Enable test coverage flags]))
369
370if test "x$enable_test_coverage" = "xyes"; then
371 COVERAGE_CFLAGS="-fprofile-arcs -ftest-coverage"
372 COVERAGE_LDFLAGS="-fprofile-arcs"
373fi
374
c4ac0a11
SB
375AC_ARG_WITH([tss-user],
376 AC_HELP_STRING([--with-tss-user=TSS_USER],
377 [The tss user to use]),
378 [TSS_USER="$withval"],
379 [TSS_USER="tss"]
380)
381
382AC_ARG_WITH([tss-group],
383 AC_HELP_STRING([--with-tss-group=TSS_GROUP],
384 [The tss group to use]),
385 [TSS_GROUP="$withval"],
386 [TSS_GROUP="tss"]
387)
388AC_SUBST([TSS_USER])
389AC_SUBST([TSS_GROUP])
390
f163b202
SB
391CFLAGS="$CFLAGS -Wreturn-type -Wsign-compare -Wswitch-enum"
392CFLAGS="$CFLAGS -Wmissing-prototypes -Wall -Werror"
e6085e96 393CFLAGS="$CFLAGS -Wformat -Wformat-security"
b8421f3d
SB
394CFLAGS="$CFLAGS $GNUTLS_CFLAGS $COVERAGE_CFLAGS"
395
396LDFLAGS="$LDFLAGS $COVERAGE_LDFLAGS"
f163b202 397
f2458ef7
SB
398dnl Simulate the following for systems with pkg-config < 0.28:
399dnl PKG_CHECK_VAR([libtpms_cryptolib], [libtpms], [cryptolib],
400dnl [], AC_MSG_ERROR([Could not determine libtpms crypto library.]))
401PKG_PROG_PKG_CONFIG
402
403AC_MSG_CHECKING([Checking the crypto library libtpms is linked to])
404libtpms_cryptolib=`$PKG_CONFIG --variable cryptolib libtpms`
33be7be2 405if test "x$libtpms_cryptolib" = "x"; then
f2458ef7
SB
406 AC_MSG_ERROR([Could not determine the crypto library libtpms is using])
407fi
408AC_MSG_RESULT($libtpms_cryptolib)
86cc4527
SB
409
410if test "$libtpms_cryptolib" != "$cryptolib"; then
411 echo "libtpms is using $libtpms_cryptolib; we have to use the same"
33be7be2 412 if test "$cryptolib" = "openssl"; then
86cc4527
SB
413 AC_MSG_ERROR([do not use --with-openssl])
414 else
415 AC_MSG_ERROR([use --with-openssl])
416 fi
417fi
418
c751e32e
SB
419with_vtpm_proxy=no
420case $host_os in
f071d820 421linux-*)
c751e32e
SB
422 with_vtpm_proxy=yes
423 AC_DEFINE_UNQUOTED([WITH_VTPM_PROXY], 1,
424 [whether to build in vTPM proxy support (Linux only)])
425esac
426
6286beac
SB
427case $host_os in
428cygwin)
429 CFLAGS="$CFLAGS -D__USE_LINUX_IOCTL_DEFS"
430esac
431
761df6cd
SB
432dnl Seccomp profile using -lseccomp (Linux only)
433case $host_os in
434linux-*)
435 with_seccomp_default=yes
436 ;;
437*)
438 with_seccomp_default=no
439 ;;
440esac
441
442AC_MSG_CHECKING([for whether to build with seccomp profile])
443AC_ARG_WITH([seccomp],
444 AC_HELP_STRING([--with-seccomp],
445 [build with seccomp profile]),
446 [],
447 [with_seccomp=$with_seccomp_default]
448)
449
450if test "$with_seccomp" != "no"; then
451 LIBSECCOMP_CFLAGS=$(pkg-config libseccomp --cflags 2>/dev/null)
452 if test $? -ne 0; then
453 AC_MSG_ERROR("Is libseccomp-devel installed? -- could not get cflags for libseccomp")
454 else
455 with_libseccomp=yes
456 fi
457 LIBSECCOMP_LIBS=$(pkg-config --libs libseccomp)
458 AC_SUBST([LIBSECCOMP_LIBS])
459 AC_SUBST([LIBSECCOMP_CFLAGS])
460 AC_DEFINE_UNQUOTED([WITH_SECCOMP], 1,
461 [whether to build in seccomp profile (Linux only)])
462fi
463
44b92d43
SB
464AC_CONFIG_FILES([Makefile \
465 debian/swtpm-tools.postinst \
f163b202 466 dist/swtpm.spec \
e46a2b66 467 etc/Makefile \
0432b653 468 etc/swtpm_setup.conf \
e46a2b66 469 samples/Makefile \
d16b86b7 470 samples/swtpm-localca.conf \
f163b202
SB
471 include/Makefile \
472 include/swtpm/Makefile \
a1fa5d77 473 include/swtpm.h \
f163b202
SB
474 src/Makefile \
475 src/selinux/Makefile \
476 src/swtpm/Makefile \
e46a2b66
SB
477 src/swtpm_bios/Makefile \
478 src/swtpm_cert/Makefile \
479 src/swtpm_ioctl/Makefile \
480 src/swtpm_setup/Makefile \
c4ac0a11 481 src/swtpm_setup/swtpm_setup.h \
f163b202 482 man/Makefile \
39d0c3de 483 man/man3/Makefile \
f163b202 484 man/man8/Makefile \
e46a2b66 485 tests/Makefile \
c4ac0a11 486 tests/test_config \
10002933
SB
487 ])
488AC_CONFIG_FILES([src/swtpm_setup/swtpm_setup.sh],
489 [chmod 755 src/swtpm_setup/swtpm_setup.sh])
0432b653
SB
490AC_CONFIG_FILES([samples/swtpm-localca],
491 [chmod 755 samples/swtpm-localca])
f163b202
SB
492AC_OUTPUT
493
e46a2b66 494echo
c3fdf688
SB
495printf "with_gnutls : %5s (no = swtpm_cert will NOT be built)\n" $with_gnutls
496printf "with_selinux : %5s (no = SELinux policy extenions will NOT be built)\n" $with_selinux
497printf "with_cuse : %5s (no = no CUSE interface)\n" $with_cuse
498433f7 498printf "with_chardev : %5s (no = no chardev interface)\n" $with_chardev
c3fdf688 499printf "with_swtpm_setup: %5s (no = swtpm_setup will NOT be built)\n" $with_swtpm_setup
c751e32e 500printf "with_vtpm_proxy : %5s (no = no vtpm proxy support; Linux only)\n" $with_vtpm_proxy
761df6cd 501printf "with_seccomp : %5s (no = no seccomp profile; Linux only)\n" $with_seccomp
e46a2b66 502echo
10002933
SB
503echo "cryptolib: $cryptolib"
504echo
f163b202 505echo "CFLAGS=$CFLAGS"
a76b4eeb 506echo "HARDENING_CFLAGS=$HARDENING_CFLAGS"
f163b202 507echo "LDFLAGS=$LDFLAGS"
761df6cd 508echo "LIBSECCOMP_LIBS=$LIBSECCOMP_LIBS"
c4ac0a11
SB
509echo
510echo "TSS_USER=$TSS_USER"
511echo "TSS_GROUP=$TSS_GROUP"
512echo