blob: ba69b8b7d3b77221253d364c0da54bec8c5c6ccd [file] [log] [blame]
dnl Process this file with autoconf to produce a configure script.
AC_INIT([libsrtp2], [2.0.0-pre], [https://github.com/cisco/libsrtp/issues])
dnl Must come before AC_PROG_CC
if test -z "$CFLAGS"; then
dnl Default value for CFLAGS if not specified.
CFLAGS="-Wall -pedantic -O4 -fexpensive-optimizations -funroll-loops"
fi
dnl Checks for programs.
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
AC_PROG_RANLIB
AC_PROG_CC
AC_PROG_INSTALL
dnl Check the byte order
AC_C_BIGENDIAN
AC_CANONICAL_HOST
dnl check host_cpu type, set defines appropriately
case $host_cpu in
i*86 | x86_64 )
AC_DEFINE(CPU_CISC, 1,
[Define if building for a CISC machine (e.g. Intel).])
AC_DEFINE(HAVE_X86, 1,
[Define to use X86 inlined assembly code]);;
* )
AC_DEFINE(CPU_RISC, 1,
[Define if building for a RISC machine (assume slow byte access).])
;;
esac
dnl Check if we are on a Windows platform.
case $host_os in
*cygwin*|*mingw* )
EXE=.exe
HOST_IS_WINDOWS=yes
;;
* )
EXE=""
;;
esac
AC_SUBST(EXE) # define executable suffix; this is needed for `make clean'
dnl Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS(stdlib.h)
AC_CHECK_HEADERS(unistd.h)
AC_CHECK_HEADERS(byteswap.h)
AC_CHECK_HEADERS(stdint.h)
AC_CHECK_HEADERS(sys/uio.h)
AC_CHECK_HEADERS(inttypes.h)
AC_CHECK_HEADERS(sys/types.h)
AC_CHECK_HEADERS(machine/types.h)
AC_CHECK_HEADERS(sys/int_types.h)
dnl socket() and friends
AC_CHECK_HEADERS(sys/socket.h netinet/in.h arpa/inet.h)
AC_CHECK_HEADERS(windows.h, [AC_CHECK_HEADERS(winsock2.h)])
AC_CHECK_TYPES([int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,uint64_t])
AC_CHECK_SIZEOF(unsigned long)
AC_CHECK_SIZEOF(unsigned long long)
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_C_INLINE
AC_TYPE_SIZE_T
dnl Checks for library functions.
AC_CHECK_FUNCS(socket inet_aton usleep sigaction)
dnl Find socket function if not found yet.
if test "x$ac_cv_func_socket" = "xno"; then
AC_CHECK_LIB(socket, socket)
AC_MSG_CHECKING([for socket in -lwsock32])
SAVELIBS="$LIBS"
LIBS="$LIBS -lwsock32"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <winsock2.h>
]], [[
socket(0, 0, 0);
]])],[ac_cv_func_socket=yes
AC_MSG_RESULT(yes)],[LIBS="$SAVELIBS"
AC_MSG_RESULT(no)])
fi
AC_MSG_CHECKING(whether to compile in debugging)
AC_ARG_ENABLE(debug,
[AS_HELP_STRING([--disable-debug],
[do not compile in dynamic debugging system])],
[], enable_debug=yes)
if test "$enable_debug" = "yes"; then
AC_DEFINE(ENABLE_DEBUGGING, 1,
[Define to compile in dynamic debugging system.])
fi
AC_MSG_RESULT($enable_debug)
AC_MSG_CHECKING(whether to use ISMAcryp code)
AC_ARG_ENABLE(generic-aesicm,
[AS_HELP_STRING([--enable-generic-aesicm],
[compile in changes for ISMAcryp])],
[], enable_generic_aesicm=no)
if test "$enable_generic_aesicm" = "yes"; then
AC_DEFINE(GENERIC_AESICM, 1, [Define this to use ISMAcryp code.])
fi
AC_MSG_RESULT($enable_generic_aesicm)
PKG_PROG_PKG_CONFIG
AC_MSG_CHECKING(whether to leverage OpenSSL crypto)
AC_ARG_ENABLE(openssl,
[AS_HELP_STRING([--enable-openssl],
[compile in OpenSSL crypto engine])],
[], enable_openssl=no)
AC_MSG_RESULT($enable_openssl)
if test "$enable_openssl" = "yes"; then
AC_MSG_CHECKING(for user specified OpenSSL directory)
AC_ARG_WITH(openssl-dir,
[AS_HELP_STRING([--with-openssl-dir], [Location of OpenSSL installation])],
[openssl_dir="$withval"], openssl_dir="")
LDFLAGS="$LDFLAGS -L$openssl_dir/lib $($PKG_CONFIG --libs openssl)";
CFLAGS="$CFLAGS -I$openssl_dir/include $($PKG_CONFIG --cflags openssl)";
AC_CHECK_LIB([dl], [dlopen], [],
[AC_MSG_WARN([can't find libdl])])
AC_CHECK_LIB([z], [inflate], [],
[AC_MSG_WARN([can't find libz])])
AC_CHECK_LIB([crypto], [EVP_EncryptInit], [],
[AC_MSG_FAILURE([can't find openssl >1.0.1 crypto lib])])
AC_CHECK_LIB([crypto], [EVP_aes_128_ctr], [],
[AC_MSG_FAILURE([can't find openssl >1.0.1 crypto lib])])
AC_CHECK_LIB([crypto], [EVP_aes_128_gcm], [],
[AC_MSG_FAILURE([can't find openssl >1.0.1 crypto lib])])
AC_DEFINE(OPENSSL, 1, [Define this to use OpenSSL crypto.])
AES_ICM_OBJS="crypto/cipher/aes_icm_ossl.o crypto/cipher/aes_gcm_ossl.o"
HMAC_OBJS=crypto/hash/hmac_ossl.o
USE_OPENSSL=1
AC_SUBST(USE_OPENSSL)
AC_MSG_CHECKING(whether to leverage OpenSSL KDF algorithm)
AC_ARG_ENABLE(openssl-kdf,
[AS_HELP_STRING([--enable-openssl-kdf], [Use OpenSSL KDF algorithm])],
[], enable_openssl_kdf=no)
AC_MSG_RESULT($enable_openssl_kdf)
if test "$enable_openssl_kdf" = "yes"; then
AC_CHECK_LIB([crypto], [kdf_srtp], [],
[AC_MSG_FAILURE([can't find openssl KDF lib])])
AC_DEFINE(OPENSSL_KDF, 1, [Define this to use OpenSSL KDF for SRTP.])
fi
else
AES_ICM_OBJS="crypto/cipher/aes_icm.o crypto/cipher/aes.o"
HMAC_OBJS="crypto/hash/hmac.o crypto/hash/sha1.o"
fi
AC_SUBST(AES_ICM_OBJS)
AC_SUBST(HMAC_OBJS)
dnl Checking for PCAP
AC_CHECK_LIB([pcap],[pcap_create],
[PCAP=1
LIBS="-lpcap $LIBS"
HAVE_PCAP=1
AC_DEFINE(HAVE_PCAP, 1, [Define to 1 if you have the `pcap' library (-lpcap)])
AC_SUBST(HAVE_PCAP)
])
AC_MSG_CHECKING(whether to use stdout for error reporting)
AC_ARG_ENABLE(stdout,
[AS_HELP_STRING([--enable-stdout], [use stdout for debug/error reporting])],
[], enable_stdout=no)
if test "$enable_stdout" = "yes"; then
AC_DEFINE(ERR_REPORTING_STDOUT, 1, [Define to use logging to stdout.])
fi
AC_MSG_RESULT($enable_stdout)
AC_MSG_CHECKING(whether to use /dev/console for error reporting)
AC_ARG_ENABLE(console,
[AS_HELP_STRING([--enable-console], [use /dev/console for error reporting])],
[], enable_console=no)
if test "$enable_console" = "yes"; then
AC_DEFINE(USE_ERR_REPORTING_FILE, 1, [Write errors to this file])
AC_DEFINE(ERR_REPORTING_FILE, "/dev/console", [Report errors to this file.])
fi
AC_MSG_RESULT($enable_console)
AC_CONFIG_HEADER(crypto/include/config.h:config_in.h)
if test "x$PKG_CONFIG" != "x"; then
HAVE_PKG_CONFIG=1
AC_CONFIG_FILES([libsrtp2.pc])
else
HAVE_PKG_CONFIG=0
fi
AC_SUBST(HAVE_PKG_CONFIG)
AC_CONFIG_FILES([Makefile crypto/Makefile doc/Makefile])
AC_OUTPUT
# This is needed when building outside the source dir.
AS_MKDIR_P(crypto/cipher)
AS_MKDIR_P(crypto/hash)
AS_MKDIR_P(crypto/kernel)
AS_MKDIR_P(crypto/math)
AS_MKDIR_P(crypto/replay)
AS_MKDIR_P(crypto/test)
AS_MKDIR_P(doc)
AS_MKDIR_P(srtp)
AS_MKDIR_P(test)