blob: 36cecdf7c26fcb1acc9a8ef89e67b2d219115a2c [file] [log] [blame]
Cullen Jennings235513a2005-09-21 22:51:36 +00001dnl Process this file with autoconf to produce a configure script.
2AC_INIT(srtp)
3
David McGrewb67061f2005-09-28 14:23:06 +00004dnl Must come before AC_PROG_CC
5if test -z "$CFLAGS"; then
6 dnl Default value for CFLAGS if not specified.
7 CFLAGS="-Wall -O4 -fexpensive-optimizations -funroll-loops"
8fi
9
Cullen Jennings235513a2005-09-21 22:51:36 +000010dnl Checks for programs.
11AC_PROG_RANLIB
12AC_PROG_CC
David McGrewb67061f2005-09-28 14:23:06 +000013AC_PROG_INSTALL
Cullen Jennings235513a2005-09-21 22:51:36 +000014
Marcus Sundbergfaf84ca2007-05-23 17:24:52 +000015dnl Check the byte order
16AC_C_BIGENDIAN
17
18AC_CANONICAL_HOST
19
20dnl check host_cpu type, set defines appropriately
21case $host_cpu in
Jonathan Lennoxc7528162012-04-26 23:17:21 +000022 i*86 | x86_64 )
Marcus Sundbergfaf84ca2007-05-23 17:24:52 +000023 AC_DEFINE(CPU_CISC, 1,
24 [Define if building for a CISC machine (e.g. Intel).])
25 AC_DEFINE(HAVE_X86, 1,
26 [Define to use X86 inlined assembly code]);;
27 * )
28 # CPU_RISC is only supported for big endian machines.
29 if test "$ac_cv_c_bigendian" = "yes"; then
30 AC_DEFINE(CPU_RISC, 1,
31 [Define if building for a RISC machine (assume slow byte access).])
32 else
33 AC_DEFINE(CPU_CISC, 1)
34 fi
35 ;;
36esac
37
38dnl Check if we are on a Windows platform.
39case $host_os in
40 *cygwin*|*mingw* )
41 EXE=.exe
42 HOST_IS_WINDOWS=yes
43 ;;
44 * )
45 EXE=""
46 ;;
47esac
48AC_SUBST(EXE) # define executable suffix; this is needed for `make clean'
49
Cullen Jennings235513a2005-09-21 22:51:36 +000050
Marcus Sundberg7b81b062005-10-03 15:15:08 +000051AC_ARG_ENABLE(kernel-linux,
52 [AS_HELP_STRING([--enable-kernel-linux],
53 [build library to run in Linux kernel context])],
54 [], enable_kernel_linux=no)
55AC_MSG_CHECKING(whether to build for Linux kernel context)
56if test "$enable_kernel_linux" = "yes"; then
57 AC_DEFINE(SRTP_KERNEL, 1,
58 [Define to compile for kernel contexts.])
59 AC_DEFINE(SRTP_KERNEL_LINUX, 1,
60 [Define to compile for Linux kernel context.])
61fi
62AC_MSG_RESULT($enable_kernel_linux)
63
Marcus Sundbergfaf84ca2007-05-23 17:24:52 +000064if test "$cross_compiling" != yes -a "$HOST_IS_WINDOWS" != yes; then
Marcus Sundberg8046c3a2005-10-02 20:02:05 +000065 dnl Check for /dev/urandom
66 AC_CHECK_FILE(/dev/urandom, DEV_URANDOM=/dev/urandom,
67 [AC_CHECK_FILE(/dev/random, DEV_URANDOM=/dev/random)])
68fi
David McGrewb67061f2005-09-28 14:23:06 +000069
Cullen Jennings235513a2005-09-21 22:51:36 +000070
71
72dnl Checks for header files.
73AC_HEADER_STDC
74AC_CHECK_HEADERS(stdlib.h)
75AC_CHECK_HEADERS(unistd.h)
Marcus Sundberg8046c3a2005-10-02 20:02:05 +000076AC_CHECK_HEADERS(byteswap.h)
Cullen Jennings235513a2005-09-21 22:51:36 +000077AC_CHECK_HEADERS(stdint.h)
78AC_CHECK_HEADERS(sys/uio.h)
Randell Jesupaa851352005-09-28 22:36:05 +000079AC_CHECK_HEADERS(inttypes.h)
Marcus Sundberg8046c3a2005-10-02 20:02:05 +000080AC_CHECK_HEADERS(sys/types.h)
Cullen Jennings235513a2005-09-21 22:51:36 +000081AC_CHECK_HEADERS(machine/types.h)
82AC_CHECK_HEADERS(sys/int_types.h)
83
Marcus Sundberg8046c3a2005-10-02 20:02:05 +000084dnl socket() and friends
85AC_CHECK_HEADERS(sys/socket.h netinet/in.h arpa/inet.h)
86AC_CHECK_HEADERS(windows.h, [AC_CHECK_HEADERS(winsock2.h)])
87
Cullen Jennings235513a2005-09-21 22:51:36 +000088AC_CHECK_HEADERS(syslog.h)
89
Randell Jesupaa851352005-09-28 22:36:05 +000090AC_CHECK_TYPES([int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,uint64_t])
Marcus Sundberg8046c3a2005-10-02 20:02:05 +000091AC_CHECK_SIZEOF(unsigned long)
92AC_CHECK_SIZEOF(unsigned long long)
Cullen Jennings235513a2005-09-21 22:51:36 +000093
94dnl Checks for typedefs, structures, and compiler characteristics.
95AC_C_CONST
96AC_C_INLINE
97AC_TYPE_SIZE_T
98
99dnl Checks for library functions.
Jonathan Lennox3f7fc222010-05-17 19:32:02 +0000100AC_CHECK_FUNCS(socket inet_aton usleep sigaction)
David McGrewb67061f2005-09-28 14:23:06 +0000101
Marcus Sundberg8046c3a2005-10-02 20:02:05 +0000102dnl Find socket function if not found yet.
103if test "x$ac_cv_func_socket" = "xno"; then
104 AC_CHECK_LIB(socket, socket)
105 AC_MSG_CHECKING([for socket in -lwsock32])
106 SAVELIBS="$LIBS"
107 LIBS="$LIBS -lwsock32"
108 AC_TRY_LINK([
109#include <winsock2.h>
110],[
111socket(0, 0, 0);
112],
113 ac_cv_func_socket=yes
114 AC_MSG_RESULT(yes),
115 LIBS="$SAVELIBS"
116 AC_MSG_RESULT(no))
117fi
Cullen Jennings235513a2005-09-21 22:51:36 +0000118
David McGrewb67061f2005-09-28 14:23:06 +0000119AC_MSG_CHECKING(whether to compile in debugging)
120AC_ARG_ENABLE(debug,
121 [AS_HELP_STRING([--disable-debug],
122 [do not compile in dynamic debugging system])],
123 [], enable_debug=yes)
124if test "$enable_debug" = "yes"; then
125 AC_DEFINE(ENABLE_DEBUGGING, 1,
126 [Define to compile in dynamic debugging system.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000127fi
David McGrewb67061f2005-09-28 14:23:06 +0000128AC_MSG_RESULT($enable_debug)
Cullen Jennings235513a2005-09-21 22:51:36 +0000129
David McGrewb67061f2005-09-28 14:23:06 +0000130AC_MSG_CHECKING(whether to use ISMAcryp code)
131AC_ARG_ENABLE(generic-aesicm,
132 [AS_HELP_STRING([--enable-generic-aesicm],
133 [compile in changes for ISMAcryp])],
134 [], enable_generic_aesicm=no)
135if test "$enable_generic_aesicm" = "yes"; then
136 AC_DEFINE(GENERIC_AESICM, 1, [Define this to use ISMAcryp code.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000137fi
David McGrewb67061f2005-09-28 14:23:06 +0000138AC_MSG_RESULT($enable_generic_aesicm)
Cullen Jennings235513a2005-09-21 22:51:36 +0000139
jfigusa14b5a02013-03-29 12:24:12 -0400140AC_MSG_CHECKING(whether to leverage OpenSSL crypto)
141AC_ARG_ENABLE(openssl,
142 [AS_HELP_STRING([--enable-openssl],
143 [compile in OpenSSL crypto engine])],
144 [], enable_openssl=no)
145if test "$enable_openssl" = "yes"; then
146 AC_CHECK_LIB([crypto], [EVP_EncryptInit], [],
jfigus5b22e372013-05-09 09:23:26 -0400147 [AC_MSG_FAILURE([can't find openssl >1.0.1 crypto lib])])
148 AC_CHECK_LIB([crypto], [EVP_aes_128_ctr], [],
149 [AC_MSG_FAILURE([can't find openssl >1.0.1 crypto lib])])
jfigusa14b5a02013-03-29 12:24:12 -0400150 AC_DEFINE(OPENSSL, 1, [Define this to use OpenSSL crypto.])
jfigus0d3a2682013-04-02 15:42:37 -0400151 AES_ICM_OBJS=crypto/cipher/aes_icm_ossl.o
jfigusa14b5a02013-03-29 12:24:12 -0400152 RNG_OBJS=rand_source_ossl.o
jfigus0d3a2682013-04-02 15:42:37 -0400153 HMAC_OBJS=crypto/hash/hmac_ossl.o
154 USE_OPENSSL=1
155 AC_SUBST(USE_OPENSSL)
jfigusa14b5a02013-03-29 12:24:12 -0400156else
jfigus0d3a2682013-04-02 15:42:37 -0400157 AES_ICM_OBJS="crypto/cipher/aes_icm.o crypto/cipher/aes.o crypto/cipher/aes_cbc.o"
jfigusa14b5a02013-03-29 12:24:12 -0400158 AC_MSG_CHECKING(which random device to use)
159 if test "$enable_kernel_linux" = "yes"; then
160 RNG_OBJS=rand_linux_kernel.o
161 AC_MSG_RESULT([Linux kernel builtin])
162 else
163 RNG_OBJS=rand_source.o
164 if test -n "$DEV_URANDOM"; then
165 AC_DEFINE_UNQUOTED(DEV_URANDOM, "$DEV_URANDOM",[Path to random device])
166 AC_MSG_RESULT([$DEV_URANDOM])
167 else
168 AC_MSG_RESULT([standard rand() function...])
169 fi
170 fi
171 RNG_EXTRA_OBJS="crypto/rng/prng.o crypto/rng/ctr_prng.o"
jfigus0d3a2682013-04-02 15:42:37 -0400172 HMAC_OBJS="crypto/hash/hmac.o crypto/hash/sha1.o"
jfigusa14b5a02013-03-29 12:24:12 -0400173fi
jfigus0d3a2682013-04-02 15:42:37 -0400174AC_SUBST(AES_ICM_OBJS)
jfigusa14b5a02013-03-29 12:24:12 -0400175AC_SUBST(RNG_OBJS)
176AC_SUBST(RNG_EXTRA_OBJS)
jfigus0d3a2682013-04-02 15:42:37 -0400177AC_SUBST(HMAC_OBJS)
jfigusa14b5a02013-03-29 12:24:12 -0400178AC_MSG_RESULT($enable_openssl)
179
David McGrewb67061f2005-09-28 14:23:06 +0000180AC_MSG_CHECKING(whether to use syslog for error reporting)
181AC_ARG_ENABLE(syslog,
182 [AS_HELP_STRING([--enable-syslog], [use syslog for error reporting])],
183 [], enable_syslog=no)
184if test "$enable_syslog" = "yes"; then
185 AC_DEFINE(USE_SYSLOG, 1, [Define to use syslog logging.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000186fi
David McGrewb67061f2005-09-28 14:23:06 +0000187AC_MSG_RESULT($enable_syslog)
Cullen Jennings235513a2005-09-21 22:51:36 +0000188
David McGrewb67061f2005-09-28 14:23:06 +0000189AC_MSG_CHECKING(whether to use stdout for error reporting)
190AC_ARG_ENABLE(stdout,
191 [AS_HELP_STRING([--disable-stdout], [don't use stdout for error reporting])],
192 [], enable_stdout=yes)
193if test "$enable_stdout" = "yes"; then
194 AC_DEFINE(ERR_REPORTING_STDOUT, 1, [Define to use logging to stdout.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000195fi
David McGrewb67061f2005-09-28 14:23:06 +0000196AC_MSG_RESULT($enable_stdout)
Cullen Jennings235513a2005-09-21 22:51:36 +0000197
David McGrewb67061f2005-09-28 14:23:06 +0000198AC_MSG_CHECKING(whether to use /dev/console for error reporting)
199AC_ARG_ENABLE(console,
200 [AS_HELP_STRING([--enable-console], [use /dev/console for error reporting])],
201 [], enable_console=no)
202if test "$enable_console" = "yes"; then
203 AC_DEFINE(USE_ERR_REPORTING_FILE, 1, [Write errors to this file])
204 AC_DEFINE(ERR_REPORTING_FILE, "/dev/console", [Report errors to this file.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000205fi
David McGrewb67061f2005-09-28 14:23:06 +0000206AC_MSG_RESULT($enable_console)
Cullen Jennings235513a2005-09-21 22:51:36 +0000207
David McGrewb67061f2005-09-28 14:23:06 +0000208AC_MSG_CHECKING(whether to use GDOI key management)
209AC_ARG_ENABLE(gdoi,
210 [AS_HELP_STRING([--enable-gdoi], [enable GDOI key management])],
211 [], enable_gdoi=no)
212if test "$enable_gdoi" = "yes"; then
213 AC_DEFINE(SRTP_GDOI, 1, [Define to use GDOI.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000214 GDOI_OBJS=gdoi/srtp+gdoi.o
215 AC_SUBST(GDOI_OBJS)
216fi
David McGrewb67061f2005-09-28 14:23:06 +0000217AC_MSG_RESULT($enable_gdoi)
Cullen Jennings235513a2005-09-21 22:51:36 +0000218
David McGrewfec49dd2005-09-23 19:34:11 +0000219AC_CONFIG_HEADER(crypto/include/config.h:config_in.h)
Cullen Jennings235513a2005-09-21 22:51:36 +0000220
Marcus Sundbergefe12732005-09-29 13:29:21 +0000221AC_OUTPUT(Makefile crypto/Makefile doc/Makefile)
Marcus Sundberg4ce29b22005-09-29 14:29:53 +0000222
223# This is needed when building outside the source dir.
224AS_MKDIR_P(crypto/ae_xfm)
225AS_MKDIR_P(crypto/cipher)
226AS_MKDIR_P(crypto/hash)
227AS_MKDIR_P(crypto/kernel)
228AS_MKDIR_P(crypto/math)
229AS_MKDIR_P(crypto/replay)
230AS_MKDIR_P(crypto/rng)
231AS_MKDIR_P(crypto/test)
232AS_MKDIR_P(doc)
233AS_MKDIR_P(srtp)
234AS_MKDIR_P(tables)
235AS_MKDIR_P(test)