configure.ac 22.1 KB
Newer Older
Niels Möller's avatar
Niels Möller committed
1
dnl Process this file with autoconf to produce a configure script.
Niels Möller's avatar
Niels Möller committed
2
AC_INIT([lsh], [1.5.5], [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 106 107 108
AC_ARG_ENABLE(gss,
  AC_HELP_STRING([--disable-gss], [Disable the (experimental) support for GSS]),,
  [enable_gss=yes])

109
AC_ARG_ENABLE(kerberos,
110
  AC_HELP_STRING([--disable-kerberos], [Don't support kerberos]),,
111
  [enable_kerberos=yes])
112

113 114 115 116
AC_ARG_ENABLE(pam,
  AC_HELP_STRING([--disable-pam], [Don't support PAM]),,
  [enable_pam=yes])

117
AH_TEMPLATE([WITH_SRP], [Define if SRP should be supported])
118 119
if test x$enable_srp = xyes ; then
  AC_DEFINE(WITH_SRP)
120
  SRP_PROGRAM=srp-gen
121 122
fi

123 124
AC_SUBST(SRP_PROGRAM)

125
AC_ARG_ENABLE(datafellows_workarounds,
126 127
  AC_HELP_STRING([--disable-datafellows-workarounds],
		 [Disable bug-compatibility with SSH Inc's clients and servers]),,
128
  [enable_datafellows_workarounds=yes])
129

130 131
AH_TEMPLATE([DATAFELLOWS_WORKAROUNDS],
	    [Define to support non-standard packets of ssh2])
132
if test x$enable_datafellows_workarounds = xyes ; then
133
  AC_DEFINE(DATAFELLOWS_WORKAROUNDS)
134 135
fi

136 137 138 139 140 141 142 143 144 145 146 147 148

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


149
AC_ARG_ENABLE(tcp_forward,
150
  AC_HELP_STRING([--disable-tcp-forward], [Disable tcp forwarding]),,
151
  [enable_tcp_forward=yes])
152

153
AH_TEMPLATE([WITH_TCP_FORWARD], [Define to enable tcp forwarding])
154
if test x$enable_tcp_forward = xyes ; then
155 156
  AC_DEFINE(WITH_TCP_FORWARD)
fi
157

158
AC_ARG_ENABLE(x11_forward,
159
  AC_HELP_STRING([--disable-x11-forward], [Disable x11 forwarding (proxy only)]),,
160
  [enable_x11_forward=yes])
161

162
AH_TEMPLATE([WITH_X11_FORWARD], [Define to enable x11 forwarding])
163
if test x$enable_x11_forward = xyes ; then
164 165 166
  AC_DEFINE(WITH_X11_FORWARD)
fi

167
AC_ARG_ENABLE(agent_forward,
168
  AC_HELP_STRING([--disable-agent-forward], [Disable auth-agent forwarding (proxy only)]),,
169 170
  [with_agent_forward=yes])

171 172
AH_TEMPLATE([WITH_AGENT_FORWARD],
	    [Define to enable authentication agent forwarding])
173
if test x$disable_agent_forward = xyes ; then
174 175 176
  AC_DEFINE(WITH_AGENT_FORWARD)
fi

177
AC_ARG_WITH(scheme,
178
  AC_HELP_STRING([[--with-scheme[=PROGRAM]]], [Use a particular scheme implementation]),,
179
  [with_scheme=])
180 181

AC_ARG_WITH(system-argp,
182
  AC_HELP_STRING([--without-system-argp], [Don't use the system's argp]),,
183
  [with_system_argp=yes])
184

185
# IPv6 support
186
AC_ARG_ENABLE(ipv6,
187
  AC_HELP_STRING([--disable-ipv6], [Disable IPv6 support]),,
188 189
  [enable_ipv6=yes])

190
# utmp/wtmp logging 
191
AC_ARG_ENABLE(utmp,
192
  AC_HELP_STRING([--disable-utmp], [Disable utmp and wtmp support]),,
193 194
  [enable_utmp=yes])

195
AH_TEMPLATE([WITH_UTMP], [For utmp support])
196 197 198 199
if test x$enable_utmp = xyes ; then
  AC_DEFINE(WITH_UTMP)
fi

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

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

208
AC_ARG_WITH(lib-path,
209
  AC_HELP_STRING([--with-lib-path], [A colon-separated list of directories to search for libraries]),,
210 211 212
  [with_lib_path=''])

if test x$with_lib_path != x ; then
213
  LDFLAGS="$LDFLAGS -L`echo $with_lib_path | sed 's/:/ -L/g'`"
214 215 216 217 218 219 220 221 222
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

223
# Checks for programs.
Niels Möller's avatar
Niels Möller committed
224 225
AC_PROG_CC
AC_PROG_MAKE_SET
Niels Möller's avatar
Niels Möller committed
226
AC_PROG_RANLIB
227
AM_PROG_CC_STDC
Niels Möller's avatar
Niels Möller committed
228

229
if test "x$am_cv_prog_cc_stdc" = xno ; then
230
  AC_MSG_ERROR([the C compiler doesn't handle ANSI-C])
231 232
fi

233 234
# Use a particular scheme implementation?
if test x$with_scheme != x ; then
235 236 237 238 239 240 241 242 243
  # 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
244
else  
245
  AC_PATH_PROGS(SCHEME_PROGRAM, guile scsh,, $PATH)
246
fi
247

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

254 255 256
SCHEME_NAME=`basename $SCHEME_PROGRAM`
AC_SUBST(SCHEME_NAME)

257 258 259 260 261 262 263 264 265 266
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)

267

268
# Checks for header files.
Niels Möller's avatar
Niels Möller committed
269
AC_HEADER_STDC
270

271 272 273
# 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]))
274
  
275
AC_CHECK_HEADERS(fcntl.h strings.h sys/time.h unistd.h)
276
AC_CHECK_HEADERS(shadow.h)
277

278 279 280
if test x$with_zlib = xyes; then
  AC_CHECK_HEADERS(zlib.h,, [with_zlib=no])
fi
281
AC_CHECK_HEADERS(poll.h sys/poll.h)
282
AC_CHECK_HEADERS(libutil.h)
283
AC_CHECK_HEADERS(crypt.h)
284 285
AC_CHECK_HEADERS(pty.h)
AC_CHECK_HEADERS(stropts.h)
286
AC_CHECK_HEADERS(syslog.h)
287
AC_CHECK_HEADERS(argp.h)
288
AC_CHECK_HEADERS(sys/resource.h)
289

290
AC_CHECK_HEADERS(utmp.h, [have_utmp_h=yes], [have_utmp_h=no])
291
AC_CHECK_HEADERS(utmpx.h, [have_utmpx_h=yes], [have_utmpx_h=no])
292

293 294 295 296
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.

297
if test x$have_utmp_h = xyes; then
298 299 300
  AC_CHECK_MEMBERS([struct utmp.ut_host,
		    struct utmp.ut_name,
		    struct utmp.ut_user,
301 302
		    struct utmp.ut_time,
		    struct utmp.ut_tv,
303
		    struct utmp.ut_tv.tv_sec,
304 305 306
		    struct utmp.ut_id,
		    struct utmp.ut_syslen,
		    struct utmp.ut_session,
307 308
		    struct utmp.ut_pid,
		    struct utmp.ut_exit,
309
		    struct utmp.ut_exit.e_termination,
310 311
		    struct utmp.ut_exit.__e_termination,
		    struct utmp.ut_exit.ut_termination,
312 313 314 315 316
		    struct utmp.ut_addr,
		    struct utmp.ut_addr_v6],,,
[# if HAVE_UTMP_H
#  include <utmp.h>
# endif
317 318
])
fi
319

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

343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371
AH_TEMPLATE([WITH_GSS_K5], [Whether to use gss K5 authorization (Heimdal/MIT)])
if test x$enable_gss != xno; then
  if test x$enable_gss = xk5; then
    AC_CHECK_PROG(KRB5CONFIG, krb5-config, krb5-config, no)
    if test x$KRB5CONFIG != xno; then
      CPPFLAGS="$CPPFLAGS `$KRB5CONFIG --cflags gssapi`"
      LIBS="$LIBS `$KRB5CONFIG --libs gssapi`"
      AC_CHECK_HEADERS([gssapi.h gssapi/gssapi.h gssapi/gssapi_generic.h])
      AC_DEFINE(WITH_GSS_K5)
      AC_CHECK_DECL(GSS_C_NT_HOSTBASED_SERVICE,, [
	AC_DEFINE(GSS_C_NT_HOSTBASED_SERVICE,
		gss_nt_service_name,
		[Work around buggy MIT library])], [
#ifdef HAVE_GSSAPI_H
#include <gssapi.h>
#endif
#ifdef HAVE_GSSAPI_GSSAPI_H
#include <gssapi/gssapi.h>
#endif
#ifdef HAVE_GSSAPI_GSSAPI_GENERIC_H
#include <gssapi/gssapi_generic.h>
#endif
])
    fi
  else
    AC_CHECK_HEADERS(gss.h,, [enable_gss=no])
    AC_CHECK_LIB(gss, gss_check_version,, [enable_gss=no])
  fi
fi
372

373 374 375 376
if test x$enable_kerberos = xyes; then
  AC_CHECK_HEADERS(krb5.h,, [enable_kerberos=no])
fi

377 378 379 380
if test x$enable_pam = xyes; then
  AC_CHECK_HEADERS(security/pam_appl.h,, [enable_pam=no])
fi

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

384 385
# AC_CHECK_TYPE doesn't work, probably because the type in
# question is not defined in sys/types.h.
386

387
LSH_TYPE_SOCKLEN_T
388

389 390
# Checks for libraries

391 392 393 394
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.])])

395 396
LSH_RPATH_FIX

Niels Möller's avatar
Niels Möller committed
397 398 399 400 401
AC_CHECK_LIB([oop], [oop_sys_new],,
  [AC_MSG_ERROR([liboop is missing. Get liboop from http://www.liboop.org])])

LSH_RPATH_FIX

402 403 404 405
if test x$with_zlib = xyes; then
  AC_CHECK_LIB(z, inflate,, [with_zlib=no])
fi

406 407 408 409
if test x$with_zlib = xyes; then
  LSH_RPATH_FIX
fi

410 411 412 413 414
# FIXME: Should we let people use --with-tcpwrappers=/here/they/are?

if test x$with_tcpwrappers = xyes; then
  AC_CHECK_LIB(wrap, request_init,, 
  [
415
      AC_MSG_WARN([Failed to link libwrap, you might try adding -lsocket to LDFLAGS])
416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433
      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


434
# X11 stuff. We only need libXau.
435
# FIXME: Use AC_PATH_XTRA instead? 
436 437 438
AC_PATH_X

if test -z "$no_x" ; then
439
  if test -n "$x_includes" ; then
440
    CPPFLAGS="$CPPFLAGS -I$x_includes"
441
  fi
442
  if test -n "$x_libraries" ; then
443 444
    LDFLAGS="$LDFLAGS -L$x_libraries"
    LSH_RPATH_ADD($x_libraries)
445
  fi
446 447 448 449 450 451
fi

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

Pontus Freyhult's avatar
Pontus Freyhult committed
452 453 454 455 456 457 458 459 460 461 462 463
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

464 465
# Move these checks for system libraries earlier, before checks for
# gmp, liboop etc
466

467 468 469
# 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)
470
AC_SEARCH_LIBS(inet_ntop, nsl)
471 472 473 474 475 476
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)
477

478
# This macro is new in autoconf-2.13
479
AC_SEARCH_LIBS(syslog, bsd socket inet, [AC_DEFINE(HAVE_SYSLOG)])
480

481
AH_TEMPLATE([WITH_ZLIB], [Define if zlib should be used])
482
# Should we use zlib?
483 484 485 486
if test x$with_zlib = xyes ; then
  AC_DEFINE(WITH_ZLIB)
fi

487 488 489 490 491 492
AH_TEMPLATE([WITH_GSS], [Define if gss should be used])
# Should we use gss?
if test x$enable_gss != xno ; then
  AC_DEFINE(WITH_GSS)
fi

493 494 495 496 497
# 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
498 499 500 501 502
  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])
503 504
fi

505
AH_TEMPLATE([WITH_KERBEROS], [For kerberos])
506 507 508 509 510 511 512 513
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)

514 515
AH_TEMPLATE([WITH_PAM], [For PAM])
if test x$enable_pam = xyes; then
516 517 518 519 520 521 522 523
  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
524 525 526 527
fi

AC_SUBST(PAM_PROGRAM)

528
AH_TEMPLATE([WITH_GCOV], [Use gcov])
Niels Möller's avatar
Niels Möller committed
529 530
if test "x$enable_gcov" = "xyes"; then
  CFLAGS="$CFLAGS -ftest-coverage -fprofile-arcs"
531
  AC_DEFINE(WITH_GCOV)
Niels Möller's avatar
Niels Möller committed
532 533
fi

Niels Möller's avatar
Niels Möller committed
534 535 536 537
if test "x$enable_profiling" = "xyes"; then
  CFLAGS="$CFLAGS -pg"
fi

538
# Checks for typedefs, structures, and compiler characteristics.
539
AC_C_CONST
540
AC_C_INLINE
541
AC_TYPE_UID_T
Niels Möller's avatar
Niels Möller committed
542
AC_TYPE_SIZE_T
543 544
AC_HEADER_TIME

545
# Needed by the supplied memcmp.c
Niels Möller's avatar
Niels Möller committed
546 547
AC_C_BIGENDIAN

Niels Möller's avatar
Niels Möller committed
548 549 550
AC_CHECK_SIZEOF(short, 2)
AC_CHECK_SIZEOF(int, 4)
AC_CHECK_SIZEOF(long, 4)
551 552

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

556 557 558
LSH_FUNC_ALLOCA
LSH_FUNC_STRERROR
LSH_FUNC_STRSIGNAL
559 560
AC_FUNC_MEMCMP
AC_FUNC_VPRINTF
561
AC_CHECK_FUNCS(select socket strtol alarm)
562
AC_CHECK_FUNCS(getrusage gettimeofday)
563
AC_CHECK_FUNCS(getspnam)
564
AC_CHECK_FUNCS(vsnprintf inet_aton)
565
AC_CHECK_FUNCS(openpty)
566
AC_CHECK_FUNCS(cfmakeraw)
567
AC_CHECK_FUNCS(logwtmp login logout pututline pututxline updwtmp updwtmpx)
568
AC_CHECK_FUNCS(getaddrinfo getnameinfo gai_strerror)
569
AC_CHECK_FUNCS(setrlimit)
570 571
AC_FUNC_GETPGRP
AC_CHECK_FUNCS(syslog)
572

573 574 575 576 577 578 579 580 581 582
# HP-UX doesn't have seteuid
AC_CHECK_FUNCS(seteuid setresuid)

AH_BOTTOM(
[#if !HAVE_SETEUID
# if HAVE_SETRESUID
#  define seteuid(uid) setresuid(-1, (uid), -1)
# endif
#endif])

583
# FIXME: Is there a better way in autoconf 2.50?
584 585 586 587 588 589 590 591 592
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)])
593 594

AH_TEMPLATE([HAVE_AI_NUMERICHOST], [Define if AI_NUMERICHOST exists])
595 596 597 598
if test x$lsh_cv_sys_ai_numerichost = xyes ; then
  AC_DEFINE(HAVE_AI_NUMERICHOST)
fi

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

601
# Test if the libc includes a good enough argp.
602
if test x$with_system_argp = xyes ; then
603
  LSH_LIB_ARGP(,with_system_argp=no)
604 605
fi

606 607 608
# 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=""
609
DOTDOT_LIBARGP=""
610
if test x$with_system_argp = xno ; then
Niels Möller's avatar
Niels Möller committed
611
  # FIXME: Perhaps it's better to use an absolute path?
612
  LIBARGP="argp/libargp.a"
613 614
  # Needed for linking in src/testsuite.
  DOTDOT_LIBARGP="../argp/libargp.a"
615
fi
616

617
AC_SUBST(LIBARGP)
618
AC_SUBST(DOTDOT_LIBARGP)
619

620
# Check for broken shutdown
621 622
AC_CACHE_CHECK(for working shutdown on AF_UNIX sockets,
	       lsh_cv_func_shutdown_works_on_unix_sockets,
623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649
[
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

650
  if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0)
651 652 653 654 655 656 657 658
    {
      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)
    {
659 660
      fprintf(stderr, "shutdown(%d, SHUT_WR) failed: %s\n",
	      fds[0], strerror(errno));
661 662 663 664
      return 0;
    }
  if (shutdown(fds[1], SHUT_RD) < 0)
    {
665 666
      fprintf(stderr, "shutdown(%d, SHUT_RD) failed: %s\n",
	      fds[1], strerror(errno));
667 668 669 670 671 672 673 674 675 676 677 678 679 680 681
      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)
    {
682
      fprintf(stderr, "signal failed.\n");
683 684 685 686 687 688 689 690 691
      exit(1);
    }

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

  exit(0);
}
692 693 694
], 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)])
695

696 697
AH_TEMPLATE([SHUTDOWN_WORKS_WITH_UNIX_SOCKETS],
	    [Define to indicate that shutdown seems to work properly])
698
if test x$lsh_cv_func_shutdown_works_on_unix_sockets = xyes ; then
699 700 701
    AC_DEFINE(SHUTDOWN_WORKS_WITH_UNIX_SOCKETS)
fi

702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759
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],
760
  # Pessimistic default for cross compilation.
761 762
  [lsh_cv_sys_unix98_ptys=no]))

763 764
AH_TEMPLATE([HAVE_UNIX98_PTYS],
	    [Define if a we have working UNIX98 pty handling])
765 766 767
if test x$lsh_cv_sys_unix98_ptys = xyes; then
  AC_DEFINE(HAVE_UNIX98_PTYS)
fi
768

769
LSH_GCC_ATTRIBUTES
770
LSH_GCC_FUNCTION_NAME
771

772
AC_MSG_CHECKING(for BSD pty names)
Niels Möller's avatar
Niels Möller committed
773

774 775 776 777 778
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])

779
# FIXME: What is most portable, tr -d '\n' or tr -d '\012' ?
780 781
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'`")
782

783
# FIXME: How can we test if the bsd scheme is likely to work?
784
AH_TEMPLATE([PTY_BSD_SCHEME], [Traditional BSD pty handling])
785 786 787
AC_DEFINE(PTY_BSD_SCHEME)
AC_MSG_RESULT([done])

788
# IPv6 support
789 790

if test x$enable_ipv6 = xyes ; then
791
  if test x$ac_cv_func_getaddrinfo != xyes ; then
792 793
    AC_MSG_WARN([getaddrinfo not found. Disabling IPv6 support])
    enable_ipv6=no
794
  elif test x$ac_cv_func_gai_strerror != xyes ; then
795 796
    AC_MSG_WARN([gai_strerror not found. Disabling IPv6 support])
    enable_ipv6=no
797
  elif test x$lsh_cv_sys_ai_numerichost != xyes ; then
798 799
    AC_MSG_WARN([AI_NUMERICHOST not defined. Disabling IPv6 support])
    enable_ipv6=no
800 801 802
  fi
fi

803
AH_TEMPLATE([WITH_IPV6], [For Ipv6 support])
804
if test x$enable_ipv6 = xyes ; then
805 806 807
  AC_DEFINE(WITH_IPV6)
fi

808
AC_CONFIG_SUBDIRS(src/argp)
809
AC_CONFIG_SUBDIRS(src/nettle)
810
AC_CONFIG_SUBDIRS(src/spki)
811
AC_CONFIG_SUBDIRS(src/sftp)
812

813 814
# Set these flags *last*, or else the test programs won't compile
if test x$GCC = xyes ; then
815 816 817 818 819 820 821 822 823
  # 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"
824

825 826
# Don't enable -Wcast-align as it results in tons of warnings in the
# DES code. And when using stdio.
827 828
# Don't enable -Waggregate-return, as that causes warnings for glibc
# inttypes.h.
829

830
fi
Niels Möller's avatar
Niels Möller committed
831

832 833 834 835
AC_SUBST(BUILD_ARCH, `uname -p`)
AC_SUBST(BUILD_OSSYS,`uname -s`)
AC_SUBST(BUILD_OSREV,`uname -r`)

836
AC_CONFIG_FILES([Makefile doc/Makefile misc/Makefile
837
	  src/Makefile src/scm/Makefile
838
	  src/testsuite/Makefile src/rsync/Makefile
839
	  contrib/Makefile contrib/lsh.spec contrib/solpkg.sh])
840
AC_OUTPUT