1# -*- Autoconf -*- 2# Process this file with autoconf to produce a configure script. 3 4AC_PREREQ([2.59]) 5AC_INIT([hitch], [1.7.0], [opensource@varnish-software.com]) 6AC_CONFIG_SRCDIR([src/configuration.c]) 7AC_CONFIG_HEADERS([config.h]) 8AC_CONFIG_AUX_DIR([build-aux]) 9AC_CONFIG_MACRO_DIR([.]) 10 11AC_USE_SYSTEM_EXTENSIONS 12 13AM_INIT_AUTOMAKE([ 14 -Wall 15 -Werror 16 foreign 17 color-tests 18 parallel-tests 19 subdir-objects 20]) 21AM_PROG_AR 22 23# Checks for programs. 24AM_PROG_CC_C_O 25AC_PROG_RANLIB 26AC_PROG_INSTALL 27AC_PROG_MAKE_SET 28 29AC_ARG_WITH([lex], 30 AS_HELP_STRING([--with-lex], [Build with lex]), 31 [], [with_lex=no]) 32AC_ARG_WITH([yacc], 33 AS_HELP_STRING([--with-yacc], [Build with yacc]), 34 [], [with_yacc=no]) 35AC_ARG_ENABLE([documentation], 36 AS_HELP_STRING([--enable-documentation], [Build the documentation]), 37 [], [enable_documentation=no]) 38AC_ARG_ENABLE([warnings], 39 AS_HELP_STRING([--enable-warnings], [Enable warnings]), 40 [], [enable_warnings=no]) 41 42if test "$with_lex" = yes 43then 44 AC_PROG_LEX 45 if test "$LEX" = : 46 then 47 AC_MSG_ERROR([flex or lex not found]) 48 49 fi 50fi 51 52if test "$with_yacc" = yes 53then 54 AC_PROG_YACC 55 if test -z "$YACC" || ! $YACC -V >/dev/null 2>&1 56 then 57 AC_MSG_ERROR([bison, byacc or yacc not found]) 58 fi 59fi 60 61AM_CONDITIONAL([ENABLE_DOCUMENTATION], [test "$enable_documentation" = yes]) 62AM_CONDITIONAL([ENABLE_WARNINGS], [test "$enable_warnings" = yes]) 63 64AM_COND_IF([ENABLE_DOCUMENTATION], [ 65 AC_CHECK_PROGS(RST2MAN, [rst2man rst2man.py], [no]) 66 if test "$RST2MAN" = no 67 then 68 AC_MSG_ERROR([rst2man is needed to build the documentation]) 69 fi 70]) 71 72AC_CHECK_PROGS(SOCKSTAT, [lsof sockstat fstat], [no]) 73if test "x$SOCKSTAT" = xno; then 74 AC_MSG_WARN([No tool found for socket inspection, tests will fail.]) 75fi 76 77AM_MAINTAINER_MODE([disable]) 78 79# Checks for libraries. 80PKG_CHECK_EXISTS([libev], [ 81 PKG_CHECK_MODULES([EV], [libev])], [ 82 HITCH_SEARCH_LIBS([EV], [ev], [ev_default_loop], 83 [AC_MSG_ERROR([Cannot find libev.])]) 84]) 85 86PKG_CHECK_MODULES([SSL], [libssl]) 87PKG_CHECK_MODULES([CRYPTO], [libcrypto]) 88HITCH_SEARCH_LIBS([SOCKET], [socket], [socket]) 89HITCH_SEARCH_LIBS([NSL], [nsl], [inet_ntop]) 90HITCH_SEARCH_LIBS([RT], [rt], [clock_gettime]) 91 92AC_CHECK_MEMBERS([struct stat.st_mtim, struct stat.st_mtimespec]) 93 94AC_ARG_ENABLE(sessioncache, 95 AC_HELP_STRING([--enable-sessioncache], 96 [Enable TLS session cache. (default is off)]), 97 [use_shctx="$enableval"], 98 [use_shctx=no]) 99if test x"$use_shctx" != xno; then 100 if test ! -e 'src/ebtree/ebtree.h'; then 101 AC_MSG_ERROR([Must clone https://github.com/haproxy/ebtree to src/ebtree/]) 102 fi 103 AC_DEFINE([USE_SHARED_CACHE], [1], [sessioncache is enabled]) 104fi 105AM_CONDITIONAL(USE_SHCTX, test xno != x"$use_shctx") 106 107# Checks for header files. 108AC_CHECK_HEADERS([stdlib.h unistd.h]) 109 110# Checks for typedefs, structures, and compiler characteristics. 111AC_TYPE_UID_T 112AC_C_INLINE 113AC_TYPE_INT32_T 114AC_TYPE_PID_T 115AC_TYPE_SIZE_T 116AC_TYPE_SSIZE_T 117AC_TYPE_UINT32_T 118 119# Checks for library functions. 120AC_FUNC_FORK 121AC_FUNC_MMAP 122AC_CHECK_FUNCS([accept4]) 123 124AC_CACHE_CHECK([whether SO_REUSEPORT works], 125 [ac_cv_so_reuseport_works], 126 [AC_RUN_IFELSE( 127 [AC_LANG_PROGRAM([[ 128#include <sys/types.h> 129#include <sys/socket.h> 130 ]], [[ 131 int s = socket(AF_INET, SOCK_STREAM, 0); 132 int i = 5; 133 if (setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &i, sizeof i) < 0) 134 return (1); 135 return (0); 136]])], 137 [ac_cv_so_reuseport_works=yes], 138 [ac_cv_so_reuseport_works=no]) 139 ] 140) 141if test "$ac_cv_so_reuseport_works" = yes; then 142 AC_DEFINE([SO_REUSEPORT_WORKS], [1], [Define if SO_REUSEPORT works]) 143fi 144 145AC_ARG_ENABLE(tcp-fastopen, 146 AC_HELP_STRING([--enable-tcp-fastopen], 147 [Enable TCP Fast Open. (default is auto)]), 148 [use_tfo="$enableval"], 149 [use_tfo=auto]) 150 151if test x"$use_tfo" != xno; then 152 AC_CACHE_CHECK([whether TCP_FASTOPEN works], 153 [ac_cv_so_tfo], 154 [AC_RUN_IFELSE( 155 [AC_LANG_PROGRAM([[ 156 #include <sys/types.h> 157 #include <sys/socket.h> 158 #include <netinet/tcp.h> 159 ]], [[ 160 int s = socket(AF_INET, SOCK_STREAM, 0); 161 int i = 5; 162 if (setsockopt(s, SOL_TCP, TCP_FASTOPEN, &i, sizeof i) < 0) 163 return (1); 164 return (0); 165 ]])], 166 [ac_cv_so_tfo=yes], 167 [ac_cv_so_tfo=no]) 168 ] 169 ) 170 if test "$ac_cv_so_tfo" != yes && test use_tfo = yes; then 171 AC_MSG_ERROR([Socket option TCP_FASTOPEN is not supported by the kernel]) 172 fi 173 if test "$ac_cv_so_tfo" = yes; then 174 AC_DEFINE([TCP_FASTOPEN_WORKS], [1], [TCP Fast Open is enabled]) 175 fi 176fi 177 178AC_CHECK_HEADERS([linux/futex.h]) 179AM_CONDITIONAL([HAVE_LINUX_FUTEX], [test $ac_cv_header_linux_futex_h = yes]) 180 181HITCH_CHECK_FUNC([SSL_get0_alpn_selected], [$SSL_LIBS], [ 182 AC_DEFINE([OPENSSL_WITH_ALPN], [1], [OpenSSL supports ALPN]) 183]) 184 185HITCH_CHECK_FUNC([SSL_get0_next_proto_negotiated], [$SSL_LIBS], [ 186 AC_DEFINE([OPENSSL_WITH_NPN], [1], [OpenSSL supports NPN]) 187]) 188 189HITCH_CHECK_FUNC([SSL_CTX_get_default_passwd_cb], [$SSL_LIBS], [ 190 AC_DEFINE([HAVE_SSL_CTX_GET_DEFAULT_PASSWD_CB], [1], 191 [OpenSSL has SSL_CTX_get_default_passwd_cb()]) 192]) 193 194HITCH_CHECK_FUNC([SSL_CTX_get_default_passwd_cb_userdata], [$SSL_LIBS], [ 195 AC_DEFINE([HAVE_SSL_CTX_GET_DEFAULT_PASSWD_CB_USERDATA], [1], 196 [OpenSSL has SSL_CTX_get_default_passwd_cb_userdata()]) 197]) 198 199HITCH_CHECK_FUNC([CRYPTO_get_locking_callback], [$CRYPTO_LIBS], [ 200 AC_DEFINE([OPENSSL_WITH_LOCKS], [1], [OpenSSL needs explicit locking]) 201]) 202 203HITCH_CHECK_FUNC([X509_NAME_ENTRY_get_data], [$CRYPTO_LIBS], [ 204 AC_DEFINE([HAVE_X509_NAME_ENTRY_GET_DATA], [1], 205 [OpenSSL has X509_NAME_ENTRY_get_data()]) 206]) 207 208HITCH_CHECK_FUNC([X509_STORE_get0_objects], [$CRYPTO_LIBS], [ 209 AC_DEFINE([HAVE_X509_STORE_GET0_OBJECTS], [1], 210 [OpenSSL has X509_STORE_get0_objects()]) 211]) 212 213HITCH_CHECK_FUNC([X509_OBJECT_get0_X509], [$CRYPTO_LIBS], [ 214 AC_DEFINE([HAVE_X509_OBJECT_GET0_X509], [1], 215 [OpenSSL has X509_OBJECT_get0_X509()]) 216]) 217 218AC_CHECK_MEMBERS([struct ssl_st.s3], [], [], [[#include <openssl/ssl.h>]]) 219 220AS_VERSION_COMPARE([$($PKG_CONFIG --modversion openssl)], [1.1.1], 221 [openssl111=no], 222 [openssl111=yes], [openssl111=yes]) 223 224AS_IF([test "x$openssl111" = xyes], 225 [AC_DEFINE([HAVE_TLS_1_3], [1], [Define to 1 if TLSv1.3 is available])], []) 226 227SH_TESTS="$(cd $srcdir/src && echo tests/test*.sh)" 228AC_SUBST(SH_TESTS) 229 230dnl Desired CFLAGS 231HITCH_CHECK_FLAGS([HITCH_CFLAGS], [ 232 -g 233 -O2 234]) 235 236AM_COND_IF([ENABLE_WARNINGS], [ 237 dnl XXX: expand developer warnings? 238 HITCH_CHECK_FLAGS([HITCH_CFLAGS], [ 239 -Wall 240 -W 241 -Werror 242 ]) 243]) 244 245AC_SUBST([HITCH_CFLAGS]) 246 247dnl Help libev macros 248HITCH_CHECK_FLAGS([EV_CFLAGS], [-fno-strict-aliasing]) 249 250AC_CONFIG_FILES([ 251 Makefile 252 src/Makefile 253 src/util/Makefile 254]) 255 256AC_OUTPUT 257