configure.ac 21 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.4], [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
AC_CHECK_FUNCS(getrusage gettimeofday)
532
AC_CHECK_FUNCS(getspnam)
533
AC_CHECK_FUNCS(vsnprintf inet_aton)
534
AC_CHECK_FUNCS(openpty)
535
AC_CHECK_FUNCS(cfmakeraw)
536
AC_CHECK_FUNCS(logwtmp login logout pututline pututxline updwtmp updwtmpx)
537
AC_CHECK_FUNCS(getaddrinfo getnameinfo gai_strerror)
538
AC_CHECK_FUNCS(setrlimit)
539 540
AC_FUNC_GETPGRP
AC_CHECK_FUNCS(syslog)
541

542 543 544 545 546 547 548 549 550 551
# 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])

552
# FIXME: Is there a better way in autoconf 2.50?
553 554 555 556 557 558 559 560 561
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)])
562 563

AH_TEMPLATE([HAVE_AI_NUMERICHOST], [Define if AI_NUMERICHOST exists])
564 565 566 567
if test x$lsh_cv_sys_ai_numerichost = xyes ; then
  AC_DEFINE(HAVE_AI_NUMERICHOST)
fi

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

570
# Test if the libc includes a good enough argp.
571
if test x$with_system_argp = xyes ; then
572
  LSH_LIB_ARGP(,with_system_argp=no)
573 574
fi

575 576 577
# 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=""
578
DOTDOT_LIBARGP=""
579
if test x$with_system_argp = xno ; then
Niels Möller's avatar
Niels Möller committed
580
  # FIXME: Perhaps it's better to use an absolute path?
581
  LIBARGP="argp/libargp.a"
582 583
  # Needed for linking in src/testsuite.
  DOTDOT_LIBARGP="../argp/libargp.a"
584
fi
585

586
AC_SUBST(LIBARGP)
587
AC_SUBST(DOTDOT_LIBARGP)
588

589
# Check for broken shutdown
590 591
AC_CACHE_CHECK(for working shutdown on AF_UNIX sockets,
	       lsh_cv_func_shutdown_works_on_unix_sockets,
592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618
[
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

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

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

  exit(0);
}
661 662 663
], 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)])
664

665 666
AH_TEMPLATE([SHUTDOWN_WORKS_WITH_UNIX_SOCKETS],
	    [Define to indicate that shutdown seems to work properly])
667
if test x$lsh_cv_func_shutdown_works_on_unix_sockets = xyes ; then
668 669 670
    AC_DEFINE(SHUTDOWN_WORKS_WITH_UNIX_SOCKETS)
fi

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 721 722 723 724 725 726 727 728
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],
729
  # Pessimistic default for cross compilation.
730 731
  [lsh_cv_sys_unix98_ptys=no]))

732 733
AH_TEMPLATE([HAVE_UNIX98_PTYS],
	    [Define if a we have working UNIX98 pty handling])
734 735 736
if test x$lsh_cv_sys_unix98_ptys = xyes; then
  AC_DEFINE(HAVE_UNIX98_PTYS)
fi
737

738
LSH_GCC_ATTRIBUTES
739
LSH_GCC_FUNCTION_NAME
740

741
AC_MSG_CHECKING(for BSD pty names)
Niels Möller's avatar
Niels Möller committed
742

743 744 745 746 747
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])

748
# FIXME: What is most portable, tr -d '\n' or tr -d '\012' ?
749 750
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'`")
751

752
# FIXME: How can we test if the bsd scheme is likely to work?
753
AH_TEMPLATE([PTY_BSD_SCHEME], [Traditional BSD pty handling])
754 755 756
AC_DEFINE(PTY_BSD_SCHEME)
AC_MSG_RESULT([done])

757
# IPv6 support
758 759

if test x$enable_ipv6 = xyes ; then
760
  if test x$ac_cv_func_getaddrinfo != xyes ; then
761 762
    AC_MSG_WARN([getaddrinfo not found. Disabling IPv6 support])
    enable_ipv6=no
763
  elif test x$ac_cv_func_gai_strerror != xyes ; then
764 765
    AC_MSG_WARN([gai_strerror not found. Disabling IPv6 support])
    enable_ipv6=no
766
  elif test x$lsh_cv_sys_ai_numerichost != xyes ; then
767 768
    AC_MSG_WARN([AI_NUMERICHOST not defined. Disabling IPv6 support])
    enable_ipv6=no
769 770 771
  fi
fi

772
AH_TEMPLATE([WITH_IPV6], [For Ipv6 support])
773
if test x$enable_ipv6 = xyes ; then
774 775 776
  AC_DEFINE(WITH_IPV6)
fi

777
AC_CONFIG_SUBDIRS(src/argp)
778
AC_CONFIG_SUBDIRS(src/nettle)
779
AC_CONFIG_SUBDIRS(src/spki)
780
AC_CONFIG_SUBDIRS(src/sftp)
781

782 783
# Set these flags *last*, or else the test programs won't compile
if test x$GCC = xyes ; then
784 785 786 787 788 789 790 791 792
  # 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"
793

794 795
# Don't enable -Wcast-align as it results in tons of warnings in the
# DES code. And when using stdio.
796 797
# Don't enable -Waggregate-return, as that causes warnings for glibc
# inttypes.h.
798

799
fi
Niels Möller's avatar
Niels Möller committed
800

801 802 803 804
AC_SUBST(BUILD_ARCH, `uname -p`)
AC_SUBST(BUILD_OSSYS,`uname -s`)
AC_SUBST(BUILD_OSREV,`uname -r`)

805
AC_CONFIG_FILES([Makefile doc/Makefile misc/Makefile
806
	  src/Makefile src/scm/Makefile
807
	  src/testsuite/Makefile src/rsync/Makefile
808
	  contrib/Makefile contrib/lsh.spec contrib/solpkg.sh])
809
AC_OUTPUT