blob: b91449be406c716086a68fac4de4c956a9aab253 [file] [log] [blame]
Cullen Jennings235513a2005-09-21 22:51:36 +00001dnl Process this file with autoconf to produce a configure script.
Pascal Buhlerfd5b3b22018-05-15 21:27:42 +02002AC_INIT([libsrtp2], [2.3.0-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
Idar Tollefsen0e790752017-01-26 10:59:03 +01005EMPTY_CFLAGS="no"
Idar Tollefsen27d857c2017-01-19 15:28:18 +01006if test "x$CFLAGS" = "x"; then
David McGrewb67061f2005-09-28 14:23:06 +00007 dnl Default value for CFLAGS if not specified.
Idar Tollefsen0e790752017-01-26 10:59:03 +01008 EMPTY_CFLAGS="yes"
David McGrewb67061f2005-09-28 14:23:06 +00009fi
10
Cullen Jennings235513a2005-09-21 22:51:36 +000011dnl Checks for programs.
Idar Tollefsenba304fc2017-05-03 13:09:03 +020012AC_PROG_CC
13AC_PROG_CPP
Guido Vrankenff1b3c92018-01-24 14:37:50 +010014AC_PROG_CXX
Idar Tollefsenba304fc2017-05-03 13:09:03 +020015AC_ARG_VAR(
16 [EXTRA_CFLAGS],
17 [C compiler flags appended to the regular C compiler flags instead of overriding them])
Idar Tollefsen38e50762017-05-03 11:45:15 +020018AM_PROG_AR
Cullen Jennings235513a2005-09-21 22:51:36 +000019AC_PROG_RANLIB
David McGrewb67061f2005-09-28 14:23:06 +000020AC_PROG_INSTALL
Idar Tollefsen0e790752017-01-26 10:59:03 +010021AC_PROG_SED
Cullen Jennings235513a2005-09-21 22:51:36 +000022
Marcus Sundbergfaf84ca2007-05-23 17:24:52 +000023dnl Check the byte order
24AC_C_BIGENDIAN
25
26AC_CANONICAL_HOST
27
28dnl check host_cpu type, set defines appropriately
29case $host_cpu in
Idar Tollefsen5fd11872017-01-19 15:25:12 +010030 i*86 | x86_64 )
Idar Tollefsen5e67d392017-01-20 13:03:52 +010031 AC_DEFINE([CPU_CISC], [1], [Define if building for a CISC machine (e.g. Intel).])
32 AC_DEFINE([HAVE_X86], [1], [Define to use X86 inlined assembly code])
Idar Tollefsen5fd11872017-01-19 15:25:12 +010033 ;;
34 * )
Idar Tollefsen5e67d392017-01-20 13:03:52 +010035 AC_DEFINE([CPU_RISC], [1], [Define if building for a RISC machine (assume slow byte access).])
Idar Tollefsen5fd11872017-01-19 15:25:12 +010036 ;;
37esac
Marcus Sundbergfaf84ca2007-05-23 17:24:52 +000038
39dnl Check if we are on a Windows platform.
40case $host_os in
Idar Tollefsen5fd11872017-01-19 15:25:12 +010041 *cygwin*|*mingw* )
42 EXE=.exe
Idar Tollefsen5fd11872017-01-19 15:25:12 +010043 ;;
44 * )
45 EXE=""
46 ;;
Marcus Sundbergfaf84ca2007-05-23 17:24:52 +000047esac
Idar Tollefsen5e67d392017-01-20 13:03:52 +010048AC_SUBST([EXE]) # define executable suffix; this is needed for `make clean'
Marcus Sundbergfaf84ca2007-05-23 17:24:52 +000049
Idar Tollefsen0e790752017-01-26 10:59:03 +010050dnl Checks for supported compiler flags.
51supported_cflags=""
52if test "$EMPTY_CFLAGS" = "no"; then
53 supported_cflags="$CFLAGS"
54fi
55
56dnl For accurate detection, we need warnings as errors.
57dnl I.e. Clang will issue a warning about unsupported flags.
58dnl For the compilation to fail, those warnings needs to be upgraded to errors.
59dnl This will be removed again once the tests are complete (see below).
60WERROR=""
61for w in -Werror -errwarn; do
62 if test "x$WERROR" = "x"; then
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +020063 AC_MSG_CHECKING([whether ${CC-c} accepts $w])
Idar Tollefsen0e790752017-01-26 10:59:03 +010064 save_cflags="$CFLAGS"
65 AS_IF([test "x$CFLAGS" = "x"], [CFLAGS="$w"], [CFLAGS="$CFLAGS $w"])
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +020066 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])],
Idar Tollefsen0e790752017-01-26 10:59:03 +010067 [WERROR="$w"
68 AC_MSG_RESULT([yes])],
69 [CFLAGS="$save_cflags"
70 AC_MSG_RESULT([no])])
71 fi
72done
73
Idar Tollefsen475af062017-03-29 11:40:43 +020074dnl Note that -fPIC is not explicitly added to LDFLAGS.
75dnl Since the compiler is used as the link driver, CFLAGS will be part of the
76dnl link line as well and the linker will get the flag from there.
77dnl Adding it to LDFLAGS explicitly would duplicate the flag on the link line,
78dnl but otherwise do no harm.
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +020079AC_MSG_CHECKING([whether ${CC-c} accepts -fPIC])
Idar Tollefsen0e790752017-01-26 10:59:03 +010080save_cflags="$CFLAGS"
81AS_IF([test "x$CFLAGS" = "x"], [CFLAGS="-fPIC"], [CFLAGS="$CFLAGS -fPIC"])
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +020082AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])],
Idar Tollefsen0e790752017-01-26 10:59:03 +010083 [AS_IF([test "x$supported_cflags" = "x"], [supported_cflags="-fPIC"], [supported_cflags="$supported_cflags -fPIC"])
Idar Tollefsen0e790752017-01-26 10:59:03 +010084 AC_MSG_RESULT([yes])],
85 [CFLAGS="$save_cflags"
86 AC_MSG_RESULT([no])])
87
88if test "$EMPTY_CFLAGS" = "yes"; then
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +020089 for f in -Wall -pedantic -Wstrict-prototypes; do
90 AC_MSG_CHECKING([whether ${CC-c} accepts $f])
Idar Tollefsen0e790752017-01-26 10:59:03 +010091 save_cflags="$CFLAGS"
92 AS_IF([test "x$CFLAGS" = "x"], [CFLAGS="$f"], [CFLAGS="$CFLAGS $f"])
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +020093 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])],
Idar Tollefsen0e790752017-01-26 10:59:03 +010094 [AS_IF([test "x$supported_cflags" = "x"], [supported_cflags="$f"], [supported_cflags="$supported_cflags $f"])
95 AC_MSG_RESULT([yes])],
96 [CFLAGS="$save_cflags"
97 AC_MSG_RESULT([no])])
98 done
99
100 OOPT=""
101 for f in -O4 -O3; do
102 if test "x$OOPT" = "x"; then
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +0200103 AC_MSG_CHECKING([whether ${CC-c} accepts $f])
Idar Tollefsen0e790752017-01-26 10:59:03 +0100104 save_cflags="$CFLAGS"
105 AS_IF([test "x$CFLAGS" = "x"], [CFLAGS="$f"], [CFLAGS="$CFLAGS $f"])
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +0200106 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])],
Idar Tollefsen0e790752017-01-26 10:59:03 +0100107 [AS_IF([test "x$supported_cflags" = "x"], [supported_cflags="$f"], [supported_cflags="$supported_cflags $f"])
108 OOPT="$f"
109 AC_MSG_RESULT([yes])],
110 [CFLAGS="$save_cflags"
111 AC_MSG_RESULT([no])])
112 fi
113 done
114
115 for f in -fexpensive-optimizations -funroll-loops; do
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +0200116 AC_MSG_CHECKING([whether ${CC-c} accepts $f])
Idar Tollefsen0e790752017-01-26 10:59:03 +0100117 save_cflags="$CFLAGS"
118 AS_IF([test "x$CFLAGS" = "x"], [CFLAGS="$f"], [CFLAGS="$CFLAGS $f"])
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +0200119 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])],
Idar Tollefsen0e790752017-01-26 10:59:03 +0100120 [AS_IF([test "x$supported_cflags" = "x"], [supported_cflags="$f"], [supported_cflags="$supported_cflags $f"])
121 AC_MSG_RESULT([yes])],
122 [CFLAGS="$save_cflags"
123 AC_MSG_RESULT([no])])
124 done
125fi
126
127dnl When turning off warnigns, we're expecting unrecognized command line option errors if they're not
128dnl supported. However, the -Wno-<warning> form isn't consulted unless a warning is triggered.
Idar Tollefsenba304fc2017-05-03 13:09:03 +0200129dnl At least that's the case for GCC. So to check which warnings we can turn off, we need to check
Idar Tollefsen0e790752017-01-26 10:59:03 +0100130dnl if they can be turned on, thereby forcing GCC to take the argument into account right away.
131for f in -Wno-language-extension-token; do
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +0200132 AC_MSG_CHECKING([whether ${CC-c} accepts $f])
Idar Tollefsen0e790752017-01-26 10:59:03 +0100133 save_cflags="$CFLAGS"
134 testf=$(echo "$f" | $SED 's|-Wno-\(.*\)|-W\1|g')
135 AS_IF([test "x$CFLAGS" = "x"], [CFLAGS="$testf"], [CFLAGS="$CFLAGS $testf"])
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +0200136 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])],
Idar Tollefsen0e790752017-01-26 10:59:03 +0100137 [AS_IF([test "x$supported_cflags" = "x"], [supported_cflags="$f"], [supported_cflags="$supported_cflags $f"])
138 AC_MSG_RESULT([yes])],
139 [CFLAGS="$save_cflags"
140 AC_MSG_RESULT([no])])
141done
142
143dnl Remowing -Werror again
144CFLAGS="$supported_cflags"
Cullen Jennings235513a2005-09-21 22:51:36 +0000145
146dnl Checks for header files.
147AC_HEADER_STDC
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100148AC_CHECK_HEADERS(
149 [unistd.h byteswap.h stdint.h sys/uio.h inttypes.h sys/types.h machine/types.h sys/int_types.h],
150 [], [], [AC_INCLUDES_DEFAULT])
Cullen Jennings235513a2005-09-21 22:51:36 +0000151
Marcus Sundberg8046c3a2005-10-02 20:02:05 +0000152dnl socket() and friends
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100153AC_CHECK_HEADERS([sys/socket.h netinet/in.h arpa/inet.h], [], [], [AC_INCLUDES_DEFAULT])
154AC_CHECK_HEADERS(
155 [windows.h],
156 [AC_CHECK_HEADERS([winsock2.h], [], [], [AC_INCLUDES_DEFAULT])],
157 [], [AC_INCLUDES_DEFAULT])
Marcus Sundberg8046c3a2005-10-02 20:02:05 +0000158
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100159AC_CHECK_TYPES([int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, uint64_t])
160AC_CHECK_SIZEOF([unsigned long])
161AC_CHECK_SIZEOF([unsigned long long])
Cullen Jennings235513a2005-09-21 22:51:36 +0000162
163dnl Checks for typedefs, structures, and compiler characteristics.
164AC_C_CONST
165AC_C_INLINE
166AC_TYPE_SIZE_T
167
168dnl Checks for library functions.
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100169AC_CHECK_FUNCS([socket inet_aton usleep sigaction])
David McGrewb67061f2005-09-28 14:23:06 +0000170
Marcus Sundberg8046c3a2005-10-02 20:02:05 +0000171dnl Find socket function if not found yet.
172if test "x$ac_cv_func_socket" = "xno"; then
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100173 AC_CHECK_LIB([socket], [socket])
Marcus Sundberg8046c3a2005-10-02 20:02:05 +0000174 AC_MSG_CHECKING([for socket in -lwsock32])
175 SAVELIBS="$LIBS"
176 LIBS="$LIBS -lwsock32"
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +0200177 AC_LINK_IFELSE(
178 [AC_LANG_SOURCE([
Marcus Sundberg8046c3a2005-10-02 20:02:05 +0000179#include <winsock2.h>
Pascal Bühlerbb6ef8a2017-03-29 07:46:21 +0200180int main(void)
181{
182 int fd = socket(0, 0, 0);
183 if (fd < 0)
184 return -1;
185 else
186 return 0;
187}
188 ])],
189 [ac_cv_func_socket=yes
190 AC_MSG_RESULT([yes])],
191 [LIBS="$SAVELIBS"
192 AC_MSG_RESULT([no])])
Marcus Sundberg8046c3a2005-10-02 20:02:05 +0000193fi
Cullen Jennings235513a2005-09-21 22:51:36 +0000194
Pascal Bühlerb969ed52017-02-10 09:03:54 +0100195AC_MSG_CHECKING([whether to enable debug logging in all modules])
196AC_ARG_ENABLE([debug-logging],
197 [AS_HELP_STRING([--enable-debug-logging], [Enable debug logging in all modules])],
Pascal Bühler88579e62017-01-30 21:05:37 +0100198 [], enable_debug_logging=no)
199if test "$enable_debug_logging" = "yes"; then
Pascal Bühlerb969ed52017-02-10 09:03:54 +0100200 AC_DEFINE([ENABLE_DEBUG_LOGGING], [1], [Define to enabled debug logging for all mudules.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000201fi
Pascal Bühlerb969ed52017-02-10 09:03:54 +0100202AC_MSG_RESULT([$enable_debug_logging])
Cullen Jennings235513a2005-09-21 22:51:36 +0000203
Michael Thomas (malinka)1d4460d2016-06-04 19:59:31 -0400204PKG_PROG_PKG_CONFIG
Idar Tollefsenf9c148d2017-02-09 11:10:04 +0100205AS_IF([test "x$PKG_CONFIG" != "x"], [PKG_CONFIG="$PKG_CONFIG --static"])
Michael Thomas (malinka)1d4460d2016-06-04 19:59:31 -0400206
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100207AC_MSG_CHECKING([whether to leverage OpenSSL crypto])
208AC_ARG_ENABLE([openssl],
209 [AS_HELP_STRING([--enable-openssl], [compile in OpenSSL crypto engine])],
210 [], [enable_openssl=no])
211AC_MSG_RESULT([$enable_openssl])
Richard Barnes12872092018-05-16 16:31:16 -0700212
213AC_MSG_CHECKING([whether to leverage NSS crypto])
214AC_ARG_ENABLE([nss],
215 [AS_HELP_STRING([--enable-nss], [compile in NSS crypto engine])],
216 [], [enable_nss=no])
217AC_MSG_RESULT([$enable_nss])
218
jfigusa14b5a02013-03-29 12:24:12 -0400219if test "$enable_openssl" = "yes"; then
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100220 AC_MSG_CHECKING([for user specified OpenSSL directory])
221 AC_ARG_WITH([openssl-dir],
jfigus038d2cf2015-05-11 14:10:11 -0400222 [AS_HELP_STRING([--with-openssl-dir], [Location of OpenSSL installation])],
Idar Tollefsen333fa842017-01-20 16:44:33 +0100223 [if test "x$PKG_CONFIG" != "x" && test -f $with_openssl_dir/lib/pkgconfig/libcrypto.pc; then
224 if test "x$PKG_CONFIG_PATH" = "x"; then
225 export PKG_CONFIG_PATH="$with_openssl_dir/lib/pkgconfig"
226 else
227 export PKG_CONFIG_PATH="$with_openssl_dir/lib/pkgconfig:$PKG_CONFIG_PATH"
228 fi
229 AC_MSG_RESULT([$with_openssl_dir])
230 elif test -d $with_openssl_dir/lib; then
231 CFLAGS="$CFLAGS -I$with_openssl_dir/include"
232 if test "x$LDFLAGS" = "x"; then
233 LDFLAGS="-L$with_openssl_dir/lib"
234 else
235 LDFLAGS="$LDFLAGS -L$with_openssl_dir/lib"
236 fi
237 AC_MSG_RESULT([$with_openssl_dir])
238 else
239 AC_MSG_RESULT([invalid])
240 AC_MSG_FAILURE([Invalid OpenSSL location: $with_openssl_dir])
241 fi],
242 [AC_MSG_RESULT([no])])
jfigus038d2cf2015-05-11 14:10:11 -0400243
Idar Tollefsen333fa842017-01-20 16:44:33 +0100244 if test "x$PKG_CONFIG" != "x"; then
Pascal Bühler6c949b62017-02-09 14:22:36 +0100245 PKG_CHECK_MODULES([crypto], [libcrypto >= 1.0.1],
Idar Tollefsen333fa842017-01-20 16:44:33 +0100246 [CFLAGS="$CFLAGS $crypto_CFLAGS"
247 LIBS="$crypto_LIBS $LIBS"])
248 else
249 AC_CHECK_LIB([dl], [dlopen], [], [AC_MSG_WARN([can't find libdl])])
250 AC_CHECK_LIB([z], [inflate], [], [AC_MSG_WARN([can't find libz])])
251 fi
Cullen Jenningse1de50f2013-05-22 12:27:28 -0600252
Idar Tollefsen333fa842017-01-20 16:44:33 +0100253 AC_SEARCH_LIBS([EVP_EncryptInit], [crypto],
Pascal Bühler6c949b62017-02-09 14:22:36 +0100254 [], [AC_MSG_FAILURE([can't find openssl >= 1.0.1 crypto lib])])
Idar Tollefsen333fa842017-01-20 16:44:33 +0100255 AC_SEARCH_LIBS([EVP_aes_128_ctr], [crypto],
Pascal Bühler6c949b62017-02-09 14:22:36 +0100256 [], [AC_MSG_FAILURE([can't find openssl >= 1.0.1 crypto lib])])
Idar Tollefsen333fa842017-01-20 16:44:33 +0100257 AC_SEARCH_LIBS([EVP_aes_128_gcm], [crypto],
Pascal Bühler6c949b62017-02-09 14:22:36 +0100258 [], [AC_MSG_FAILURE([can't find openssl >= 1.0.1 crypto lib])])
Idar Tollefsen333fa842017-01-20 16:44:33 +0100259
Richard Barnes3e5efb02018-05-16 19:27:40 -0500260 AC_DEFINE([GCM], [1], [Define this to use AES-GCM.])
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100261 AC_DEFINE([OPENSSL], [1], [Define this to use OpenSSL crypto.])
jfigus7882dd92013-08-02 16:08:23 -0400262 AES_ICM_OBJS="crypto/cipher/aes_icm_ossl.o crypto/cipher/aes_gcm_ossl.o"
jfigus0d3a2682013-04-02 15:42:37 -0400263 HMAC_OBJS=crypto/hash/hmac_ossl.o
Richard Barnes3e5efb02018-05-16 19:27:40 -0500264 AC_SUBST([USE_EXTERNAL_CRYPTO], [1])
jfigus038d2cf2015-05-11 14:10:11 -0400265
Joachim Bauchec465b82018-05-30 12:23:36 +0200266 AC_MSG_CHECKING([if OPENSSL_cleanse is broken])
267 AC_RUN_IFELSE([AC_LANG_PROGRAM([
268 #include <stdio.h>
269 #include <openssl/crypto.h>
270 ], [
271 #define BUFFER_SIZE (16)
272 char buffer[[BUFFER_SIZE]];
273 int i;
274 for (i = 0; i < BUFFER_SIZE; i++) {
275 buffer[[i]] = i & 0xff;
276 }
277 OPENSSL_cleanse(buffer, BUFFER_SIZE);
278 for (i = 0; i < BUFFER_SIZE; i++) {
279 if (buffer[[i]]) {
280 printf("Buffer contents not zero at position %d (is %d)\n", i,
281 buffer[[i]]);
282 return 1;
283 }
284 }
285 ])], [openssl_cleanse_broken=no], [
286 openssl_cleanse_broken=yes
287 AC_DEFINE([OPENSSL_CLEANSE_BROKEN], [1], [Define this if OPENSSL_cleanse is broken.])
288 ])
289 AC_MSG_RESULT([$openssl_cleanse_broken])
jfigus038d2cf2015-05-11 14:10:11 -0400290
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100291 AC_MSG_CHECKING([whether to leverage OpenSSL KDF algorithm])
292 AC_ARG_ENABLE([openssl-kdf],
jfigus038d2cf2015-05-11 14:10:11 -0400293 [AS_HELP_STRING([--enable-openssl-kdf], [Use OpenSSL KDF algorithm])],
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100294 [], [enable_openssl_kdf=no])
295 AC_MSG_RESULT([$enable_openssl_kdf])
jfigus038d2cf2015-05-11 14:10:11 -0400296 if test "$enable_openssl_kdf" = "yes"; then
Idar Tollefsen333fa842017-01-20 16:44:33 +0100297 AC_SEARCH_LIBS([kdf_srtp], [crypto],
298 [], [AC_MSG_FAILURE([can't find openssl KDF lib])])
299 AC_DEFINE([OPENSSL_KDF], [1], [Define this to use OpenSSL KDF for SRTP.])
jfigus038d2cf2015-05-11 14:10:11 -0400300 fi
Richard Barnes12872092018-05-16 16:31:16 -0700301elif test "$enable_nss" = "yes"; then
302 AC_MSG_CHECKING([for user specified NSS directory])
303 AC_ARG_WITH([nss-dir],
304 [AS_HELP_STRING([--with-nss-dir], [Location of NSS installation])],
Pascal Buhlera946b3f2018-08-23 21:41:31 +0200305 [if test "x$PKG_CONFIG" != "x" && test -f $with_nss_dir/lib/pkgconfig/nss.pc; then
306 if test "x$PKG_CONFIG_PATH" = "x"; then
307 export PKG_CONFIG_PATH="$with_nss_dir/lib/pkgconfig"
308 else
309 export PKG_CONFIG_PATH="$with_nss_dir/lib/pkgconfig:$PKG_CONFIG_PATH"
310 fi
311 AC_MSG_RESULT([$with_nss_dir])
312 elif test -d $with_nss_dir/lib; then
313 CFLAGS="$CFLAGS -I$with_nss_dir/include"
314 CFLAGS="$CFLAGS -I$with_nss_dir/../public/nss"
Richard Barnes12872092018-05-16 16:31:16 -0700315 if test "x$LDFLAGS" = "x"; then
316 LDFLAGS="-L$with_nss_dir/lib"
317 else
318 LDFLAGS="$LDFLAGS -L$with_nss_dir/lib"
319 fi
Pascal Buhlera946b3f2018-08-23 21:41:31 +0200320 nss_skip_pkg_config=yes
Richard Barnes12872092018-05-16 16:31:16 -0700321 AC_MSG_RESULT([$with_nss_dir])
322 else
323 AC_MSG_RESULT([invalid])
Richard Barnes93733792018-07-27 15:09:35 -0400324 AC_MSG_FAILURE([Invalid NSS location: $with_nss_dir])
Pascal Buhlera946b3f2018-08-23 21:41:31 +0200325 fi
326 AC_SUBST([CRYPTO_LIBDIR], [$with_nss_dir/lib])],
Richard Barnes12872092018-05-16 16:31:16 -0700327 [AC_MSG_RESULT([no])])
328
Pascal Buhlera946b3f2018-08-23 21:41:31 +0200329 if test "x$PKG_CONFIG" != "x" && test "$nss_skip_pkg_config" != "yes"; then
330 PKG_CHECK_MODULES([nss], [nss],
331 [CFLAGS="$CFLAGS $nss_CFLAGS"
332 LIBS="$nss_LIBS $LIBS"])
333 else
Pascal Buhlera83736e2018-09-06 22:15:09 +0200334 AC_CHECK_HEADERS(
335 [nss.h],
336 [], [AC_MSG_FAILURE([can't find useable NSS headers])],
337 [AC_INCLUDES_DEFAULT])
338 AC_CHECK_LIB(
339 [nspr4], [PR_GetError],
340 [], [AC_MSG_WARN([can't find libnspr4])])
341 AC_CHECK_LIB(
342 [nss3], [NSS_NoDB_Init],
343 [], [AC_MSG_FAILURE([can't find useable libnss3])])
Pascal Buhlera946b3f2018-08-23 21:41:31 +0200344 fi
345
Richard Barnes3e5efb02018-05-16 19:27:40 -0500346 AC_DEFINE([GCM], [1], [Define this to use AES-GCM.])
Richard Barnes12872092018-05-16 16:31:16 -0700347 AC_DEFINE([NSS], [1], [Define this to use NSS crypto.])
348 AES_ICM_OBJS="crypto/cipher/aes_icm_nss.o crypto/cipher/aes_gcm_nss.o"
349
350 # TODO(RLB): Use NSS for HMAC
351 HMAC_OBJS="crypto/hash/hmac.o crypto/hash/sha1.o"
352
353 # TODO(RLB): Use NSS for KDF
354
Richard Barnes3e5efb02018-05-16 19:27:40 -0500355 AC_SUBST([USE_EXTERNAL_CRYPTO], [1])
jfigusa14b5a02013-03-29 12:24:12 -0400356else
jfigusa3127b82014-11-19 14:46:52 -0500357 AES_ICM_OBJS="crypto/cipher/aes_icm.o crypto/cipher/aes.o"
jfigus0d3a2682013-04-02 15:42:37 -0400358 HMAC_OBJS="crypto/hash/hmac.o crypto/hash/sha1.o"
jfigusa14b5a02013-03-29 12:24:12 -0400359fi
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100360AC_SUBST([AES_ICM_OBJS])
361AC_SUBST([HMAC_OBJS])
jfigusa14b5a02013-03-29 12:24:12 -0400362
Bernardo Torres79e38ae2014-10-10 05:29:36 -0300363dnl Checking for PCAP
Martin90f7e1b2017-11-02 17:03:18 +0100364
Martin Meszaros96d0b9a2017-11-01 12:31:37 +0100365PCAP_LIB=""
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100366AC_CHECK_LIB([pcap], [pcap_create],
Martin Meszaros96d0b9a2017-11-01 12:31:37 +0100367 [PCAP_LIB="-lpcap"
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100368 AC_DEFINE([HAVE_PCAP], [1], [Define to 1 if you have the `pcap' library (-lpcap)])
369 AC_SUBST([HAVE_PCAP], [1])])
Martin Meszaros3edfada2017-11-01 10:55:33 +0100370
371AC_CHECK_LIB([wpcap], [pcap_create],
Martin Meszaros96d0b9a2017-11-01 12:31:37 +0100372 [PCAP_LIB="-lwpcap"
Martin Meszaros3edfada2017-11-01 10:55:33 +0100373 AC_DEFINE([HAVE_PCAP], [1], [Define to 1 if you have the `winpcap' library (-lwpcap)])
374 AC_SUBST([HAVE_PCAP], [1])])
Martin Meszaros96d0b9a2017-11-01 12:31:37 +0100375AC_SUBST([PCAP_LIB])
376
Pascal Bühlerb969ed52017-02-10 09:03:54 +0100377AC_MSG_CHECKING([whether to redirect logging to stdout])
378AC_ARG_ENABLE([log-stdout],
Pascal Bühler88579e62017-01-30 21:05:37 +0100379 [AS_HELP_STRING([--enable-log-stdout], [redirecting logging to stdout])],
Pascal Bühlerb969ed52017-02-10 09:03:54 +0100380 [], [enable_log_stdout=no])
Pascal Bühler88579e62017-01-30 21:05:37 +0100381if test "$enable_log_stdout" = "yes"; then
Pascal Bühlerb969ed52017-02-10 09:03:54 +0100382 AC_DEFINE([ERR_REPORTING_STDOUT], [1], [Define to redirect logging to stdout.])
Cullen Jennings235513a2005-09-21 22:51:36 +0000383fi
Pascal Bühlerb969ed52017-02-10 09:03:54 +0100384AC_MSG_RESULT([$enable_log_stdout])
Cullen Jennings235513a2005-09-21 22:51:36 +0000385
Pascal Bühlerb969ed52017-02-10 09:03:54 +0100386AC_MSG_CHECKING([wheather to use a file for logging])
387AC_ARG_WITH([log-file],
Pascal Bühler88579e62017-01-30 21:05:37 +0100388 [AS_HELP_STRING([--with-log-file], [Use file for logging])],
389 [AS_CASE([x$with_log_file],
390 [x], [valid_with_log_file="no"],
391 [xyes], [valid_with_log_file="no"],
392 [valid_with_error_file="yes"])
393 AS_IF([test "$valid_with_log_file" = "no"],
394 [AC_MSG_RESULT([invalid])
395 AC_MSG_FAILURE([Invalid value for --with-log-file: "$with_log_file"])],
396 [AC_DEFINE_UNQUOTED([ERR_REPORTING_FILE], ["$with_log_file"], [Logging statments will be writen to this file.])
397 AC_MSG_RESULT([using log file: "$with_log_file"])])],
398 [AC_MSG_RESULT([no])])
399
400AS_IF(
401 [test "$enable_log_stdout" = "yes" && test "x$with_log_file" != "x"],
402 [AC_MSG_FAILURE([Can only use one of --enable-log-stdout and --with-log-file; they are mutually exclusive])])
Cullen Jennings235513a2005-09-21 22:51:36 +0000403
Idar Tollefsenba304fc2017-05-03 13:09:03 +0200404dnl Appending EXTRA_CFLAGS, if given
405AC_MSG_CHECKING([for extra C compiler flags])
406AS_IF([test "x$EXTRA_CFLAGS" != "x"],
407 [AS_IF([test "x$CFLAGS" = "x"],
408 [CFLAGS="$EXTRA_CFLAGS"], [CFLAGS="$CFLAGS $EXTRA_CFLAGS"])
409 AC_MSG_RESULT([$EXTRA_CFLAGS])],
410 [AC_MSG_RESULT(no)])
411
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100412AC_CONFIG_HEADER([crypto/include/config.h:config_in.h])
Cullen Jennings235513a2005-09-21 22:51:36 +0000413
Guido Vrankenff1b3c92018-01-24 14:37:50 +0100414AC_CONFIG_FILES([Makefile crypto/Makefile doc/Makefile fuzzer/Makefile libsrtp2.pc])
Saúl Ibarra Corretgéb86063c2014-10-01 11:23:24 +0200415AC_OUTPUT
Marcus Sundberg4ce29b22005-09-29 14:29:53 +0000416
417# This is needed when building outside the source dir.
Idar Tollefsen5e67d392017-01-20 13:03:52 +0100418AS_MKDIR_P([crypto/cipher])
419AS_MKDIR_P([crypto/hash])
420AS_MKDIR_P([crypto/kernel])
421AS_MKDIR_P([crypto/math])
422AS_MKDIR_P([crypto/replay])
423AS_MKDIR_P([crypto/test])
424AS_MKDIR_P([doc])
425AS_MKDIR_P([srtp])
426AS_MKDIR_P([test])