Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 1 | dnl Process this file with autoconf to produce a configure script. |
Pascal Buhler | fd5b3b2 | 2018-05-15 21:27:42 +0200 | [diff] [blame] | 2 | AC_INIT([libsrtp2], [2.3.0-pre], [https://github.com/cisco/libsrtp/issues]) |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 3 | |
David McGrew | b67061f | 2005-09-28 14:23:06 +0000 | [diff] [blame] | 4 | dnl Must come before AC_PROG_CC |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 5 | EMPTY_CFLAGS="no" |
Idar Tollefsen | 27d857c | 2017-01-19 15:28:18 +0100 | [diff] [blame] | 6 | if test "x$CFLAGS" = "x"; then |
David McGrew | b67061f | 2005-09-28 14:23:06 +0000 | [diff] [blame] | 7 | dnl Default value for CFLAGS if not specified. |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 8 | EMPTY_CFLAGS="yes" |
David McGrew | b67061f | 2005-09-28 14:23:06 +0000 | [diff] [blame] | 9 | fi |
| 10 | |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 11 | dnl Checks for programs. |
Idar Tollefsen | ba304fc | 2017-05-03 13:09:03 +0200 | [diff] [blame] | 12 | AC_PROG_CC |
| 13 | AC_PROG_CPP |
Guido Vranken | ff1b3c9 | 2018-01-24 14:37:50 +0100 | [diff] [blame] | 14 | AC_PROG_CXX |
Idar Tollefsen | ba304fc | 2017-05-03 13:09:03 +0200 | [diff] [blame] | 15 | AC_ARG_VAR( |
| 16 | [EXTRA_CFLAGS], |
| 17 | [C compiler flags appended to the regular C compiler flags instead of overriding them]) |
Idar Tollefsen | 38e5076 | 2017-05-03 11:45:15 +0200 | [diff] [blame] | 18 | AM_PROG_AR |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 19 | AC_PROG_RANLIB |
David McGrew | b67061f | 2005-09-28 14:23:06 +0000 | [diff] [blame] | 20 | AC_PROG_INSTALL |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 21 | AC_PROG_SED |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 22 | |
Marcus Sundberg | faf84ca | 2007-05-23 17:24:52 +0000 | [diff] [blame] | 23 | dnl Check the byte order |
| 24 | AC_C_BIGENDIAN |
| 25 | |
| 26 | AC_CANONICAL_HOST |
| 27 | |
| 28 | dnl check host_cpu type, set defines appropriately |
| 29 | case $host_cpu in |
Idar Tollefsen | 5fd1187 | 2017-01-19 15:25:12 +0100 | [diff] [blame] | 30 | i*86 | x86_64 ) |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 31 | 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 Tollefsen | 5fd1187 | 2017-01-19 15:25:12 +0100 | [diff] [blame] | 33 | ;; |
| 34 | * ) |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 35 | AC_DEFINE([CPU_RISC], [1], [Define if building for a RISC machine (assume slow byte access).]) |
Idar Tollefsen | 5fd1187 | 2017-01-19 15:25:12 +0100 | [diff] [blame] | 36 | ;; |
| 37 | esac |
Marcus Sundberg | faf84ca | 2007-05-23 17:24:52 +0000 | [diff] [blame] | 38 | |
| 39 | dnl Check if we are on a Windows platform. |
| 40 | case $host_os in |
Idar Tollefsen | 5fd1187 | 2017-01-19 15:25:12 +0100 | [diff] [blame] | 41 | *cygwin*|*mingw* ) |
| 42 | EXE=.exe |
Idar Tollefsen | 5fd1187 | 2017-01-19 15:25:12 +0100 | [diff] [blame] | 43 | ;; |
| 44 | * ) |
| 45 | EXE="" |
| 46 | ;; |
Marcus Sundberg | faf84ca | 2007-05-23 17:24:52 +0000 | [diff] [blame] | 47 | esac |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 48 | AC_SUBST([EXE]) # define executable suffix; this is needed for `make clean' |
Marcus Sundberg | faf84ca | 2007-05-23 17:24:52 +0000 | [diff] [blame] | 49 | |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 50 | dnl Checks for supported compiler flags. |
| 51 | supported_cflags="" |
| 52 | if test "$EMPTY_CFLAGS" = "no"; then |
| 53 | supported_cflags="$CFLAGS" |
| 54 | fi |
| 55 | |
| 56 | dnl For accurate detection, we need warnings as errors. |
| 57 | dnl I.e. Clang will issue a warning about unsupported flags. |
| 58 | dnl For the compilation to fail, those warnings needs to be upgraded to errors. |
| 59 | dnl This will be removed again once the tests are complete (see below). |
| 60 | WERROR="" |
| 61 | for w in -Werror -errwarn; do |
| 62 | if test "x$WERROR" = "x"; then |
Pascal Bühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 63 | AC_MSG_CHECKING([whether ${CC-c} accepts $w]) |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 64 | save_cflags="$CFLAGS" |
| 65 | AS_IF([test "x$CFLAGS" = "x"], [CFLAGS="$w"], [CFLAGS="$CFLAGS $w"]) |
Pascal Bühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 66 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])], |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 67 | [WERROR="$w" |
| 68 | AC_MSG_RESULT([yes])], |
| 69 | [CFLAGS="$save_cflags" |
| 70 | AC_MSG_RESULT([no])]) |
| 71 | fi |
| 72 | done |
| 73 | |
Idar Tollefsen | 475af06 | 2017-03-29 11:40:43 +0200 | [diff] [blame] | 74 | dnl Note that -fPIC is not explicitly added to LDFLAGS. |
| 75 | dnl Since the compiler is used as the link driver, CFLAGS will be part of the |
| 76 | dnl link line as well and the linker will get the flag from there. |
| 77 | dnl Adding it to LDFLAGS explicitly would duplicate the flag on the link line, |
| 78 | dnl but otherwise do no harm. |
Pascal Bühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 79 | AC_MSG_CHECKING([whether ${CC-c} accepts -fPIC]) |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 80 | save_cflags="$CFLAGS" |
| 81 | AS_IF([test "x$CFLAGS" = "x"], [CFLAGS="-fPIC"], [CFLAGS="$CFLAGS -fPIC"]) |
Pascal Bühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 82 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])], |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 83 | [AS_IF([test "x$supported_cflags" = "x"], [supported_cflags="-fPIC"], [supported_cflags="$supported_cflags -fPIC"]) |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 84 | AC_MSG_RESULT([yes])], |
| 85 | [CFLAGS="$save_cflags" |
| 86 | AC_MSG_RESULT([no])]) |
| 87 | |
| 88 | if test "$EMPTY_CFLAGS" = "yes"; then |
Pascal Bühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 89 | for f in -Wall -pedantic -Wstrict-prototypes; do |
| 90 | AC_MSG_CHECKING([whether ${CC-c} accepts $f]) |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 91 | save_cflags="$CFLAGS" |
| 92 | AS_IF([test "x$CFLAGS" = "x"], [CFLAGS="$f"], [CFLAGS="$CFLAGS $f"]) |
Pascal Bühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 93 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])], |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 94 | [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ühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 103 | AC_MSG_CHECKING([whether ${CC-c} accepts $f]) |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 104 | save_cflags="$CFLAGS" |
| 105 | AS_IF([test "x$CFLAGS" = "x"], [CFLAGS="$f"], [CFLAGS="$CFLAGS $f"]) |
Pascal Bühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 106 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])], |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 107 | [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ühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 116 | AC_MSG_CHECKING([whether ${CC-c} accepts $f]) |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 117 | save_cflags="$CFLAGS" |
| 118 | AS_IF([test "x$CFLAGS" = "x"], [CFLAGS="$f"], [CFLAGS="$CFLAGS $f"]) |
Pascal Bühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 119 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])], |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 120 | [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 |
| 125 | fi |
| 126 | |
| 127 | dnl When turning off warnigns, we're expecting unrecognized command line option errors if they're not |
| 128 | dnl supported. However, the -Wno-<warning> form isn't consulted unless a warning is triggered. |
Idar Tollefsen | ba304fc | 2017-05-03 13:09:03 +0200 | [diff] [blame] | 129 | dnl At least that's the case for GCC. So to check which warnings we can turn off, we need to check |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 130 | dnl if they can be turned on, thereby forcing GCC to take the argument into account right away. |
| 131 | for f in -Wno-language-extension-token; do |
Pascal Bühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 132 | AC_MSG_CHECKING([whether ${CC-c} accepts $f]) |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 133 | 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ühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 136 | AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main(void) { return 0; }])], |
Idar Tollefsen | 0e79075 | 2017-01-26 10:59:03 +0100 | [diff] [blame] | 137 | [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])]) |
| 141 | done |
| 142 | |
| 143 | dnl Remowing -Werror again |
| 144 | CFLAGS="$supported_cflags" |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 145 | |
| 146 | dnl Checks for header files. |
| 147 | AC_HEADER_STDC |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 148 | AC_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 Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 151 | |
Marcus Sundberg | 8046c3a | 2005-10-02 20:02:05 +0000 | [diff] [blame] | 152 | dnl socket() and friends |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 153 | AC_CHECK_HEADERS([sys/socket.h netinet/in.h arpa/inet.h], [], [], [AC_INCLUDES_DEFAULT]) |
| 154 | AC_CHECK_HEADERS( |
| 155 | [windows.h], |
| 156 | [AC_CHECK_HEADERS([winsock2.h], [], [], [AC_INCLUDES_DEFAULT])], |
| 157 | [], [AC_INCLUDES_DEFAULT]) |
Marcus Sundberg | 8046c3a | 2005-10-02 20:02:05 +0000 | [diff] [blame] | 158 | |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 159 | AC_CHECK_TYPES([int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, uint64_t]) |
| 160 | AC_CHECK_SIZEOF([unsigned long]) |
| 161 | AC_CHECK_SIZEOF([unsigned long long]) |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 162 | |
| 163 | dnl Checks for typedefs, structures, and compiler characteristics. |
| 164 | AC_C_CONST |
| 165 | AC_C_INLINE |
| 166 | AC_TYPE_SIZE_T |
| 167 | |
| 168 | dnl Checks for library functions. |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 169 | AC_CHECK_FUNCS([socket inet_aton usleep sigaction]) |
David McGrew | b67061f | 2005-09-28 14:23:06 +0000 | [diff] [blame] | 170 | |
Marcus Sundberg | 8046c3a | 2005-10-02 20:02:05 +0000 | [diff] [blame] | 171 | dnl Find socket function if not found yet. |
| 172 | if test "x$ac_cv_func_socket" = "xno"; then |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 173 | AC_CHECK_LIB([socket], [socket]) |
Marcus Sundberg | 8046c3a | 2005-10-02 20:02:05 +0000 | [diff] [blame] | 174 | AC_MSG_CHECKING([for socket in -lwsock32]) |
| 175 | SAVELIBS="$LIBS" |
| 176 | LIBS="$LIBS -lwsock32" |
Pascal Bühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 177 | AC_LINK_IFELSE( |
| 178 | [AC_LANG_SOURCE([ |
Marcus Sundberg | 8046c3a | 2005-10-02 20:02:05 +0000 | [diff] [blame] | 179 | #include <winsock2.h> |
Pascal Bühler | bb6ef8a | 2017-03-29 07:46:21 +0200 | [diff] [blame] | 180 | int 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 Sundberg | 8046c3a | 2005-10-02 20:02:05 +0000 | [diff] [blame] | 193 | fi |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 194 | |
Pascal Bühler | b969ed5 | 2017-02-10 09:03:54 +0100 | [diff] [blame] | 195 | AC_MSG_CHECKING([whether to enable debug logging in all modules]) |
| 196 | AC_ARG_ENABLE([debug-logging], |
| 197 | [AS_HELP_STRING([--enable-debug-logging], [Enable debug logging in all modules])], |
Pascal Bühler | 88579e6 | 2017-01-30 21:05:37 +0100 | [diff] [blame] | 198 | [], enable_debug_logging=no) |
| 199 | if test "$enable_debug_logging" = "yes"; then |
Pascal Bühler | b969ed5 | 2017-02-10 09:03:54 +0100 | [diff] [blame] | 200 | AC_DEFINE([ENABLE_DEBUG_LOGGING], [1], [Define to enabled debug logging for all mudules.]) |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 201 | fi |
Pascal Bühler | b969ed5 | 2017-02-10 09:03:54 +0100 | [diff] [blame] | 202 | AC_MSG_RESULT([$enable_debug_logging]) |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 203 | |
Michael Thomas (malinka) | 1d4460d | 2016-06-04 19:59:31 -0400 | [diff] [blame] | 204 | PKG_PROG_PKG_CONFIG |
Idar Tollefsen | f9c148d | 2017-02-09 11:10:04 +0100 | [diff] [blame] | 205 | AS_IF([test "x$PKG_CONFIG" != "x"], [PKG_CONFIG="$PKG_CONFIG --static"]) |
Michael Thomas (malinka) | 1d4460d | 2016-06-04 19:59:31 -0400 | [diff] [blame] | 206 | |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 207 | AC_MSG_CHECKING([whether to leverage OpenSSL crypto]) |
| 208 | AC_ARG_ENABLE([openssl], |
| 209 | [AS_HELP_STRING([--enable-openssl], [compile in OpenSSL crypto engine])], |
| 210 | [], [enable_openssl=no]) |
| 211 | AC_MSG_RESULT([$enable_openssl]) |
Richard Barnes | 1287209 | 2018-05-16 16:31:16 -0700 | [diff] [blame] | 212 | |
| 213 | AC_MSG_CHECKING([whether to leverage NSS crypto]) |
| 214 | AC_ARG_ENABLE([nss], |
| 215 | [AS_HELP_STRING([--enable-nss], [compile in NSS crypto engine])], |
| 216 | [], [enable_nss=no]) |
| 217 | AC_MSG_RESULT([$enable_nss]) |
| 218 | |
jfigus | a14b5a0 | 2013-03-29 12:24:12 -0400 | [diff] [blame] | 219 | if test "$enable_openssl" = "yes"; then |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 220 | AC_MSG_CHECKING([for user specified OpenSSL directory]) |
| 221 | AC_ARG_WITH([openssl-dir], |
jfigus | 038d2cf | 2015-05-11 14:10:11 -0400 | [diff] [blame] | 222 | [AS_HELP_STRING([--with-openssl-dir], [Location of OpenSSL installation])], |
Idar Tollefsen | 333fa84 | 2017-01-20 16:44:33 +0100 | [diff] [blame] | 223 | [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])]) |
jfigus | 038d2cf | 2015-05-11 14:10:11 -0400 | [diff] [blame] | 243 | |
Idar Tollefsen | 333fa84 | 2017-01-20 16:44:33 +0100 | [diff] [blame] | 244 | if test "x$PKG_CONFIG" != "x"; then |
Pascal Bühler | 6c949b6 | 2017-02-09 14:22:36 +0100 | [diff] [blame] | 245 | PKG_CHECK_MODULES([crypto], [libcrypto >= 1.0.1], |
Idar Tollefsen | 333fa84 | 2017-01-20 16:44:33 +0100 | [diff] [blame] | 246 | [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 Jennings | e1de50f | 2013-05-22 12:27:28 -0600 | [diff] [blame] | 252 | |
Idar Tollefsen | 333fa84 | 2017-01-20 16:44:33 +0100 | [diff] [blame] | 253 | AC_SEARCH_LIBS([EVP_EncryptInit], [crypto], |
Pascal Bühler | 6c949b6 | 2017-02-09 14:22:36 +0100 | [diff] [blame] | 254 | [], [AC_MSG_FAILURE([can't find openssl >= 1.0.1 crypto lib])]) |
Idar Tollefsen | 333fa84 | 2017-01-20 16:44:33 +0100 | [diff] [blame] | 255 | AC_SEARCH_LIBS([EVP_aes_128_ctr], [crypto], |
Pascal Bühler | 6c949b6 | 2017-02-09 14:22:36 +0100 | [diff] [blame] | 256 | [], [AC_MSG_FAILURE([can't find openssl >= 1.0.1 crypto lib])]) |
Idar Tollefsen | 333fa84 | 2017-01-20 16:44:33 +0100 | [diff] [blame] | 257 | AC_SEARCH_LIBS([EVP_aes_128_gcm], [crypto], |
Pascal Bühler | 6c949b6 | 2017-02-09 14:22:36 +0100 | [diff] [blame] | 258 | [], [AC_MSG_FAILURE([can't find openssl >= 1.0.1 crypto lib])]) |
Idar Tollefsen | 333fa84 | 2017-01-20 16:44:33 +0100 | [diff] [blame] | 259 | |
Richard Barnes | 3e5efb0 | 2018-05-16 19:27:40 -0500 | [diff] [blame] | 260 | AC_DEFINE([GCM], [1], [Define this to use AES-GCM.]) |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 261 | AC_DEFINE([OPENSSL], [1], [Define this to use OpenSSL crypto.]) |
jfigus | 7882dd9 | 2013-08-02 16:08:23 -0400 | [diff] [blame] | 262 | AES_ICM_OBJS="crypto/cipher/aes_icm_ossl.o crypto/cipher/aes_gcm_ossl.o" |
jfigus | 0d3a268 | 2013-04-02 15:42:37 -0400 | [diff] [blame] | 263 | HMAC_OBJS=crypto/hash/hmac_ossl.o |
Richard Barnes | 3e5efb0 | 2018-05-16 19:27:40 -0500 | [diff] [blame] | 264 | AC_SUBST([USE_EXTERNAL_CRYPTO], [1]) |
jfigus | 038d2cf | 2015-05-11 14:10:11 -0400 | [diff] [blame] | 265 | |
Joachim Bauch | ec465b8 | 2018-05-30 12:23:36 +0200 | [diff] [blame] | 266 | 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]) |
jfigus | 038d2cf | 2015-05-11 14:10:11 -0400 | [diff] [blame] | 290 | |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 291 | AC_MSG_CHECKING([whether to leverage OpenSSL KDF algorithm]) |
| 292 | AC_ARG_ENABLE([openssl-kdf], |
jfigus | 038d2cf | 2015-05-11 14:10:11 -0400 | [diff] [blame] | 293 | [AS_HELP_STRING([--enable-openssl-kdf], [Use OpenSSL KDF algorithm])], |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 294 | [], [enable_openssl_kdf=no]) |
| 295 | AC_MSG_RESULT([$enable_openssl_kdf]) |
jfigus | 038d2cf | 2015-05-11 14:10:11 -0400 | [diff] [blame] | 296 | if test "$enable_openssl_kdf" = "yes"; then |
Idar Tollefsen | 333fa84 | 2017-01-20 16:44:33 +0100 | [diff] [blame] | 297 | 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.]) |
jfigus | 038d2cf | 2015-05-11 14:10:11 -0400 | [diff] [blame] | 300 | fi |
Richard Barnes | 1287209 | 2018-05-16 16:31:16 -0700 | [diff] [blame] | 301 | elif 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 Buhler | a946b3f | 2018-08-23 21:41:31 +0200 | [diff] [blame] | 305 | [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 Barnes | 1287209 | 2018-05-16 16:31:16 -0700 | [diff] [blame] | 315 | 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 Buhler | a946b3f | 2018-08-23 21:41:31 +0200 | [diff] [blame] | 320 | nss_skip_pkg_config=yes |
Richard Barnes | 1287209 | 2018-05-16 16:31:16 -0700 | [diff] [blame] | 321 | AC_MSG_RESULT([$with_nss_dir]) |
| 322 | else |
| 323 | AC_MSG_RESULT([invalid]) |
Richard Barnes | 9373379 | 2018-07-27 15:09:35 -0400 | [diff] [blame] | 324 | AC_MSG_FAILURE([Invalid NSS location: $with_nss_dir]) |
Pascal Buhler | a946b3f | 2018-08-23 21:41:31 +0200 | [diff] [blame] | 325 | fi |
| 326 | AC_SUBST([CRYPTO_LIBDIR], [$with_nss_dir/lib])], |
Richard Barnes | 1287209 | 2018-05-16 16:31:16 -0700 | [diff] [blame] | 327 | [AC_MSG_RESULT([no])]) |
| 328 | |
Pascal Buhler | a946b3f | 2018-08-23 21:41:31 +0200 | [diff] [blame] | 329 | 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 Buhler | a83736e | 2018-09-06 22:15:09 +0200 | [diff] [blame] | 334 | 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 Buhler | a946b3f | 2018-08-23 21:41:31 +0200 | [diff] [blame] | 344 | fi |
| 345 | |
Richard Barnes | 3e5efb0 | 2018-05-16 19:27:40 -0500 | [diff] [blame] | 346 | AC_DEFINE([GCM], [1], [Define this to use AES-GCM.]) |
Richard Barnes | 1287209 | 2018-05-16 16:31:16 -0700 | [diff] [blame] | 347 | 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 Barnes | 3e5efb0 | 2018-05-16 19:27:40 -0500 | [diff] [blame] | 355 | AC_SUBST([USE_EXTERNAL_CRYPTO], [1]) |
jfigus | a14b5a0 | 2013-03-29 12:24:12 -0400 | [diff] [blame] | 356 | else |
jfigus | a3127b8 | 2014-11-19 14:46:52 -0500 | [diff] [blame] | 357 | AES_ICM_OBJS="crypto/cipher/aes_icm.o crypto/cipher/aes.o" |
jfigus | 0d3a268 | 2013-04-02 15:42:37 -0400 | [diff] [blame] | 358 | HMAC_OBJS="crypto/hash/hmac.o crypto/hash/sha1.o" |
jfigus | a14b5a0 | 2013-03-29 12:24:12 -0400 | [diff] [blame] | 359 | fi |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 360 | AC_SUBST([AES_ICM_OBJS]) |
| 361 | AC_SUBST([HMAC_OBJS]) |
jfigus | a14b5a0 | 2013-03-29 12:24:12 -0400 | [diff] [blame] | 362 | |
Bernardo Torres | 79e38ae | 2014-10-10 05:29:36 -0300 | [diff] [blame] | 363 | dnl Checking for PCAP |
Martin | 90f7e1b | 2017-11-02 17:03:18 +0100 | [diff] [blame] | 364 | |
Martin Meszaros | 96d0b9a | 2017-11-01 12:31:37 +0100 | [diff] [blame] | 365 | PCAP_LIB="" |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 366 | AC_CHECK_LIB([pcap], [pcap_create], |
Martin Meszaros | 96d0b9a | 2017-11-01 12:31:37 +0100 | [diff] [blame] | 367 | [PCAP_LIB="-lpcap" |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 368 | AC_DEFINE([HAVE_PCAP], [1], [Define to 1 if you have the `pcap' library (-lpcap)]) |
| 369 | AC_SUBST([HAVE_PCAP], [1])]) |
Martin Meszaros | 3edfada | 2017-11-01 10:55:33 +0100 | [diff] [blame] | 370 | |
| 371 | AC_CHECK_LIB([wpcap], [pcap_create], |
Martin Meszaros | 96d0b9a | 2017-11-01 12:31:37 +0100 | [diff] [blame] | 372 | [PCAP_LIB="-lwpcap" |
Martin Meszaros | 3edfada | 2017-11-01 10:55:33 +0100 | [diff] [blame] | 373 | AC_DEFINE([HAVE_PCAP], [1], [Define to 1 if you have the `winpcap' library (-lwpcap)]) |
| 374 | AC_SUBST([HAVE_PCAP], [1])]) |
Martin Meszaros | 96d0b9a | 2017-11-01 12:31:37 +0100 | [diff] [blame] | 375 | AC_SUBST([PCAP_LIB]) |
| 376 | |
Pascal Bühler | b969ed5 | 2017-02-10 09:03:54 +0100 | [diff] [blame] | 377 | AC_MSG_CHECKING([whether to redirect logging to stdout]) |
| 378 | AC_ARG_ENABLE([log-stdout], |
Pascal Bühler | 88579e6 | 2017-01-30 21:05:37 +0100 | [diff] [blame] | 379 | [AS_HELP_STRING([--enable-log-stdout], [redirecting logging to stdout])], |
Pascal Bühler | b969ed5 | 2017-02-10 09:03:54 +0100 | [diff] [blame] | 380 | [], [enable_log_stdout=no]) |
Pascal Bühler | 88579e6 | 2017-01-30 21:05:37 +0100 | [diff] [blame] | 381 | if test "$enable_log_stdout" = "yes"; then |
Pascal Bühler | b969ed5 | 2017-02-10 09:03:54 +0100 | [diff] [blame] | 382 | AC_DEFINE([ERR_REPORTING_STDOUT], [1], [Define to redirect logging to stdout.]) |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 383 | fi |
Pascal Bühler | b969ed5 | 2017-02-10 09:03:54 +0100 | [diff] [blame] | 384 | AC_MSG_RESULT([$enable_log_stdout]) |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 385 | |
Pascal Bühler | b969ed5 | 2017-02-10 09:03:54 +0100 | [diff] [blame] | 386 | AC_MSG_CHECKING([wheather to use a file for logging]) |
| 387 | AC_ARG_WITH([log-file], |
Pascal Bühler | 88579e6 | 2017-01-30 21:05:37 +0100 | [diff] [blame] | 388 | [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 | |
| 400 | AS_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 Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 403 | |
Idar Tollefsen | ba304fc | 2017-05-03 13:09:03 +0200 | [diff] [blame] | 404 | dnl Appending EXTRA_CFLAGS, if given |
| 405 | AC_MSG_CHECKING([for extra C compiler flags]) |
| 406 | AS_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 Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 412 | AC_CONFIG_HEADER([crypto/include/config.h:config_in.h]) |
Cullen Jennings | 235513a | 2005-09-21 22:51:36 +0000 | [diff] [blame] | 413 | |
Guido Vranken | ff1b3c9 | 2018-01-24 14:37:50 +0100 | [diff] [blame] | 414 | AC_CONFIG_FILES([Makefile crypto/Makefile doc/Makefile fuzzer/Makefile libsrtp2.pc]) |
Saúl Ibarra Corretgé | b86063c | 2014-10-01 11:23:24 +0200 | [diff] [blame] | 415 | AC_OUTPUT |
Marcus Sundberg | 4ce29b2 | 2005-09-29 14:29:53 +0000 | [diff] [blame] | 416 | |
| 417 | # This is needed when building outside the source dir. |
Idar Tollefsen | 5e67d39 | 2017-01-20 13:03:52 +0100 | [diff] [blame] | 418 | AS_MKDIR_P([crypto/cipher]) |
| 419 | AS_MKDIR_P([crypto/hash]) |
| 420 | AS_MKDIR_P([crypto/kernel]) |
| 421 | AS_MKDIR_P([crypto/math]) |
| 422 | AS_MKDIR_P([crypto/replay]) |
| 423 | AS_MKDIR_P([crypto/test]) |
| 424 | AS_MKDIR_P([doc]) |
| 425 | AS_MKDIR_P([srtp]) |
| 426 | AS_MKDIR_P([test]) |