configure.ac 20.7 KB
Newer Older
Niels Möller's avatar
Niels Möller committed
1
dnl Process this file with autoconf to produce a configure script.
2
AC_INIT([lsh], [1.5.2], [bug-lsh@gnu.org]) 
Niels Möller's avatar
Niels Möller committed
3
AC_PREREQ(2.52)
4
AC_CONFIG_SRCDIR([src/lsh.c])
5
AM_INIT_AUTOMAKE
6
AM_CONFIG_HEADER(config.h)
Niels Möller's avatar
Niels Möller committed
7

8 9 10 11 12 13 14 15 16 17 18 19
# We want an absolute path to the source-dir.
case "$srcdir" in
    /*)
    ;;
    *)
	oldsrcdir="$srcdir"
	srcdir="`cd \"$srcdir\";pwd`"
	AC_MSG_WARN([ Converted $oldsrcdir to $srcdir,
If this does not work, please use an absolute path to the configure script. ])
    ;;
esac

20
# src/rsync relies on lsh's definitions of WRITE_UINT32 etc.
21
# CPPFLAGS="$CPPFLAGS -I$srcdir/src -DLSH"
22

23 24 25 26
# GNU libc defaults to supplying the ISO C library functions only. 
# initgroups() and strsignal() are extensions; the _GNU_SOURCE define
# enables these extensions.
# Enable it on all systems; no problems have been reported with it so far.
Niels Möller's avatar
Niels Möller committed
27

28
AC_GNU_SOURCE
Niels Möller's avatar
Niels Möller committed
29

30
# Check options
31
AC_ARG_ENABLE(debug_alloc,
32
  AC_HELP_STRING([--enable-debug-alloc], [Enable memory allocation sanity checks]),,
33
  [enable_debug_alloc=no])
34 35 36

AH_TEMPLATE([DEBUG_ALLOC],
	    [Define to enable sanity checking on memory allocation and casting])
37
if test x$enable_debug_alloc = xyes ; then
38 39 40
  AC_DEFINE(DEBUG_ALLOC)
fi

41
AC_ARG_ENABLE(debug_trace,
42
  AC_HELP_STRING([--enable-debug-trace], [Enable tracing support]),,
43
  [enable_debug_trace=no])
44

45
AH_TEMPLATE([DEBUG_TRACE], [Define to enable tracing])
46
if test x$enable_debug_trace = xyes ; then
47 48 49
  AC_DEFINE(DEBUG_TRACE)
fi

Niels Möller's avatar
Niels Möller committed
50
AC_ARG_ENABLE(gcov,
51
  AC_HELP_STRING([--enable-gcov], [Instrument for gcov (requires a modern gcc)]),,
Niels Möller's avatar
Niels Möller committed
52 53
  [enable_gcov=no])

Niels Möller's avatar
Niels Möller committed
54 55 56 57 58
AC_ARG_ENABLE(profiling,
  AC_HELP_STRING([--enable-profiling], [Instrument for gprof profiling]),,
  [enable_profiling=no])


59
AC_ARG_WITH(zlib,
60
  AC_HELP_STRING([--without-zlib], [Don't use zlib compression]),,
61
  [with_zlib=yes])
62

63 64 65 66 67 68 69 70 71 72
AC_ARG_WITH(tcpwrappers,
  AC_HELP_STRING([--with-tcpwrappers], 
                [Use tcp-wrappers for filtering connections]),
  [if test -z "$withval"; then 
    with_tcpwrappers=yes; 
  else 
    with_tcpwrappers="$withval";
  fi],
  [with_tcpwrappers=no])

73 74
# Checking this variable is delayed until we have checked if zlib is
# actually available.
75

76
AC_ARG_ENABLE(pty,
77
  AC_HELP_STRING([--without-pty], [Disable pty support]),,
78
  [enable_pty=yes])
79

80
AH_TEMPLATE([WITH_PTY_SUPPORT], [Define to enable pty support])
81
if test x$enable_pty = xyes ; then
82 83 84
  AC_DEFINE(WITH_PTY_SUPPORT)
fi

85
AC_ARG_WITH(sshd1,
86
  AC_HELP_STRING([[--with-sshd1[=PROGRAM]]], [support fallback to SSH1 daemon]),,
87
  [with_sshd1=yes])
88

89 90 91 92 93
# Default sshd1 path
if test x$with_sshd1 = xyes ; then
  with_sshd1=/usr/local/sbin/sshd1
fi

94 95
AH_TEMPLATE([SSHD1], [Location of the SSH1 daemon])
AH_TEMPLATE([WITH_SSH1_FALLBACK], [Define to enable fallback to SSH1])
96 97 98 99
if test x$with_sshd1 != xno ; then
  AC_DEFINE(WITH_SSH1_FALLBACK)
  AC_DEFINE_UNQUOTED(SSHD1,"$with_sshd1")
fi
100

101
AC_ARG_ENABLE(srp,
102
  AC_HELP_STRING([--disable-srp], [Disable the (experimental) support for SRP]),,
103 104
  [enable_srp=yes])

105
AC_ARG_ENABLE(kerberos,
106
  AC_HELP_STRING([--disable-kerberos], [Don't support kerberos]),,
107
  [enable_kerberos=yes])
108

109 110 111 112
AC_ARG_ENABLE(pam,
  AC_HELP_STRING([--disable-pam], [Don't support PAM]),,
  [enable_pam=yes])

113
AH_TEMPLATE([WITH_SRP], [Define if SRP should be supported])
114 115
if test x$enable_srp = xyes ; then
  AC_DEFINE(WITH_SRP)
116
  SRP_PROGRAM=srp-gen
117 118
fi

119 120
AC_SUBST(SRP_PROGRAM)

121
AC_ARG_ENABLE(datafellows_workarounds,
122 123
  AC_HELP_STRING([--disable-datafellows-workarounds],
		 [Disable bug-compatibility with SSH Inc's clients and servers]),,
124
  [enable_datafellows_workarounds=yes])
125

126 127
AH_TEMPLATE([DATAFELLOWS_WORKAROUNDS],
	    [Define to support non-standard packets of ssh2])
128
if test x$enable_datafellows_workarounds = xyes ; then
129
  AC_DEFINE(DATAFELLOWS_WORKAROUNDS)
130 131
fi

132 133 134 135 136 137 138 139 140 141 142 143 144

AC_ARG_ENABLE(initgroups_workaround,
  AC_HELP_STRING([--enable-initgroups-workaround],
		 [Use a special initgroups for supporting more groups]),,
  [enable_initgroups_workaround=no])

AH_TEMPLATE([INITGROUPS_WORKAROUND],
	    [Define to enable the initgroups workaround])
if test x$enable_initgroups_workaround = xyes ; then
  AC_DEFINE(INITGROUPS_WORKAROUND)
fi


145
AC_ARG_ENABLE(tcp_forward,
146
  AC_HELP_STRING([--disable-tcp-forward], [Disable tcp forwarding]),,
147
  [enable_tcp_forward=yes])
148

149
AH_TEMPLATE([WITH_TCP_FORWARD], [Define to enable tcp forwarding])
150
if test x$enable_tcp_forward = xyes ; then
151 152
  AC_DEFINE(WITH_TCP_FORWARD)
fi
153

154
AC_ARG_ENABLE(x11_forward,
155
  AC_HELP_STRING([--disable-x11-forward], [Disable x11 forwarding (proxy only)]),,
156
  [enable_x11_forward=yes])
157

158
AH_TEMPLATE([WITH_X11_FORWARD], [Define to enable x11 forwarding])
159
if test x$enable_x11_forward = xyes ; then
160 161 162
  AC_DEFINE(WITH_X11_FORWARD)
fi

163
AC_ARG_ENABLE(agent_forward,
164
  AC_HELP_STRING([--disable-agent-forward], [Disable auth-agent forwarding (proxy only)]),,
165 166
  [with_agent_forward=yes])

167 168
AH_TEMPLATE([WITH_AGENT_FORWARD],
	    [Define to enable authentication agent forwarding])
169
if test x$disable_agent_forward = xyes ; then
170 171 172
  AC_DEFINE(WITH_AGENT_FORWARD)
fi

173
AC_ARG_WITH(scheme,
174
  AC_HELP_STRING([[--with-scheme[=PROGRAM]]], [Use a particular scheme implementation]),,
175
  [with_scheme=])
176 177

AC_ARG_WITH(system-argp,
178
  AC_HELP_STRING([--without-system-argp], [Don't use the system's argp]),,
179
  [with_system_argp=yes])
180

181
# IPv6 support
182
AC_ARG_ENABLE(ipv6,
183
  AC_HELP_STRING([--disable-ipv6], [Disable IPv6 support]),,
184 185
  [enable_ipv6=yes])

186
# utmp/wtmp logging 
187
AC_ARG_ENABLE(utmp,
188
  AC_HELP_STRING([--disable-utmp], [Disable utmp and wtmp support]),,
189 190
  [enable_utmp=yes])

191
AH_TEMPLATE([WITH_UTMP], [For utmp support])
192 193 194 195
if test x$enable_utmp = xyes ; then
  AC_DEFINE(WITH_UTMP)
fi

196
AC_ARG_WITH(include-path,
197
  AC_HELP_STRING([--with-include-path], [A colon-separated list of directories to search for include files]),,
198 199 200 201 202 203
  [with_include_path=''])

if test x$with_include_path != x ; then
  CPPFLAGS="$CPPFLAGS -I `echo $with_include_path | sed 's/:/ -I /g'`"
fi

204
AC_ARG_WITH(lib-path,
205
  AC_HELP_STRING([--with-lib-path], [A colon-separated list of directories to search for libraries]),,
206 207 208
  [with_lib_path=''])

if test x$with_lib_path != x ; then
209
  LDFLAGS="$LDFLAGS -L `echo $with_lib_path | sed 's/:/ -L /g'`"
210 211 212 213 214 215 216 217 218
fi

LSH_RPATH_INIT([`echo $with_lib_path | sed 's/:/ /g'` \
    `echo $exec_prefix | sed "s@^NONE@$prefix/lib@g" | sed "s@^NONE@$ac_default_prefix/lib@g"` \
    /usr/local/lib /sw/local/lib /sw/lib \
    /usr/gnu/lib /opt/gnu/lib /sw/gnu/lib /usr/freeware/lib /usr/pkg/lib])

dnl echo RPATH_CANDIDATE_DIRS = $RPATH_CANDIDATE_DIRS

219
# Checks for programs.
Niels Möller's avatar
Niels Möller committed
220 221
AC_PROG_CC
AC_PROG_MAKE_SET
Niels Möller's avatar
Niels Möller committed
222
AC_PROG_RANLIB
223
AM_PROG_CC_STDC
Niels Möller's avatar
Niels Möller committed
224

225
if test "x$am_cv_prog_cc_stdc" = xno ; then
226
  AC_MSG_ERROR([the C compiler doesn't handle ANSI-C])
227 228
fi

229 230
# Use a particular scheme implementation?
if test x$with_scheme != x ; then
231 232 233 234 235 236 237 238 239
  # If an absolute path is given, don't AC_PATH_PROG but just use it
  if grep "^/" > /dev/null <<EOF
$with_scheme 
EOF  
  then
    SCHEME_PROGRAM="$with_scheme" 
  else
    AC_PATH_PROG(SCHEME_PROGRAM, $with_scheme,, $PATH)
  fi
240
else  
241
  AC_PATH_PROGS(SCHEME_PROGRAM, guile scsh,, $PATH)
242
fi
243

244
if test "x$SCHEME_PROGRAM" = x ; then
245 246
  AC_MSG_WARN([No scheme implementation found.
This is fine as long as you don't modify the source files.])
247 248 249
  SCHEME_PROGRAM=false
fi

250 251 252
SCHEME_NAME=`basename $SCHEME_PROGRAM`
AC_SUBST(SCHEME_NAME)

253 254 255 256 257
# BASH gets set to the bogus value "/bin/sh" if /bin/sh is a bash.
# So unset it in that case.
if test "x$BASH" = x/bin/sh ; then
  unset BASH
fi
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273

if test "x$BASH" = x; then    
  AC_PATH_PROG(BASH, bash,, $PATH)
fi
AC_ARG_VAR(BASH, bash shell)

if test "x$GROFF" = x; then
  AC_PATH_PROG(GROFF, groff,, $PATH)
fi
AC_ARG_VAR(GROFF, groff)

if test "x$M4" = x; then
  AC_PATH_PROG(M4, m4, m4)
fi
AC_ARG_VAR(M4, M4 macro processor)

274

275
# Checks for header files.
Niels Möller's avatar
Niels Möller committed
276
AC_HEADER_STDC
277

278 279 280
# We don't look in gmp2 anymore, as we need gmp-3.1 or better.
AC_CHECK_HEADERS(gmp.h,,
  AC_MSG_ERROR([gmp.h not found]))
281
  
282
AC_CHECK_HEADERS(fcntl.h strings.h sys/time.h unistd.h)
283
AC_CHECK_HEADERS(shadow.h)
284

285 286 287
if test x$with_zlib = xyes; then
  AC_CHECK_HEADERS(zlib.h,, [with_zlib=no])
fi
288
AC_CHECK_HEADERS(poll.h sys/poll.h)
289
AC_CHECK_HEADERS(libutil.h)
290
AC_CHECK_HEADERS(crypt.h)
291 292
AC_CHECK_HEADERS(pty.h)
AC_CHECK_HEADERS(stropts.h)
293
AC_CHECK_HEADERS(syslog.h)
294
AC_CHECK_HEADERS(argp.h)
295
AC_CHECK_HEADERS(sys/resource.h)
296

297
AC_CHECK_HEADERS(utmp.h, [have_utmp_h=yes], [have_utmp_h=no])
298
AC_CHECK_HEADERS(utmpx.h, [have_utmpx_h=yes], [have_utmpx_h=no])
299

300 301 302 303
dnl With current autoconfs we can't check for struct ut_tv with
dnl AC_CHECK_MEMBERS, but we can check for sub members. Leave the
dnl ut_tv check for clarity.

304
if test x$have_utmp_h = xyes; then
305 306 307
  AC_CHECK_MEMBERS([struct utmp.ut_host,
		    struct utmp.ut_name,
		    struct utmp.ut_user,
308 309
		    struct utmp.ut_time,
		    struct utmp.ut_tv,
310
		    struct utmp.ut_tv.tv_sec,
311 312 313
		    struct utmp.ut_id,
		    struct utmp.ut_syslen,
		    struct utmp.ut_session,
314 315
		    struct utmp.ut_pid,
		    struct utmp.ut_exit,
316 317 318 319 320
		    struct utmp.ut_addr,
		    struct utmp.ut_addr_v6],,,
[# if HAVE_UTMP_H
#  include <utmp.h>
# endif
321 322
])
fi
323

324 325 326 327 328 329 330
if test x$have_utmpx_h = xyes; then
  AC_CHECK_MEMBERS([struct utmpx.ut_host,
		    struct utmpx.ut_name,
		    struct utmpx.ut_user,
		    struct utmpx.ut_time,
		    struct utmpx.ut_id,
		    struct utmpx.ut_tv,
331
		    struct utmpx.ut_tv.tv_sec,
332 333 334 335 336 337 338
		    struct utmpx.ut_syslen,
		    struct utmpx.ut_session,
		    struct utmpx.ut_pid,
		    struct utmpx.ut_exit,
		    struct utmpx.ut_addr,
		    struct utmpx.ut_addr_v6],,,
[# if HAVE_UTMPX_H
339 340 341
#  include <utmpx.h>
# endif
])
342
fi
343

344

345

346 347 348 349
if test x$enable_kerberos = xyes; then
  AC_CHECK_HEADERS(krb5.h,, [enable_kerberos=no])
fi

350 351 352 353
if test x$enable_pam = xyes; then
  AC_CHECK_HEADERS(security/pam_appl.h,, [enable_pam=no])
fi

354 355
# Some systems (in particular, Unixware) doesn't have socklen_t, but
# uses size_t. Falling back to int will cause some warnings.
356

357 358
# AC_CHECK_TYPE doesn't work, probably because the type in
# question is not defined in sys/types.h.
359

360
LSH_TYPE_SOCKLEN_T
361

362 363
# Checks for libraries

364 365 366 367
AC_CHECK_LIB(gmp, __gmpz_getlimbn,,
    [AC_MSG_ERROR(
    [GNU MP not found, or not 3.1 or up, see http://www.swox.com/gmp.])])

368 369
LSH_RPATH_FIX

Niels Möller's avatar
Niels Möller committed
370 371 372 373 374
AC_CHECK_LIB([oop], [oop_sys_new],,
  [AC_MSG_ERROR([liboop is missing. Get liboop from http://www.liboop.org])])

LSH_RPATH_FIX

375 376 377 378
if test x$with_zlib = xyes; then
  AC_CHECK_LIB(z, inflate,, [with_zlib=no])
fi

379 380 381 382
if test x$with_zlib = xyes; then
  LSH_RPATH_FIX
fi

383 384 385 386 387
# FIXME: Should we let people use --with-tcpwrappers=/here/they/are?

if test x$with_tcpwrappers = xyes; then
  AC_CHECK_LIB(wrap, request_init,, 
  [
388
      AC_MSG_WARN([Failed to link libwrap, you might try adding -lsocket to LDFLAGS])
389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406
      with_tcpwrappers=no
  ])

  AC_CHECK_HEADER(tcpd.h,, [with_tcpwrappers=no])

  if test x$with_tcpwrappers = xno; then
    AC_MSG_WARN([Failed to find a working tcpwrappers setup, disabling wrappers])
  fi
fi

if test x$with_tcpwrappers = xyes; then
  LSH_RPATH_FIX
  AC_DEFINE(WITH_TCPWRAPPERS,1,[Whatever to use tcpwrappers])
else
  AC_DEFINE(WITH_TCPWRAPPERS,0,[Whatever to use tcpwrappers])
fi


407
# X11 stuff. We only need libXau.
408
# FIXME: Use AC_PATH_XTRA instead? 
409 410 411
AC_PATH_X

if test -z "$no_x" ; then
412
  if test -n "$x_includes" ; then
413
    CPPFLAGS="$CPPFLAGS -I$x_includes"
414
  fi
415
  if test -n "$x_libraries" ; then
416 417
    LDFLAGS="$LDFLAGS -L$x_libraries"
    LSH_RPATH_ADD($x_libraries)
418
  fi
419 420 421 422 423 424
fi

AC_CHECK_HEADERS(X11/Xauth.h)
AC_CHECK_LIB(Xau, XauGetAuthByAddr)
LSH_RPATH_FIX

Pontus Freyhult's avatar
Pontus Freyhult committed
425 426 427 428 429 430 431 432 433 434 435 436
AC_ARG_VAR(XAUTH_PROGRAM, Program used to handle .Xauthority-files by lshd)

if test -z "$XAUTH_PROGRAM"; then
  AC_PATH_PROG(XAUTH_PROGRAM, xauth,, /usr/X11R6/bin:/usr/openwin/bin:/usr/X/bin:/usr/X11/bin:/usr/bin:/usr/bin/X:/usr/bin/X11)
fi

if test -z "$XAUTH_PROGRAM"; then
  AC_MSG_WARN(Couldn't find xauth, try passing XAUTH_PROGRAM=/path/to/xauth to configure)
else
  AC_DEFINE_UNQUOTED(XAUTH_PROGRAM, "$XAUTH_PROGRAM", Program used by lshd to handle .Xauthority-files)
fi

437 438
# Move these checks for system libraries earlier, before checks for
# gmp, liboop etc
439

440 441 442
# glibc has a nis-library "libnsl", which we don't need. So use
# AC_SEARCH_LIBS rather than AC_CHECK_LIB.
AC_SEARCH_LIBS(gethostbyname, nsl)
443
AC_SEARCH_LIBS(inet_ntop, nsl)
444 445 446 447 448 449
AC_CHECK_LIB(socket, setsockopt)

AC_CHECK_LIB(crypt, crypt)
AC_CHECK_LIB(xnet, inet_addr)
# logwtmp is also in libutil
AC_CHECK_LIB(util, openpty)
450

451
# This macro is new in autoconf-2.13
452
AC_SEARCH_LIBS(syslog, bsd socket inet, [AC_DEFINE(HAVE_SYSLOG)])
453

454
AH_TEMPLATE([WITH_ZLIB], [Define if zlib should be used])
455
# Should we use zlib?
456 457 458 459
if test x$with_zlib = xyes ; then
  AC_DEFINE(WITH_ZLIB)
fi

460 461 462 463 464
# The kerberos libraries are needed only to support the
# krb-check-passwd program, so we put them $KRB_LIBS, not in the
# ordinary $LIBS.

if test x$enable_kerberos = xyes; then
465 466 467 468 469
  LSH_CHECK_KRB_LIB(roken, strlcpy)
  LSH_CHECK_KRB_LIB(resolv, dn_expand)
  LSH_CHECK_KRB_LIB(des, des_cbc_encrypt)
  LSH_CHECK_KRB_LIB(asn1, der_get_octet_string)
  LSH_CHECK_KRB_LIB(krb5, krb5_cc_gen_new,, [enable_kerberos=no])
470 471
fi

472
AH_TEMPLATE([WITH_KERBEROS], [For kerberos])
473 474 475 476 477 478 479 480
if test x$enable_kerberos = xyes; then
  AC_DEFINE(WITH_KERBEROS)
  KRB_PROGRAM=lsh-krb-checkpw
fi

AC_SUBST(KRB_LIBS)
AC_SUBST(KRB_PROGRAM)

481 482
AH_TEMPLATE([WITH_PAM], [For PAM])
if test x$enable_pam = xyes; then
483 484 485 486 487 488 489 490
  AC_CHECK_LIB(pam,pam_start,, enable_pam=no )

  if test x$enable_pam = xyes; then
    AC_DEFINE(WITH_PAM)
    PAM_PROGRAM=lsh-pam-checkpw
  else
    AC_MSG_WARN([pam_start not found in libpam, disabling PAM])
  fi
491 492 493 494
fi

AC_SUBST(PAM_PROGRAM)

495
AH_TEMPLATE([WITH_GCOV], [Use gcov])
Niels Möller's avatar
Niels Möller committed
496 497
if test "x$enable_gcov" = "xyes"; then
  CFLAGS="$CFLAGS -ftest-coverage -fprofile-arcs"
498
  AC_DEFINE(WITH_GCOV)
Niels Möller's avatar
Niels Möller committed
499 500
fi

Niels Möller's avatar
Niels Möller committed
501 502 503 504
if test "x$enable_profiling" = "xyes"; then
  CFLAGS="$CFLAGS -pg"
fi

505
# Checks for typedefs, structures, and compiler characteristics.
506
AC_C_CONST
507
AC_C_INLINE
508
AC_TYPE_UID_T
Niels Möller's avatar
Niels Möller committed
509
AC_TYPE_SIZE_T
510 511
AC_HEADER_TIME

512
# Needed by the supplied memcmp.c
Niels Möller's avatar
Niels Möller committed
513 514
AC_C_BIGENDIAN

Niels Möller's avatar
Niels Möller committed
515 516 517
AC_CHECK_SIZEOF(short, 2)
AC_CHECK_SIZEOF(int, 4)
AC_CHECK_SIZEOF(long, 4)
518 519

# FIXME: We should check that a pid_t fits in an int
Niels Möller's avatar
Niels Möller committed
520
	
521
# Checks for library functions.
522

523 524 525
LSH_FUNC_ALLOCA
LSH_FUNC_STRERROR
LSH_FUNC_STRSIGNAL
526 527
AC_FUNC_MEMCMP
AC_FUNC_VPRINTF
528
AC_CHECK_FUNCS(select socket strtol alarm)
529
AC_CHECK_FUNCS(getrusage gettimeofday)
530
AC_CHECK_FUNCS(getspnam)
531
AC_CHECK_FUNCS(vsnprintf inet_aton)
532
AC_CHECK_FUNCS(openpty)
533
AC_CHECK_FUNCS(cfmakeraw)
534
AC_CHECK_FUNCS(logwtmp login logout pututline pututxline updwtmp updwtmpx)
535
AC_CHECK_FUNCS(getaddrinfo getnameinfo gai_strerror)
536
AC_CHECK_FUNCS(setrlimit)
537 538
AC_FUNC_GETPGRP
AC_CHECK_FUNCS(syslog)
539

540
# FIXME: Is there a better way in autoconf 2.50?
541 542 543 544 545 546 547 548 549
AC_CACHE_CHECK([if netdb.h defines AI_NUMERICHOST],
  lsh_cv_sys_ai_numerichost,
  [AC_EGREP_CPP(yes,
    [#include <netdb.h>
     #ifdef AI_NUMERICHOST
     yes
     #endif
    ], lsh_cv_sys_ai_numerichost=yes,
       lsh_cv_sys_ai_numerichost=no)])
550 551

AH_TEMPLATE([HAVE_AI_NUMERICHOST], [Define if AI_NUMERICHOST exists])
552 553 554 555
if test x$lsh_cv_sys_ai_numerichost = xyes ; then
  AC_DEFINE(HAVE_AI_NUMERICHOST)
fi

556
AC_CHECK_FUNCS(poll,,[AC_LIBOBJ([jpoll])])
Niels Möller's avatar
Niels Möller committed
557

558
# Test if the libc includes a good enough argp.
559
if test x$with_system_argp = xyes ; then
560
  LSH_LIB_ARGP(,with_system_argp=no)
561 562
fi

563 564 565
# We don't use LIBOBJS for this, as the LIBOBJS are added to
# liblsh.a, and we can't add an archive to an archive.
LIBARGP=""
566
DOTDOT_LIBARGP=""
567
if test x$with_system_argp = xno ; then
Niels Möller's avatar
Niels Möller committed
568
  # FIXME: Perhaps it's better to use an absolute path?
569
  LIBARGP="argp/libargp.a"
570 571
  # Needed for linking in src/testsuite.
  DOTDOT_LIBARGP="../argp/libargp.a"
572
fi
573

574
AC_SUBST(LIBARGP)
575
AC_SUBST(DOTDOT_LIBARGP)
576

577
# Check for broken shutdown
578 579
AC_CACHE_CHECK(for working shutdown on AF_UNIX sockets,
	       lsh_cv_func_shutdown_works_on_unix_sockets,
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606
[
AC_TRY_RUN([
#include <stdio.h>

#include <errno.h>

#include <sys/types.h>
#include <sys/socket.h>

#include <signal.h>

#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif

/* Creates a one-way socket connection. Returns 1 on success, 0 on
 * failure. fds[0] is for reading, fds[1] for writing (like for the
 * pipe() system call). */
static int make_pipe(int *fds)
{

#ifndef SHUT_RD
#define SHUT_RD 0
#define SHUT_WR 1
#define SHUT_RDWR 2
#endif

607
  if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0)
608 609 610 611 612 613 614 615
    {
      fprintf(stderr, "socketpair() failed: %s\n", strerror(errno));
      return 0;
    }
  fprintf(stderr, "Created socket pair. Using fd:s %d <-- %d\n", fds[0], fds[1]);

  if(shutdown(fds[0], SHUT_WR) < 0)
    {
616 617
      fprintf(stderr, "shutdown(%d, SHUT_WR) failed: %s\n",
	      fds[0], strerror(errno));
618 619 620 621
      return 0;
    }
  if (shutdown(fds[1], SHUT_RD) < 0)
    {
622 623
      fprintf(stderr, "shutdown(%d, SHUT_RD) failed: %s\n",
	      fds[1], strerror(errno));
624 625 626 627 628 629 630 631 632 633 634 635 636 637 638
      return 0;
    }

  return 1;
}

int main(int argc, char **argv)
{
  int fds[2];
  
  if (!make_pipe(fds))
    exit(1);

  if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
    {
639
      fprintf(stderr, "signal failed.\n");
640 641 642 643 644 645 646 647 648
      exit(1);
    }

  if ( (write(fds[1], "foo", 3) < 0)
       && (errno == EPIPE))
    exit(1);

  exit(0);
}
649 650 651
], lsh_cv_func_shutdown_works_on_unix_sockets=yes,
   lsh_cv_func_shutdown_works_on_unix_sockets=no,
   lsh_cv_func_shutdown_works_on_unix_sockets=yes)])
652

653 654
AH_TEMPLATE([SHUTDOWN_WORKS_WITH_UNIX_SOCKETS],
	    [Define to indicate that shutdown seems to work properly])
655
if test x$lsh_cv_func_shutdown_works_on_unix_sockets = xyes ; then
656 657 658
    AC_DEFINE(SHUTDOWN_WORKS_WITH_UNIX_SOCKETS)
fi

659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716
AC_CACHE_CHECK(
  [for working UNIX98 ptys],
  lsh_cv_sys_unix98_ptys,
  AC_TRY_RUN([
  /* Try to obtain a working UNIX98-style pty master and slave */
  /* Based on example code from the GNU C library documentation */
  #include <stdlib.h>	/* EXIT_FAILURE, EXIT_SUCCESS, ptsname */
  #include <unistd.h>	/* close(2) */
  
  #include <sys/types.h>	/* open(2) */
  #include <sys/stat.h>	/* - " -   */
  #ifdef HAVE_FCNTL_H
  #  include <fcntl.h>	/* - " -   */
  #endif
  #ifdef HAVE_STROPTS_H
  #  include <stropts.h>	/* isastream() */
  #endif
  
  int main(int argc, char* argv[]) {
    int master, slave;
    char *name;
  
    master = open("/dev/ptmx", O_RDWR); /* PTY master multiplex */
    if (master < 0) {
  	  exit(EXIT_FAILURE);
    }
  
    if (grantpt(master) < 0 || unlockpt(master) < 0)
      goto close_master;
    name = ptsname(master);
    if (name == NULL)
      goto close_master;
  
    slave = open(name, O_RDWR);
    if (slave == -1)
      goto close_master;
  
  #ifdef HAVE_STROPTS_H
    if (isastream(slave))
      {
  	if (ioctl(slave, I_PUSH, "ptem") < 0
  	    || ioctl(slave, I_PUSH, "ldterm") < 0)
  	  goto close_slave;
      }
  #endif
  
    exit(0);
  
  close_slave:
    close (slave);
  
  close_master:
    close (master);
    exit(1);
  }
  ],
  [lsh_cv_sys_unix98_ptys=yes],
  [lsh_cv_sys_unix98_ptys=no],
717
  # Pessimistic default for cross compilation.
718 719
  [lsh_cv_sys_unix98_ptys=no]))

720 721
AH_TEMPLATE([HAVE_UNIX98_PTYS],
	    [Define if a we have working UNIX98 pty handling])
722 723 724
if test x$lsh_cv_sys_unix98_ptys = xyes; then
  AC_DEFINE(HAVE_UNIX98_PTYS)
fi
725

726
LSH_GCC_ATTRIBUTES
727
LSH_GCC_FUNCTION_NAME
728

729
AC_MSG_CHECKING(for BSD pty names)
Niels Möller's avatar
Niels Möller committed
730

731 732 733 734 735
AH_TEMPLATE([PTY_BSD_SCHEME_FIRST_CHARS],
	    [Possible first characters in a /dev/ptyXX name])
AH_TEMPLATE([PTY_BSD_SCHEME_SECOND_CHARS],
	    [Possible second characters in a /dev/ptyXX name])

736
# FIXME: What is most portable, tr -d '\n' or tr -d '\012' ?
737 738
AC_DEFINE_UNQUOTED(PTY_BSD_SCHEME_FIRST_CHARS, "`ls /dev/pty* | cut -c 9-9 | uniq | tr -d '\n'`")
AC_DEFINE_UNQUOTED(PTY_BSD_SCHEME_SECOND_CHARS, "`ls /dev/pty* | cut -c 10-10 | sort | uniq | tr -d '\n'`")
739

740
# FIXME: How can we test if the bsd scheme is likely to work?
741
AH_TEMPLATE([PTY_BSD_SCHEME], [Traditional BSD pty handling])
742 743 744
AC_DEFINE(PTY_BSD_SCHEME)
AC_MSG_RESULT([done])

745
# IPv6 support
746 747

if test x$enable_ipv6 = xyes ; then
748
  if test x$ac_cv_func_getaddrinfo != xyes ; then
749 750
    AC_MSG_WARN([getaddrinfo not found. Disabling IPv6 support])
    enable_ipv6=no
751
  elif test x$ac_cv_func_gai_strerror != xyes ; then
752 753
    AC_MSG_WARN([gai_strerror not found. Disabling IPv6 support])
    enable_ipv6=no
754
  elif test x$lsh_cv_sys_ai_numerichost != xyes ; then
755 756
    AC_MSG_WARN([AI_NUMERICHOST not defined. Disabling IPv6 support])
    enable_ipv6=no
757 758 759
  fi
fi

760
AH_TEMPLATE([WITH_IPV6], [For Ipv6 support])
761
if test x$enable_ipv6 = xyes ; then
762 763 764
  AC_DEFINE(WITH_IPV6)
fi

765
AC_CONFIG_SUBDIRS(src/argp)
766
AC_CONFIG_SUBDIRS(src/nettle)
767
AC_CONFIG_SUBDIRS(src/spki)
768
AC_CONFIG_SUBDIRS(src/sftp)
769

770 771
# Set these flags *last*, or else the test programs won't compile
if test x$GCC = xyes ; then
772 773 774 775 776 777 778 779 780
  # Using -ggdb3 makes (some versions of) Redhat's gcc-2.96 dump core
  if "$CC" --version | grep '^2\.96$' 1>/dev/null 2>&1; then
    true
  else
    CFLAGS="$CFLAGS -ggdb3"
  fi
  CFLAGS="$CFLAGS -Wall -W \
  -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes \
  -Wpointer-arith -Wbad-function-cast -Wnested-externs"
781

782 783
# Don't enable -Wcast-align as it results in tons of warnings in the
# DES code. And when using stdio.
784 785
# Don't enable -Waggregate-return, as that causes warnings for glibc
# inttypes.h.
786

787
fi
Niels Möller's avatar
Niels Möller committed
788

789 790 791 792
AC_SUBST(BUILD_ARCH, `uname -p`)
AC_SUBST(BUILD_OSSYS,`uname -s`)
AC_SUBST(BUILD_OSREV,`uname -r`)

793
AC_CONFIG_FILES([Makefile doc/Makefile misc/Makefile
794
	  src/Makefile src/scm/Makefile
795
	  src/testsuite/Makefile src/rsync/Makefile
796
	  contrib/Makefile contrib/lsh.spec contrib/solpkg.sh])
797
AC_OUTPUT