configure.ac 20.9 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
		    struct utmp.ut_exit.e_termination,
317 318 319 320 321
		    struct utmp.ut_addr,
		    struct utmp.ut_addr_v6],,,
[# if HAVE_UTMP_H
#  include <utmp.h>
# endif
322 323
])
fi
324

325 326 327 328 329 330 331
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,
332
		    struct utmpx.ut_tv.tv_sec,
333 334 335 336
		    struct utmpx.ut_syslen,
		    struct utmpx.ut_session,
		    struct utmpx.ut_pid,
		    struct utmpx.ut_exit,
337
		    struct utmpx.ut_exit.e_termination,
338 339 340
		    struct utmpx.ut_addr,
		    struct utmpx.ut_addr_v6],,,
[# if HAVE_UTMPX_H
341 342 343
#  include <utmpx.h>
# endif
])
344
fi
345

346

347

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

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

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

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

362
LSH_TYPE_SOCKLEN_T
363

364 365
# Checks for libraries

366 367 368 369
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.])])

370 371
LSH_RPATH_FIX

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

LSH_RPATH_FIX

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

381 382 383 384
if test x$with_zlib = xyes; then
  LSH_RPATH_FIX
fi

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

if test x$with_tcpwrappers = xyes; then
  AC_CHECK_LIB(wrap, request_init,, 
  [
390
      AC_MSG_WARN([Failed to link libwrap, you might try adding -lsocket to LDFLAGS])
391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408
      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


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

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

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

Pontus Freyhult's avatar
Pontus Freyhult committed
427 428 429 430 431 432 433 434 435 436 437 438
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

439 440
# Move these checks for system libraries earlier, before checks for
# gmp, liboop etc
441

442 443 444
# 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)
445
AC_SEARCH_LIBS(inet_ntop, nsl)
446 447 448 449 450 451
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)
452

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

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

462 463 464 465 466
# 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
467 468 469 470 471
  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])
472 473
fi

474
AH_TEMPLATE([WITH_KERBEROS], [For kerberos])
475 476 477 478 479 480 481 482
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)

483 484
AH_TEMPLATE([WITH_PAM], [For PAM])
if test x$enable_pam = xyes; then
485 486 487 488 489 490 491 492
  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
493 494 495 496
fi

AC_SUBST(PAM_PROGRAM)

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

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

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

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

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

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

525 526 527
LSH_FUNC_ALLOCA
LSH_FUNC_STRERROR
LSH_FUNC_STRSIGNAL
528 529
AC_FUNC_MEMCMP
AC_FUNC_VPRINTF
530
AC_CHECK_FUNCS(select socket strtol alarm)
531 532
# HP-UX doesn't have seteuid
AC_CHECK_FUNCS(seteuid setresuid)
533
AC_CHECK_FUNCS(getrusage gettimeofday)
534
AC_CHECK_FUNCS(getspnam)
535
AC_CHECK_FUNCS(vsnprintf inet_aton)
536
AC_CHECK_FUNCS(openpty)
537
AC_CHECK_FUNCS(cfmakeraw)
538
AC_CHECK_FUNCS(logwtmp login logout pututline pututxline updwtmp updwtmpx)
539
AC_CHECK_FUNCS(getaddrinfo getnameinfo gai_strerror)
540
AC_CHECK_FUNCS(setrlimit)
541 542
AC_FUNC_GETPGRP
AC_CHECK_FUNCS(syslog)
543

544
# FIXME: Is there a better way in autoconf 2.50?
545 546 547 548 549 550 551 552 553
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)])
554 555

AH_TEMPLATE([HAVE_AI_NUMERICHOST], [Define if AI_NUMERICHOST exists])
556 557 558 559
if test x$lsh_cv_sys_ai_numerichost = xyes ; then
  AC_DEFINE(HAVE_AI_NUMERICHOST)
fi

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

562
# Test if the libc includes a good enough argp.
563
if test x$with_system_argp = xyes ; then
564
  LSH_LIB_ARGP(,with_system_argp=no)
565 566
fi

567 568 569
# 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=""
570
DOTDOT_LIBARGP=""
571
if test x$with_system_argp = xno ; then
Niels Möller's avatar
Niels Möller committed
572
  # FIXME: Perhaps it's better to use an absolute path?
573
  LIBARGP="argp/libargp.a"
574 575
  # Needed for linking in src/testsuite.
  DOTDOT_LIBARGP="../argp/libargp.a"
576
fi
577

578
AC_SUBST(LIBARGP)
579
AC_SUBST(DOTDOT_LIBARGP)
580

581
# Check for broken shutdown
582 583
AC_CACHE_CHECK(for working shutdown on AF_UNIX sockets,
	       lsh_cv_func_shutdown_works_on_unix_sockets,
584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610
[
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

611
  if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0)
612 613 614 615 616 617 618 619
    {
      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)
    {
620 621
      fprintf(stderr, "shutdown(%d, SHUT_WR) failed: %s\n",
	      fds[0], strerror(errno));
622 623 624 625
      return 0;
    }
  if (shutdown(fds[1], SHUT_RD) < 0)
    {
626 627
      fprintf(stderr, "shutdown(%d, SHUT_RD) failed: %s\n",
	      fds[1], strerror(errno));
628 629 630 631 632 633 634 635 636 637 638 639 640 641 642
      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)
    {
643
      fprintf(stderr, "signal failed.\n");
644 645 646 647 648 649 650 651 652
      exit(1);
    }

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

  exit(0);
}
653 654 655
], 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)])
656

657 658
AH_TEMPLATE([SHUTDOWN_WORKS_WITH_UNIX_SOCKETS],
	    [Define to indicate that shutdown seems to work properly])
659
if test x$lsh_cv_func_shutdown_works_on_unix_sockets = xyes ; then
660 661 662
    AC_DEFINE(SHUTDOWN_WORKS_WITH_UNIX_SOCKETS)
fi

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 717 718 719 720
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],
721
  # Pessimistic default for cross compilation.
722 723
  [lsh_cv_sys_unix98_ptys=no]))

724 725
AH_TEMPLATE([HAVE_UNIX98_PTYS],
	    [Define if a we have working UNIX98 pty handling])
726 727 728
if test x$lsh_cv_sys_unix98_ptys = xyes; then
  AC_DEFINE(HAVE_UNIX98_PTYS)
fi
729

730
LSH_GCC_ATTRIBUTES
731
LSH_GCC_FUNCTION_NAME
732

733
AC_MSG_CHECKING(for BSD pty names)
Niels Möller's avatar
Niels Möller committed
734

735 736 737 738 739
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])

740
# FIXME: What is most portable, tr -d '\n' or tr -d '\012' ?
741 742
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'`")
743

744
# FIXME: How can we test if the bsd scheme is likely to work?
745
AH_TEMPLATE([PTY_BSD_SCHEME], [Traditional BSD pty handling])
746 747 748
AC_DEFINE(PTY_BSD_SCHEME)
AC_MSG_RESULT([done])

749
# IPv6 support
750 751

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

764
AH_TEMPLATE([WITH_IPV6], [For Ipv6 support])
765
if test x$enable_ipv6 = xyes ; then
766 767 768
  AC_DEFINE(WITH_IPV6)
fi

769
AC_CONFIG_SUBDIRS(src/argp)
770
AC_CONFIG_SUBDIRS(src/nettle)
771
AC_CONFIG_SUBDIRS(src/spki)
772
AC_CONFIG_SUBDIRS(src/sftp)
773

774 775
# Set these flags *last*, or else the test programs won't compile
if test x$GCC = xyes ; then
776 777 778 779 780 781 782 783 784
  # 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"
785

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

791
fi
Niels Möller's avatar
Niels Möller committed
792

793 794 795 796
AC_SUBST(BUILD_ARCH, `uname -p`)
AC_SUBST(BUILD_OSSYS,`uname -s`)
AC_SUBST(BUILD_OSREV,`uname -r`)

797
AC_CONFIG_FILES([Makefile doc/Makefile misc/Makefile
798
	  src/Makefile src/scm/Makefile
799
	  src/testsuite/Makefile src/rsync/Makefile
800
	  contrib/Makefile contrib/lsh.spec contrib/solpkg.sh])
801
AC_OUTPUT