1dnl Process this file with autoconf to produce a configure script. 2dnl 3dnl Copyright 1998 - 2008 Double Precision, Inc. See COPYING for 4dnl distribution information. 5 6AC_INIT(couriertcpd, 0.11, [courier-users@lists.sourceforge.net]) 7 8>confdefs.h # Kill PACKAGE_ macros 9 10AC_CONFIG_SRCDIR(tcpd.c) 11AC_CONFIG_AUX_DIR(../..) 12AM_INIT_AUTOMAKE([foreign no-define]) 13LPATH="$PATH:/usr/local/bin" 14AC_CONFIG_HEADERS(config.h) 15 16dnl Checks for programs. 17AC_PROG_CC 18AC_PROG_CC_C99 19AC_PROG_INSTALL 20AC_PROG_LN_S 21AC_LIBTOOL_DLOPEN 22AM_PROG_LIBTOOL 23 24SPATH="$LPATH:/usr/kerberos/bin" 25 26AC_PATH_PROG(SED, sed, sed, $SPATH) 27if test "$SED" = "sed" 28then 29 AC_MSG_ERROR(sed not found.) 30fi 31AC_SUBST(SED) 32 33AC_PATH_PROG(SETENV, env, env, $SPATH) 34if test "$SETENV" = "env" 35then 36 AC_MSG_ERROR(env not found.) 37fi 38AC_SUBST(SETENV) 39 40AC_PATH_PROG(PKGCONFIG, pkg-config, [], $SPATH) 41 42if test x$GCC = xyes 43then 44 CFLAGS="-Wall $CFLAGS" 45fi 46if test x$GXX = xyes 47then 48 CXXFLAGS="-Wall $CXXFLAGS" 49fi 50 51CFLAGS="-I$srcdir/.. -I.. -I$srcdir/../.. -I../.. $CFLAGS" 52CXXFLAGS="-I$srcdir/.. -I.. -I$srcdir/../.. -I../.. $CXXFLAGS" 53 54AC_PATH_PROG(KRB5CONFIG, krb5-config, krb5-config, $SPATH) 55 56# 57# 58# We may need libdl for later, not just shared check. 59# 60 61saveLIBS="$LIBS" 62AC_CHECK_LIB(dl, dlopen, [ LIBDL="-ldl" ]) 63LIBS="$saveLIBS" 64 65PKG_CHECK_MODULES(LIBIDN, libidn >= 0.0.0, [libidn=yes], [libidn=no]) 66if test "$libidn" != "yes" 67then 68 AC_MSG_ERROR([libidn not found]) 69fi 70 71dnl Determine whether transport libraries are created static or shared 72 73AC_SUBST(LIBDL) 74 75. ../../dbobj.config 76if test "$dblibrary" != "" 77then 78 dblibrary="../../$dblibrary" 79fi 80AC_SUBST(dblibrary) 81 82COURIERTCPD="" 83if test "$dblibrary" != "" 84then 85 COURIERTCPD=couriertcpd$EXEEXT 86fi 87 88AC_SUBST(COURIERTCPD) 89 90LIBS="$saveLIBS" 91 92USENSL=no 93saveLIBS="$LIBS" 94AC_CHECK_LIB(socket,socket,result=yes,result=no) 95if test $result = yes; then 96 NETLIBS="-lsocket" 97else 98 AC_CHECK_LIB(socket,socket,result=yes,result=no,-lnsl) 99 if test $result = yes; then 100 NETLIBS = "-lsocket -lnsl" 101 USENSL=yes 102 else 103 AC_CHECK_LIB(socket,connect,result=yes,result=no) 104 if test $result = yes; then 105 NETLIBS="-lsocket" 106 else 107 AC_CHECK_LIB(socket,connect,result=yes,result=no,-lnsl) 108 if test $result = yes; then 109 NETLIBS="-lsocket -lnsl" 110 USENSL=yes 111 fi 112 fi 113 fi 114fi 115 116if test $USENSL != yes; then 117 LIBS="$LIBS $NETLIBS" 118 AC_TRY_LINK_FUNC(inet_addr, [ : ], 119 [ 120 AC_CHECK_LIB(nsl,inet_addr,result=yes,result=no) 121 if test $result = yes; then 122 NETLIBS="$NETLIBS -lnsl" 123 fi 124 ]) 125fi 126 127AC_SUBST(NETLIBS) 128 129dnl Checks for header files. 130AC_HEADER_STDC 131AC_HEADER_DIRENT 132AC_CHECK_HEADERS(sys/types.h sys/time.h sys/stat.h sys/wait.h sys/select.h unistd.h fcntl.h sys/ioctl.h) 133AC_HEADER_TIME 134 135dnl Checks for typedefs, structures, and compiler characteristics. 136 137AC_PID_T 138AC_TYPE_UID_T 139AC_TYPE_SIGNAL 140AC_SYS_LARGEFILE 141 142AC_CACHE_CHECK([for socklen_t], 143 tcpd_cv_hassocklen_t, 144 145AC_COMPILE_IFELSE([ 146AC_LANG_SOURCE( [ 147#include <sys/types.h> 148#include <sys/socket.h> 149 150socklen_t sl_t; 151],[ 152 accept(0, 0, &sl_t); 153])], 154 tcpd_cv_hassocklen_t=yes, 155 tcpd_cv_hassocklen_t=no) 156) 157 158socklen_t="int" 159 160if test $tcpd_cv_hassocklen_t = yes 161then 162 : 163else 164 AC_DEFINE_UNQUOTED(socklen_t, int, [ Default definition for socklen_t ]) 165fi 166 167dnl Checks for library functions. 168 169PKG_CHECK_MODULES(LIBIDN, libidn >= 0.0.0, [libidn=yes], [libidn=no]) 170 171if test "$libidn" != "yes" 172then 173 AC_MSG_ERROR([libidn not found]) 174fi 175 176AC_CHECK_FUNCS(setpgrp setpgid) 177AC_CHECK_FUNC(setpgrp, 178 [ 179 AC_FUNC_SETPGRP 180 ] 181) 182 183AC_ARG_WITH(tcpddns, [ --without-tcpddns Use resolver instead of DNS lookups in couriertcpd ], tcpddns="$withval", tcpddns="Y") 184 185case "$tcpddns" in 186n*|N*|0*) 187 ;; 188*) 189 AC_DEFINE_UNQUOTED(TCPDUSERFC1035,1, 190 [ Whether to use librfc1035.a to resolve via DNS ]) 191 ;; 192esac 193 194saveLIBS="$LIBS" 195LIBS="$LIBS $NETLIBS" 196AC_CHECK_FUNC(socketpair, have_socketpair=yes, have_socketpair=no) 197 198AC_ARG_WITH(spipe, 199[ --with-spipe=socketpair Create stream pipes as BSD socketpairs 200 --with-spipe=streams Create stream pipes as SVR3 streams 201 --with-spipe=pipe Create stream pipes as SVR4 streams], 202spipe="$withval", spipe="") 203 204AC_CACHE_CHECK([for SVR3 stream pipes],tcpd_cv_svr3, 205AC_TRY_COMPILE( [ 206#include <sys/types.h> 207#include <sys/stream.h> 208#include <stropts.h> 209#include <fcntl.h> 210],[ { 211 struct strfdinsert ins; 212 queue_t *pointer; 213 int i=I_FDINSERT; 214} 215], tcpd_cv_svr3=yes, tcpd_cv_svr3=no)) 216 217AC_CACHE_CHECK( [for SVR4 stream pipes],tcpd_cv_svr4, 218 219AC_TRY_RUN( 220[ 221 222changequote(<<,>>) 223 224#include <stdio.h> 225#include <unistd.h> 226 227int main(int argc, char **argv) 228{ 229int pipefd[2]; 230char c; 231 232 c=0; 233 if (pipe(pipefd) == 0 && write(pipefd[0], &c, 1) == 1 && 234 read(pipefd[1], &c, 1) == 1 && 235 write(pipefd[1], &c, 1) == 1 && 236 read(pipefd[0], &c, 1) == 1) 237 { 238 exit (0); 239 } 240 exit (1); 241 return (1); 242} 243changequote([,]) 244] 245, 246tcpd_cv_svr4=yes, 247tcpd_cv_svr4=no, 248tcpd_cv_svr4="n/a") 249 250) 251 252LIBS="$saveLIBS" 253 254if test "$spipe" = "" 255then 256 if test "$have_socketpair" = "yes" 257 then 258 spipe="socketpair" 259 fi 260fi 261 262if test "$spipe" = "" 263then 264 if test "$tcpd_cv_svr3" = "yes" 265 then 266 spipe="streams" 267 fi 268fi 269 270if test "$spipe" = "" 271then 272 if test "$tcpd_cv_svr4" = "yes" 273 then 274 spipe="pipe" 275 fi 276fi 277 278case "$spipe" in 279socketpair) 280 AC_DEFINE_UNQUOTED(HAVE_SPIPE_SOCKETPAIR, 1, 281 [ Whether to use socketpair() to create a bidirectional pipe ]) 282 ;; 283streams) 284 AC_DEFINE_UNQUOTED(HAVE_SPIPE_SVR3, 1, 285 [ Whether to use streams to create a vidirectional pipe ]) 286 ;; 287pipe) 288 AC_DEFINE_UNQUOTED(HAVE_SPIPE_SVR4, 1, 289 [ Whether pipe() is SvR4-style that's a bidirectional pipe ]) 290 ;; 291*) 292 AC_MSG_ERROR(Cannot determine stream pipe support. If cross-compiling use --with-spipe=pipe to get SVR4 stream pipes.) 293 ;; 294esac 295 296 297AC_MSG_CHECKING([for stream pipes]) 298AC_MSG_RESULT($spipe) 299 300AC_CHECK_HEADER(openssl/ssl.h,have_ssl_h=yes,have_ssl_h=no) 301AC_CHECK_LIB(ssl, SSL_load_error_strings, have_ssl=yes, have_ssl=no, 302 -lcrypto) 303AC_CHECK_LIB(ssl, SSL_library_init, have_ssl=yes) 304AC_CHECK_LIB(ssl, OPENSSL_init_ssl, have_ssl=yes) 305 306if test "$have_ssl" = "yes" 307then 308 if test "$have_ssl_h" = "no" 309 then 310 AC_MSG_WARN(OpenSSL runtime libraries installed but the header files are missing) 311 AC_MSG_WARN(disabling OpenSSL support.) 312 have_ssl="no" 313 fi 314fi 315 316KRBFLAGS="" 317if test "$have_ssl" = "yes" 318then 319 LIBCOURIERTLSOPENSSL=libcouriertlsopenssl.la 320 321 if test "$KRB5CONFIG" != "krb5-config" 322 then 323 AC_MSG_CHECKING(whether OpenSSL requires Kerberos) 324 AC_TRY_COMPILE( [ 325#include <openssl/ssl.h> 326], [ int x=1; ], :, 327 [ 328 KRBFLAGS=`$KRB5CONFIG --cflags` 329 CFLAGS="$CFLAGS $KRBFLAGS" 330 331 332 AC_TRY_COMPILE( [ 333#include <openssl/ssl.h> 334], [ int x=1; ], [ KRBLIBS="`$KRB5CONFIG --libs`" ], 335 AC_MSG_ERROR(OpenSSL test build failed) ) 336 ] 337) 338 339 if test "$KRBLIBS" = "" 340 then 341 AC_MSG_RESULT(no) 342 else 343 AC_MSG_RESULT(yes) 344 fi 345 fi 346 openssldep="-lssl -lcrypto $KRBLIBS $NETLIBS ../random128/librandom128.la" 347fi 348 349# GnuTLS 350 351have_gnutls=no 352 353AC_MSG_CHECKING([for GnuTLS]) 354 355if test "$PKGCONFIG" != "" 356then 357 if $PKGCONFIG --modversion gnutls >/dev/null 2>&1 358 then 359 save_CPPFLAGS="$CPPFLAGS" 360 CPPFLAGS="$CPPFLAGS `$PKGCONFIG --cflags gnutls`" 361 362 AC_TRY_COMPILE( [ 363#include <gnutls/gnutls.h> 364], 365 [ 366 ], 367 [ have_gnutls=yes 368 ], 369 370 [ 371 have_gnutls="no: \#include <gnutls/gnutls.h> failed" 372 ]) 373 374 CPPFLAGS="$save_CPPFLAGS" 375 else 376 have_gnutls="no: pkgconfig --modversion gnutls failed" 377 fi 378else 379 have_gnutls="no: pkg-config not found" 380fi 381 382AC_MSG_RESULT($have_gnutls) 383 384if test "$have_gnutls" = "yes" 385then 386 LIBCOURIERTLSGNUTLS="libcouriertlsgnutls.la" 387 CPPFLAGS="$CPPFLAGS `$PKGCONFIG --cflags gnutls`" 388 have_gnutls3=no 389 PKG_CHECK_EXISTS([gnutls >= 3.0], [have_gnutls3=yes]) 390 if test "x$have_gnutls3" = "xno" 391 then 392 gnutlsdep="`$PKGCONFIG --libs gnutls` -lgnutls-extra" 393 else 394 gnutlsdep="`$PKGCONFIG --libs gnutls`" 395 AC_DEFINE([HAVE_GNUTLS3], [1], [Use GnuTLS3]) 396 fi 397fi 398 399AC_CHECK_SIZEOF(gnutls_transport_ptr_t,0, [ 400AC_INCLUDES_DEFAULT 401#include <gnutls/gnutls.h> 402]) 403 404AC_CHECK_SIZEOF(long,0) 405 406cast_to_ptr_t="" 407 408if test "$gnutls_transport_ptr_t_SIZEOF" = "$long_SIZEOF" 409then 410 if test "$gnutls_transport_ptr_t_SIZEOF" != 0 411 then 412 cast_to_ptr_t="(long)" 413 fi 414fi 415 416AC_DEFINE_UNQUOTED(GNUTLS_CAST_PTR_T, $cast_to_ptr_t,[How to cast a file descriptor to gnutls_transport_ptr_t]) 417 418echo "cppflags='$KRBFLAGS'" >couriertls.config 419 420AC_SUBST(openssldep) 421AC_SUBST(gnutlsdep) 422 423soxdep="`cat ../soxwrap/soxlibs.dep`" 424AC_SUBST(soxdep) 425 426 427# Choose GnuTLS or OpenSSL 428 429AC_ARG_WITH(gnutls, [ --with-gnutls Use GnuTLS even if OpenSSL is available], 430 [ 431 432if test "$withval" = "yes" 433then 434 if test "$have_gnutls" = "yes" 435 then 436 have_ssl="no" 437 else 438 AC_MSG_ERROR(Cannot find GnuTLS) 439 fi 440else 441 have_gnutls="no" 442fi 443], 444 [ 445 446 if test "$have_ssl" = "yes" 447 then 448 have_gnutls="no" 449 fi 450]) 451 452if test "$have_gnutls" = "yes" 453then 454 TLSLIBRARY="$LIBCOURIERTLSGNUTLS" 455 STARTTLS=couriertls$EXEEXT 456 BUILDLIBCOURIERTLS=libcouriertls.la 457 458 CRYPTLIBS="" 459 460 AC_MSG_CHECKING([for libgcrypt]) 461 462 save_LIBS="$LIBS" 463 LIBS="$LIBS -lgcrypt" 464 AC_TRY_LINK( [ 465#include <gcrypt.h> 466 467], [ 468 gcry_cipher_open(NULL, 0, 0, 0); 469], [ 470 AC_MSG_RESULT(yes) 471 AC_DEFINE_UNQUOTED(HAVE_GCRYPT, 1, 472 [ Whether libgcrypt is installed ]) 473 CRYPTLIBS="$CRYPTLIBS -lgcrypt" 474], [ 475AC_MSG_RESULT(no) 476have_gcrypt="no" 477]) 478 479 if test "$have_gcrypt" = "no" 480 then 481 AC_MSG_ERROR(gcrypt header file is required for GNUTLS) 482 fi 483 AC_MSG_CHECKING([for libgpg-error]) 484 LIBS="$LIBS -lgpg-error" 485 AC_TRY_LINK( [ 486#include <gcrypt.h> 487 488], [ 489 gpg_err_code_from_errno(0); 490], [ 491 AC_MSG_RESULT(yes) 492 CRYPTLIBS="$CRYPTLIBS -lgpg-error" 493], [ 494AC_MSG_RESULT(no) 495]) 496 497 LIBS="$save_LIBS" 498 499 echo "ssllib=gnutls" >>couriertls.config 500else 501 if test "$have_ssl" = "yes" 502 then 503 504 save_LIBS="$LIBS" 505 LIBS="-lcrypto $KRBLIBS $LIBS" 506 507 AC_MSG_CHECKING(for OpenSSL 0.9.7) 508 AC_TRY_LINK( [ 509#include <openssl/evp.h> 510#include <openssl/rand.h> 511], 512[ 513EVP_CIPHER_CTX ctx; 514char dummy[1]; 515unsigned char a[1], b[1]; 516 517EVP_CIPHER_CTX_init(&ctx); 518EVP_EncryptInit_ex(&ctx, EVP_des_cbc(), NULL, a, b); 519RAND_pseudo_bytes(dummy, 1); 520 521], [ 522 CRYPTLIBS="-lcrypto $KRBLIBS" 523 AC_MSG_RESULT(yes) 524 AC_DEFINE_UNQUOTED(HAVE_OPENSSL097, 1, 525 [ Whether OpenSSL 0.9.7 is installed ]) 526], [ 527 AC_MSG_RESULT(no) 528 529 530 531 AC_MSG_CHECKING(for OpenSSL 1.1.0) 532 AC_TRY_LINK( [ 533#include <openssl/evp.h> 534#include <openssl/rand.h> 535], 536[ 537char dummy[1]; 538unsigned char a[1], b[1]; 539 540EVP_CIPHER_CTX *ctx=EVP_CIPHER_CTX_new(); 541EVP_EncryptInit_ex(ctx, EVP_des_cbc(), NULL, a, b); 542RAND_bytes(dummy, 1); 543 544], [ 545 CRYPTLIBS="-lcrypto $KRBLIBS" 546 AC_MSG_RESULT(yes) 547 AC_DEFINE_UNQUOTED(HAVE_OPENSSL110, 1, 548 [ Whether OpenSSL 1.1.0 is installed ]) 549], [ 550 AC_MSG_RESULT(no) 551]) 552 553] 554) 555 LIBS="-lssl $LIBS" 556 AC_CHECK_FUNCS(TLSv1_1_method TLSv1_2_method X509_VERIFY_PARAM_set1_host) 557 LIBS="$save_LIBS" 558 559 AC_TRY_COMPILE( [ 560#include <openssl/ssl.h> 561], 562[ 563SSL_get_servername((SSL *)0, TLSEXT_NAMETYPE_host_name); 564], [ 565 AC_DEFINE_UNQUOTED(HAVE_OPENSSL_SNI,1,[ When OpenSSL supports SNI ]) 566 ]) 567 568 TLSLIBRARY="$LIBCOURIERTLSOPENSSL" 569 STARTTLS=couriertls$EXEEXT 570 BUILDLIBCOURIERTLS=libcouriertls.la 571 echo "ssllib=openssl" >>couriertls.config 572 fi 573fi 574echo "couriertls=$STARTTLS" >>couriertls.config 575echo "cryptlibs=\"`echo $CRYPTLIBS`\"" >>couriertls.config 576 577# Do not built the other SSL library. ... Except if I'm the maintainer 578 579if test ! -d "$srcdir/CVS" 580then 581 if test "$have_ssl" = "yes" 582 then 583 LIBCOURIERTLSGNUTLS="" 584 fi 585 586 if test "$have_gnutls" = "yes" 587 then 588 LIBCOURIERTLSOPENSSL="" 589 fi 590fi 591 592AC_SUBST(LIBCOURIERTLSOPENSSL) 593AC_SUBST(LIBCOURIERTLSGNUTLS) 594 595AC_SUBST(CRYPTLIBS) 596AC_SUBST(STARTTLS) 597AC_SUBST(BUILDLIBCOURIERTLS) 598AC_SUBST(TLSLIBRARY) 599 600AM_CONDITIONAL(HAVE_SGML, test -d ${srcdir}/../docbook) 601AC_OUTPUT(Makefile) 602