configure.in 19.1 KB
Newer Older
1
dnl -*- mode: shell-script; sh-indentation: 2; -*-
2
dnl $Id$
3

Niels Möller's avatar
Niels Möller committed
4
dnl Process this file with autoconf to produce a configure script.
Niels Möller's avatar
Niels Möller committed
5
AC_INIT(src/lsh_types.h)
Niels Möller's avatar
Niels Möller committed
6

7
AM_INIT_AUTOMAKE(lsh, 1.3)
Niels Möller's avatar
Niels Möller committed
8

Niels Möller's avatar
Niels Möller committed
9
AM_CONFIG_HEADER(config.h)
Niels Möller's avatar
Niels Möller committed
10

11
AC_DEFINE_UNQUOTED(PREFIX, "`echo $prefix | sed "s@^NONE@$ac_default_prefix@"`")
12
13

dnl NOTE: The definition below is broken.
14
AC_DEFINE_UNQUOTED(SBINDIR, "`echo $sbindir | sed "s@^NONE@$prefix/sbin@" | sed "s@^NONE@$ac_default_prefix@"`")
15

Niels Möller's avatar
Niels Möller committed
16
17
18
19
dnl This macro turns of a the Makefile.in: Makefile.am dependencies, unless
dnl --enable-maintainer-mode is passed to ./configure. But I want
dnl maintainermode to be *on* by default.
dnl AM_MAINTAINER_MODE
20

21
22
23
24
25
26
27
28
29
30
31
32
# 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

Niels Möller's avatar
Niels Möller committed
33
# We want to compile the crypto lib for use with lsh
Niels Möller's avatar
Niels Möller committed
34
CPPFLAGS="$CPPFLAGS -I$srcdir -I$srcdir/src -I$srcdir/src/symmetric/include -DLSH"
Niels Möller's avatar
Niels Möller committed
35

36
37
38
39
# 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
40
41
42

CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"

43

44
dnl Check options
45
AC_ARG_ENABLE(debug_alloc,
46
47
  [--enable-debug-alloc    Enable memory allocation sanity checks],,
  [enable_debug_alloc=no])
48
49
  
if test x$enable_debug_alloc = xyes ; then
50
51
52
  AC_DEFINE(DEBUG_ALLOC)
fi

53
AC_ARG_ENABLE(debug_trace,
54
55
  [--enable-debug-trace    Enable tracing support],,
  [enable_debug_trace=no])
56

57
if test x$enable_debug_trace = xyes ; then
58
59
60
  AC_DEFINE(DEBUG_TRACE)
fi

Niels Möller's avatar
Niels Möller committed
61
62
63
64
AC_ARG_ENABLE(gcov,
  [--enable-gcov          Instrument for gcov (requires a modern gcc)],,
  [enable_gcov=no])

65
AC_ARG_WITH(zlib,
66
  [--without-zlib    Don't use zlib compression],,
67
  [with_zlib=yes])
68
69
70
71

dnl Checking this variable is delayed until we have checked if zlib is
dnl actually available.

72
73
74
AC_ARG_ENABLE(pty,
  [--without-pty   Disable pty support],,
  [enable_pty=yes])
75

76
if test x$enable_pty = xyes ; then
77
78
79
  AC_DEFINE(WITH_PTY_SUPPORT)
fi

80
AC_ARG_WITH(sshd1,
81
  [--with-sshd1[=PROGRAM]    support fallback to SSH1 daemon],,
82
  [with_sshd1=yes])
83

84
85
86
87
88
89
90
91
92
# Default sshd1 path
if test x$with_sshd1 = xyes ; then
  with_sshd1=/usr/local/sbin/sshd1
fi

if test x$with_sshd1 != xno ; then
  AC_DEFINE(WITH_SSH1_FALLBACK)
  AC_DEFINE_UNQUOTED(SSHD1,"$with_sshd1")
fi
93

94
95
96
AC_ARG_ENABLE(idea,
  [--enable-idea    Support the patent-encumbered IDEA algorithm],,
  [enable_idea=no])
97

98
if test x$enable_idea = xyes ; then
99
100
  AC_DEFINE(WITH_IDEA)
fi
101

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

106
107
108
109
AC_ARG_ENABLE(kerberos,
  [--disable-kerberos Don't support kerberos],,
  [enable_kerberos=yes])
  
110
111
112
113
if test x$enable_srp = xyes ; then
  AC_DEFINE(WITH_SRP)
fi

114
115
116
AC_ARG_ENABLE(datafellows_workarounds,
  [--disable-datafellows-workarounds    Disable bug-compatibility with SSH Inc's clients and servers],,
  [enable_datafellows_workarounds=yes])
117

118
if test x$enable_datafellows_workarounds = xyes ; then
119
  AC_DEFINE(DATAFELLOWS_WORKAROUNDS)
120
121
fi

122
123
124
AC_ARG_ENABLE(tcp_forward,
  [--disable-tcp-forward        Disable tcp forwarding],,
  [enable_tcp_forward=yes])
125

126
if test x$enable_tcp_forward = xyes ; then
127
128
  AC_DEFINE(WITH_TCP_FORWARD)
fi
129

130
131
132
AC_ARG_ENABLE(x11_forward,
  [--disable-x11-forward        Disable x11 forwarding (proxy only)],,
  [eanble_x11_forward=yes])
133

134
if test x$enable_x11_forward = xyes ; then
135
136
137
  AC_DEFINE(WITH_X11_FORWARD)
fi

138
139
AC_ARG_ENABLE(agent_forward,
  [--disable-agent-forward      Disable auth-agent forwarding (proxy only)],,
140
141
  [with_agent_forward=yes])

142
if test x$disable_agent_forward = xyes ; then
143
144
145
  AC_DEFINE(WITH_AGENT_FORWARD)
fi

146
147
148
AC_ARG_WITH(scheme,
  [--with-scheme[=PROGRAM]    Use a particular scheme implementation],,
  [with_scheme=])
149
150

AC_ARG_WITH(system-argp,
151
  [--without-system-argp    Don't use the system's argp],,
152
  [with_system_argp=yes])
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167

dnl IPv6 support
AC_ARG_ENABLE(ipv6,
  [--disable-ipv6             Disable IPv6 support],,
  [enable_ipv6=yes])

dnl utmp/wtmp logging 
AC_ARG_ENABLE(utmp,
  [--disable-utmp             Disable utmp and wtmp support],,
  [enable_utmp=yes])

if test x$enable_utmp = xyes ; then
  AC_DEFINE(WITH_UTMP)
fi

168
169
170
171
172
173
174
175
AC_ARG_WITH(include-path,
  [--with-include-path        A colon-separated list of directories to search for include files.],,
  [with_include_path=''])

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

176
177
178
179
180
AC_ARG_WITH(lib-path,
  [--with-lib-path            A colon-separated list of directories to search for libraries.],,
  [with_lib_path=''])

if test x$with_lib_path != x ; then
181
  LDFLAGS="-L `echo $with_lib_path | sed 's/:/ -L /g'`"
182
183
184
185
186
187
188
189
190
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

Niels Möller's avatar
Niels Möller committed
191
192
193
dnl Checks for programs.
AC_PROG_CC
AC_PROG_MAKE_SET
Niels Möller's avatar
Niels Möller committed
194
AC_PROG_RANLIB
195
AM_PROG_CC_STDC
Niels Möller's avatar
Niels Möller committed
196

197
if test "x$am_cv_prog_cc_stdc" = xno ; then
198
199
200
  AC_ERROR([the C compiler doesn't handle ANSI-C])
fi

201
202
203
204
# Use a particular scheme implementation?
if test x$with_scheme != x ; then
  AC_PATH_PROG(SCHEME_PROGRAM, $with_scheme,, $PATH)
else  
205
  AC_PATH_PROGS(SCHEME_PROGRAM, guile scsh,, $PATH)
206
fi
207
208

if test x$SCHEME_PROGRAM = x ; then
209
210
  AC_MSG_WARN([No scheme implementation found.
This is fine as long as you don't modify the source files.])
211
212
213
  SCHEME_PROGRAM=false
fi

214
215
216
SCHEME_NAME=`basename $SCHEME_PROGRAM`
AC_SUBST(SCHEME_NAME)

217
218
AC_PATH_PROG(BASH, bash,, $PATH)
AC_PATH_PROG(GROFF, groff,, $PATH)
219
220
221
222
223
224
225
226
227
228
229
230
AC_PATH_PROG(M4, m4, m4)

AC_CACHE_CHECK([if m4 can handle eight-bit quote characters],
  lsh_cv_prog_m4_quote_8bit,
  [ if test xfoo = x`echo 'change''quote(,)foo' | $M4`; then
      lsh_cv_prog_m4_quote_8bit=yes
    else   
      lsh_cv_prog_m4_quote_8bit=no
    fi])

if test x$lsh_cv_prog_m4_quote_8bit = xno; then
  AC_MSG_WARN(  
231
232
233
[To get the testsuite to work properly, you may need to
upgrade to a better version than GNU m4 1.4, or recompile
it with CFLAGS=-funsigned-char.
234
Latest version is available at <URL: http://www.seindal.dk/rene/gnu/>])
235
  M4="false --"
236
fi
Niels Möller's avatar
Niels Möller committed
237
238
239

dnl Checks for header files.
AC_HEADER_STDC
240

241
dnl Some debian systems have both gmp and gmp2.
242
dnl This will probably not work right if both gmp.h and gmp2/gmp.h exists,
243
dnl and gmp.h is too old (i.e GMP-1.x).
244
245
246
247
248
gmp_header_found=no
AC_CHECK_HEADERS(gmp.h gmp2/gmp.h, [gmp_header_found=yes; break])
if test "$gmp_header_found" = no; then
  AC_ERROR([Neither gmp.h nor gmp2/gmp.h found])
fi
249
  
250
AC_CHECK_HEADERS(fcntl.h strings.h sys/time.h unistd.h)
251
AC_CHECK_HEADERS(shadow.h)
252
253
254
if test x$with_zlib = xyes; then
  AC_CHECK_HEADERS(zlib.h,, [with_zlib=no])
fi
255
AC_CHECK_HEADERS(poll.h sys/poll.h)
256
AC_CHECK_HEADERS(libutil.h)
257
AC_CHECK_HEADERS(crypt.h)
258
259
AC_CHECK_HEADERS(pty.h)
AC_CHECK_HEADERS(stropts.h)
260
AC_CHECK_HEADERS(syslog.h)
261
AC_CHECK_HEADERS(argp.h)
262

263
264
265
AC_CHECK_HEADERS(utmp.h, [have_utmp_h=yes], [have_utmp_h=no])

if test x$have_utmp_h = xyes; then
266
267
268
269
270
271
272
273
274
275
  AC_CHECK_MEMBER([#include <sys/types.h>
#include <utmp.h>], [utmp], [ut_host])
  AC_CHECK_MEMBER([#include <sys/types.h>
#include <utmp.h>], [utmp], [ut_name])
  AC_CHECK_MEMBER([#include <sys/types.h>
#include <utmp.h>], [utmp], [ut_user])
  AC_CHECK_MEMBER([#include <sys/types.h>
#include <utmp.h>], [utmp], [ut_addr])
  AC_CHECK_MEMBER([#include <sys/types.h>
#include <utmp.h>], [utmp], [ut_addr_v6])
276
fi
277

278
279
AC_CHECK_HEADERS(utmpx.h)

280
281
282
283
if test x$enable_kerberos = xyes; then
  AC_CHECK_HEADERS(krb5.h,, [enable_kerberos=no])
fi

284
285
286
287
288
289
dnl Some systems (in particular, Unixware) doesn't have socklen_t, but
dnl uses size_t. Falling back to int will cause some warnings.

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

290
AC_TYPE_SOCKLEN_T
291

292
dnl Find the SSH1 daemon; try 'sshd1' first; if it fails, look for 'sshd'
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
dnl ## if test x$with_sshd1 = xyes ; then
dnl ## 	 AC_DEFINE(SSH1_FALLBACK)
dnl ## 	 dnl We have to provide an additional path: regular users seldomly have
dnl ## 	 dnl the sbin directories in their $PATH.
dnl ## 	 AC_PATH_PROG(SSHD1BIN, sshd1, [],
dnl ## 	   $PATH:/usr/local/sbin:/usr/local/etc:/usr/sbin:/usr/etc:/sbin:/etc)
dnl ## 	 if test x$SSHD1BIN = x ; then
dnl ## 	   AC_PATH_PROG(SSHD1BIN, sshd, [],
dnl ## 	     $PATH:/usr/local/sbin:/usr/local/etc:/usr/sbin:/usr/etc:/sbin:/etc)
dnl ## 	 fi
dnl ## 	 if test x$SSHD1BIN = x ; then
dnl ## 	   AC_MSG_ERROR([
dnl ## You requested SSH1 fallback support (--with-sshd1), but no sshd1 could be found.
dnl ## You can
dnl ## - supply the location of sshd1, i.e. --with-sshd1=/home/foo/sbin/sshd ,
dnl ## - install sshd1 (ftp://ftp.cs.hut.fi/pub/ssh/); note that it is not free
dnl ## 	 software, or
dnl ## - configure --without-sshd1 .
dnl ## ])
dnl ## 	 fi
dnl ## 
dnl ## 	 dnl OK. We've found an SSH1 daemon. Now we need to make sure it is
dnl ## 	 dnl recent enough to be used as a fallback daemon. This means it has to
dnl ## 	 dnl support the -V option, which tells it not to read the client version 
dnl ## 	 dnl string as lshd has already done that, and which supplies that version
dnl ## 	 dnl string.
dnl ## 	 AC_MSG_CHECKING(if $SSHD1BIN has the -V compatibility flag)
dnl ## changequote(<<, >>)dnl
dnl ## 	 if ($SSHD1BIN -h 2>&1 ; true) | grep '^[ \t]*-V' > /dev/null ; then
dnl ## changequote([, ])dnl
dnl ## 	   AC_MSG_RESULT(yes)
dnl ## 	 else
dnl ## 	   AC_MSG_ERROR([
dnl ## Found SSH1 daemon ]$SSHD1BIN[, but it does not support the -V option.
dnl ## This means we cannot use it as a fallback daemon. Please install a more recent 
dnl ## SSH1 daemon (ftp://ftp.cs.hut.fi/pub/ssh/), or configure --without-sshd1 .])
dnl ## 	 fi
dnl ## 	 AC_DEFINE_UNQUOTED(SSHD1,"$SSHD1BIN")
dnl ## fi
332

333

334
AC_SEARCH_LIBGMP(gmp gmp2,
335
  [LSH_RPATH_FIX],
336
  [AC_ERROR([GMP is missing. Get gmp-2.0.2 or better from ftp://ftp.gnu.org/pub/gnu/gmp]) ])
337
338
339
340
341

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

342
343
344
345
if test x$with_zlib = xyes; then
  LSH_RPATH_FIX
fi

346
347
348
349
350
351
352
AC_CHECK_LIB(crypt, crypt)
AC_CHECK_LIB(xnet, inet_addr)
AC_CHECK_LIB(nsl, gethostbyname)
AC_CHECK_LIB(socket, setsockopt)
dnl logwtmp is also in libutil
AC_CHECK_LIB(util, openpty)
dnl This macro is new in autoconf-2.13
353
AC_SEARCH_LIBS(syslog, bsd socket inet, [AC_DEFINE(HAVE_SYSLOG)])
354
355
356
357
358
359

dnl Should we use zlib?
if test x$with_zlib = xyes ; then
  AC_DEFINE(WITH_ZLIB)
fi

360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
# 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
  AC_CHECK_KRB_LIB(roken, strlcpy)
  AC_CHECK_KRB_LIB(resolv, dn_expand)
  AC_CHECK_KRB_LIB(des, des_cbc_encrypt)
  AC_CHECK_KRB_LIB(asn1, der_get_octet_string)
  AC_CHECK_KRB_LIB(krb5, krb5_cc_gen_new,, [enable_kerberos=no])
fi

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)

Niels Möller's avatar
Niels Möller committed
380
381
if test "x$enable_gcov" = "xyes"; then
  CFLAGS="$CFLAGS -ftest-coverage -fprofile-arcs"
382
  AC_DEFINE(WITH_GCOV)
Niels Möller's avatar
Niels Möller committed
383
384
fi

Niels Möller's avatar
Niels Möller committed
385
dnl Checks for typedefs, structures, and compiler characteristics.
386
AC_C_CONST
387
AC_C_INLINE
388
AC_TYPE_UID_T
Niels Möller's avatar
Niels Möller committed
389
AC_TYPE_SIZE_T
390
391
AC_HEADER_TIME

Niels Möller's avatar
Niels Möller committed
392
393
394
dnl Needed by the supplied memcmp.c
AC_C_BIGENDIAN

Niels Möller's avatar
Niels Möller committed
395
396
397
AC_CHECK_SIZEOF(short, 2)
AC_CHECK_SIZEOF(int, 4)
AC_CHECK_SIZEOF(long, 4)
Niels Möller's avatar
Niels Möller committed
398
399
dnl FIXME: We should check that a pid_t fits in an int
	
Niels Möller's avatar
Niels Möller committed
400
dnl Checks for library functions.
401
402
403
AC_FUNC_ALLOCA
AC_FUNC_MEMCMP
AC_FUNC_VPRINTF
404
AC_CHECK_FUNCS(select socket strerror strsignal strtol)
405
AC_CHECK_FUNCS(getrusage gettimeofday)
406
AC_CHECK_FUNCS(getspnam)
407
AC_CHECK_FUNCS(vsnprintf inet_aton)
408
AC_CHECK_FUNCS(openpty)
409
AC_CHECK_FUNCS(cfmakeraw)
410
AC_CHECK_FUNCS(logwtmp login logout)
411
AC_CHECK_FUNCS(getaddrinfo getnameinfo gai_strerror)
412
413
414
AC_FUNC_GETPGRP
AC_CHECK_FUNCS(syslog)
AC_REPLACE_FUNCS(memxor)
415

416
417
418
419
420
421
422
423
424
425
426
427
428
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)])
if test x$lsh_cv_sys_ai_numerichost = xyes ; then
  AC_DEFINE(HAVE_AI_NUMERICHOST)
fi

429
430
431
432
433
434
435
dnl  dnl Needed by argp
dnl  AC_CHECK_FUNCS(mempcpy strndup)
dnl  AC_CHECK_FUNCS(flockfile putc_unlocked)
dnl  AC_CHECK_FUNCS(fputs_unlocked fwrite_unlocked)
dnl  
dnl  AC_CHECK_VAR(program_invocation_name, [char *])
dnl  AC_CHECK_VAR(program_invocation_short_name, [char *])
436
437

AC_CHECK_FUNCS(poll,,[LIBOBJS="jpoll.o $LIBOBJS"])
Niels Möller's avatar
Niels Möller committed
438

439
# Test if the libc includes a good enough argp.
440
if test x$with_system_argp = xyes ; then
441
442
dnl  AC_CHECK_FUNCS(argp_parse,, with_system_argp=no)
  AC_LIB_ARGP(,with_system_argp=no)
443
444
fi

445
446
447
# 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=""
448
if test x$with_system_argp = xno ; then
Niels Möller's avatar
Niels Möller committed
449
  # FIXME: Perhaps it's better to use an absolute path?
450
  LIBARGP="argp/libargp.a"
451
fi
452

453
454
AC_SUBST(LIBARGP)

455
dnl Check for broken shutdown
456
457
AC_CACHE_CHECK(for working shutdown on AF_UNIX sockets,
	       lsh_cv_func_shutdown_works_on_unix_sockets,
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
[
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

485
  if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0)
486
487
488
489
490
491
492
493
    {
      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)
    {
494
495
      fprintf(stderr, "shutdown(%d, SHUT_WR) failed: %s\n",
	      fds[0], strerror(errno));
496
497
498
499
      return 0;
    }
  if (shutdown(fds[1], SHUT_RD) < 0)
    {
500
501
      fprintf(stderr, "shutdown(%d, SHUT_RD) failed: %s\n",
	      fds[1], strerror(errno));
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
      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)
    {
517
      fprintf(stderr, "signal failed.\n");
518
519
520
521
522
523
524
525
526
      exit(1);
    }

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

  exit(0);
}
527
528
529
], 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)])
530

531
if test x$lsh_cv_func_shutdown_works_on_unix_sockets = xyes ; then
532
533
534
    AC_DEFINE(SHUTDOWN_WORKS_WITH_UNIX_SOCKETS)
fi

535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
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],
  dnl FIXME: Pessimistic default for cross compilation.
  [lsh_cv_sys_unix98_ptys=no]))

if test x$lsh_cv_sys_unix98_ptys = xyes; then
  AC_DEFINE(HAVE_UNIX98_PTYS)
fi
  
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
dnl Check for gcc's __attribute__ construction
AC_CACHE_CHECK(for __attribute__,
	       lsh_cv_c_attribute,
[ AC_TRY_COMPILE([
#include <stdlib.h>
],
[
static void foo(void) __attribute__ ((noreturn));

static void __attribute__ ((noreturn))
foo(void)
{
  exit(1);
}
],
lsh_cv_c_attribute=yes,
lsh_cv_c_attribute=no)])

618
619
if test "x$lsh_cv_c_attribute" = "xyes"; then
  AC_DEFINE(HAVE_GCC_ATTRIBUTE)
620
621
fi

622
623
624
625
626
627
628
629
630
631
632
633
dnl Check for gcc's __FUNCTION__ variable
AC_CACHE_CHECK(for __FUNCTION__,
	       lsh_cv_c_FUNCTION,
  [ AC_TRY_COMPILE(,
      [ void foo(void) { char c = __FUNCTION__[0]; } ],
      lsh_cv_c_FUNCTION=yes,
      lsh_cv_c_FUNCTION=no)])

if test "x$lsh_cv_c_FUNCTION" = "xyes"; then
  AC_DEFINE(HAVE_GCC_FUNCTION)
fi

634
635
636
637
638
639
dnl Check for the offsetof macro
dnl FIXME: This is usually defined in stddef.h

AC_CACHE_CHECK(for offsetof,
	       lsh_cv_c_offsetof,
  [ AC_TRY_COMPILE(,
640
641
      [ #include <stddef.h>
	struct s { int a; int b; };
642
643
644
645
646
647
648
        int foo(void) { return offsetof(struct s, b); }	],
      lsh_cv_c_offsetof=yes,
      lsh_cv_c_offsetof=no)])

if test "x$lsh_cv_c_offsetof" = "xyes"; then
  AC_DEFINE(HAVE_C_OFFSETOF)
fi
649

650
AC_MSG_CHECKING(for BSD pty names)
Niels Möller's avatar
Niels Möller committed
651
652

dnl FIXME: What is most portable, tr -d '\n' or tr -d '\012' ?
653
654
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'`")
655
656

dnl FIXME: How can we test if the bsd scheme is likely to work?
657
658
659
AC_DEFINE(PTY_BSD_SCHEME)
AC_MSG_RESULT([done])

660
dnl IPv6 support
661
662
663

if test x$enable_ipv6 = xyes ; then
  AC_CACHE_CHECK([if IPv6 is supported],
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
    lsh_cv_sys_ipv6,
    [AC_TRY_RUN([/* AF_INET6 avalable check */
  #include <sys/types.h>
  #include <sys/socket.h>
  int main(int argc, char **argv)
  {
   if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
     exit(1);
   else
     exit(0);
  }
  ], lsh_cv_sys_ipv6=yes,
     lsh_cv_sys_ipv6=no,
     lsh_cv_sys_ipv6=no)])
  
679
680
  if test x$lsh_cv_sys_ipv6 != xyes ; then
    enable_ipv6=no
681
  elif test x$ac_cv_func_getaddrinfo != xyes ; then
682
683
    AC_MSG_WARN([getaddrinfo not found. Disabling IPv6 support])
    enable_ipv6=no
684
  elif test x$ac_cv_func_gai_strerror != xyes ; then
685
686
    AC_MSG_WARN([gai_strerror not found. Disabling IPv6 support])
    enable_ipv6=no
687
  elif test x$lsh_cv_sys_ai_numerichost != xyes ; then
688
689
    AC_MSG_WARN([AI_NUMERICHOST not defined. Disabling IPv6 support])
    enable_ipv6=no
690
691
692
  fi
fi

693
if test x$enable_ipv6 = xyes ; then
694
695
696
  AC_DEFINE(WITH_IPV6)
fi

697
698
AC_CONFIG_SUBDIRS(src/argp)

699
700
# Set these flags *last*, or else the test programs won't compile
if test x$GCC = xyes ; then
701
    CFLAGS="$CFLAGS -ggdb3 -Wall -W \
Niels Möller's avatar
Niels Möller committed
702
703
704
 -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes \
 -Waggregate-return \
 -Wpointer-arith -Wbad-function-cast -Wnested-externs"
705

706
707
# Don't enable -Wcast-align as it results in tons of warnings in the
# DES code. And when using stdio.
708

709
fi
Niels Möller's avatar
Niels Möller committed
710

711
AC_OUTPUT(Makefile doc/Makefile misc/Makefile
712
	  src/Makefile src/scm/Makefile
713
	  src/testsuite/Makefile src/rsync/Makefile
714
715
	  src/symmetric/Makefile src/symmetric/include/Makefile
	  contrib/Makefile contrib/lsh.spec)