##################
#                #
#    Version     #
#                #
##################

# Program version

define([SOFTHSM_VERSION_MAJOR], [2])
define([SOFTHSM_VERSION_MINOR], [4])
define([SOFTHSM_VERSION_FIX], [0])
define([PACKAGE_SUFFIX], [])

# Library version

# Code changed:                      SOFTHSM_VERSION_REVISION++
# Interface added/removed/changed:   SOFTHSM_VERSION_CURRENT++, SOFTHSM_VERSION_REVISION=0
# Interface added:                   SOFTHSM_VERSION_AGE++
# Interface removed:                 SOFTHSM_VERSION_AGE=0

define([SOFTHSM_VERSION_CURRENT], [2])
define([SOFTHSM_VERSION_AGE], [1])
define([SOFTHSM_VERSION_REVISION], [4])

##################
#                #
# Configure code #
#                #
##################

# Init
AC_PREREQ(2.61)
AC_INIT([SoftHSM],[SOFTHSM_VERSION_MAJOR.SOFTHSM_VERSION_MINOR.SOFTHSM_VERSION_FIX[]PACKAGE_SUFFIX])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_SRCDIR([src/Makefile.am])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign subdir-objects])
ACX_PREFIXHACK

# Version info for the library
VERSION_INFO="SOFTHSM_VERSION_CURRENT:SOFTHSM_VERSION_REVISION:SOFTHSM_VERSION_AGE"
AC_SUBST(VERSION_INFO)

# Checks for compilers
AC_PROG_CC
AC_PROG_CXX

# Compiler flags
ACX_PEDANTIC
ACX_STRICT
ACX_64BIT
AX_CXX_COMPILE_STDCXX_11([noext],[optional])

# Check for libraries (-ldl can be required by OpenSSL too)
ACX_DLOPEN

# Check for headers
AC_CHECK_HEADERS([pthread.h])

# What crypto backend to use and if we want to have support GOST
ACX_CRYPTO_BACKEND

# Non-paged memory for secure storage
ACX_NON_PAGED_MEMORY

# If the user want to have the migration tool
# Requires SQLite3
AC_ARG_WITH(migrate,
	AC_HELP_STRING([--with-migrate],
		[Build the migration tool. Requires SQLite3.]
	),
	[build_migrate="${withval}"],
	[build_migrate="no"]
)
AC_MSG_CHECKING(if building with softhsm2-migrate)
if test "x${build_migrate}" = "xyes"; then
	AC_MSG_RESULT(yes)
	ACX_YIELD
else
	AC_MSG_RESULT(no)
fi
AM_CONDITIONAL([BUILD_MIGRATE], [test "x${build_migrate}" = "xyes"])

# If the user wants to have the database storage backend
AC_ARG_WITH([objectstore-backend-db],
	AC_HELP_STRING([--with-objectstore-backend-db],
		[Build with object store backend database (SQLite3).]
	),
	[build_objectstore_backend_db="${withval}"],
	[build_objectstore_backend_db="no"]
)
AC_MSG_CHECKING(if building database object store backend)
if test "x${build_objectstore_backend_db}" = "xyes"; then
	AC_MSG_RESULT(yes)
	AC_DEFINE_UNQUOTED(
		[HAVE_OBJECTSTORE_BACKEND_DB],
		[1],
		[Build with object store database backend.]
	)
else
	AC_MSG_RESULT(no)
fi
AM_CONDITIONAL([BUILD_OBJECTSTORE_BACKEND_DB], [test "x${build_objectstore_backend_db}" = "xyes"])

# Require SQLite3 if either building --with-migrate or --with-objectstore-backend-db
AC_MSG_CHECKING(if SQLite3 required)
if test "x${build_migrate}" = "xyes" -o "x${build_objectstore_backend_db}" = "xyes"; then
	AC_MSG_RESULT(yes)
	ACX_SQLITE3
else
	AC_MSG_RESULT(no)
fi

# Set visibility flags so only PKCS#11 entry points are exported
ACX_VISIBILITY

# If we should install the p11-kit module
ACX_P11KIT

# cppunit settings
ACX_CPPUNIT

# Set full directory paths
full_sysconfdir=`eval eval eval eval eval echo "${sysconfdir}" | sed "s#NONE#${prefix}#" | sed "s#NONE#${ac_default_prefix}#"`
full_localstatedir=`eval eval eval eval eval echo "${localstatedir}" | sed "s#NONE#${prefix}#" | sed "s#NONE#${ac_default_prefix}#"`
full_libdir=`eval eval eval eval eval echo "${libdir}" | sed "s#NONE#${prefix}#" | sed "s#NONE#${ac_default_prefix}#"`
default_softhsm2_conf="`eval echo ${full_sysconfdir} | sed s,NONE,$ac_default_prefix,g`/softhsm2.conf"
softhsmtokendir=${full_localstatedir}/lib/softhsm/tokens/

# Install the library in a sub-directory
full_libdir="$full_libdir/softhsm"
libdir=$full_libdir
default_softhsm2_lib="$full_libdir/libsofthsm2.so"

# For getConfigPath()
AC_CHECK_FUNCS([getpwuid_r])

# Define some variables for the code
AC_DEFINE_UNQUOTED(
	[VERSION_MAJOR],
	[SOFTHSM_VERSION_MAJOR],
	[SoftHSM major version number via PKCS#11]
)
AC_DEFINE_UNQUOTED(
	[VERSION_MINOR],
	[SOFTHSM_VERSION_MINOR],
	[SoftHSM minor version number via PKCS#11]
)
AC_DEFINE_UNQUOTED(
	[MAX_PIN_LEN],
	[255],
	[Maximum PIN length]
)
AC_DEFINE_UNQUOTED(
	[MIN_PIN_LEN],
	[4],
	[Minimum PIN length]
)
AC_DEFINE_UNQUOTED(
	[DEFAULT_SOFTHSM2_CONF],
	["$default_softhsm2_conf"],
	[The default location of softhsm2.conf]
)
AC_DEFINE_UNQUOTED(
	[DEFAULT_TOKENDIR],
	["$softhsmtokendir"],
	[The default location of the token directory]
)
AC_DEFINE_UNQUOTED(
	[DEFAULT_OBJECTSTORE_BACKEND],
	["file"],
	[Default storage backend for token objects]
)
AC_DEFINE_UNQUOTED(
	[DEFAULT_LOG_LEVEL],
	["INFO"],
	[The default log level]
)
AC_DEFINE_UNQUOTED(
	[DEFAULT_PKCS11_LIB],
	["$default_softhsm2_lib"],
	[The default PKCS#11 library]
)

AC_SUBST([softhsmtokendir])
AC_SUBST([default_softhsm2_conf])
AC_SUBST([default_softhsm2_lib])

# Generate the libtool script and install script
AC_PROG_INSTALL
AC_PROG_LIBTOOL

# Generate the makefiles
AC_CONFIG_FILES([
	Makefile
	softhsm2.module
	src/Makefile
	src/lib/Makefile
	src/lib/common/Makefile
	src/lib/common/softhsm2.conf
	src/lib/common/softhsm2.conf.5
	src/lib/crypto/Makefile
	src/lib/crypto/test/Makefile
	src/lib/data_mgr/Makefile
	src/lib/data_mgr/test/Makefile
	src/lib/object_store/Makefile
	src/lib/object_store/test/Makefile
	src/lib/session_mgr/Makefile
	src/lib/session_mgr/test/Makefile
	src/lib/slot_mgr/Makefile
	src/lib/slot_mgr/test/Makefile
	src/lib/handle_mgr/Makefile
	src/lib/handle_mgr/test/Makefile
	src/lib/HwInfra/Makefile
	src/lib/test/Makefile
	src/lib/test/softhsm2.conf
	src/lib/test/softhsm2-alt.conf
	src/lib/test/tokens/dummy
	src/bin/Makefile
	src/bin/common/Makefile
	src/bin/dump/Makefile
	src/bin/migrate/Makefile
	src/bin/util/Makefile
])

AC_OUTPUT
