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