1#
2# configure.ac for the trousers project
3#
4
5AC_INIT(trousers, 0.3.14, trousers-tech@lists.sf.net)
6
7TSS_SPEC_MAJOR=1
8TSS_SPEC_MINOR=2
9TSS_VER_MAJOR=0
10TSS_VER_MINOR=3
11
12# compute $target
13AC_CANONICAL_TARGET
14AM_INIT_AUTOMAKE([foreign subdir-objects 1.6])
15
16# Debugging support
17AC_ARG_ENABLE([debug],
18    [AC_HELP_STRING([--enable-debug], [turn on all trousers debugging flags [default=off]])],
19    AC_MSG_RESULT([*** Enabling debugging at user request ***]),)
20
21# If the user has not set CFLAGS, do something appropriate
22test_CFLAGS=${CFLAGS+set}
23if test "$test_CFLAGS" != set; then
24          if test "x$enable_debug" = "xyes"; then
25                    CFLAGS="-O0 -g -DTSS_DEBUG -Wreturn-type"
26#                   CFLAGS="-O0 -g -DTSS_DEBUG -Wreturn-type -DTCSD_SINGLE_THREAD_DEBUG"
27          else
28                    CFLAGS="-O2"
29          fi
30else
31          if test "x$enable_debug" = "xyes"; then
32                    CFLAGS="${CFLAGS} -O0 -g -DTSS_DEBUG -Wreturn-type"
33          fi
34fi
35
36# Arch specific stuff
37case $target in
38          *darwin*)
39          TCSD_LDFLAGS=""
40          ;;
41          *solaris*)
42                    CFLAGS="$CFLAGS -DSOLARIS"
43                    ;;
44        *)
45          TCSD_LDFLAGS="-pie -Wl,-z,relro -Wl,-z,now"
46                ;;
47esac
48
49AC_SUBST(TCSD_LDFLAGS)
50
51# Non-standard OpenSSL location
52AC_MSG_CHECKING([Non-standard OpenSSL location])
53AC_ARG_WITH(openssl,
54          AC_HELP_STRING([--with-openssl=PATH], [Location of openssl libs/includes]),
55          [OPENSSL_INCLUDE_DIR="$withval/include"
56           OPENSSL_LIB_DIR="$withval/lib"
57           if [[ ! -d $OPENSSL_INCLUDE_DIR -o ! -d $OPENSSL_LIB_DIR ]]; then
58                    AC_MSG_ERROR([$OPENSSL_INCLUDE_DIR or $OPENSSL_LIB_DIR doen't exist!])
59           else
60                    AC_MSG_RESULT([yes])
61                    CFLAGS="$CFLAGS -L$OPENSSL_LIB_DIR -I$OPENSSL_INCLUDE_DIR"
62                    AC_SUBST([OPENSSL_LIB_DIR])
63           fi],
64          [AC_MSG_RESULT([no])
65           AC_SUBST([OPENSSL_LIB_DIR], []) ] )
66
67# The tspi Makefile will look for trspi/crypto/@CRYPTO_PACKAGE@/crypto.c
68# Future crypto packages can go in their own subdir of trspi/crypto
69# and a check for them should be made here
70AC_CHECK_LIB([crypto], [EVP_DigestUpdate],
71                    [CRYPTO_PACKAGE='openssl'],
72                    [AC_MSG_ERROR([openssl is currently the only supported crypto library for trousers. Please install openssl from http://www.openssl.org or the -devel package from your distro])])
73AC_SUBST([CRYPTO_PACKAGE])
74AC_SUBST(CRYPTOLIB, -lcrypto)
75
76AC_ARG_ENABLE(gcov,
77                    [AC_HELP_STRING([--enable-gcov], [turn on gcov code coverage flags [default=off]])],
78                    [CFLAGS="$CFLAGS -ftest-coverage -fprofile-arcs"
79                     AC_MSG_RESULT([*** Enabling gcov at user request ***])],)
80
81# profiling support
82AC_ARG_ENABLE(gprof,
83                    [AC_HELP_STRING([--enable-gprof], [enable profiling with gprof [default=off]])],
84                    [CFLAGS="$CFLAGS -pg"
85                     AC_MSG_RESULT([*** Enabling profiling at user request ***])],)
86
87SPEC_COMP=0
88# strict spec compliance
89AC_ARG_ENABLE(strict-spec-compliance,
90                    [AC_HELP_STRING([--enable-strict-spec-compliance], [build TrouSerS as strictly spec compliant [default=off]])],
91                    [CFLAGS="$CFLAGS -DTSS_SPEC_COMPLIANCE"
92                     SPEC_COMP=1
93                     AC_MSG_RESULT([*** Enabling spec compliance at user request ***])],)
94
95# user+group checking
96AC_ARG_ENABLE(usercheck,
97                    [AC_HELP_STRING([--disable-usercheck], [build TrouSerS without checking and setting of user/group tss [default=on] (Caution: This is intended for development purposes only.)])],
98                    [AS_IF([test "x$enableval" = "xno"], [CFLAGS="$CFLAGS -DNOUSERCHECK"
99                    AC_MSG_RESULT([*** Disabling user checking at user request ***])])],)
100AM_CONDITIONAL(NOUSERCHECK, [test "x$enable_usercheck" = "xno"])
101
102# daa math lib: gmp or openssl (default openssl)
103MATH_DEFINE=BI_OPENSSL
104AC_ARG_WITH([gmp],
105              AC_HELP_STRING([--with-gmp], [build TrouSerS with the GMP math lib (used in DAA)]),
106                    [AC_CHECK_LIB(gmp, [__gmp_rand], [], [])
107                    AC_CHECK_HEADERS([gmp.h])
108              MATH_DEFINE=BI_GMP
109                    AC_MSG_RESULT([*** Enabling GMP lib at user request ***]) ]
110)
111
112case "$MATH_DEFINE" in
113BI_OPENSSL)
114          AC_CHECK_HEADERS([ openssl/bn.h openssl/engine.h])
115          ;;
116esac
117CFLAGS="$CFLAGS -D$MATH_DEFINE"
118
119GUI=openssl
120AC_ARG_WITH(gui,
121              [AC_HELP_STRING([--with-gui], [type of gui popup (gtk/none) [default=gtk]])],
122              [GUI=$withval],
123              [])
124
125if test "x$GUI" = "xgtk"; then
126          # section imported from Glade compile
127          pkg_modules="gtk+-2.0 >= 2.0.0"
128          PKG_CHECK_MODULES(GTK,
129                    [$pkg_modules],
130                    AM_CONDITIONAL(HAVE_GTK, true),
131                    [AM_CONDITIONAL(HAVE_GTK, false)
132                    AC_MSG_ERROR([Please install the gtk2-devel package for your distro or select another gui option.]) ])
133          AM_CONDITIONAL(OPENSSL_UI, false)
134          AC_SUBST(GTK_CFLAGS)
135          AC_SUBST(GTK_LIBS)
136elif test "x$GUI" = "xopenssl"; then
137          # We know we have OpenSSL
138          AM_CONDITIONAL(OPENSSL_UI, true)
139          AM_CONDITIONAL(HAVE_GTK, false)
140elif test "x$GUI" = "xnone"; then
141          if test $SPEC_COMP -eq 1; then
142                    AC_MSG_ERROR([Popups must be enabled in strict spec compliance mode])
143          fi
144          AC_MSG_RESULT([*** Disabling GUI popups at user request ***])
145          AC_MSG_RESULT([*** WARNING: This may break apps! ***])
146          CFLAGS="$CFLAGS -DTSS_NO_GUI"
147          AM_CONDITIONAL(HAVE_GTK, false)
148          AM_CONDITIONAL(OPENSSL_UI, false)
149else
150          AC_MSG_ERROR(["gtk", "openssl" and "none" are the only supported gui options for trousers])
151fi
152
153#
154# The default port that the TCS daemon listens on
155#
156AC_SUBST(TCSD_DEFAULT_PORT, 30003)
157#
158# The RPC mechanism to build into both libtspi and the tcsd
159#
160# AC_SUBST(RPC, "soap")
161AC_SUBST(RPC, "tcstp")
162
163#
164# API= The TSS API level to build by default.
165#
166# To build a 1.1 TSS, set API=1.1 (./configure --with-api=1.1)
167# To build a 1.2 TSS, set API=1.2 (./configure --with-api=1.2)
168#
169# In order to build a custom TSS API, set API to the lowest API level that
170# contains the APIs you need. For instance, if you need only APIs that are
171# a subset of the TSS 1.1 API, set this to 1.1. If you need any of the 1.2
172# APIs, you'll need to set this to 1.2. Send mail to trousers-tech@lists.sf.net
173# if you have questions.
174#
175API=1.2
176AC_ARG_WITH(api,
177              [AC_HELP_STRING([--with-api], [Version of the TSS API to build [default=1.2]])],
178              [API=$withval],
179              [])
180
181if test "x$API" != "x1.1" && test "x$API" != "x1.2"; then
182          AC_MSG_ERROR(["1.1" and "1.2" are the only supported API versions for trousers.
183                          Custom API build options are available by editing 'configure.in'.])
184fi
185
186if test "x$API" = "x1.1" || test "x$API" = "x1.2"; then
187          # Tspi_Hash_GetHashValue,SetHashValue,UpdateHashValue
188          AM_CONDITIONAL(TSS_BUILD_HASH, true)
189          # Tspi_{Get|Set}Attribdata,{Get|Set}AttribUint32
190          AM_CONDITIONAL(TSS_BUILD_GETSET, true)
191          # Tspi_TPM_GetRandom,StirRandom
192          AM_CONDITIONAL(TSS_BUILD_RANDOM, true)
193          # Tspi_GetCapability (for TSP and TCS capabilities)
194          AM_CONDITIONAL(TSS_BUILD_CAPS, true)
195          # Tspi_TPM_GetCapability (for TPM chip capabilities)
196          AM_CONDITIONAL(TSS_BUILD_CAPS_TPM, true)
197          # Tspi_GetPolicyObject, Tspi_Policy_SetSecret,FlushSecret,AssignToObject
198          AM_CONDITIONAL(TSS_BUILD_POLICY, true)
199          # Tspi_TPM_DirWrite,DirRead
200          AM_CONDITIONAL(TSS_BUILD_DIR, true)
201          # Tspi_TPM_GetEvent,GetEvents,GetEventLog
202          AM_CONDITIONAL(TSS_BUILD_PCR_EVENTS, true)
203          # Tspi_Hash_Sign,VerifySignature
204          AM_CONDITIONAL(TSS_BUILD_SIGN, true)
205          # Tspi_TPM_Quote
206          AM_CONDITIONAL(TSS_BUILD_QUOTE, true)
207          # Tspi_PcrComposite_{Set|Get}PcrValue,SelectPcrIndex
208          AM_CONDITIONAL(TSS_BUILD_PCR_COMP, true)
209          # Tspi_Data_Seal,Unseal
210          AM_CONDITIONAL(TSS_BUILD_SEAL, true)
211          # Tspi_ChangeAuth,ChangeAuthAsym
212          AM_CONDITIONAL(TSS_BUILD_CHANGEAUTH, true)
213          # Tspi_Data_Bind,Unbind
214          AM_CONDITIONAL(TSS_BUILD_BIND, true)
215          # Tspi_TPM_TakeOwnership,ClearOwner (REQ: EK)
216          AM_CONDITIONAL(TSS_BUILD_OWN, true)
217          # Tspi_TPM_CreateEndorsementKey,GetPubEndorsementKey
218          AM_CONDITIONAL(TSS_BUILD_EK, true)
219          # Tspi_Context_RegisterKey,UnregisterKey,LoadKeyByUUID,GetKeyByUUID,GetKeyByPublicInfo,
220          # GetRegisteredKeysByUUID
221          AM_CONDITIONAL(TSS_BUILD_PS, true)
222          # Tspi_TPM_{Set|Get}Status
223          AM_CONDITIONAL(TSS_BUILD_ADMIN, true)
224          # Tspi_TPM_CollateIdentityRequest,ActivateIdentity
225          AM_CONDITIONAL(TSS_BUILD_AIK, true)
226          # Tspi_Key_CertifyKey
227          AM_CONDITIONAL(TSS_BUILD_CERTIFY, true)
228          # Tspi_TPM_CreateMaintenanceArchive,KillMaintenanceFeature,LoadMaintenancePubKey,
229          # CheckMaintenancePubKey
230          AM_CONDITIONAL(TSS_BUILD_MAINT, true)
231          # Tspi_TPM_AuthorizeMigrationTicket,Key_CreateMigrationBlob,ConvertMigrationBlob
232          AM_CONDITIONAL(TSS_BUILD_MIGRATION, true)
233          # Tspi_Context_LoadKeyByBlob,Key_LoadKey,UnloadKey,CreateKey,WrapKey,GetPubKey
234          AM_CONDITIONAL(TSS_BUILD_KEY, true)
235          # Tspi_TPM_PcrExtend,PcrRead,PcrReset
236          AM_CONDITIONAL(TSS_BUILD_PCR_EXTEND, true)
237          # Tspi_TPM_SelfTestFull,CertifySelfTest,GetTestResult
238          AM_CONDITIONAL(TSS_BUILD_SELFTEST, true)
239fi
240
241if test "x$API" = "x1.2"; then
242          AM_CONDITIONAL(TSS_BUILD_TSS12, true)
243          # Don't build DAA until the API is fixed - KEY
244          AM_CONDITIONAL(TSS_BUILD_DAA, false)
245          AM_CONDITIONAL(TSS_BUILD_PCR_COMP12, true)
246          AM_CONDITIONAL(TSS_BUILD_COUNTER, true)
247          AM_CONDITIONAL(TSS_BUILD_TICK, true)
248          AM_CONDITIONAL(TSS_BUILD_TRANSPORT, true)
249          AM_CONDITIONAL(TSS_BUILD_ASN1, true)
250          AM_CONDITIONAL(TSS_BUILD_NV, true)
251          AM_CONDITIONAL(TSS_BUILD_AUDIT, true)
252          AM_CONDITIONAL(TSS_BUILD_SEALX, true)
253          AM_CONDITIONAL(TSS_BUILD_DELEGATION, true)
254          AM_CONDITIONAL(TSS_BUILD_QUOTE2,true)
255          # CMK depends on MIGRATION
256          AM_CONDITIONAL(TSS_BUILD_CMK, true)
257else
258          AM_CONDITIONAL(TSS_BUILD_TSS12, false)
259          AM_CONDITIONAL(TSS_BUILD_DAA, false)
260          AM_CONDITIONAL(TSS_BUILD_PCR_COMP12, false)
261          AM_CONDITIONAL(TSS_BUILD_COUNTER, false)
262          AM_CONDITIONAL(TSS_BUILD_TICK, false)
263          AM_CONDITIONAL(TSS_BUILD_TRANSPORT, false)
264          AM_CONDITIONAL(TSS_BUILD_ASN1, false)
265          AM_CONDITIONAL(TSS_BUILD_NV, false)
266          AM_CONDITIONAL(TSS_BUILD_AUDIT, false)
267          AM_CONDITIONAL(TSS_BUILD_SEALX, false)
268          AM_CONDITIONAL(TSS_BUILD_DELEGATION, false)
269          AM_CONDITIONAL(TSS_BUILD_QUOTE2,false)
270          AM_CONDITIONAL(TSS_BUILD_CMK, false)
271fi
272
273#
274# There's no need to edit anything below, these conditionals control the building
275# of files that support the files above, which all contain TSS APIs
276#
277AM_CONDITIONAL(TSS_BUILD_NV_LIST, test -z $TSS_BUILD_NV_TRUE)
278AM_CONDITIONAL(TSS_BUILD_NV_SUPPORT, test -z $TSS_BUILD_NV_TRUE)
279AM_CONDITIONAL(TSS_BUILD_GET_FLAGS, test -z $TSS_BUILD_ADMIN_TRUE || \
280                                            test -z $TSS_BUILD_CAPS_TPM_TRUE)
281AM_CONDITIONAL(TSS_BUILD_PCRS_LIST, test -z $TSS_BUILD_SEAL_TRUE || \
282                                            test -z $TSS_BUILD_QUOTE_TRUE || \
283                                            test -z $TSS_BUILD_PCRS_TRUE || \
284                                            test -z $TSS_BUILD_PCR_COMP_TRUE || \
285                                            test -z $TSS_BUILD_SEALX_TRUE)
286AM_CONDITIONAL(TSS_BUILD_HASH_LIST, test -z $TSS_BUILD_SIGN_TRUE || test -z $TSS_BUILD_HASH_TRUE)
287AM_CONDITIONAL(TSS_BUILD_ENCDATA_LIST, test -z $TSS_BUILD_SEAL_TRUE || \
288                                               test -z $TSS_BUILD_CHANGEAUTH_TRUE || \
289                                               test -z $TSS_BUILD_BIND_TRUE || \
290                                               test -z $TSS_BUILD_SEALX_TRUE)
291AM_CONDITIONAL(TSS_BUILD_RSAKEY_LIST, test -z $TSS_BUILD_ADMIN_TRUE || \
292                                              test -z $TSS_BUILD_EK_TRUE || \
293                                              test -z $TSS_BUILD_MIGRATION_TRUE || \
294                                              test -z $TSS_BUILD_MAINT_TRUE || \
295                                              test -z $TSS_BUILD_CERTIFY_TRUE || \
296                                              test -z $TSS_BUILD_AIK_TRUE || \
297                                              test -z $TSS_BUILD_QUOTE_TRUE || \
298                                              test -z $TSS_BUILD_BIND_TRUE || \
299                                              test -z $TSS_BUILD_CHANGEAUTH_TRUE || \
300                                              test -z $TSS_BUILD_OWN_TRUE || \
301                                              test -z $TSS_BUILD_SIGN_TRUE || \
302                                              test -z $TSS_BUILD_PS_TRUE || \
303                                              test -z $TSS_BUILD_SEAL_TRUE || \
304                                              test -z $TSS_BUILD_DAA_TRUE || \
305                                              test -z $TSS_BUILD_KEY_TRUE || \
306                                              test -z $TSS_BUILD_SEALX_TRUE)
307AM_CONDITIONAL(TSS_BUILD_AUTH, test -z $TSS_BUILD_HASH_TRUE || \
308                                     test -z $TSS_BUILD_CAPS_TRUE || \
309                                     test -z $TSS_BUILD_CAPS_TPM_TRUE || \
310                                     test -z $TSS_BUILD_POLICY_TRUE || \
311                                     test -z $TSS_BUILD_DIR_TRUE || \
312                                     test -z $TSS_BUILD_PCR_EVENTS_TRUE || \
313                                     test -z $TSS_BUILD_SIGN_TRUE || \
314                                     test -z $TSS_BUILD_QUOTE_TRUE || \
315                                     test -z $TSS_BUILD_PCR_COMP_TRUE || \
316                                     test -z $TSS_BUILD_SEAL_TRUE || \
317                                     test -z $TSS_BUILD_SEALX_TRUE || \
318                                     test -z $TSS_BUILD_CHANGEAUTH_TRUE || \
319                                     test -z $TSS_BUILD_BIND_TRUE || \
320                                     test -z $TSS_BUILD_OWN_TRUE || \
321                                     test -z $TSS_BUILD_PS_TRUE || \
322                                     test -z $TSS_BUILD_ADMIN_TRUE || \
323                                     test -z $TSS_BUILD_AIK_TRUE || \
324                                     test -z $TSS_BUILD_EK_TRUE || \
325                                     test -z $TSS_BUILD_CERTIFY_TRUE || \
326                                     test -z $TSS_BUILD_MAINT_TRUE || \
327                                     test -z $TSS_BUILD_MIGRATION_TRUE || \
328                                     test -z $TSS_BUILD_KEY_TRUE || \
329                                     test -z $TSS_BUILD_PCR_EXTEND_TRUE || \
330                                     test -z $TSS_BUILD_SELFTEST_TRUE || \
331                                     test -z $TSS_BUILD_DAA_TRUE)
332AM_CONDITIONAL(TSS_BUILD_ASYM_CRYPTO, test -z $TSS_BUILD_AIK_TRUE || \
333                                              test -z $TSS_BUILD_CERTIFY_TRUE || \
334                                              test -z $TSS_BUILD_QUOTE_TRUE || \
335                                              test -z $TSS_BUILD_EK_TRUE || \
336                                              test -z $TSS_BUILD_CHANGEAUTH_TRUE || \
337                                              test -z $TSS_BUILD_BIND_TRUE || \
338                                              test -z $TSS_BUILD_OWN_TRUE || \
339                                              test -z $TSS_BUILD_SELFTEST_TRUE || \
340                                              test -z $TSS_BUILD_SIGN_TRUE || \
341                                              test -z $TSS_BUILD_KEY_TRUE || \
342                                              test -z $TSS_BUILD_DAA_TRUE)
343AM_CONDITIONAL(TSS_BUILD_SYM_CRYPTO, test -z $TSS_BUILD_AIK_TRUE || \
344                                             test -z $TSS_BUILD_TRANSPORT_TRUE)
345
346#GETTEXT_PACKAGE=trousers
347#AC_SUBST(GETTEXT_PACKAGE)
348#AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE")
349
350dnl Add the languages which your application supports here.
351#ALL_LINGUAS=""
352#AM_GLIB_GNU_GETTEXT
353
354# end Glade section
355
356AC_CHECK_HEADER(pthread.h, [AC_DEFINE(HAVE_PTHREAD_H, 1, [pthread header])])
357
358AC_DISABLE_STATIC
359AC_PROG_CC
360AC_PROG_LIBTOOL
361
362AC_C_BIGENDIAN([AC_DEFINE(_BIG_ENDIAN, 1, [big-endian host])])
363AC_CHECK_DECL(htole32, [AC_DEFINE(HTOLE_DEFINED, 1, [htole32 function is available])])
364AC_CHECK_HEADER(sys/byteorder.h, [AC_DEFINE(HAVE_BYTEORDER_H, 1, [sys/byteorder.h header])])
365AC_CHECK_FUNC(daemon, [ AC_DEFINE(HAVE_DAEMON, 1, [daemon function is available]) ])
366
367if test "x${GCC}" = "xyes"; then
368          CFLAGS="$CFLAGS -W -Wall -Wno-unused-parameter -Wsign-compare"
369fi
370
371CFLAGS="$CFLAGS -I../include \
372          -DTCSD_DEFAULT_PORT=${TCSD_DEFAULT_PORT} -DTSS_VER_MAJOR=${TSS_VER_MAJOR} \
373          -DTSS_VER_MINOR=${TSS_VER_MINOR} -DTSS_SPEC_MAJOR=${TSS_SPEC_MAJOR} \
374          -DTSS_SPEC_MINOR=${TSS_SPEC_MINOR}"
375#CFLAGS="$CFLAGS -I../include -std=c99 -pedantic -W -Wall"
376KERNEL_VERSION=`uname -r`
377AC_SUBST(CFLAGS)
378
379# When we build the rpms, prefix will be /usr. This'll do some things that make sense,
380# like put our sbin stuff in /usr/sbin and our library in /usr/lib. It'll do some other
381# things that don't make sense like put our config file in /usr/etc. So, I'll just hack
382# it here. If the --prefix option isn't specified during configure, let it all go to
383# /usr/local, even /usr/local/etc. :-P
384if test x"${prefix}" = x"/usr"; then
385          sysconfdir="/etc"
386          localstatedir="/var"
387          mandir="/usr/share/man"
388elif test x"${prefix}" = x"NONE"; then
389          localstatedir="/usr/local/var"
390fi
391
392AC_OUTPUT(dist/tcsd.conf \
393            dist/fedora/trousers.spec \
394            dist/trousers.spec \
395            Makefile \
396            src/Makefile \
397            src/include/Makefile \
398            src/tcs/Makefile \
399            src/tddl/Makefile \
400            src/tspi/Makefile \
401            src/trspi/Makefile \
402            src/tcsd/Makefile \
403            man/man8/tcsd.8 \
404            man/man5/tcsd.conf.5 \
405            dist/Makefile \
406            man/Makefile \
407            man/man3/Makefile \
408            man/man5/Makefile \
409            man/man8/Makefile)
410
411echo "CFLAGS=$CFLAGS"
412
413