6c463a7c05d5b956229689104f49d94ef17e9170
[alioth/cvs.git] / configure.in
1 dnl configure.in for cvs
2
3 AC_COPYRIGHT(
4 [Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
5               1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
6               Free Software Foundation, Inc.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.])
17
18 AC_INIT([Concurrent Versions System (CVS)],[1.12.13-MirDebian-9],
19         [bug-cvs@nongnu.org],[cvs])
20 AC_CONFIG_SRCDIR(src/cvs.h)
21 AC_CONFIG_AUX_DIR(build-aux)
22 AM_INIT_AUTOMAKE([gnu 1.9.2 dist-bzip2 no-define])
23 AM_GNU_GETTEXT_VERSION([0.14.4])
24 AC_PREREQ(2.59)
25
26 AC_PREFIX_PROGRAM(cvs)
27 AM_CONFIG_HEADER(config.h)
28 AM_MAINTAINER_MODE
29
30 dnl This needs to be called to enable certain system extensions before calling
31 dnl a C compiler.
32 gl_EARLY
33
34 AC_PROG_CC
35 AM_PROG_CC_C_O
36
37 # Find the posix library needed on INTERACTIVE UNIX (ISC)
38 dnl
39 dnl From the Autoconf 2.53 manual (AC_ISC_POSIX):
40 dnl
41 dnl  For INTERACTIVE UNIX (ISC), add `-lcposix' to output variable
42 dnl  `LIBS' if necessary for POSIX facilities.  Call this after
43 dnl  `AC_PROG_CC' and before any other macros that use POSIX
44 dnl  interfaces.  INTERACTIVE UNIX is no longer sold, and Sun says that
45 dnl  they will drop support for it on 2006-07-23, so this macro is
46 dnl  becoming obsolescent.
47 dnl
48 AC_SEARCH_LIBS([strerror], [cposix])
49
50 dnl
51 dnl Autoconf stopped setting $ISC sometime before 2.53
52 dnl
53 dnl If this is still important, someone should come up with a generic test
54 dnl for whether _SYSV3 needs to be defined.  Removed code below:
55 dnl
56 dnl if test "$ISC" = yes; then
57 dnl CFLAGS="$CFLAGS -D_SYSV3"
58 dnl # And I don't like this...  In theory it should be found later if server is
59 dnl # enabled, but maybe something on INTERACTIVE UNIX (ISC) we didn't ask to
60 dnl # link with crypt tries?  Anyhow, the autoconf manual says we can delete
61 dnl # this ISC stuff on or after 2006-07-23 when Sun discontinues support and
62 dnl # ISC becomes obsolescent, but I suppose that is probably a matter of
63 dnl # opinion.
64 dnl #
65 dnl # N.B.  The reason for doing this is that some moron decided to put a stub
66 dnl # for crypt in libc that always returns NULL.  Without this here, the later
67 dnl # check will find the stub instead of the real thing, resulting in a server
68 dnl # that can't process crypted passwords correctly.
69 dnl
70 dnl # again, if we have to try and reenable this for ISC, someone should come
71 dnl # up with a generic test that figures out whether crypt is good or not -
72 dnl # Is it always returning NULL?
73 dnl LIBS="-lcrypt $LIBS"
74 dnl fi
75 dnl
76 dnl FIXME - This has been broken for at least a few months anyhow, so I'm
77 dnl removing the crypt lib define above, but the correct fix would be to
78 dnl provide a CRYPT_WORKS macro or the like that gets called sometime after
79 dnl the AC_SEARCH_LIBS call that normally finds crypt, and if crypt doesn't
80 dnl work, the macro should be retried with LIBS="-lcrypt $LIBS" forced.
81 dnl
82
83 AC_PROG_RANLIB
84 AC_PROG_LN_S
85 AC_SYS_LARGEFILE
86 AC_EXEEXT
87
88 AC_PATH_PROG(PERL, perl, no)
89 AC_PATH_PROG(CSH, csh, no)
90 # for contrib/rcs2log.sh & src/cvsbug.in.
91 AC_PATH_PROG(MKTEMP, mktemp, mktemp)
92 if test x"$MKTEMP" = xmktemp; then
93         MKTEMP_SH_FUNCTION=$srcdir/mktemp.sh
94 else
95         MKTEMP_SH_FUNCTION=/dev/null
96 fi
97 AC_SUBST_FILE(MKTEMP_SH_FUNCTION)
98 # for src/cvsbug.in
99 AC_PATH_PROG(SENDMAIL, sendmail, no, [$PATH:/usr/sbin:/usr/lib])
100 # For diff/util.c
101 AC_PATH_PROG(PR, pr, no)
102 if test x"$PR" != xno; then
103         AC_DEFINE_UNQUOTED([PR_PROGRAM], ["$PR"], [Path to the pr utility])
104 fi
105
106 dnl FIXME This is truly gross.
107 missing_dir=`cd $ac_aux_dir && pwd`
108 dnl FIXME I pulled this default list from sanity.sh.  Perhaps these lists
109 dnl can be stored in one location?
110 dnl
111 dnl Yeah, put the value in a variable add it to the substitution list
112 dnl then have configure create sanity.sh from sanity.sh.in...
113 glocs="$PATH:/usr/local/bin:/usr/contrib/bin:/usr/gnu/bin:/local/bin:/local/gnu/bin:/gnu/bin"
114 AC_PATH_PROGS(ROFF, nroff gnroff groff roff, $missing_dir/missing roff, $glocs)
115 AC_PATH_PROG(PS2PDF, ps2pdf, $missing_dir/missing ps2pdf)
116 AC_PATH_PROG(TEXI2DVI, texi2dvi, $missing_dir/missing texi2dvi)
117
118 AC_SYS_INTERPRETER
119 if test X"$ac_cv_sys_interpreter" != X"yes" ; then
120   # silly trick to avoid problems in AC macros...
121   ac_msg='perl scripts using #! may not be invoked properly'
122   AC_MSG_WARN($ac_msg)
123 fi
124
125 # BSD's logo is a devil for a reason, hey?
126 AC_CACHE_CHECK(for BSD VPATH bug in make, ccvs_cv_bsd_make_vpath_bug,
127 [if test ! -d ac_test_dir ; then
128         AC_TRY_COMMAND([mkdir ac_test_dir])
129 fi
130 cat >conftestmake <<EOF
131 VPATH = ac_test_dir
132 ac_test_target: ac_test_dep
133         echo BSD VPATH bug present >&2
134 ac_test_dep: ac_test_dep_dep
135 EOF
136 touch ac_test_dir/ac_test_dep_dep
137 touch ac_test_dir/ac_test_dep
138 touch ac_test_target
139 # Don't know why, but the following test doesn't work under FreeBSD 4.2
140 # without this sleep command
141 sleep 1
142 if AC_TRY_COMMAND([make -f conftestmake 2>&1 >/dev/null |grep ^BSD\ VPATH\ bug\ present\$ >/dev/null]) ; then
143         ccvs_cv_bsd_make_vpath_bug=yes
144 else
145         ccvs_cv_bsd_make_vpath_bug=no
146 fi
147 AC_TRY_COMMAND([rm -rf ac_test_dir ac_test_target conftestmake])])
148 # We also don't need to worry about the bug when $srcdir = $builddir
149 AM_CONDITIONAL(MAKE_TARGETS_IN_VPATH, \
150                 test $ccvs_cv_bsd_make_vpath_bug = no \
151                 || test $srcdir = .)
152
153 AC_HEADER_DIRENT
154 AC_HEADER_STDC
155 AC_HEADER_SYS_WAIT
156 AC_CHECK_HEADERS(\
157         direct.h \
158         fcntl.h \
159         io.h \
160         memory.h \
161         ndbm.h \
162         stdint.h \
163         syslog.h \
164         sys/bsdtypes.h \
165         sys/file.h \
166         sys/param.h \
167         sys/resource.h \
168         sys/select.h \
169         unistd.h \
170         utime.h\
171 )
172 AC_HEADER_STAT
173
174 AC_C_CONST
175 AC_TYPE_UID_T
176 AC_TYPE_MODE_T
177 AC_TYPE_PID_T
178 AC_TYPE_SIGNAL
179
180 AC_CHECK_MEMBERS([struct stat.st_blksize])
181 AC_CHECK_MEMBERS([struct stat.st_rdev])
182
183 AC_FUNC_FSEEKO
184 AC_CHECK_FUNC(fseeko)
185 if test $ac_cv_func_fseeko = no; then
186     AC_LIBOBJ(fseeko)
187     AC_LIBOBJ(ftello)
188 fi
189
190 # Replace functions with versions in lib/ when they can't be found.
191 AC_REPLACE_FUNCS(\
192         waitpid \
193 )
194
195 #
196 # Special hack for a SunOS 5.7 (aka Solaris 7) select() problem.
197 #
198 ccvs_FUNC_SELECT
199
200 #
201 # Begin GNULIB stuff.
202 #
203
204 # Look for functions from GNULIB and replace with versions in lib/ when
205 # necessary.
206 dnl This calls most of the GNULIB macros we need via the
207 dnl autogenerated m4/gnulib.m4.
208 gl_INIT
209 dnl For one reason or another, the autogenerated m4/gnulib.m4 wants
210 dnl AM_GNU_GETTEXT([external]) called directly from here.
211 AM_GNU_GETTEXT([external])
212 AM_GNU_GETTEXT_VERSION dnl work around for autoconf-2.57 bug.
213 # The error module still poses merge problems.
214 AC_FUNC_STRERROR_R
215 dnl The following macros can be called by other GNULIB macros but are also
216 dnl used by the UNIQUE_*_TYPE stuff below.  I don't want to rely on the GNULIB
217 dnl macros which call these to continue to do so, so use AC_REQUIRE, which can
218 dnl only be called from within another macro, to only call them only once.
219 AC_DEFUN([CCVS_CALL_GNULIB_MACROS_ONCE],
220 [AC_REQUIRE([gt_TYPE_LONGDOUBLE])
221 AC_REQUIRE([gt_TYPE_WCHAR_T])
222 AC_REQUIRE([gt_TYPE_WINT_T])
223 AC_REQUIRE([gl_AC_TYPE_INTMAX_T])
224 AC_REQUIRE([gl_FUNC_MMAP_ANON])
225 AC_REQUIRE([gl_AC_TYPE_LONG_LONG])])
226 CCVS_CALL_GNULIB_MACROS_ONCE()
227 dnl Until I persuade the GNULIB folks to integrate this module.
228 gl_GLOB
229
230 #
231 # End GNULIB stuff.
232 #
233
234
235
236 # Check for function existance.
237 AC_CHECK_FUNCS(\
238         fchdir \
239         fchmod \
240         fsync \
241         ftime \
242         geteuid \
243         getgroups \
244         getpagesize \
245         gettimeofday \
246         initgroups \
247         login \
248         logout \
249         mknod \
250         regcomp \
251         regerror \
252         regexec \
253         regfree \
254         sigaction \
255         sigblock \
256         sigprocmask \
257         sigsetmask \
258         sigvec \
259         timezone \
260         tzset \
261         vprintf \
262         wait3 \
263 )
264
265 dnl
266 dnl Find the sizes of various types and set a variable for some if they
267 dnl are "unique", meaning it does not share a size with a lower precedence
268 dnl type.
269 dnl
270 dnl also, I snagged this cross_compiling line from openldap's autoconf,
271 dnl because I can't figure out how to stop autoconf from giving cross compiler
272 dnl related warnings each time the AC_CHECK_SIZEOF function is run
273 dnl
274 if test $cross_compiling = yes ; then
275         AC_DEFINE(CROSS_COMPILING, 1, [define if cross compiling])
276 else
277         AC_CHECK_SIZEOF(char)
278         AC_CACHE_CHECK(for uniquely sized char,
279                 ccvs_cv_unique_int_type_char,
280                 [if set |grep ^ccvs_cv_unique_int_type_ \
281                         |grep "($ac_cv_sizeof_char)" >/dev/null ; then
282                         ccvs_cv_unique_int_type_char=no
283                 else
284                         ccvs_cv_unique_int_type_char=yes\($ac_cv_sizeof_char\)
285                 fi])
286         if test $ccvs_cv_unique_int_type_char != no ; then
287                 AC_DEFINE( UNIQUE_INT_TYPE_CHAR, 1,
288                            [Define if char is the first integer type
289                             detected with its size.])
290         fi
291         AC_CHECK_SIZEOF(short)
292         AC_CACHE_CHECK(for uniquely sized short,
293                 ccvs_cv_unique_int_type_short,
294                 [if set |grep ^ccvs_cv_unique_int_type_ \
295                         |grep "($ac_cv_sizeof_short)" >/dev/null ; then
296                         ccvs_cv_unique_int_type_short=no
297                 else
298                         ccvs_cv_unique_int_type_short=yes\($ac_cv_sizeof_short\)
299                 fi])
300         if test $ccvs_cv_unique_int_type_short != no ; then
301                 AC_DEFINE( UNIQUE_INT_TYPE_SHORT, 1,
302                            [Define if short is the first integer type
303                             detected with its size.])
304         fi
305         AC_CHECK_SIZEOF(int)
306         AC_CACHE_CHECK(for uniquely sized int,
307                 ccvs_cv_unique_int_type_int,
308                 [if set |grep ^ccvs_cv_unique_int_type_ \
309                         |grep "($ac_cv_sizeof_int)" >/dev/null ; then
310                         ccvs_cv_unique_int_type_int=no
311                 else
312                         ccvs_cv_unique_int_type_int=yes\($ac_cv_sizeof_int\)
313                 fi])
314         if test $ccvs_cv_unique_int_type_int != no ; then
315                 AC_DEFINE( UNIQUE_INT_TYPE_INT, 1,
316                            [Define if int is the first integer type
317                             detected with its size.])
318         fi
319         AC_CHECK_SIZEOF(long)
320         AC_CACHE_CHECK(for uniquely sized long,
321                 ccvs_cv_unique_int_type_long,
322                 [if set |grep ^ccvs_cv_unique_int_type_ \
323                         |grep "($ac_cv_sizeof_long)" >/dev/null ; then
324                         ccvs_cv_unique_int_type_long=no
325                 else
326                         ccvs_cv_unique_int_type_long=yes\($ac_cv_sizeof_long\)
327                 fi])
328         if test $ccvs_cv_unique_int_type_long != no ; then
329                 AC_DEFINE(UNIQUE_INT_TYPE_LONG, 1,
330                           [Define if long int is the first integer type
331                            detected with its size.])
332         fi
333         if test $ac_cv_type_long_long != no; then
334                 AC_CHECK_SIZEOF(long long)
335                 AC_CACHE_CHECK(for uniquely sized long long,
336                         ccvs_cv_unique_int_type_long_long,
337                         [if set |grep ^ccvs_cv_unique_int_type_ \
338                                 |grep "($ac_cv_sizeof_long_long)" >/dev/null ; then
339                                 ccvs_cv_unique_int_type_long_long=no
340                         else
341                                 ccvs_cv_unique_int_type_long_long=yes\($ac_cv_sizeof_long_long\)
342                         fi])
343                 if test $ccvs_cv_unique_int_type_long_long != no ; then
344                         AC_DEFINE(UNIQUE_INT_TYPE_LONG_LONG, 1,
345                                   [Define if long long is the first integer type
346                                    detected with its size.])
347                 fi
348         fi
349         AC_CHECK_SIZEOF(size_t)
350         AC_CACHE_CHECK(for uniquely sized size_t,
351                 ccvs_cv_unique_int_type_size_t,
352                 [if set |grep ^ccvs_cv_unique_int_type_ \
353                         |grep "($ac_cv_sizeof_size_t)" >/dev/null ; then
354                         ccvs_cv_unique_int_type_size_t=no
355                 else
356                         ccvs_cv_unique_int_type_size_t=yes\($ac_cv_sizeof_size_t\)
357                 fi])
358         if test $ccvs_cv_unique_int_type_size_t != no ; then
359                 AC_DEFINE(UNIQUE_INT_TYPE_SIZE_T, 1,
360                           [Define if size_t is the first integer type
361                            detected with its size.])
362         fi
363         AC_CHECK_SIZEOF(ptrdiff_t)
364         AC_CACHE_CHECK(for uniquely sized ptrdiff_t,
365                 ccvs_cv_unique_int_type_ptrdiff_t,
366                 [if set |grep ^ccvs_cv_unique_int_type_ \
367                         |grep "($ac_cv_sizeof_ptrdiff_t)" >/dev/null ; then
368                         ccvs_cv_unique_int_type_ptrdiff_t=no
369                 else
370                         ccvs_cv_unique_int_type_ptrdiff_t=yes\($ac_cv_sizeof_ptrdiff_t\)
371                 fi])
372         if test $ccvs_cv_unique_int_type_ptrdiff_t != no ; then
373                 AC_DEFINE(UNIQUE_INT_TYPE_PTRDIFF_T, 1,
374                           [Define if ptrdiff_t is the first integer type
375                            detected with its size.])
376         fi
377         if test $gt_cv_c_wint_t != no; then
378                 AC_CHECK_SIZEOF(wint_t, [], [[#include <stdio.h>
379 #include <wchar.h>
380 ]])
381                 AC_CACHE_CHECK(for uniquely sized wint_t,
382                         ccvs_cv_unique_int_type_wint_t,
383                         [if set |grep ^ccvs_cv_unique_int_type_ \
384                                 |grep "($ac_cv_sizeof_wint_t)" >/dev/null ; then
385                                 ccvs_cv_unique_int_type_wint_t=no
386                         else
387                                 ccvs_cv_unique_int_type_wint_t=yes\($ac_cv_sizeof_wint_t\)
388                         fi])
389                 if test $ccvs_cv_unique_int_type_wint_t != no ; then
390                         AC_DEFINE( UNIQUE_INT_TYPE_WINT_T, 1,
391                                    [Define if wint_t is the first integer type
392                                     detected with its size.])
393                 fi
394         fi
395         if test $gt_cv_c_intmax_t != no; then
396                 AC_CHECK_SIZEOF(intmax_t, [], [[#include <stdio.h>
397 #ifdef HAVE_INTTYPES_H
398 #include <inttypes.h>
399 #else
400 #ifdef HAVE_STDINT_H
401 #include <stdint.h>
402 #endif
403 #endif
404 ]])
405                 AC_CACHE_CHECK(for uniquely sized intmax_t,
406                         ccvs_cv_unique_int_type_intmax_t,
407                         [if set |grep ^ccvs_cv_unique_int_type_ \
408                                 |grep "($ac_cv_sizeof_intmax_t)" >/dev/null ; then
409                                 ccvs_cv_unique_int_type_intmax_t=no
410                         else
411                                 ccvs_cv_unique_int_type_intmax_t=yes\($ac_cv_sizeof_intmax_t\)
412                         fi])
413                 if test $ccvs_cv_unique_int_type_intmax_t != no ; then
414                         AC_DEFINE( UNIQUE_INT_TYPE_INTMAX_T, 1,
415                                    [Define if intmax_t is the first integer type
416                                     detected with its size.])
417                 fi
418         fi
419
420         dnl
421         dnl and the same for floats...
422         dnl
423         AC_CHECK_SIZEOF(float)
424         AC_CACHE_CHECK(for uniquely sized float,
425                 ccvs_cv_unique_float_type_float,
426                 [if set |grep ^ccvs_cv_unique_float_type_ \
427                         |grep "($ac_cv_sizeof_float)" >/dev/null ; then
428                         ccvs_cv_unique_float_type_float=no
429                 else
430                         ccvs_cv_unique_float_type_float=yes\($ac_cv_sizeof_float\)
431                 fi])
432         if test $ccvs_cv_unique_float_type_float != no ; then
433                 AC_DEFINE( UNIQUE_FLOAT_TYPE_FLOAT, 1,
434                            [Define if float is the first floating point type
435                             detected with its size.])
436         fi
437         AC_CHECK_SIZEOF(double)
438         AC_CACHE_CHECK(for uniquely sized double,
439                 ccvs_cv_unique_float_type_double,
440                 [if set |grep ^ccvs_cv_unique_float_type_ \
441                         |grep "($ac_cv_sizeof_double)" >/dev/null ; then
442                         ccvs_cv_unique_float_type_double=no
443                 else
444                         ccvs_cv_unique_float_type_double=yes\($ac_cv_sizeof_double\)
445                 fi])
446         if test $ccvs_cv_unique_float_type_double != no ; then
447                 AC_DEFINE( UNIQUE_FLOAT_TYPE_DOUBLE, 1,
448                            [Define if double is the first floating point type
449                             detected with its size.])
450         fi
451         if test $gt_cv_c_long_double != no; then
452                 AC_CHECK_SIZEOF(long double)
453                 AC_CACHE_CHECK(for uniquely sized long double,
454                         ccvs_cv_unique_float_type_long_double,
455                         [if set |grep ^ccvs_cv_unique_float_type_ \
456                                 |grep "($ac_cv_sizeof_long_double)" >/dev/null ; then
457                                 ccvs_cv_unique_float_type_long_double=no
458                         else
459                                 ccvs_cv_unique_float_type_long_double=yes\($ac_cv_sizeof_long_double\)
460                         fi])
461                 if test $ccvs_cv_unique_float_type_long_double != no ; then
462                         AC_DEFINE(UNIQUE_FLOAT_TYPE_LONG_DOUBLE, 1,
463                                   [Define if long double is the first floating point
464                                    type detected with its size.])
465                 fi
466         fi
467 fi
468
469 dnl
470 dnl The CVS coding standard (as specified in HACKING) is that if it exists
471 dnl in SunOS4 and ANSI, we use it.  CVS itself, of course, therefore doesn't
472 dnl need HAVE_* defines for such functions, but diff wants them.
473 dnl
474 AC_DEFINE(HAVE_STRCHR, 1,
475 [Define if you have strchr (always for CVS).])
476 AC_DEFINE(HAVE_MEMCHR, 1,
477 [Define if you have memchr (always for CVS).])
478
479 dnl
480 dnl Force lib/regex.c to use malloc instead of messing around with alloca
481 dnl and define the old re_comp routines that we use.
482 dnl
483 AC_DEFINE(REGEX_MALLOC, 1,
484 [Define to force lib/regex.c to use malloc instead of alloca.])
485 AC_DEFINE(_REGEX_RE_COMP, 1,
486 [Define to force lib/regex.c to define re_comp et al.])
487 dnl
488 dnl AC_FUNC_FORK([]) is rather baroque.  It seems to be rather more picky
489 dnl than, say, the Single Unix Specification (version 2), which simplifies
490 dnl a lot of cases by saying that the child process can't set any variables
491 dnl (thus avoiding problems with register allocation) or call any functions
492 dnl (thus avoiding problems with whether file descriptors are shared).
493 dnl It would be nice if we could just write to the Single Unix Specification.
494 dnl I think the only way to do redirection this way is by doing it in the
495 dnl parent, and then undoing it afterwards (analogous to windows-NT/run.c).
496 dnl That would appear to have a race condition if the user hits ^C (or
497 dnl some other signal) at the wrong time, as main_cleanup will try to use
498 dnl stdout/stderr.  So maybe we are stuck with AC_FUNC_FORK([]).
499 dnl
500 AC_FUNC_FORK([])
501 AC_FUNC_CLOSEDIR_VOID
502
503 dnl
504 dnl Check for shadow password support.
505 dnl
506 dnl We used to try to determine whether shadow passwords were actually in
507 dnl use or not, but the code has been changed to work right reguardless,
508 dnl so we can go back to a simple check.
509 AC_SEARCH_LIBS(getspnam, sec gen, AC_DEFINE(HAVE_GETSPNAM, 1,
510 [Define if you have the getspnam function.]))
511
512 AC_FUNC_UTIME_NULL
513 AC_SYS_LONG_FILE_NAMES
514
515 dnl for debugging code
516 CVS_FUNC_PRINTF_PTR
517
518 # Try to find connect and gethostbyname.
519 AC_CHECK_LIB(nsl, main)
520 AC_SEARCH_LIBS(connect, xnet socket inet,
521   AC_DEFINE(HAVE_CONNECT, 1,
522 [Define if you have the connect function.]))
523 dnl no need to search nsl for gethostbyname here since we should have
524 dnl just added libnsl above if we found it.
525 AC_SEARCH_LIBS(gethostbyname, netinet)
526
527 AC_SUBST(cvs_client_objects)
528
529
530 dnl
531 dnl begin --with-*
532 dnl
533
534 dnl
535 dnl set $(KRB4) from --with-krb4=value -- WITH_KRB4
536 dnl
537 dnl If you change this, keep in mind that some systems have a bogus
538 dnl libkrb in the system libraries, so --with-krb4=value needs to
539 dnl override the system -lkrb.
540 dnl
541 KRB4=/usr/kerberos
542 define(WITH_KRB4,[
543 AC_ARG_WITH(
544   [krb4],
545   AC_HELP_STRING(
546     [--with-krb4],
547     [Kerberos 4 directory (default /usr/kerberos)]),
548   [KRB4=$with_krb4],
549 )dnl
550 AC_MSG_CHECKING([for KRB4 in $KRB4])
551 AC_MSG_RESULT([])
552 AC_SUBST(KRB4)])dnl
553 WITH_KRB4
554
555 krb_h=
556 AC_MSG_CHECKING([for krb.h])
557 if test "$cross_compiling" != yes && test -r $KRB4/include/krb.h; then
558    hold_cflags=$CFLAGS
559    CFLAGS="$CFLAGS -I$KRB4/include"
560    AC_TRY_LINK([#include <krb.h>],[int i;],
561           [krb_h=yes krb_incdir=$KRB4/include],
562           [CFLAGS=$hold_cflags
563            AC_TRY_LINK([#include <krb.h>],[int i;],
564              [krb_h=yes krb_incdir=])])
565    CFLAGS=$hold_cflags
566 else
567    AC_TRY_LINK([#include <krb.h>],[int i;],
568              [krb_h=yes krb_incdir=])
569 fi
570 if test -z "$krb_h"; then
571   AC_TRY_LINK([#include <krb.h>],[int i;],
572     [krb_h=yes krb_incdir=],
573     [if test "$cross_compiling" != yes && test -r $KRB4/include/kerberosIV/krb.h; then
574        hold_cflags=$CFLAGS
575        CFLAGS="$CFLAGS -I$KRB4/include/kerberosIV"
576        AC_TRY_LINK([#include <krb.h>],[int i;],
577          [krb_h=yes krb_incdir=$KRB4/include/kerberosIV])
578        CFLAGS=$hold_cflags
579      fi])
580 fi
581 AC_MSG_RESULT($krb_h)
582
583 if test -n "$krb_h"; then
584   krb_lib=
585   if test "$cross_compiling" != yes && test -r $KRB4/lib/libkrb.a; then
586        hold_ldflags=$LDFLAGS
587        LDFLAGS="-L${KRB4}/lib $LDFLAGS"
588        AC_CHECK_LIB(krb,printf,[krb_lib=yes krb_libdir=${KRB4}/lib],
589            [LDFLAGS=$hold_ldflags
590             # Using open here instead of printf so we don't
591             # get confused by the cached value for printf from above.
592             AC_CHECK_LIB(krb,open,[krb_lib=yes krb_libdir=])])
593        LDFLAGS=$hold_ldflags
594   else
595        AC_CHECK_LIB(krb,printf,[krb_lib=yes krb_libdir=])
596        AC_CHECK_FUNC(krb_recvauth,[krb_lib=yes krb_libdir=])
597   fi
598   if test -n "$krb_lib"; then
599     AC_DEFINE([HAVE_KERBEROS], 1,
600               [Define if you have MIT Kerberos version 4 available.])
601     cvs_client_objects="$cvs_client_objects kerberos4-client.o"
602     test -n "${krb_libdir}" && LIBS="${LIBS} -L${krb_libdir}"
603     # Put -L${krb_libdir} in LDFLAGS temporarily so that it appears before
604     # -ldes in the command line.  Don't do it permanently so that we honor
605     # the user's setting for LDFLAGS
606     hold_ldflags=$LDFLAGS
607     test -n "${krb_libdir}" && LDFLAGS="$LDFLAGS -L${krb_libdir}"
608     AC_CHECK_LIB(des,printf,[LIBS="${LIBS} -ldes"])
609     AC_CHECK_LIB(krb,krb_recvauth)
610     AC_CHECK_LIB(krb4,krb_recvauth)
611     LDFLAGS=$hold_ldflags
612     if test -n "$krb_incdir"; then
613       CPPFLAGS="$CPPFLAGS -I$krb_incdir"
614     fi
615   fi
616 fi
617 AC_CHECK_FUNCS(krb_get_err_text)
618
619
620 dnl
621 dnl WITH_GSSAPI is external
622 dnl
623 dnl TODO - I tried to put these in alphabetical order, but ACX_WITH_GSSAPI
624 dnl fails unless called after the KRB4 stuff.  I don't know why.
625 dnl
626 ACX_WITH_GSSAPI
627
628 dnl
629 dnl WITH_EXTERNAL_ZLIB is external
630 dnl
631 ACX_WITH_EXTERNAL_ZLIB
632
633 dnl
634 dnl begin --with-rsh
635 dnl
636 dnl Many sites no longer desire the use of "rsh" as the default
637 dnl remote shell program. They typically favor "ssh" as the default
638
639 # What remote shell transport should our client cvs default to using?
640 AC_ARG_WITH(
641   [rsh],
642   AC_HELP_STRING(
643     [--with-rsh],
644     [The default remote shell CVS will use for :ext: transport
645      (default ssh)]), ,
646   [with_rsh="ssh rsh"])
647
648 if test no = "$with_rsh"; then
649   AC_MSG_WARN([Failed to find usable remote shell. Using 'rsh'.])
650   with_rsh=rsh
651 elif test yes = "$with_rsh"; then
652   # Make --with-rsh mean the same thing as --with-rsh=rsh
653   with_rsh=rsh
654 fi
655
656 if echo $with_rsh |grep ^/ >/dev/null; then
657   # If $with_rsh is an absolute path, issue a warning if the executable
658   # doesn't exist or isn't usable, but then trust the user and use it
659   # regardless
660   with_default_rsh=$with_rsh
661   AC_MSG_CHECKING([for a remote shell])
662   if ! test -f $with_rsh \
663       || ! test -x $with_rsh; then
664     # warn the user that they may encounter problems
665     AC_MSG_WARN([$with_rsh is not a path to an executable file])
666   fi
667 else
668   # Search for a remote shell
669   AC_CHECK_PROGS([with_default_rsh], [$with_rsh], "rsh")
670 fi
671
672 AC_DEFINE_UNQUOTED(
673   [RSH_DFLT], ["$with_default_rsh"],
674   [The default remote shell to use, if one does not specify the
675    CVS_RSH environment variable.])
676 RSH_DFLT=$with_default_rsh
677 AC_SUBST(RSH_DFLT)
678 dnl done with finding a default CVS_RSH value
679 dnl
680 dnl end --with-rsh
681 dnl
682
683 dnl
684 dnl begin --with-editor
685 dnl
686 dnl Set the default editor to use for log messages
687 dnl
688
689 AC_ARG_VAR(
690   [EDITOR],
691   [The text editor CVS will use by default for log messages.])
692
693 # Let the confiscator request a specific editor
694 AC_ARG_WITH(
695   [editor],
696   AC_HELP_STRING(
697     [--with-editor],
698     [The default text editor CVS should use for log messages
699      (default autoselects)]), ,
700   [with_editor=yes])
701
702 # If --with-editor was supplied with an argument, let it override $EDITOR from
703 # the user's environment.  We need to unset EDITOR here because AC_CHECK_PROGS
704 # will let the value of EDITOR ride when it is set rather than searching.  We
705 # ignore the --without-editor case since it will be caught below.
706 if test -n "$EDITOR" && test yes != $with_editor; then
707   AS_UNSET([EDITOR])
708 fi
709
710 # Set the default when --with-editor wasn't supplied or when it was supplied
711 # without an argument.
712 if test yes = $with_editor; then
713   with_editor="vim vi emacs nano pico edit"
714 fi
715
716 if echo $with_editor |grep ^/ >/dev/null; then
717   # If $with_editor is an absolute path, issue a warning if the executable
718   # doesn't exist or isn't usable, but then trust the user and use it
719   # regardless
720   EDITOR=$with_editor
721   AC_MSG_CHECKING([for an editor])
722   AC_MSG_RESULT([$EDITOR])
723   if ! test -f $with_editor \
724       || ! test -x $with_editor; then
725     # warn the user that they may encounter problems
726     AC_MSG_WARN([\`$with_editor' is not a path to an executable file])
727   fi
728 elif test no != "${with_editor}"; then
729   # Search for an editor
730   AC_CHECK_PROGS([EDITOR], [$with_editor], [no])
731     if test no = "${EDITOR}"; then
732       AC_MSG_ERROR([
733     Failed to find a text file editor.  CVS cannot be compiled
734     without a default log message editor.  Searched for
735     \`$with_editor'.  Try \`configure --with-editor'.])
736     fi
737 else
738   AC_MSG_ERROR([
739     CVS cannot be compiled without a default log message editor.
740     Try \`configure --with-editor'.])
741 fi
742
743 dnl FIXME - Using --without-editor will probably break a compile at
744 dnl the moment, but maybe it is reasonable for someone to want to
745 dnl compile a CVS executable that refuses to run if no $EDITOR,
746 dnl $CVS_EDITOR, or -e option is specified?  Making a preliminary
747 dnl design decision in this direction, subject to discussion.
748 dnl
749 dnl Still don't know if the above would be useful, but we shouldn't
750 dnl be able to get here any longer without $EDITOR defined due to the
751 dnl error checking above.
752 AC_DEFINE_UNQUOTED(
753   [EDITOR_DFLT], ["$EDITOR"],
754   [The default editor to use, if one does not specify the "-e" option
755    to cvs, or does not have an EDITOR environment variable.  If this
756    is not set to an absolute path to an executable, use the shell to
757    find where the editor actually is.  This allows sites with
758    /usr/bin/vi or /usr/ucb/vi to work equally well (assuming that their
759    PATH is reasonable).])
760
761 dnl
762 dnl done finding an editor
763 dnl
764 dnl end --with-editor
765 dnl
766
767
768
769 dnl
770 dnl --with-hardcoded-pam-service-name
771 dnl
772 AC_ARG_WITH(
773   [hardcoded-pam-service-name],
774   AC_HELP_STRING(
775     [--with-hardcoded-pam-service-name],
776     [Use this to hard code a service name for PAM CVS authentication.  The
777      special name, `program_name', will cause CVS to use whatever name it
778      was invoked as as the service name.  (defaults to `cvs')]),,
779     [with_hardcoded_pam_service_name=cvs])
780
781 if test "x$with_hardcoded_pam_service_name" = xno ||
782    test "x$with_hardcoded_pam_service_name" = xprogram_name; then
783   AC_DEFINE([PAM_SERVICE_NAME], [program_name],
784     [Define to set a service name for PAM.  This must be defined.  Define to
785      `program_name', without the quotes, to use whatever name CVS was invoked
786       as.  Otherwise, define to a double-quoted literal string, such as
787       `"cvs"'.])
788 else
789   if test x"$with_hardcoded_pam_service_name" = xyes; then
790     with_hardcoded_pam_service_name=cvs
791   fi
792   AC_DEFINE_UNQUOTED([PAM_SERVICE_NAME], ["$with_hardcoded_pam_service_name"])
793 fi
794
795
796
797 dnl
798 dnl Find a temporary directory
799 dnl
800 AC_ARG_WITH(
801   [tmpdir],
802   AC_HELP_STRING(
803     [--with-tmpdir],
804     [The temporary directory CVS should use as a default
805      (default autoselects)]))
806
807 AC_MSG_CHECKING([for temporary directory])
808 if test -z "$with_tmpdir" || test yes = "$with_tmpdir"; then
809   for with_tmpdir in /tmp /var/tmp no; do
810     if test -d "$with_tmpdir" && test -x "$with_tmpdir" \
811         && test -w "$with_tmpdir" && test -r "$with_tmpdir"; then
812       break
813     fi
814   done
815   if test no = "$with_tmpdir"; then
816     AC_MSG_WARN([Failed to find usable temporary directory.  Using '/tmp'.])
817     with_tmpdir=/tmp
818   fi
819   AC_MSG_RESULT([$with_tmpdir])
820 elif ! echo "$with_tmpdir" |grep '^[[\\/]]'; then
821   AC_MSG_RESULT([$with_tmpdir])
822   AC_MSG_ERROR([--with-tmpdir requires an absolute path.])
823 elif ! test -d "$with_tmpdir" || ! test -x "$with_tmpdir" \
824         || ! test -w "$with_tmpdir" || ! test -r "$with_tmpdir"; then
825   AC_MSG_RESULT([$with_tmpdir])
826   AC_MSG_WARN(
827     [User supplied temporary directory ('$with_tmpdir') does not
828      exist or lacks sufficient permissions for read/write.])
829 fi
830
831 AC_DEFINE_UNQUOTED(
832   [TMPDIR_DFLT], ["$with_tmpdir"],
833   [Directory used for storing temporary files, if not overridden by
834    environment variables or the -T global option.  There should be little
835    need to change this (-T is a better mechanism if you need to use a
836    different directory for temporary files).])
837
838 dnl
839 dnl done finding tmpdir
840 dnl
841
842
843 dnl
844 dnl Get default umask
845 dnl
846
847 AC_ARG_WITH(
848   [umask],
849   AC_HELP_STRING(
850     [--with-umask],
851     [Set the umask CVS will use by default in the repository (default 002)]))
852
853 if test -z "$with_umask" || test yes = "$with_umask"; then
854   with_umask=002
855 elif test no = "$with_umask"; then
856   with_umask=000
857 fi
858
859 AC_DEFINE_UNQUOTED(
860   [UMASK_DFLT], [$with_umask],
861   [The default umask to use when creating or otherwise setting file or
862    directory permissions in the repository.  Must be a value in the
863    range of 0 through 0777.  For example, a value of 002 allows group
864    rwx access and world rx access; a value of 007 allows group rwx
865    access but no world access.  This value is overridden by the value
866    of the CVSUMASK environment variable, which is interpreted as an
867    octal number.])
868
869 dnl
870 dnl Done setting default umask
871 dnl
872
873 dnl
874 dnl Set CVS Administrator Group
875 dnl
876 AC_ARG_WITH(
877   [cvs-admin-group],
878   AC_HELP_STRING(
879     [--with-cvs-admin-group=GROUP],
880     [The CVS admin command is restricted to the members of this group.
881      If this group does not exist, all users are allowed to run CVS admin.
882      To disable the CVS admin command for all users, create an empty group
883      by specifying the --with-cvs-admin-group= option.  To disable access
884      control for CVS admin, run configure with the --without-cvs-admin-group
885      option. (default 'cvsadmin')]), ,
886   [with_cvs_admin_group=cvsadmin])
887
888 if test yes = "$with_cvs_admin_group"; then
889   with_cvs_admin_group=cvsadmin
890 fi
891 if test no != "$with_cvs_admin_group"; then
892   dnl FIXME We should warn if the group doesn't exist
893   AC_DEFINE_UNQUOTED(
894     [CVS_ADMIN_GROUP], ["$with_cvs_admin_group"],
895     [The CVS admin command is restricted to the members of the group
896      CVS_ADMIN_GROUP.  If this group does not exist, all users are
897      allowed to run CVS admin.  To disable the CVS admin command for
898      all users, create an empty CVS_ADMIN_GROUP by running configure
899      with the --with-cvs-admin-group= option.  To disable access control
900      for CVS admin, run configure with the --without-cvs-admin-group
901      option in order to comment out the define below.])
902 fi
903
904 dnl
905 dnl Done setting CVS Administrator Group
906 dnl
907
908 dnl
909 dnl Set the NDBM library to use.
910 dnl
911 dnl XXX - FIXME - FIXME - FIXME - XXX
912 dnl
913 dnl This is very bad.  It should really autodetect an appropriate NDBM library
914 dnl and, if it doesn't find one, decide to use MY_NDBM.  I'm am defining
915 dnl this here since this is no worse than it worked when it was in options.h
916 dnl and I am cleaning out options.h so that the Windows version of CVS will
917 dnl compile properly for the next release.
918 dnl
919 dnl That's why this option is in the --with-* section rather than the
920 dnl --enable-* section.
921 dnl
922 dnl XXX - FIXME - FIXME - FIXME - XXX
923 dnl
924 AC_ARG_ENABLE(
925   [cvs-ndbm],
926   AC_HELP_STRING(
927     [--enable-cvs-ndbm],
928     [Use the NDBM library distributed with CVS rather than attempting to use
929      a system NDBM library.  Disabling this may not work.  (default)]), ,
930   [enable_cvs_ndbm=yes])
931 if test no != "$enable_cvs_ndbm"; then
932   AC_DEFINE(
933     [MY_NDBM], [1],
934     [By default, CVS stores its modules and other such items in flat
935      text files (MY_NDBM enables this).  Turning off MY_NDBM causes CVS
936      to look for a system-supplied ndbm database library and use it
937      instead.  That may speed things up, but the default setting
938      generally works fine too.])
939 fi
940
941 dnl
942 dnl Done selecting NDBM library.
943 dnl
944
945
946
947 dnl
948 dnl end --with-*
949 dnl
950
951
952 dnl
953 dnl begin --enables
954 dnl
955
956
957 dnl
958 dnl begin --enable-client
959 dnl
960
961 # Check for options requesting client and server feature. If none are
962 # given and we have connect(), we want the full client & server arrangement.
963 AC_ARG_ENABLE(
964   [client],
965   AC_HELP_STRING(
966     [--enable-client],
967     [Include code for running as a remote client (default)]), ,
968   [enable_client=$ac_cv_search_connect])
969 if test no != "$enable_client"; then
970   AC_DEFINE(
971     [CLIENT_SUPPORT], [1],
972     [Define if you want CVS to be able to be a remote repository client.])
973 fi
974
975 dnl
976 dnl end --enable-client
977 dnl
978
979
980 dnl
981 dnl begin --enable-password-authenticated-client
982 dnl
983 AC_ARG_ENABLE(
984   [password-authenticated-client],
985   AC_HELP_STRING(
986     [--enable-password-authenticated-client],
987     [Enable pserver as a remote access method in the CVS client
988      (default)]), ,
989   [enable_password_authenticated_client=$enable_client])
990
991 if test xno != "x$enable_password_authenticated_client"; then
992   if test xno != "x$enable_client"; then
993     AC_DEFINE(
994       [AUTH_CLIENT_SUPPORT], [1],
995       [Enable AUTH_CLIENT_SUPPORT to enable pserver as a remote access
996        method in the CVS client (default)])
997   else
998     AC_MSG_WARN(
999       [--enable-password-authenticated-client is meaningless with
1000        the CVS client disabled (--disable-client)])
1001   fi
1002 fi
1003
1004 dnl
1005 dnl begin --enable-password-authenticated-client
1006 dnl
1007
1008
1009 dnl
1010 dnl begin --enable-server
1011 dnl
1012
1013 dnl
1014 dnl Give the confiscator control over whether the server code is compiled
1015 dnl
1016 AC_ARG_ENABLE(
1017   [server],
1018   AC_HELP_STRING(
1019     [--enable-server],
1020     [Include code for running as a server (default)]), ,
1021   [enable_server=$ac_cv_search_connect])
1022
1023 if test no != "$enable_server"; then
1024   AC_DEFINE(
1025     [SERVER_SUPPORT], [1],
1026     [Define if you want CVS to be able to serve repositories to remote
1027      clients.])
1028
1029   dnl
1030   dnl The auth server needs to be able to check passwords against passwd
1031   dnl file entries, so we only #define AUTH_SERVER_SUPPORT if we can
1032   dnl find the crypt function. 
1033   dnl
1034   AC_SEARCH_LIBS(
1035     [crypt], [crypt],
1036     [AC_DEFINE(
1037        [HAVE_CRYPT], [1],
1038        [Define if you have the crypt function.])
1039      AC_DEFINE(
1040        [AUTH_SERVER_SUPPORT], [1],
1041        [Define if you want to use the password authenticated server.])dnl
1042   ])dnl AC_SEARCH_LIBS
1043
1044   dnl
1045   dnl Allow the configurer to enable server flowcontrol.  Read the help
1046   dnl strings below for a full explanation.
1047   dnl
1048   AC_ARG_ENABLE(
1049     [server-flow-control],
1050     AC_HELP_STRING(
1051       [--enable-server-flow-control],
1052       [If you are working with a large remote repository and a 'cvs
1053        checkout' is swamping your network and memory, define these to
1054        enable flow control.  You may optionally pass a low water mark
1055        in bytes and a high water mark in bytes, separated by commas.
1056        (default is enabled 1M,2M)]),
1057     [if test yes = $enable_server_flow_control; then
1058        enable_server_flow_control=1M,2M
1059      fi],
1060     [enable_server_flow_control=1M,2M])
1061   if test no != $enable_server_flow_control; then
1062     ccvs_lwm=`expr "$enable_server_flow_control" : '\(.*\),'`
1063     ccvs_hwm=`expr "$enable_server_flow_control" : '.*,\(.*\)'`
1064     ccvs_lwm_E=`expr "$ccvs_lwm" : '[[0-9]][[0-9]]*\(.*\)'`
1065     ccvs_lwm=`expr "$ccvs_lwm" : '\([[0-9]][[0-9]]*\)'`
1066     test "" != "$ccvs_lwm" || ccvs_lwm_E="?"
1067     case $ccvs_lwm_E in
1068         G) ccvs_lwm="$ccvs_lwm * 1024 * 1024 * 1024";;
1069         M) ccvs_lwm="$ccvs_lwm * 1024 * 1024";;
1070         k) ccvs_lwm="$ccvs_lwm * 1024";;
1071         b | '') ;;
1072         *) AC_MSG_ERROR([Can't parse argument to --enable-server-flow-control
1073                         ('$enable_server_flow_control') as <lwm>,<hwm>])
1074       esac
1075     ccvs_hwm_E=`expr "$ccvs_hwm" : '[[0-9]][[0-9]]*\(.*\)'`
1076     ccvs_hwm=`expr "$ccvs_hwm" : '\([[0-9]][[0-9]]*\).*'`
1077     test "" != "$ccvs_hwm" || ccvs_hwm_E="?"
1078     case $ccvs_hwm_E in
1079         G) ccvs_hwm="$ccvs_hwm * 1024 * 1024 * 1024";;
1080         M) ccvs_hwm="$ccvs_hwm * 1024 * 1024";;
1081         k) ccvs_hwm="$ccvs_hwm * 1024";;
1082         b | '') ccvs_hwm="$ccvs_hwm";;
1083         *) AC_MSG_ERROR([Can't parse argument to --enable-server-flow-control
1084                         ('$enable_server_flow_control') as <lwm>,<hwm>])
1085       esac
1086
1087     AC_DEFINE(
1088       [SERVER_FLOWCONTROL], [1],
1089       [If you are working with a large remote repository and a 'cvs
1090        checkout' is swamping your network and memory, define these to
1091        enable flow control.  You will end up with even less probability of
1092        a consistent checkout (see Concurrency in cvs.texinfo), but CVS
1093        doesn't try to guarantee that anyway.  The master server process
1094        will monitor how far it is getting behind, if it reaches the high
1095        water mark, it will signal the child process to stop generating
1096        data when convenient (ie: no locks are held, currently at the
1097        beginning of a new directory).  Once the buffer has drained
1098        sufficiently to reach the low water mark, it will be signalled to
1099        start again.])
1100     AC_DEFINE_UNQUOTED(
1101       [SERVER_LO_WATER], [($ccvs_lwm)],
1102       [The low water mark in bytes for server flow control.  Required if
1103        SERVER_FLOWCONTROL is defined, and useless otherwise.])
1104     AC_DEFINE_UNQUOTED(
1105       [SERVER_HI_WATER], [($ccvs_hwm)],
1106       [The high water mark in bytes for server flow control.  Required if
1107        SERVER_FLOWCONTROL is defined, and useless otherwise.])
1108   fi # enable_server_flow_control
1109 fi # enable_server
1110
1111 dnl
1112 dnl end --enable-server
1113 dnl
1114
1115
1116 dnl
1117 dnl begin --enable-proxy
1118 dnl
1119
1120 dnl
1121 dnl Give the confiscator control over whether the proxy server code is compiled
1122 dnl
1123 AC_ARG_ENABLE(
1124   [proxy],
1125   AC_HELP_STRING(
1126     [--enable-proxy],
1127     [Include code for running as a transparent proxy server.  Disabling this
1128      may produce a slight performance gain on some systems, at the expense of
1129      write proxy support. (default)]), ,
1130   [if test xno != "x$enable_client" && test xno != "x$enable_server"; then
1131      enable_proxy=yes
1132    else
1133      enable_proxy=no
1134    fi])
1135
1136 if test no != "$enable_proxy"; then
1137   if test xno = "x$enable_client" || test xno = "x$enable_server"; then
1138     AC_MSG_WARN(
1139       [--enable-proxy is meaningless when either the CVS client or the
1140        CVS server is disabled (--disable-client and --disable-server).])
1141   else
1142     AC_DEFINE(
1143       [PROXY_SUPPORT], [1],
1144       [Define if you want CVS to be able to serve as a transparent proxy for
1145        write operations.  Disabling this may produce a slight performance gain
1146        on some systems, at the expense of write proxy support.])
1147   fi
1148 fi
1149 dnl
1150 dnl end --enable-proxy
1151 dnl
1152
1153
1154 dnl
1155 dnl begin --enable-pam
1156 dnl
1157
1158 dnl
1159 dnl Check if PAM authentication is enabled
1160 dnl
1161 AC_ARG_ENABLE(
1162   [pam],
1163   AC_HELP_STRING(
1164     [--enable-pam],
1165     [Use to enable system authentication with PAM instead of using the 
1166     simple getpwnam interface.  This allows authentication (in theory) 
1167     with any PAM module, e.g. on systems with shadow passwords or via LDAP]), ,
1168   [enable_pam=no]
1169   )
1170
1171 if test yes = $enable_pam; then
1172   ac_pam_header_available=
1173
1174   AC_CHECK_HEADER([security/pam_appl.h], [
1175     AC_DEFINE([HAVE_SECURITY_PAM_APPL_H], 1, [Define to 1 if security/pam_appl.h is available])
1176     ac_pam_header_available=1])
1177
1178   if test -z "$ac_pam_header_available"; then
1179   AC_CHECK_HEADER([pam/pam_appl.h], [
1180     AC_DEFINE([HAVE_PAM_PAM_APPL_H], 1, [Define to 1 if pam/pam_appl.h is available])
1181     ac_pam_header_available=1])
1182   fi
1183
1184   if test -z "$ac_pam_header_available"; then
1185     AC_MSG_ERROR([Could not find PAM headers])
1186   else
1187     AC_DEFINE(HAVE_PAM, 1, 
1188     [Define to enable system authentication with PAM instead of using the 
1189     simple getpwnam interface.  This allows authentication (in theory) 
1190     with any PAM module, e.g. on systems with shadow passwords or via LDAP])
1191     AC_CHECK_LIB(pam, pam_start, [LIBS="${LIBS} -lpam"],
1192       AC_MSG_ERROR([Could not find PAM libraries but the headers exist.
1193       Give the --disable-pam option to compile without PAM support (or fix
1194       your broken configuration)])
1195     )
1196   fi
1197 fi
1198
1199 dnl
1200 dnl end --enable-pam
1201 dnl
1202
1203
1204 dnl
1205 dnl begin --enable-case-sensitivity
1206 dnl
1207
1208 AC_ARG_ENABLE(
1209   [case-sensitivity],
1210   AC_HELP_STRING(
1211     [--enable-case-sensitivity],
1212     [Force CVS to expect a case sensitive file system.  Enabling this on a case
1213      insensitive system should have little effect on the server or client
1214      operation, though client users may ocassionally be suprised that the CVS
1215      server appears to be case sensitive.  Disabling this for a case sensitive
1216      server disables server support for case insensitive clients, which can
1217      confuse all users of case insensitive clients contacting the server.
1218      Disabling this for a case sensitive client will cause the client to ask
1219      servers to behave case insensitively, which could cause confusion for
1220      users, but also probably no real harm.  (default autoselects based on the
1221      case sensitivity of the file system containing the current working
1222      directory)]),
1223     [case "$enable_case_sensitivity" in
1224        yes | no | auto) ;;
1225        *)
1226           AC_MSG_ERROR([Unrecognized argument to --enable-case-sensitivity: \`$enable_case_sensitivity'.  Acceptable values are \`yes', \`no', and \`auto'.])
1227           ;;
1228      esac],
1229   [enable_case_sensitivity=auto])
1230
1231 acx_forced=' (forced)'
1232 AC_MSG_CHECKING([for a case sensitive file system])
1233 if test $enable_case_sensitivity = auto; then
1234   dnl
1235   dnl Check for a case insensitive filesystem, like Mac OS X and Windows have.
1236   dnl
1237   AC_CACHE_VAL([acx_cv_case_sensitive],
1238   [ rm -f ac_TEST_filenames_CASE_sensitive
1239     echo foo >ac_test_filenames_case_sensitive
1240     if test -f ac_TEST_filenames_CASE_sensitive; then
1241       acx_cv_case_sensitive=no
1242     else
1243       acx_cv_case_sensitive=yes
1244     fi
1245     rm ac_test_filenames_case_sensitive
1246   ])
1247   enable_case_sensitivity=$acx_cv_case_sensitive
1248   acx_forced=
1249 fi
1250 AC_MSG_RESULT([$enable_case_sensitivity$acx_forced])
1251 if test $enable_case_sensitivity = no; then
1252   AC_DEFINE([FILENAMES_CASE_INSENSITIVE], [1],
1253             [Define if this executable will be running on case insensitive
1254              file systems.  In the client case, this means that it will request
1255              that the server pretend to be case insensitive if it isn't
1256              already.])
1257   dnl Compile fncase.c (containing fncase() & fncmp()) to handle file name
1258   dnl comparisons on case insensitive filesystems.
1259   AC_LIBOBJ(fncase)
1260 fi
1261
1262 dnl
1263 dnl end --enable-case-sensitivity
1264 dnl
1265
1266
1267 dnl
1268 dnl begin --enable-encryption
1269 dnl
1270
1271 dnl
1272 dnl Use --enable-encryption to turn on encryption support, but ignore this
1273 dnl option unless either client or server is enabled.
1274 dnl
1275 AC_ARG_ENABLE(
1276   [encryption],
1277   AC_HELP_STRING(
1278     [--enable-encryption],
1279     [Enable encryption support (disabled by default)]), ,
1280   [enable_encryption=no])
1281 if test "x$enable_encryption" = xyes; then
1282   if test xno = "x$with_client" && test xno = "x$with_server"; then
1283     AC_MSG_WARN(
1284       [--enable-encryption is meaningless when neither the CVS client
1285        nor the CVS server is enabled (--disable-client and --disable-server).])
1286   else
1287     AC_DEFINE(
1288       [ENCRYPTION], [1],
1289       [Define to enable encryption support.])
1290   fi
1291 fi
1292
1293 dnl
1294 dnl end --enable-encryption
1295 dnl
1296
1297
1298 dnl
1299 dnl begin --enable-force-editor
1300 dnl
1301
1302 AC_ARG_ENABLE(
1303   [force-editor],
1304   AC_HELP_STRING(
1305     [--enable-force-editor],
1306     [When committing or importing files, you must enter a log message.
1307      Normally, you can do this either via the -m flag on the command
1308      line, the -F flag on the command line, or an editor will be started
1309      for you.  If you like to use logging templates (the rcsinfo file
1310      within the $CVSROOT/CVSROOT directory), you might want to force
1311      people to use the editor even if they specify a message with -m or
1312      -F.  --enable-force-editor will cause the -m or -F message to be
1313      appended to the temp file when the editor is started. (disabled
1314      by default)]), ,
1315   [enable_force_editor=no])
1316
1317 if test yes = "$enable_force_editor"; then
1318   AC_DEFINE(
1319     [FORCE_USE_EDITOR], [1],
1320     [When committing or importing files, you must enter a log message.
1321     Normally, you can do this either via the -m flag on the command
1322     line, the -F flag on the command line, or an editor will be started
1323     for you.  If you like to use logging templates (the rcsinfo file
1324     within the $CVSROOT/CVSROOT directory), you might want to force
1325     people to use the editor even if they specify a message with -m or
1326     -F.  Enabling FORCE_USE_EDITOR will cause the -m or -F message to be
1327     appended to the temp file when the editor is started.])
1328 fi
1329
1330 dnl
1331 dnl end --enable-force-editor
1332 dnl
1333
1334
1335 dnl
1336 dnl begin --enable-lock-compatibility
1337 dnl
1338
1339 # Check for options requesting client and server feature. If none are
1340 # given and we have connect(), we want the full client & server arrangement.
1341 AC_ARG_ENABLE(
1342   [lock-compatibility],
1343   AC_HELP_STRING(
1344     [--enable-lock-compatibility],
1345     [Include locking code which prevents versions of CVS earlier than 1.12.4
1346      directly accessing the same repositiory as this executable from ignoring
1347      this executable's promotable read locks.  If only CVS versions 1.12.4 and
1348      later will be accessing your repository directly (as a server or locally),
1349      you can safely disable this option in return for fewer disk accesses and a
1350      small speed increase.  Disabling this option when versions of CVS earlier
1351      than 1,12,4 _will_ be accessing your repository, however, is *VERY* *VERY*
1352      *VERY* dangerous and could result in data loss.  (enabled by default)]),,
1353   [enable_lock_compatibility=yes])
1354
1355 if test x$enable_lock_compatibility = xyes; then
1356   AC_DEFINE([LOCK_COMPATIBILITY], [1],
1357     [Define to include locking code which prevents versions of CVS earlier than
1358      1.12.4 directly accessing the same repositiory as this executable from
1359      ignoring this executable's promotable read locks.  If only CVS versions
1360      1.12.4 and later will be accessing your repository directly (as a server
1361      or locally), you can safely disable this option in return for fewer disk
1362      accesses and a small speed increase.  Disabling this option when versions
1363      of CVS earlier than 1,12,4 _will_ be accessing your repository, however,
1364      is *VERY* *VERY* *VERY* dangerous and could result in data loss.
1365
1366      As such, by default, CVS is compiled with this code enabled.  If you are
1367      sure you would like this code disabled, you can disable it by passing the
1368      "--disable-lock-compatibility" option to configure or by commenting out
1369      the lines below.])
1370 fi
1371
1372 dnl
1373 dnl end --enable-lock-compatibility
1374 dnl
1375
1376
1377 dnl
1378 dnl begin --enable-rootcommit
1379 dnl
1380
1381 dnl
1382 dnl I don't like this here, but I don't really like options.h, either.
1383 dnl Besides, this is causing some problems currently when compiling under
1384 dnl Windows and moving it here should avoid the issue (the wrong options.h
1385 dnl is being used).
1386 dnl
1387 dnl I don't like making this a runtime option either.  I think I just don't
1388 dnl like making it easy to get to, but putting it here goes along with the
1389 dnl Autoconf ideal.
1390 dnl
1391 AC_ARG_ENABLE(
1392   [rootcommit],
1393   AC_HELP_STRING(
1394     [--enable-rootcommit],
1395     [Allow the root user to commit files (disabled by default)]), ,
1396   [enable_rootcommit=no])
1397 if test "$enable_rootcommit" = no; then
1398   AC_DEFINE(
1399     [CVS_BADROOT], [1],
1400     [When committing a permanent change, CVS and RCS make a log entry of
1401      who committed the change.  If you are committing the change logged
1402      in as "root" (not under "su" or other root-priv giving program),
1403      CVS/RCS cannot determine who is actually making the change.
1404
1405      As such, by default, CVS prohibits changes committed by users
1406      logged in as "root".  You can disable checking by passing the
1407      "--enable-rootcommit" option to configure or by commenting out the
1408      lines below.])
1409 fi
1410
1411 dnl
1412 dnl end --enable-rootcommit
1413 dnl
1414
1415 dnl
1416 dnl begin --enable-old-info-support
1417 dnl
1418 AC_ARG_ENABLE(
1419   [old-info-support],
1420   AC_HELP_STRING(
1421     [--enable-old-info-format-support],
1422     [Enable support for the pre 1.12.1 *info scripting hook format strings.
1423      Disable this option for a smaller executable once your scripting
1424      hooks have been updated to use the new *info format strings (default).]), ,
1425   [enable_old_info_format_support=yes])
1426 if test "$enable_old_info_format_support" = yes; then
1427   AC_DEFINE(
1428     [SUPPORT_OLD_INFO_FMT_STRINGS], [1],
1429     [Enable support for the pre 1.12.1 *info scripting hook format strings.
1430      Disable this option for a smaller executable once your scripting
1431      hooks have been updated to use the new *info format strings by passing
1432      "--disable-old-info-format-support" option to configure or by commenting
1433      out the line below.])
1434 fi
1435
1436 dnl
1437 dnl end --enable-old-info-support
1438 dnl
1439
1440
1441 dnl
1442 dnl begin --enable-config-override
1443 dnl
1444
1445 AC_ARG_ENABLE(
1446   [config-override],
1447   AC_HELP_STRING(
1448     [--enable-config-override],
1449     [Set to a comma-separated list of paths to directories (designated by
1450      trailing `/') and files, specifies the path prefixes (for directories) and
1451      paths to files the CVS server commands will allow configuration to be read
1452      from.  Specify `--enable-config-override=no' to disable config file
1453      overrides completely and `--enable-config-override=/' or simply
1454      `--enable-config-override' to allow all paths.  (Defaults to
1455      `SYSCONFDIR/cvs.conf,SYSCONFDIR/cvs/')]),,
1456   [# $sysconfdir may still contain variable references.  By default, this will
1457    # be to $prefix, and $prefix won't be set to its default value until later.
1458    # Compromise without setting $prefix for the rest of the file.
1459    cvs_save_prefix=$prefix
1460    if test "X$prefix" = XNONE; then
1461      prefix=$ac_prefix_default
1462    fi
1463    eval enable_config_override=`echo $sysconfdir/cvs.conf,$sysconfdir/cvs/`
1464    prefix=$cvs_save_prefix])
1465
1466 if test x"$enable_config_override" = xyes; then
1467   enable_config_override=/
1468 fi
1469
1470 if test x"$enable_config_override" = xno; then :; else
1471   save_IFS=$IFS
1472   IFS=,
1473   arrayinit=""
1474   for path in $enable_config_override; do
1475     IFS=$save_IFS
1476     case "$path" in
1477       [[\\/$]]* | ?:[[\\/]]* )
1478         arrayinit="$arrayinit\"$path\", "
1479         ;;
1480       *)  AC_MSG_ERROR(
1481           [expected comma separated list of absolute directory
1482            names for --enable-config-override, or \`no', not:
1483            \`$enable_config_override'
1484            (\`$path' invalid.)]);;
1485     esac
1486   done
1487   arrayinit="${arrayinit}NULL"
1488
1489   AC_DEFINE_UNQUOTED(ALLOW_CONFIG_OVERRIDE, [$arrayinit],
1490     [Define this to a NULL terminated list of allowed path prefixes (for
1491      directories) and paths to files the CVS server will allow configuration to
1492      be read from when specified from the command line.])
1493 fi
1494
1495 dnl
1496 dnl end --enable-config-override
1497 dnl
1498
1499
1500
1501 dnl
1502 dnl end --enables
1503 dnl
1504
1505
1506
1507 dnl For the moment we will assume that all systems which have
1508 dnl the unixyness to run configure are unixy enough to do the
1509 dnl PreservePermissions stuff.  I have this sinking feeling that
1510 dnl things won't be that simple, before long.
1511 dnl AC_DEFINE(PRESERVE_PERMISSIONS_SUPPORT, 1,
1512 dnl [Define if this system supports chown(), link(), and friends.])
1513
1514 dnl On cygwin32, we configure like a Unix system, but we need some support
1515 dnl libraries.  We do this at the end so that the new libraries are added at
1516 dnl the end of LIBS.
1517 dnl
1518 dnl FIXME: We should be trying to meet the autoconf ideal of checking for
1519 dnl the properties of the system rather than the name of the os here.  In other
1520 dnl words, we should check the case sensitivty of the system and then for
1521 dnl the support functions we are using and which library we find them in.
1522 AC_CACHE_CHECK(for cygwin32, ccvs_cv_sys_cygwin32,
1523 [AC_TRY_COMPILE([], [return __CYGWIN32__;],
1524 ccvs_cv_sys_cygwin32=yes, ccvs_cv_sys_cygwin32=no)])
1525 if test $ccvs_cv_sys_cygwin32 = yes; then
1526   LIBS="$LIBS -ladvapi32"
1527
1528   dnl On Windows you can only change file times if you can write to
1529   dnl the file.  cygwin32 should really handle this for us, but as of
1530   dnl January 1998 it doesn't.
1531   AC_DEFINE(UTIME_EXPECTS_WRITABLE, 1,
1532 [Define if utime requires write access to the file (true on Windows,
1533 but not Unix).])
1534
1535   dnl On Windows we must use setmode to change between binary and text
1536   dnl mode.  This probably doesn't really require two macro definitions
1537   AC_DEFINE(USE_SETMODE_STDOUT, 1,
1538 [Define if setmode is required when writing binary data to stdout.])
1539   AC_DEFINE(HAVE_SETMODE, 1,
1540 [Define if the diff library should use setmode for binary files.])
1541 fi
1542
1543 dnl associate the setting of the execute bit with the individual scripts
1544 AC_CONFIG_FILES(contrib/validate_repo, [chmod +x contrib/validate_repo])
1545 AC_CONFIG_FILES(contrib/clmerge, [chmod +x contrib/clmerge])
1546 AC_CONFIG_FILES(contrib/cln_hist, [chmod +x contrib/cln_hist])
1547 AC_CONFIG_FILES(contrib/commit_prep, [chmod +x contrib/commit_prep])
1548 AC_CONFIG_FILES(contrib/cvs_acls, [chmod +x contrib/cvs_acls])
1549 AC_CONFIG_FILES(contrib/log, [chmod +x contrib/log])
1550 AC_CONFIG_FILES(contrib/log_accum, [chmod +x contrib/log_accum])
1551 AC_CONFIG_FILES(contrib/mfpipe, [chmod +x contrib/mfpipe])
1552 AC_CONFIG_FILES(contrib/pvcs2rcs, [chmod +x contrib/pvcs2rcs])
1553 AC_CONFIG_FILES(contrib/rcs2log:contrib/rcs2log.sh, [chmod +x contrib/rcs2log])
1554 AC_CONFIG_FILES(contrib/rcslock, [chmod +x contrib/rcslock])
1555 AC_CONFIG_FILES(contrib/sccs2rcs, [chmod +x contrib/sccs2rcs])
1556 AC_CONFIG_FILES(doc/mkman:doc/mkman.pl, [chmod +x doc/mkman])
1557 AC_CONFIG_FILES(src/cvsbug, [chmod +x src/cvsbug])
1558
1559 dnl the bulk files
1560 AC_CONFIG_FILES([Makefile \
1561           contrib/Makefile \
1562           contrib/pam/Makefile \
1563           cvs.spec \
1564           diff/Makefile \
1565           doc/Makefile \
1566           doc/i18n/Makefile \
1567           doc/i18n/pt_BR/Makefile \
1568           emx/Makefile \
1569           lib/Makefile \
1570           maint-aux/Makefile \
1571           man/Makefile \
1572           os2/Makefile \
1573           src/Makefile \
1574           src/sanity.config.sh \
1575           tools/Makefile \
1576           vms/Makefile \
1577           windows-NT/Makefile \
1578           windows-NT/SCC/Makefile \
1579           zlib/Makefile])
1580
1581 dnl and we're done
1582 AC_OUTPUT
1583
1584
1585
1586 # Report the state of this version of CVS if this is from dev.
1587 m4_bmatch(m4_defn([AC_PACKAGE_VERSION]),  [[0-9]*\.[0-9]*\.[0-9]*\.[0-9]],
1588 [    cat <<EOF
1589
1590 You are about to use an unreleased version of CVS.  Be sure to
1591 read the relevant mailing lists, most importantly <info-cvs@nongnu.org>.
1592
1593 Below you will find information on the status of this version of CVS.
1594
1595
1596 EOF
1597     sed -n '/^\* Status/,$p' $srcdir/BUGS
1598 ])