#
# configure.in for the trousers project
#

AC_INIT(trousers, 0.3.3, trousers-tech@lists.sf.net)

TSS_SPEC_MAJOR=1
TSS_SPEC_MINOR=2
TSS_VER_MAJOR=0
TSS_VER_MINOR=3

# compute $target
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([foreign 1.6])

# Debugging support
AC_ARG_ENABLE(debug,
		AC_HELP_STRING([--enable-debug], [turn on all trousers debugging flags [default is off]]),
		[enable_debug="yes"
		 AC_MSG_RESULT([*** Enabling debugging at user request ***])],)

# If the user has not set CFLAGS, do something appropriate
test_CFLAGS=${CFLAGS+set}
if test "$test_CFLAGS" != set; then
	if test "x$enable_debug" = "xyes"; then
		CFLAGS="-O0 -g -DTSS_DEBUG -Wreturn-type"
#		CFLAGS="-O0 -g -DTSS_DEBUG -Wreturn-type -DTCSD_SINGLE_THREAD_DEBUG"
	else
		CFLAGS="-O2"
	fi
else
	if test "x$enable_debug" = "xyes"; then
		CFLAGS="${CFLAGS} -O0 -g -DTSS_DEBUG -Wreturn-type"
	fi
fi

# Non-standard OpenSSL location
AC_MSG_CHECKING([Non-standard OpenSSL location])
AC_ARG_WITH(openssl,
	AC_HELP_STRING([--with-openssl=PATH], [Location of openssl libs/includes]),
	[OPENSSL_INCLUDE_DIR="$withval/include"
	 OPENSSL_LIB_DIR="$withval/lib"
	 if [[ ! -d $OPENSSL_INCLUDE_DIR -o ! -d $OPENSSL_LIB_DIR ]]; then
		AC_MSG_ERROR([$OPENSSL_INCLUDE_DIR or $OPENSSL_LIB_DIR doen't exist!])
	 else
		AC_MSG_RESULT([yes])
		CFLAGS="$CFLAGS -L$OPENSSL_LIB_DIR -I$OPENSSL_INCLUDE_DIR"
		AC_SUBST([OPENSSL_LIB_DIR])
	 fi],
	[AC_MSG_RESULT([no])
	 AC_SUBST([OPENSSL_LIB_DIR], []) ] )

# The tspi Makefile will look for trspi/crypto/@CRYPTO_PACKAGE@/crypto.c
# Future crypto packages can go in their own subdir of trspi/crypto
# and a check for them should be made here
AC_CHECK_LIB([crypto], [EVP_DigestUpdate],
		[CRYPTO_PACKAGE='openssl'],
		[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])])
AC_SUBST([CRYPTO_PACKAGE])
AC_SUBST(CRYPTOLIB, -lcrypto)

AC_ARG_ENABLE(gcov,
		[AC_HELP_STRING([--enable-gcov], [turn on gcov code coverage flags [default=off]])],
		[CFLAGS="$CFLAGS -ftest-coverage -fprofile-arcs"
		 AC_MSG_RESULT([*** Enabling gcov at user request ***])],)

# profiling support
AC_ARG_ENABLE(gprof,
		[AC_HELP_STRING([--enable-gprof], [enable profiling with gprof [default=off]])],
		[CFLAGS="$CFLAGS -pg"
		 AC_MSG_RESULT([*** Enabling profiling at user request ***])],)

SPEC_COMP=0
# strict spec compliance
AC_ARG_ENABLE(strict-spec-compliance,
		[AC_HELP_STRING([--enable-strict-spec-compliance], [build TrouSerS as strictly spec compliant [default=off]])],
		[CFLAGS="$CFLAGS -DTSS_SPEC_COMPLIANCE"
		 SPEC_COMP=1
		 AC_MSG_RESULT([*** Enabling spec compliance at user request ***])],)

# daa math lib: gmp or openssl (default openssl)
MATH_DEFINE=BI_OPENSSL
AC_ARG_WITH([gmp],
	    AC_HELP_STRING([--with-gmp], [build TrouSerS with the GMP math lib (used in DAA)]),
		[AC_CHECK_LIB(gmp, [__gmp_rand], [], [])
		AC_CHECK_HEADERS([gmp.h])
	    MATH_DEFINE=BI_GMP
		AC_MSG_RESULT([*** Enabling GMP lib at user request ***]) ]
)

case "$MATH_DEFINE" in
BI_OPENSSL)
	AC_CHECK_HEADERS([ openssl/bn.h openssl/engine.h])
	;;
esac
CFLAGS="$CFLAGS -D$MATH_DEFINE"

GUI=openssl
AC_ARG_WITH(gui,
	    [AC_HELP_STRING([--with-gui], [type of gui popup (gtk/none) [default=gtk]])],
	    [GUI=$withval],
	    [])

if test "x$GUI" = "xgtk"; then
	# section imported from Glade compile
	pkg_modules="gtk+-2.0 >= 2.0.0"
	PKG_CHECK_MODULES(GTK,
		[$pkg_modules],
		AM_CONDITIONAL(HAVE_GTK, true),
		[AM_CONDITIONAL(HAVE_GTK, false)
		AC_MSG_ERROR([Please install the gtk2-devel package for your distro or select another gui option.]) ])
	AM_CONDITIONAL(OPENSSL_UI, false)
	AC_SUBST(GTK_CFLAGS)
	AC_SUBST(GTK_LIBS)
elif test "x$GUI" = "xopenssl"; then
	# We know we have OpenSSL
	AM_CONDITIONAL(OPENSSL_UI, true)
	AM_CONDITIONAL(HAVE_GTK, false)
elif test "x$GUI" = "xnone"; then
	if test $SPEC_COMP -eq 1; then
		AC_MSG_ERROR([Popups must be enabled in strict spec compliance mode])
	fi
	AC_MSG_RESULT([*** Disabling GUI popups at user request ***])
	AC_MSG_RESULT([*** WARNING: This may break apps! ***])
	CFLAGS="$CFLAGS -DTSS_NO_GUI"
	AM_CONDITIONAL(HAVE_GTK, false)
	AM_CONDITIONAL(OPENSSL_UI, false)
else
	AC_MSG_ERROR(["gtk", "openssl" and "none" are the only supported gui options for trousers])
fi

#
# The default port that the TCS daemon listens on
#
AC_SUBST(TCSD_DEFAULT_PORT, 30003)
#
# The RPC mechanism to build into both libtspi and the tcsd
#
# AC_SUBST(RPC, "soap")
AC_SUBST(RPC, "tcstp")

#
# API= The TSS API level to build by default.
#
# To build a 1.1 TSS, set API=1.1 (./configure --with-api=1.1)
# To build a 1.2 TSS, set API=1.2 (./configure --with-api=1.2)
#
# In order to build a custom TSS API, set API to the lowest API level that
# contains the APIs you need. For instance, if you need only APIs that are
# a subset of the TSS 1.1 API, set this to 1.1. If you need any of the 1.2
# APIs, you'll need to set this to 1.2. Send mail to trousers-tech@lists.sf.net
# if you have questions.
#
API=1.2
AC_ARG_WITH(api,
	    [AC_HELP_STRING([--with-api], [Version of the TSS API to build [default=1.2]])],
	    [API=$withval],
	    [])

if test "x$API" != "x1.1" && test "x$API" != "x1.2"; then
	AC_MSG_ERROR(["1.1" and "1.2" are the only supported API versions for trousers.
		      Custom API build options are available by editing 'configure.in'.])
fi

if test "x$API" = "x1.1" || test "x$API" = "x1.2"; then
	# Tspi_Hash_GetHashValue,SetHashValue,UpdateHashValue
	AM_CONDITIONAL(TSS_BUILD_HASH, true)
	# Tspi_{Get|Set}Attribdata,{Get|Set}AttribUint32
	AM_CONDITIONAL(TSS_BUILD_GETSET, true)
	# Tspi_TPM_GetRandom,StirRandom
	AM_CONDITIONAL(TSS_BUILD_RANDOM, true)
	# Tspi_GetCapability (for TSP and TCS capabilities)
	AM_CONDITIONAL(TSS_BUILD_CAPS, true)
	# Tspi_TPM_GetCapability (for TPM chip capabilities)
	AM_CONDITIONAL(TSS_BUILD_CAPS_TPM, true)
	# Tspi_GetPolicyObject, Tspi_Policy_SetSecret,FlushSecret,AssignToObject
	AM_CONDITIONAL(TSS_BUILD_POLICY, true)
	# Tspi_TPM_DirWrite,DirRead
	AM_CONDITIONAL(TSS_BUILD_DIR, true)
	# Tspi_TPM_GetEvent,GetEvents,GetEventLog
	AM_CONDITIONAL(TSS_BUILD_PCR_EVENTS, true)
	# Tspi_Hash_Sign,VerifySignature
	AM_CONDITIONAL(TSS_BUILD_SIGN, true)
	# Tspi_TPM_Quote
	AM_CONDITIONAL(TSS_BUILD_QUOTE, true)
	# Tspi_PcrComposite_{Set|Get}PcrValue,SelectPcrIndex
	AM_CONDITIONAL(TSS_BUILD_PCR_COMP, true)
	# Tspi_Data_Seal,Unseal
	AM_CONDITIONAL(TSS_BUILD_SEAL, true)
	# Tspi_ChangeAuth,ChangeAuthAsym
	AM_CONDITIONAL(TSS_BUILD_CHANGEAUTH, true)
	# Tspi_Data_Bind,Unbind
	AM_CONDITIONAL(TSS_BUILD_BIND, true)
	# Tspi_TPM_TakeOwnership,ClearOwner (REQ: EK)
	AM_CONDITIONAL(TSS_BUILD_OWN, true)
	# Tspi_TPM_CreateEndorsementKey,GetPubEndorsementKey
	AM_CONDITIONAL(TSS_BUILD_EK, true)
	# Tspi_Context_RegisterKey,UnregisterKey,LoadKeyByUUID,GetKeyByUUID,GetKeyByPublicInfo,
	# GetRegisteredKeysByUUID
	AM_CONDITIONAL(TSS_BUILD_PS, true)
	# Tspi_TPM_{Set|Get}Status
	AM_CONDITIONAL(TSS_BUILD_ADMIN, true)
	# Tspi_TPM_CollateIdentityRequest,ActivateIdentity
	AM_CONDITIONAL(TSS_BUILD_AIK, true)
	# Tspi_Key_CertifyKey
	AM_CONDITIONAL(TSS_BUILD_CERTIFY, true)
	# Tspi_TPM_CreateMaintenanceArchive,KillMaintenanceFeature,LoadMaintenancePubKey,
	# CheckMaintenancePubKey
	AM_CONDITIONAL(TSS_BUILD_MAINT, true)
	# Tspi_TPM_AuthorizeMigrationTicket,Key_CreateMigrationBlob,ConvertMigrationBlob
	AM_CONDITIONAL(TSS_BUILD_MIGRATION, true)
	# Tspi_Context_LoadKeyByBlob,Key_LoadKey,UnloadKey,CreateKey,WrapKey,GetPubKey
	AM_CONDITIONAL(TSS_BUILD_KEY, true)
	# Tspi_TPM_PcrExtend,PcrRead,PcrReset
	AM_CONDITIONAL(TSS_BUILD_PCR_EXTEND, true)
	# Tspi_TPM_SelfTestFull,CertifySelfTest,GetTestResult
	AM_CONDITIONAL(TSS_BUILD_SELFTEST, true)
fi

if test "x$API" = "x1.2"; then
	AM_CONDITIONAL(TSS_BUILD_TSS12, true)
	# Don't build DAA until the API is fixed - KEY
	AM_CONDITIONAL(TSS_BUILD_DAA, false)
	AM_CONDITIONAL(TSS_BUILD_PCR_COMP12, true)
	AM_CONDITIONAL(TSS_BUILD_COUNTER, true)
	AM_CONDITIONAL(TSS_BUILD_TICK, true)
	AM_CONDITIONAL(TSS_BUILD_TRANSPORT, true)
	AM_CONDITIONAL(TSS_BUILD_ASN1, true)
	AM_CONDITIONAL(TSS_BUILD_NV, true)
	AM_CONDITIONAL(TSS_BUILD_AUDIT, true)
	AM_CONDITIONAL(TSS_BUILD_SEALX, true)
	AM_CONDITIONAL(TSS_BUILD_DELEGATION, true)
	AM_CONDITIONAL(TSS_BUILD_QUOTE2,true)
	# CMK depends on MIGRATION
	AM_CONDITIONAL(TSS_BUILD_CMK, true)
else
	AM_CONDITIONAL(TSS_BUILD_TSS12, false)
	AM_CONDITIONAL(TSS_BUILD_DAA, false)
	AM_CONDITIONAL(TSS_BUILD_PCR_COMP12, false)
	AM_CONDITIONAL(TSS_BUILD_COUNTER, false)
	AM_CONDITIONAL(TSS_BUILD_TICK, false)
	AM_CONDITIONAL(TSS_BUILD_TRANSPORT, false)
	AM_CONDITIONAL(TSS_BUILD_ASN1, false)
	AM_CONDITIONAL(TSS_BUILD_NV, false)
	AM_CONDITIONAL(TSS_BUILD_AUDIT, false)
	AM_CONDITIONAL(TSS_BUILD_SEALX, false)
	AM_CONDITIONAL(TSS_BUILD_DELEGATION, false)
	AM_CONDITIONAL(TSS_BUILD_QUOTE2,false)
	AM_CONDITIONAL(TSS_BUILD_CMK, false)
fi

#
# There's no need to edit anything below, these conditionals control the building
# of files that support the files above, which all contain TSS APIs
#
AM_CONDITIONAL(TSS_BUILD_NV_LIST, test -z $TSS_BUILD_NV_TRUE)
AM_CONDITIONAL(TSS_BUILD_NV_SUPPORT, test -z $TSS_BUILD_NV_TRUE)
AM_CONDITIONAL(TSS_BUILD_GET_FLAGS, test -z $TSS_BUILD_ADMIN_TRUE || \
				    test -z $TSS_BUILD_CAPS_TPM_TRUE)
AM_CONDITIONAL(TSS_BUILD_PCRS_LIST, test -z $TSS_BUILD_SEAL_TRUE || \
				    test -z $TSS_BUILD_QUOTE_TRUE || \
				    test -z $TSS_BUILD_PCRS_TRUE || \
				    test -z $TSS_BUILD_PCR_COMP_TRUE || \
				    test -z $TSS_BUILD_SEALX_TRUE)
AM_CONDITIONAL(TSS_BUILD_HASH_LIST, test -z $TSS_BUILD_SIGN_TRUE || test -z $TSS_BUILD_HASH_TRUE)
AM_CONDITIONAL(TSS_BUILD_ENCDATA_LIST, test -z $TSS_BUILD_SEAL_TRUE || \
				       test -z $TSS_BUILD_CHANGEAUTH_TRUE || \
				       test -z $TSS_BUILD_BIND_TRUE || \
				       test -z $TSS_BUILD_SEALX_TRUE)
AM_CONDITIONAL(TSS_BUILD_RSAKEY_LIST, test -z $TSS_BUILD_ADMIN_TRUE || \
				      test -z $TSS_BUILD_EK_TRUE || \
				      test -z $TSS_BUILD_MIGRATION_TRUE || \
				      test -z $TSS_BUILD_MAINT_TRUE || \
				      test -z $TSS_BUILD_CERTIFY_TRUE || \
				      test -z $TSS_BUILD_AIK_TRUE || \
				      test -z $TSS_BUILD_QUOTE_TRUE || \
				      test -z $TSS_BUILD_BIND_TRUE || \
				      test -z $TSS_BUILD_CHANGEAUTH_TRUE || \
				      test -z $TSS_BUILD_OWN_TRUE || \
				      test -z $TSS_BUILD_SIGN_TRUE || \
				      test -z $TSS_BUILD_PS_TRUE || \
				      test -z $TSS_BUILD_SEAL_TRUE || \
				      test -z $TSS_BUILD_DAA_TRUE || \
				      test -z $TSS_BUILD_KEY_TRUE || \
				      test -z $TSS_BUILD_SEALX_TRUE)
AM_CONDITIONAL(TSS_BUILD_AUTH, test -z $TSS_BUILD_HASH_TRUE || \
			       test -z $TSS_BUILD_CAPS_TRUE || \
			       test -z $TSS_BUILD_CAPS_TPM_TRUE || \
			       test -z $TSS_BUILD_POLICY_TRUE || \
			       test -z $TSS_BUILD_DIR_TRUE || \
			       test -z $TSS_BUILD_PCR_EVENTS_TRUE || \
			       test -z $TSS_BUILD_SIGN_TRUE || \
			       test -z $TSS_BUILD_QUOTE_TRUE || \
			       test -z $TSS_BUILD_PCR_COMP_TRUE || \
			       test -z $TSS_BUILD_SEAL_TRUE || \
			       test -z $TSS_BUILD_SEALX_TRUE || \
			       test -z $TSS_BUILD_CHANGEAUTH_TRUE || \
			       test -z $TSS_BUILD_BIND_TRUE || \
			       test -z $TSS_BUILD_OWN_TRUE || \
			       test -z $TSS_BUILD_PS_TRUE || \
			       test -z $TSS_BUILD_ADMIN_TRUE || \
			       test -z $TSS_BUILD_AIK_TRUE || \
			       test -z $TSS_BUILD_EK_TRUE || \
			       test -z $TSS_BUILD_CERTIFY_TRUE || \
			       test -z $TSS_BUILD_MAINT_TRUE || \
			       test -z $TSS_BUILD_MIGRATION_TRUE || \
			       test -z $TSS_BUILD_KEY_TRUE || \
			       test -z $TSS_BUILD_PCR_EXTEND_TRUE || \
			       test -z $TSS_BUILD_SELFTEST_TRUE || \
			       test -z $TSS_BUILD_DAA_TRUE)
AM_CONDITIONAL(TSS_BUILD_ASYM_CRYPTO, test -z $TSS_BUILD_AIK_TRUE || \
				      test -z $TSS_BUILD_CERTIFY_TRUE || \
				      test -z $TSS_BUILD_QUOTE_TRUE || \
				      test -z $TSS_BUILD_EK_TRUE || \
				      test -z $TSS_BUILD_CHANGEAUTH_TRUE || \
				      test -z $TSS_BUILD_BIND_TRUE || \
				      test -z $TSS_BUILD_OWN_TRUE || \
				      test -z $TSS_BUILD_SELFTEST_TRUE || \
				      test -z $TSS_BUILD_SIGN_TRUE || \
				      test -z $TSS_BUILD_KEY_TRUE || \
				      test -z $TSS_BUILD_DAA_TRUE)
AM_CONDITIONAL(TSS_BUILD_SYM_CRYPTO, test -z $TSS_BUILD_AIK_TRUE || \
				     test -z $TSS_BUILD_TRANSPORT_TRUE)

#GETTEXT_PACKAGE=trousers
#AC_SUBST(GETTEXT_PACKAGE)
#AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE")

dnl Add the languages which your application supports here.
#ALL_LINGUAS=""
#AM_GLIB_GNU_GETTEXT

# end Glade section

AC_CHECK_HEADER(pthread.h, [AC_DEFINE(HAVE_PTHREAD_H, 1, [pthread header])])

AC_DISABLE_STATIC
AC_PROG_CC
AC_PROG_LIBTOOL

CFLAGS="$CFLAGS -I../include -W -Wall -Werror -Wno-unused-parameter -Wsign-compare \
	-DTCSD_DEFAULT_PORT=${TCSD_DEFAULT_PORT} -DTSS_VER_MAJOR=${TSS_VER_MAJOR} \
	-DTSS_VER_MINOR=${TSS_VER_MINOR} -DTSS_SPEC_MAJOR=${TSS_SPEC_MAJOR} \
	-DTSS_SPEC_MINOR=${TSS_SPEC_MINOR}"
#CFLAGS="$CFLAGS -I../include -std=c99 -pedantic -W -Wall"
KERNEL_VERSION=`uname -r`
AC_SUBST(CFLAGS)

# When we build the rpms, prefix will be /usr. This'll do some things that make sense,
# like put our sbin stuff in /usr/sbin and our library in /usr/lib. It'll do some other
# things that don't make sense like put our config file in /usr/etc. So, I'll just hack
# it here. If the --prefix option isn't specified during configure, let it all go to
# /usr/local, even /usr/local/etc. :-P
if test x"${prefix}" = x"/usr"; then
	sysconfdir="/etc"
	localstatedir="/var"
	mandir="/usr/share/man"
elif test x"${prefix}" = x"NONE"; then
	localstatedir="/usr/local/var"
fi

AC_OUTPUT(dist/tcsd.conf \
	  dist/fedora/trousers.spec \
	  dist/trousers.spec \
	  Makefile \
	  src/Makefile \
	  src/include/Makefile \
	  src/tcs/Makefile \
	  src/tddl/Makefile \
	  src/tspi/Makefile \
	  src/trspi/Makefile \
	  src/tcsd/Makefile \
	  tools/Makefile \
	  man/man8/tcsd.8 \
	  man/man5/tcsd.conf.5 \
	  dist/Makefile \
	  man/Makefile \
	  man/man3/Makefile \
	  man/man5/Makefile \
	  man/man8/Makefile)

echo "CFLAGS=$CFLAGS"

