blob: 444528c9298578c7a1a33d9e80a5eeb4535cfbf3 [file] [log] [blame]
Cullen Jennings235513a2005-09-21 22:51:36 +00001dnl Process this file with autoconf to produce a configure script.
jfigus3d1eba72015-02-19 08:40:47 -05002AC_INIT([libsrtp], [1.5.2-pre], [https://github.com/cisco/libsrtp/issues])
Cullen Jennings235513a2005-09-21 22:51:36 +00003
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.
Kristian Kielhofnerb90f1ba2013-11-07 13:35:46 -08007 CFLAGS="-fPIC -Wall -O4 -fexpensive-optimizations -funroll-loops"
David McGrewb67061f2005-09-28 14:23:06 +00008fi
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 * )
Marcus Sundbergfaf84ca2007-05-23 17:24:52 +000028 AC_DEFINE(CPU_RISC, 1,
29 [Define if building for a RISC machine (assume slow byte access).])
Marcus Sundbergfaf84ca2007-05-23 17:24:52 +000030 ;;
31esac
32
33dnl Check if we are on a Windows platform.
34case $host_os in
35 *cygwin*|*mingw* )
36 EXE=.exe
37 HOST_IS_WINDOWS=yes
38 ;;
39 * )
40 EXE=""
41 ;;
42esac
43AC_SUBST(EXE) # define executable suffix; this is needed for `make clean'
44
Cullen Jennings235513a2005-09-21 22:51:36 +000045
Marcus Sundberg7b81b062005-10-03 15:15:08 +000046AC_ARG_ENABLE(kernel-linux,
47 [AS_HELP_STRING([--enable-kernel-linux],
48 [build library to run in Linux kernel context])],
49 [], enable_kernel_linux=no)
50AC_MSG_CHECKING(whether to build for Linux kernel context)
51if test "$enable_kernel_linux" = "yes"; then
52 AC_DEFINE(SRTP_KERNEL, 1,
53 [Define to compile for kernel contexts.])
54 AC_DEFINE(SRTP_KERNEL_LINUX, 1,
55 [Define to compile for Linux kernel context.])
56fi
57AC_MSG_RESULT($enable_kernel_linux)
58
Marcus Sundbergfaf84ca2007-05-23 17:24:52 +000059if test "$cross_compiling" != yes -a "$HOST_IS_WINDOWS" != yes; then
Marcus Sundberg8046c3a2005-10-02 20:02:05 +000060 dnl Check for /dev/urandom
61 AC_CHECK_FILE(/dev/urandom, DEV_URANDOM=/dev/urandom,
62 [AC_CHECK_FILE(/dev/random, DEV_URANDOM=/dev/random)])
63fi
David McGrewb67061f2005-09-28 14:23:06 +000064
Cullen Jennings235513a2005-09-21 22:51:36 +000065
66
67dnl Checks for header files.
68AC_HEADER_STDC
69AC_CHECK_HEADERS(stdlib.h)
70AC_CHECK_HEADERS(unistd.h)
Marcus Sundberg8046c3a2005-10-02 20:02:05 +000071AC_CHECK_HEADERS(byteswap.h)
Cullen Jennings235513a2005-09-21 22:51:36 +000072AC_CHECK_HEADERS(stdint.h)
73AC_CHECK_HEADERS(sys/uio.h)
Randell Jesupaa851352005-09-28 22:36:05 +000074AC_CHECK_HEADERS(inttypes.h)
Marcus Sundberg8046c3a2005-10-02 20:02:05 +000075AC_CHECK_HEADERS(sys/types.h)
Cullen Jennings235513a2005-09-21 22:51:36 +000076AC_CHECK_HEADERS(machine/types.h)
77AC_CHECK_HEADERS(sys/int_types.h)
78
Marcus Sundberg8046c3a2005-10-02 20:02:05 +000079dnl socket() and friends
80AC_CHECK_HEADERS(sys/socket.h netinet/in.h arpa/inet.h)
81AC_CHECK_HEADERS(windows.h, [AC_CHECK_HEADERS(winsock2.h)])
82
Cullen Jennings235513a2005-09-21 22:51:36 +000083AC_CHECK_HEADERS(syslog.h)
84
Randell Jesupaa851352005-09-28 22:36:05 +000085AC_CHECK_TYPES([int8_t,uint8_t,int16_t,uint16_t,int32_t,uint32_t,uint64_t])
Marcus Sundberg8046c3a2005-10-02 20:02:05 +000086AC_CHECK_SIZEOF(unsigned long)
87AC_CHECK_SIZEOF(unsigned long long)
Cullen Jennings235513a2005-09-21 22:51:36 +000088
89dnl Checks for typedefs, structures, and compiler characteristics.
90AC_C_CONST
91AC_C_INLINE
92AC_TYPE_SIZE_T
93
94dnl Checks for library functions.
Jonathan Lennox3f7fc222010-05-17 19:32:02 +000095AC_CHECK_FUNCS(socket inet_aton usleep sigaction)
David McGrewb67061f2005-09-28 14:23:06 +000096
Marcus Sundberg8046c3a2005-10-02 20:02:05 +000097dnl Find socket function if not found yet.
98if test "x$ac_cv_func_socket" = "xno"; then
99 AC_CHECK_LIB(socket, socket)
100 AC_MSG_CHECKING([for socket in -lwsock32])
101 SAVELIBS="$LIBS"
102 LIBS="$LIBS -lwsock32"
103 AC_TRY_LINK([
104#include <winsock2.h>
105],[
106socket(0, 0, 0);
107],
108 ac_cv_func_socket=yes
109 AC_MSG_RESULT(yes),
110 LIBS="$SAVELIBS"
111 AC_MSG_RESULT(no))
112fi
Cullen Jennings235513a2005-09-21 22:51:36 +0000113
David McGrewb67061f2005-09-28 14:23:06 +0000114AC_MSG_CHECKING(whether to compile in debugging)
115AC_ARG_ENABLE(debug,
116 [AS_HELP_STRING([--disable-debug],
117 [do not compile in dynamic debugging system])],
118 [], enable_debug=yes)
119if test "$enable_debug" = "yes"; then
120 AC_DEFINE(ENABLE_DEBUGGING, 1,
121 [Define to compile in dynamic debugging system.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000122fi
David McGrewb67061f2005-09-28 14:23:06 +0000123AC_MSG_RESULT($enable_debug)
Cullen Jennings235513a2005-09-21 22:51:36 +0000124
David McGrewb67061f2005-09-28 14:23:06 +0000125AC_MSG_CHECKING(whether to use ISMAcryp code)
126AC_ARG_ENABLE(generic-aesicm,
127 [AS_HELP_STRING([--enable-generic-aesicm],
128 [compile in changes for ISMAcryp])],
129 [], enable_generic_aesicm=no)
130if test "$enable_generic_aesicm" = "yes"; then
131 AC_DEFINE(GENERIC_AESICM, 1, [Define this to use ISMAcryp code.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000132fi
David McGrewb67061f2005-09-28 14:23:06 +0000133AC_MSG_RESULT($enable_generic_aesicm)
Cullen Jennings235513a2005-09-21 22:51:36 +0000134
jfigusa14b5a02013-03-29 12:24:12 -0400135AC_MSG_CHECKING(whether to leverage OpenSSL crypto)
136AC_ARG_ENABLE(openssl,
137 [AS_HELP_STRING([--enable-openssl],
138 [compile in OpenSSL crypto engine])],
139 [], enable_openssl=no)
jfigus2b486652014-07-24 15:01:41 -0400140AC_MSG_RESULT($enable_openssl)
jfigusa14b5a02013-03-29 12:24:12 -0400141if test "$enable_openssl" = "yes"; then
Kristian Kielhofnerb90f1ba2013-11-07 13:35:46 -0800142 LDFLAGS="$LDFLAGS $(pkg-config --libs openssl)";
143 CFLAGS="$CFLAGS $(pkg-config --cflags openssl)";
Cullen Jenningse1de50f2013-05-22 12:27:28 -0600144
jfigusb5fad5f2015-02-26 12:25:08 -0500145 AC_CHECK_LIB([dl], [dlopen], [],
146 [AC_MSG_FAILURE([can't find libdl])])
147 AC_CHECK_LIB([z], [inflate], [],
148 [AC_MSG_FAILURE([can't find libz])])
jfigusa14b5a02013-03-29 12:24:12 -0400149 AC_CHECK_LIB([crypto], [EVP_EncryptInit], [],
jfigus5b22e372013-05-09 09:23:26 -0400150 [AC_MSG_FAILURE([can't find openssl >1.0.1 crypto lib])])
151 AC_CHECK_LIB([crypto], [EVP_aes_128_ctr], [],
152 [AC_MSG_FAILURE([can't find openssl >1.0.1 crypto lib])])
jfigus7882dd92013-08-02 16:08:23 -0400153 AC_CHECK_LIB([crypto], [EVP_aes_128_gcm], [],
154 [AC_MSG_FAILURE([can't find openssl >1.0.1 crypto lib])])
jfigusa14b5a02013-03-29 12:24:12 -0400155 AC_DEFINE(OPENSSL, 1, [Define this to use OpenSSL crypto.])
jfigus7882dd92013-08-02 16:08:23 -0400156 AES_ICM_OBJS="crypto/cipher/aes_icm_ossl.o crypto/cipher/aes_gcm_ossl.o"
jfigusa14b5a02013-03-29 12:24:12 -0400157 RNG_OBJS=rand_source_ossl.o
jfigus0d3a2682013-04-02 15:42:37 -0400158 HMAC_OBJS=crypto/hash/hmac_ossl.o
159 USE_OPENSSL=1
160 AC_SUBST(USE_OPENSSL)
jfigusa14b5a02013-03-29 12:24:12 -0400161else
jfigus0d3a2682013-04-02 15:42:37 -0400162 AES_ICM_OBJS="crypto/cipher/aes_icm.o crypto/cipher/aes.o crypto/cipher/aes_cbc.o"
jfigusa14b5a02013-03-29 12:24:12 -0400163 AC_MSG_CHECKING(which random device to use)
164 if test "$enable_kernel_linux" = "yes"; then
165 RNG_OBJS=rand_linux_kernel.o
166 AC_MSG_RESULT([Linux kernel builtin])
167 else
168 RNG_OBJS=rand_source.o
169 if test -n "$DEV_URANDOM"; then
170 AC_DEFINE_UNQUOTED(DEV_URANDOM, "$DEV_URANDOM",[Path to random device])
171 AC_MSG_RESULT([$DEV_URANDOM])
172 else
173 AC_MSG_RESULT([standard rand() function...])
174 fi
175 fi
176 RNG_EXTRA_OBJS="crypto/rng/prng.o crypto/rng/ctr_prng.o"
jfigus0d3a2682013-04-02 15:42:37 -0400177 HMAC_OBJS="crypto/hash/hmac.o crypto/hash/sha1.o"
jfigusa14b5a02013-03-29 12:24:12 -0400178fi
jfigus0d3a2682013-04-02 15:42:37 -0400179AC_SUBST(AES_ICM_OBJS)
jfigusa14b5a02013-03-29 12:24:12 -0400180AC_SUBST(RNG_OBJS)
181AC_SUBST(RNG_EXTRA_OBJS)
jfigus0d3a2682013-04-02 15:42:37 -0400182AC_SUBST(HMAC_OBJS)
jfigusa14b5a02013-03-29 12:24:12 -0400183
Bernardo Torres79e38ae2014-10-10 05:29:36 -0300184dnl Checking for PCAP
Bernardo Torresb3c51422014-10-14 12:40:09 -0300185AC_CHECK_LIB([pcap],[pcap_create],
186 [PCAP=1
187 LIBS="-lpcap $LIBS"
188 HAVE_PCAP=1
189 AC_DEFINE(HAVE_PCAP, 1, [Define to 1 if you have the `pcap' library (-lpcap)])
190 AC_SUBST(HAVE_PCAP)
191])
Bernardo Torres79e38ae2014-10-10 05:29:36 -0300192
David McGrewb67061f2005-09-28 14:23:06 +0000193AC_MSG_CHECKING(whether to use syslog for error reporting)
194AC_ARG_ENABLE(syslog,
195 [AS_HELP_STRING([--enable-syslog], [use syslog for error reporting])],
196 [], enable_syslog=no)
197if test "$enable_syslog" = "yes"; then
198 AC_DEFINE(USE_SYSLOG, 1, [Define to use syslog logging.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000199fi
David McGrewb67061f2005-09-28 14:23:06 +0000200AC_MSG_RESULT($enable_syslog)
Cullen Jennings235513a2005-09-21 22:51:36 +0000201
David McGrewb67061f2005-09-28 14:23:06 +0000202AC_MSG_CHECKING(whether to use stdout for error reporting)
203AC_ARG_ENABLE(stdout,
204 [AS_HELP_STRING([--disable-stdout], [don't use stdout for error reporting])],
205 [], enable_stdout=yes)
206if test "$enable_stdout" = "yes"; then
207 AC_DEFINE(ERR_REPORTING_STDOUT, 1, [Define to use logging to stdout.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000208fi
David McGrewb67061f2005-09-28 14:23:06 +0000209AC_MSG_RESULT($enable_stdout)
Cullen Jennings235513a2005-09-21 22:51:36 +0000210
David McGrewb67061f2005-09-28 14:23:06 +0000211AC_MSG_CHECKING(whether to use /dev/console for error reporting)
212AC_ARG_ENABLE(console,
213 [AS_HELP_STRING([--enable-console], [use /dev/console for error reporting])],
214 [], enable_console=no)
215if test "$enable_console" = "yes"; then
216 AC_DEFINE(USE_ERR_REPORTING_FILE, 1, [Write errors to this file])
217 AC_DEFINE(ERR_REPORTING_FILE, "/dev/console", [Report errors to this file.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000218fi
David McGrewb67061f2005-09-28 14:23:06 +0000219AC_MSG_RESULT($enable_console)
Cullen Jennings235513a2005-09-21 22:51:36 +0000220
David McGrewb67061f2005-09-28 14:23:06 +0000221AC_MSG_CHECKING(whether to use GDOI key management)
222AC_ARG_ENABLE(gdoi,
223 [AS_HELP_STRING([--enable-gdoi], [enable GDOI key management])],
224 [], enable_gdoi=no)
225if test "$enable_gdoi" = "yes"; then
226 AC_DEFINE(SRTP_GDOI, 1, [Define to use GDOI.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000227 GDOI_OBJS=gdoi/srtp+gdoi.o
228 AC_SUBST(GDOI_OBJS)
229fi
David McGrewb67061f2005-09-28 14:23:06 +0000230AC_MSG_RESULT($enable_gdoi)
Cullen Jennings235513a2005-09-21 22:51:36 +0000231
David McGrewfec49dd2005-09-23 19:34:11 +0000232AC_CONFIG_HEADER(crypto/include/config.h:config_in.h)
Cullen Jennings235513a2005-09-21 22:51:36 +0000233
Saúl Ibarra Corretgéb86063c2014-10-01 11:23:24 +0200234AC_CHECK_PROG(PKG_CONFIG, pkg-config, yes)
235if test "x$PKG_CONFIG" != "x"; then
236 HAVE_PKG_CONFIG=1
237 AC_CONFIG_FILES([libsrtp.pc])
238else
239 HAVE_PKG_CONFIG=0
240fi
241AC_SUBST(HAVE_PKG_CONFIG)
242AC_CONFIG_FILES([Makefile crypto/Makefile doc/Makefile])
243AC_OUTPUT
Marcus Sundberg4ce29b22005-09-29 14:29:53 +0000244
245# This is needed when building outside the source dir.
246AS_MKDIR_P(crypto/ae_xfm)
247AS_MKDIR_P(crypto/cipher)
248AS_MKDIR_P(crypto/hash)
249AS_MKDIR_P(crypto/kernel)
250AS_MKDIR_P(crypto/math)
251AS_MKDIR_P(crypto/replay)
252AS_MKDIR_P(crypto/rng)
253AS_MKDIR_P(crypto/test)
254AS_MKDIR_P(doc)
255AS_MKDIR_P(srtp)
256AS_MKDIR_P(tables)
257AS_MKDIR_P(test)