]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/cvs/configure.in
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / cvs / configure.in
1 dnl configure.in for cvs
2 AC_INIT([Concurrent Versions System (CVS)],[1.11.22.1],
3         [bug-cvs@nongnu.org],[cvs])
4 AC_CONFIG_SRCDIR(src/cvs.h)
5 AM_INIT_AUTOMAKE([gnu 1.7.9 dist-bzip2 no-define])
6 AC_PREREQ(2.60)
7
8 AC_PREFIX_PROGRAM(cvs)
9 AM_CONFIG_HEADER(config.h)
10 AM_MAINTAINER_MODE
11
12 AC_PROG_CC
13 AM_PROG_CC_C_O
14
15 dnl FIXME the next three calls should be avoided according to autoconf
16 dnl philosophy.  for example, AC_CHECK_LIB should be used to look for crypt.
17 dnl
18 dnl These are here instead of later because they want to be called before
19 dnl anything that calls a C compiler.
20 AC_AIX
21 AC_MINIX
22
23 # Find the posix library needed on INTERACTIVE UNIX (ISC)
24 dnl
25 dnl From the Autoconf 2.53 manual (AC_ISC_POSIX):
26 dnl
27 dnl  For INTERACTIVE UNIX (ISC), add `-lcposix' to output variable
28 dnl  `LIBS' if necessary for POSIX facilities.  Call this after
29 dnl  `AC_PROG_CC' and before any other macros that use POSIX
30 dnl  interfaces.  INTERACTIVE UNIX is no longer sold, and Sun says that
31 dnl  they will drop support for it on 2006-07-23, so this macro is
32 dnl  becoming obsolescent.
33 dnl
34 AC_SEARCH_LIBS([strerror], [cposix])
35
36 dnl
37 dnl Autoconf stopped setting $ISC sometime before 2.53
38 dnl
39 dnl If this is still important, someone should come up with a generic test
40 dnl for whether _SYSV3 needs to be defined.  Removed code below:
41 dnl
42 dnl if test "$ISC" = yes; then
43 dnl CFLAGS="$CFLAGS -D_SYSV3"
44 dnl # And I don't like this...  In theory it should be found later if server is
45 dnl # enabled, but maybe something on INTERACTIVE UNIX (ISC) we didn't ask to
46 dnl # link with crypt tries?  Anyhow, the autoconf manual says we can delete
47 dnl # this ISC stuff on or after 2006-07-23 when Sun discontinues support and
48 dnl # ISC becomes obsolescent, but I suppose that is probably a matter of
49 dnl # opinion.
50 dnl #
51 dnl # N.B.  The reason for doing this is that some moron decided to put a stub
52 dnl # for crypt in libc that always returns NULL.  Without this here, the later
53 dnl # check will find the stub instead of the real thing, resulting in a server
54 dnl # that can't process crypted passwords correctly.
55 dnl
56 dnl # again, if we have to try and reenable this for ISC, someone should come
57 dnl # up with a generic test that figures out whether crypt is good or not -
58 dnl # Is it always returning NULL?
59 dnl LIBS="-lcrypt $LIBS"
60 dnl fi
61 dnl
62 dnl FIXME - This has been broken for at least a few months anyhow, so I'm
63 dnl removing the crypt lib define above, but the correct fix would be to
64 dnl provide a CRYPT_WORKS macro or the like that gets called sometime after
65 dnl the AC_SEARCH_LIBS call that normally finds crypt, and if crypt doesn't
66 dnl work, the macro should be retried with LIBS="-lcrypt $LIBS" forced.
67 dnl
68
69 AC_PROG_RANLIB
70 AC_PROG_YACC
71 AC_PROG_LN_S
72 AC_EXEEXT
73
74 AC_PATH_PROG(PERL, perl, no)
75 AC_PATH_PROG(CSH, csh, no)
76 # for contrib/rcs2log.sh & src/cvsbug.in.
77 AC_PATH_PROG(MKTEMP, mktemp, mktemp)
78 if test x"$MKTEMP" = xmktemp; then
79         MKTEMP_SH_FUNCTION=$srcdir/mktemp.sh
80 else
81         MKTEMP_SH_FUNCTION=/dev/null
82 fi
83 AC_SUBST_FILE(MKTEMP_SH_FUNCTION)
84 # for src/cvsbug.in
85 AC_PATH_PROG(SENDMAIL, sendmail, no, [$PATH:/usr/sbin:/usr/lib])
86 # For diff/util.c
87 AC_PATH_PROG(PR, pr, no)
88 if test x"$PR" != xno; then
89         AC_DEFINE_UNQUOTED([PR_PROGRAM], ["$PR"], [Path to the pr utility])
90 fi
91
92 dnl FIXME This is truly gross.
93 missing_dir=`cd $ac_aux_dir && pwd`
94 dnl FIXME I pulled this default list from sanity.sh.  Perhaps these lists
95 dnl can be stored in one location?
96 dnl
97 dnl Yeah, put the value in a variable add it to the substitution list
98 dnl then have configure create sanity.sh from sanity.sh.in...
99 glocs="$PATH:/usr/local/bin:/usr/contrib/bin:/usr/gnu/bin:/local/bin:/local/gnu/bin:/gnu/bin"
100 AC_PATH_PROGS(ROFF, groff roff, $missing_dir/missing roff, $glocs)
101 AC_PATH_PROG(PS2PDF, ps2pdf, $missing_dir/missing ps2pdf)
102 AC_PATH_PROG(TEXI2DVI, texi2dvi, $missing_dir/missing texi2dvi)
103
104 AC_SYS_INTERPRETER
105 if test X"$ac_cv_sys_interpreter" != X"yes" ; then
106   # silly trick to avoid problems in AC macros...
107   ac_msg='perl scripts using #! may not be invoked properly'
108   AC_MSG_WARN($ac_msg)
109 fi
110
111 # BSD's logo is a devil for a reason, hey?
112 AC_CACHE_CHECK(for BSD VPATH bug in make, ccvs_cv_bsd_make_vpath_bug,
113 [if test ! -d ac_test_dir ; then
114         AC_TRY_COMMAND([mkdir ac_test_dir])
115 fi
116 cat >conftestmake <<EOF
117 VPATH = ac_test_dir
118 ac_test_target: ac_test_dep
119         echo BSD VPATH bug present >&2
120 ac_test_dep: ac_test_dep_dep
121 EOF
122 touch ac_test_dir/ac_test_dep_dep
123 touch ac_test_dir/ac_test_dep
124 touch ac_test_target
125 # Don't know why, but the following test doesn't work under FreeBSD 4.2
126 # without this sleep command
127 sleep 1
128 if AC_TRY_COMMAND([make -f conftestmake 2>&1 >/dev/null |grep ^BSD\ VPATH\ bug\ present\$ >/dev/null]) ; then
129         ccvs_cv_bsd_make_vpath_bug=yes
130 else
131         ccvs_cv_bsd_make_vpath_bug=no
132 fi
133 AC_TRY_COMMAND([rm -rf ac_test_dir ac_test_target conftestmake])])
134 # We also don't need to worry about the bug when $srcdir = $builddir
135 AM_CONDITIONAL(MAKE_TARGETS_IN_VPATH, \
136                 test $ccvs_cv_bsd_make_vpath_bug = no \
137                 || test $srcdir = .)
138
139 AC_HEADER_DIRENT
140 AC_HEADER_STDC
141 AC_HEADER_SYS_WAIT
142 AC_CHECK_HEADERS(\
143         errno.h \
144         direct.h \
145         fcntl.h \
146         fnmatch.h \
147         io.h \
148         limits.h \
149         memory.h \
150         ndbm.h \
151         string.h \
152         syslog.h \
153         sys/bsdtypes.h \
154         sys/file.h \
155         sys/param.h \
156         sys/resource.h \
157         sys/select.h \
158         sys/time.h \
159         sys/timeb.h \
160         unistd.h \
161         utime.h\
162 )
163 AC_HEADER_STAT
164 AC_HEADER_TIME
165
166 AC_C_CONST
167 AC_TYPE_UID_T
168 AC_TYPE_MODE_T
169 AC_TYPE_PID_T
170 AC_TYPE_SIZE_T
171 AC_TYPE_SIGNAL
172
173 AC_CHECK_MEMBERS([struct stat.st_blksize])
174 AC_CHECK_MEMBERS([struct stat.st_rdev])
175
176 AC_REPLACE_FUNCS(\
177         dup2 \
178         ftruncate \
179         gethostname \
180         memmove \
181         mkdir \
182         rename \
183         strerror \
184         strstr \
185         strtoul\
186         valloc \
187         waitpid \
188 )
189
190
191
192 dnl
193 dnl Begin GNULIB stuff.
194 dnl
195 gl_XSIZE
196
197 dnl We always want to use the GNULIB getpass, so define its name to something
198 dnl that won't conflict with system declarations.
199 AC_DEFINE([getpass], [cvs_getpass],
200   [We want to always use the GNULIB version of getpass which we have in lib,
201    so define getpass to something that won't conflict with any existing system
202    declarations.])
203
204 dnl
205 dnl End GNULIB stuff.
206 dnl
207
208
209
210 AC_CHECK_FUNCS(\
211         fchdir \
212         fchmod \
213         fsync \
214         ftime \
215         geteuid \
216         getgroups \
217         getopt \
218         getpagesize \
219         gettimeofday \
220         initgroups \
221         login \
222         logout \
223         mknod \
224         mkstemp \
225         mktemp \
226         putenv \
227         readlink \
228         regcomp \
229         regerror \
230         regexec \
231         regfree \
232         sigaction \
233         sigblock \
234         sigprocmask \
235         sigsetmask \
236         sigvec \
237         tempnam \
238         timezone \
239         tzset \
240         vprintf \
241         wait3 \
242 )
243 # we only need one of the following
244 AC_CHECK_FUNCS([\
245         nanosleep \
246         usleep \
247         select \
248 ], [break])
249
250 dnl
251 dnl The CVS coding standard (as specified in HACKING) is that if it exists
252 dnl in SunOS4 and ANSI, we use it.  CVS itself, of course, therefore doesn't
253 dnl need HAVE_* defines for such functions, but diff wants them.
254 dnl
255 AC_DEFINE(HAVE_STRCHR, 1,
256 [Define if you have strchr (always for CVS).])
257 AC_DEFINE(HAVE_MEMCHR, 1,
258 [Define if you have memchr (always for CVS).])
259
260 dnl
261 dnl Force lib/regex.c to use malloc instead of messing around with alloca
262 dnl and define the old re_comp routines that we use.
263 dnl
264 AC_DEFINE(REGEX_MALLOC, 1,
265 [Define to force lib/regex.c to use malloc instead of alloca.])
266 AC_DEFINE(_REGEX_RE_COMP, 1,
267 [Define to force lib/regex.c to define re_comp et al.])
268 dnl
269 dnl AC_FUNC_FORK([]) is rather baroque.  It seems to be rather more picky
270 dnl than, say, the Single Unix Specification (version 2), which simplifies
271 dnl a lot of cases by saying that the child process can't set any variables
272 dnl (thus avoiding problems with register allocation) or call any functions
273 dnl (thus avoiding problems with whether file descriptors are shared).
274 dnl It would be nice if we could just write to the Single Unix Specification.
275 dnl I think the only way to do redirection this way is by doing it in the
276 dnl parent, and then undoing it afterwards (analogous to windows-NT/run.c).
277 dnl That would appear to have a race condition if the user hits ^C (or
278 dnl some other signal) at the wrong time, as main_cleanup will try to use
279 dnl stdout/stderr.  So maybe we are stuck with AC_FUNC_FORK([]).
280 dnl
281 AC_FUNC_FORK([])
282 AC_FUNC_CLOSEDIR_VOID
283
284 dnl
285 dnl Check for shadow password support.
286 dnl
287 dnl We used to try to determine whether shadow passwords were actually in
288 dnl use or not, but the code has been changed to work right reguardless,
289 dnl so we can go back to a simple check.
290 AC_SEARCH_LIBS(getspnam, sec gen, AC_DEFINE(HAVE_GETSPNAM, 1,
291 [Define if you have the getspnam function.]))
292
293 AC_FUNC_UTIME_NULL
294 AC_SYS_LONG_FILE_NAMES
295
296 AC_FUNC_FNMATCH
297 if test "$ac_cv_func_fnmatch_works" = no; then
298   AC_LIBOBJ(fnmatch)
299   AC_CONFIG_LINKS(lib/fnmatch.h:lib/fnmatch.h.in)
300   AC_LIBSOURCE(fnmatch.h.in)
301 fi
302
303 # Try to find connect and gethostbyname.
304 AC_CHECK_LIB(nsl, main)
305 AC_SEARCH_LIBS(connect, xnet socket inet,
306   AC_DEFINE(HAVE_CONNECT, 1,
307 [Define if you have the connect function.]))
308 dnl no need to search nsl for gethostbyname here since we should have
309 dnl just added libnsl above if we found it.
310 AC_SEARCH_LIBS(gethostbyname, netinet)
311
312
313 dnl
314 dnl begin --with-*
315 dnl
316
317 dnl
318 dnl set $(KRB4) from --with-krb4=value -- WITH_KRB4
319 dnl
320 dnl If you change this, keep in mind that some systems have a bogus
321 dnl libkrb in the system libraries, so --with-krb4=value needs to
322 dnl override the system -lkrb.
323 dnl
324 KRB4=/usr/kerberos
325 define(WITH_KRB4,[
326 AC_ARG_WITH(
327   [krb4],
328   AC_HELP_STRING(
329     [--with-krb4],
330     [Kerberos 4 directory (default /usr/kerberos)]),
331   [KRB4=$with_krb4],
332 )dnl
333 AC_MSG_CHECKING([for KRB4 in $KRB4])
334 AC_MSG_RESULT([])
335 AC_SUBST(KRB4)])dnl
336 WITH_KRB4
337
338 krb_h=
339 AC_MSG_CHECKING([for krb.h])
340 if test "$cross_compiling" != yes && test -r $KRB4/include/krb.h; then
341    hold_cflags=$CFLAGS
342    CFLAGS="$CFLAGS -I$KRB4/include"
343    AC_TRY_LINK([#include <krb.h>],[int i;],
344           [krb_h=yes krb_incdir=$KRB4/include],
345           [CFLAGS=$hold_cflags
346            AC_TRY_LINK([#include <krb.h>],[int i;],
347              [krb_h=yes krb_incdir=])])
348    CFLAGS=$hold_cflags
349 else
350    AC_TRY_LINK([#include <krb.h>],[int i;],
351              [krb_h=yes krb_incdir=])
352 fi
353 if test -z "$krb_h"; then
354   AC_TRY_LINK([#include <krb.h>],[int i;],
355     [krb_h=yes krb_incdir=],
356     [if test "$cross_compiling" != yes && test -r $KRB4/include/kerberosIV/krb.h; then
357        hold_cflags=$CFLAGS
358        CFLAGS="$CFLAGS -I$KRB4/include/kerberosIV"
359        AC_TRY_LINK([#include <krb.h>],[int i;],
360          [krb_h=yes krb_incdir=$KRB4/include/kerberosIV])
361        CFLAGS=$hold_cflags
362      fi])
363 fi
364 AC_MSG_RESULT($krb_h)
365
366 includeopt=
367 AC_SUBST(includeopt)
368 if test -n "$krb_h"; then
369   krb_lib=
370   if test "$cross_compiling" != yes && test -r $KRB4/lib/libkrb.a; then
371        hold_ldflags=$LDFLAGS
372        LDFLAGS="-L${KRB4}/lib $LDFLAGS"
373        AC_CHECK_LIB(krb,printf,[krb_lib=yes krb_libdir=${KRB4}/lib],
374            [LDFLAGS=$hold_ldflags
375             # Using open here instead of printf so we don't
376             # get confused by the cached value for printf from above.
377             AC_CHECK_LIB(krb,open,[krb_lib=yes krb_libdir=])])
378        LDFLAGS=$hold_ldflags
379   else
380        AC_CHECK_LIB(krb,printf,[krb_lib=yes krb_libdir=])
381        AC_CHECK_FUNC(krb_recvauth,[krb_lib=yes krb_libdir=])
382   fi
383   if test -n "$krb_lib"; then
384     AC_DEFINE([HAVE_KERBEROS], 1,
385               [Define if you have MIT Kerberos version 4 available.])
386     test -n "${krb_libdir}" && LIBS="${LIBS} -L${krb_libdir}"
387     # Put -L${krb_libdir} in LDFLAGS temporarily so that it appears before
388     # -ldes in the command line.  Don't do it permanently so that we honor
389     # the user's setting for LDFLAGS
390     hold_ldflags=$LDFLAGS
391     test -n "${krb_libdir}" && LDFLAGS="$LDFLAGS -L${krb_libdir}"
392     AC_CHECK_LIB(des,printf,[LIBS="${LIBS} -ldes"])
393     AC_CHECK_LIB(krb,krb_recvauth)
394     AC_CHECK_LIB(krb4,krb_recvauth)
395     LDFLAGS=$hold_ldflags
396     if test -n "$krb_incdir"; then
397       includeopt="${includeopt} -I$krb_incdir"
398     fi
399   fi
400 fi
401 AC_CHECK_FUNCS(krb_get_err_text)
402
403
404 dnl
405 dnl WITH_GSSAPI is external
406 dnl
407 dnl TODO - I tried to put these in alphabetical order, but ACX_WITH_GSSAPI
408 dnl fails unless called after the KRB4 stuff.  I don't know why.
409 dnl
410 ACX_WITH_GSSAPI
411
412
413 dnl
414 dnl begin --with-editor
415 dnl
416 dnl Set the default editor to use for log messages
417 dnl
418
419 AC_ARG_VAR(
420   [EDITOR],
421   [The text editor CVS will use by default for log messages.])
422
423 # Let the confiscator request a specific editor
424 AC_ARG_WITH(
425   [editor],
426   AC_HELP_STRING(
427     [--with-editor],
428     [The default text editor CVS should use for log messages
429      (default autoselects)]), ,
430   [with_editor=yes])
431
432 # If --with-editor was supplied with an argument, let it override $EDITOR from
433 # the user's environment.  We need to unset EDITOR here because AC_CHECK_PROGS
434 # will let the value of EDITOR ride when it is set rather than searching.  We
435 # ignore the --without-editor case since it will be caught below.
436 if test -n "$EDITOR" && test yes != $with_editor; then
437   AS_UNSET([EDITOR])
438 fi
439
440 # Set the default when --with-editor wasn't supplied or when it was supplied
441 # without an argument.
442 if test yes = $with_editor; then
443   with_editor="vim vi emacs nano pico edit"
444 fi
445
446 if echo $with_editor |grep ^/ >/dev/null; then
447   # If $with_editor is an absolute path, issue a warning if the executable
448   # doesn't exist or isn't usable, but then trust the user and use it
449   # regardless
450   EDITOR=$with_editor
451   AC_MSG_CHECKING([for an editor])
452   AC_MSG_RESULT([$EDITOR])
453   if ! test -f $with_editor \
454       || ! test -x $with_editor; then
455     # warn the user that they may encounter problems
456     AC_MSG_WARN([\`$with_editor' is not a path to an executable file])
457   fi
458 elif test no != "${with_editor}"; then
459   # Search for an editor
460   AC_CHECK_PROGS([EDITOR], [$with_editor], [no])
461     if test no = "${EDITOR}"; then
462       AC_MSG_ERROR([
463     Failed to find a text file editor.  CVS cannot be compiled
464     without a default log message editor.  Searched for
465     \`$with_editor'.  Try \`configure --with-editor'.])
466     fi
467 else
468   AC_MSG_ERROR([
469     CVS cannot be compiled without a default log message editor.
470     Try \`configure --with-editor'.])
471 fi
472
473 dnl FIXME - Using --without-editor will probably break a compile at
474 dnl the moment, but maybe it is reasonable for someone to want to
475 dnl compile a CVS executable that refuses to run if no $EDITOR,
476 dnl $CVS_EDITOR, or -e option is specified?  Making a preliminary
477 dnl design decision in this direction, subject to discussion.
478 dnl
479 dnl Still don't know if the above would be useful, but we shouldn't
480 dnl be able to get here any longer without $EDITOR defined due to the
481 dnl error checking above.
482 AC_DEFINE_UNQUOTED(
483   [EDITOR_DFLT], ["$EDITOR"],
484   [The default editor to use, if one does not specify the "-e" option
485    to cvs, or does not have an EDITOR environment variable.  If this
486    is not set to an absolute path to an executable, use the shell to
487    find where the editor actually is.  This allows sites with
488    /usr/bin/vi or /usr/ucb/vi to work equally well (assuming that their
489    PATH is reasonable).])
490
491 dnl
492 dnl done finding an editor
493 dnl
494 dnl end --with-editor
495 dnl
496
497 dnl
498 dnl begin --with-ssh
499 dnl
500
501 # What remote shell transport should the :extssh: client cvs default to using?
502 AC_ARG_WITH(
503   [ssh],
504   AC_HELP_STRING(
505     [--with-ssh],
506     [The default remote shell CVS will use for :extssh: transport
507      (default autodetects)]), ,
508   [with_ssh="ssh lshc ssh2"])
509
510 if test no = "$with_ssh"; then
511   AC_MSG_WARN([Failed to find usable remote shell. Using 'ssh'.])
512   with_ssh=ssh
513 elif test yes = "$with_ssh"; then
514   # Make --with-ssh mean the same thing as --with-ssh=ssh
515   with_ssh=ssh
516 fi
517
518 if echo $with_ssh |grep ^/ >/dev/null; then
519   # If $with_ssh is an absolute path, issue a warning if the executable
520   # doesn't exist or isn't usable, but then trust the user and use it
521   # regardless
522   with_default_ssh=$with_ssh
523   AC_MSG_CHECKING([for a remote shell])
524   if ! test -f $with_ssh \
525       || ! test -x $with_ssh; then
526     # warn the user that they may encounter problems
527     AC_MSG_WARN([$with_ssh is not a path to an executable file])
528   fi
529 else
530   # Search for a remote shell
531   AC_CHECK_PROGS([with_default_ssh], [$with_ssh], "ssh")
532 fi
533
534 AC_DEFINE_UNQUOTED(
535   [SSH_DFLT], ["$with_default_ssh"],
536   [The default remote shell to use, if one does not specify the
537    CVS_SSH environment variable.])
538 dnl done with finding a default CVS_SSH value
539 dnl
540 dnl end --with-ssh
541 dnl
542
543
544 dnl
545 dnl begin --with-rsh
546 dnl
547 dnl Many sites no longer desire the use of "rsh" as the default
548 dnl remote shell program. They typically favor "ssh" as the default
549
550 # What remote shell transport should our client cvs default to using?
551 AC_ARG_WITH(
552   [rsh],
553   AC_HELP_STRING(
554     [--with-rsh],
555     [The default remote shell CVS will use for :ext: transport
556      (default autodetects)]), ,
557   dnl `remsh' is only useful on HP-UX, where `rsh' is the `restricted shell'
558   dnl and `remsh' is the remote shell, but look for it first since it
559   dnl probably won't exist on any platform where it shouldn't be preferred
560   dnl to `rsh'.
561   [with_rsh="remsh rsh ssh lshc ssh2"])
562
563 if test no = "$with_rsh"; then
564   AC_MSG_WARN([Failed to find usable remote shell. Using 'rsh'.])
565   with_rsh=rsh
566 elif test yes = "$with_rsh"; then
567   # Make --with-rsh mean the same thing as --with-rsh=rsh
568   with_rsh=rsh
569 fi
570
571 if echo $with_rsh |grep ^/ >/dev/null; then
572   # If $with_rsh is an absolute path, issue a warning if the executable
573   # doesn't exist or isn't usable, but then trust the user and use it
574   # regardless
575   with_default_rsh=$with_rsh
576   AC_MSG_CHECKING([for a remote shell])
577   if ! test -f $with_rsh \
578       || ! test -x $with_rsh; then
579     # warn the user that they may encounter problems
580     AC_MSG_WARN([$with_rsh is not a path to an executable file])
581   fi
582 else
583   # Search for a remote shell
584   AC_CHECK_PROGS([with_default_rsh], [$with_rsh], "rsh")
585 fi
586
587 AC_DEFINE_UNQUOTED(
588   [RSH_DFLT], ["$with_default_rsh"],
589   [The default remote shell to use, if one does not specify the
590    CVS_RSH environment variable.])
591 dnl done with finding a default CVS_RSH value
592 dnl
593 dnl end --with-rsh
594 dnl
595
596
597 dnl
598 dnl Find a temporary directory
599 dnl
600 AC_ARG_WITH(
601   [tmpdir],
602   AC_HELP_STRING(
603     [--with-tmpdir],
604     [The temporary directory CVS should use as a default
605      (default autoselects)]))
606
607 AC_MSG_CHECKING([for temporary directory])
608 if test -z "$with_tmpdir" || test yes = "$with_tmpdir"; then
609   for with_tmpdir in /tmp /var/tmp no; do
610     if test -d "$with_tmpdir" && test -x "$with_tmpdir" \
611         && test -w "$with_tmpdir" && test -r "$with_tmpdir"; then
612       break
613     fi
614   done
615   if test no = "$with_tmpdir"; then
616     AC_MSG_WARN([Failed to find usable temporary directory.  Using '/tmp'.])
617     with_tmpdir=/tmp
618   fi
619   AC_MSG_RESULT([$with_tmpdir])
620 elif ! echo "$with_tmpdir" |grep '^[[\\/]]'; then
621   AC_MSG_RESULT([$with_tmpdir])
622   AC_MSG_ERROR([--with-tmpdir requires an absolute path.])
623 elif ! test -d "$with_tmpdir" || ! test -x "$with_tmpdir" \
624         || ! test -w "$with_tmpdir" || ! test -r "$with_tmpdir"; then
625   AC_MSG_RESULT([$with_tmpdir])
626   AC_MSG_WARN(
627     [User supplied temporary directory ('$with_tmpdir') does not
628      exist or lacks sufficient permissions for read/write.])
629 fi
630
631 AC_DEFINE_UNQUOTED(
632   [TMPDIR_DFLT], ["$with_tmpdir"],
633   [Directory used for storing temporary files, if not overridden by
634    environment variables or the -T global option.  There should be little
635    need to change this (-T is a better mechanism if you need to use a
636    different directory for temporary files).])
637
638 dnl
639 dnl done finding tmpdir
640 dnl
641
642
643 dnl
644 dnl Get default umask
645 dnl
646
647 AC_ARG_WITH(
648   [umask],
649   AC_HELP_STRING(
650     [--with-umask],
651     [Set the umask CVS will use by default in the repository (default 002)]))
652
653 if test -z "$with_umask" || test yes = "$with_umask"; then
654   with_umask=002
655 elif test no = "$with_umask"; then
656   with_umask=000
657 fi
658
659 AC_DEFINE_UNQUOTED(
660   [UMASK_DFLT], [$with_umask],
661   [The default umask to use when creating or otherwise setting file or
662    directory permissions in the repository.  Must be a value in the
663    range of 0 through 0777.  For example, a value of 002 allows group
664    rwx access and world rx access; a value of 007 allows group rwx
665    access but no world access.  This value is overridden by the value
666    of the CVSUMASK environment variable, which is interpreted as an
667    octal number.])
668
669 dnl
670 dnl Done setting default umask
671 dnl
672
673 dnl
674 dnl Set CVS Administrator Group
675 dnl
676 AC_ARG_WITH(
677   [cvs-admin-group],
678   AC_HELP_STRING(
679     [--with-cvs-admin-group=GROUP],
680     [The CVS admin command is restricted to the members of this group.
681      If this group does not exist, all users are allowed to run CVS admin.
682      To disable the CVS admin command for all users, create an empty group
683      by specifying the --with-cvs-admin-group= option.  To disable access
684      control for CVS admin, run configure with the --without-cvs-admin-group
685      option. (default 'cvsadmin')]), ,
686   [with_cvs_admin_group=cvsadmin])
687
688 if test yes = "$with_cvs_admin_group"; then
689   with_cvs_admin_group=cvsadmin
690 fi
691 if test no != "$with_cvs_admin_group"; then
692   dnl FIXME We should warn if the group doesn't exist
693   AC_DEFINE_UNQUOTED(
694     [CVS_ADMIN_GROUP], ["$with_cvs_admin_group"],
695     [The CVS admin command is restricted to the members of the group
696      CVS_ADMIN_GROUP.  If this group does not exist, all users are
697      allowed to run CVS admin.  To disable the CVS admin command for
698      all users, create an empty CVS_ADMIN_GROUP by running configure
699      with the --with-cvs-admin-group= option.  To disable access control
700      for CVS admin, run configure with the --without-cvs-admin-group
701      option in order to comment out the define below.])
702 fi
703
704 dnl
705 dnl Done setting CVS Administrator Group
706 dnl
707
708 dnl
709 dnl end --with-*
710 dnl
711
712
713 dnl
714 dnl Set the NDBM library to use.
715 dnl
716 dnl XXX - FIXME - FIXME - FIXME - XXX
717 dnl
718 dnl This is very bad.  It should really autodetect an appropriate NDBM library
719 dnl and, if it doesn't find one, decide to use MY_NDBM.  I'm am defining
720 dnl this here since this is no worse than it worked when it was in options.h
721 dnl and I am cleaning out options.h so that the Windows version of CVS will
722 dnl compile properly for the next release.
723 dnl
724 dnl That's why this option is in the --with-* section rather than the
725 dnl --enable-* section.
726 dnl
727 dnl XXX - FIXME - FIXME - FIXME - XXX
728 dnl
729 AC_ARG_ENABLE(
730   [cvs-ndbm],
731   AC_HELP_STRING(
732     [--enable-cvs-ndbm],
733     [Use the NDBM library distributed with CVS rather than attempting to use
734      a system NDBM library.  Disabling this may not work.  (default)]), ,
735   [enable_cvs_ndbm=yes])
736 if test no != "$enable_cvs_ndbm"; then
737   AC_DEFINE(
738     [MY_NDBM], [1],
739     [By default, CVS stores its modules and other such items in flat
740      text files (MY_NDBM enables this).  Turning off MY_NDBM causes CVS
741      to look for a system-supplied ndbm database library and use it
742      instead.  That may speed things up, but the default setting
743      generally works fine too.])
744 fi
745
746 dnl
747 dnl Done selecting NDBM library.
748 dnl
749
750
751 dnl
752 dnl begin --enables
753 dnl
754
755
756 dnl Allow mmap for the buffer routine replacements to be disabled in
757 dnl case of problems.
758
759 AC_ARG_ENABLE(
760   [mmap],
761   AC_HELP_STRING(
762     [--disable-mmap],
763     [Don't mmap RCS files]))
764
765 if test no != "$enable_mmap"; then
766   AC_FUNC_MMAP
767 fi
768
769 # Check for options requesting client and server feature. If none are
770 # given and we have connect(), we want the full client & server arrangement.
771 AC_ARG_ENABLE(
772   [client],
773   AC_HELP_STRING(
774     [--enable-client],
775     [Include code for running as a remote client (default)]), ,
776   [if test "$ac_cv_search_connect" != no; then
777     enable_client=yes
778   fi])
779 if test no != "$enable_client"; then
780   AC_DEFINE(
781     [CLIENT_SUPPORT], [1],
782     [Define if you want CVS to be able to be a remote repository client.])
783 fi
784
785 AC_ARG_ENABLE(
786   [password-authenticated-client],
787   AC_HELP_STRING(
788     [--enable-password-authenticated-client],
789     [Enable pserver as a remote access method in the CVS client
790      (default)]))
791
792 if test no != "$enable_password_authenticated_client"; then
793   if test no != "$enable_client"; then
794     AC_DEFINE(
795       [AUTH_CLIENT_SUPPORT], [1],
796       [Enable AUTH_CLIENT_SUPPORT to enable pserver as a remote access
797        method in the CVS client (default)])
798   else
799     AC_MSG_WARN(
800       [--enable-password-authenticated-client is meaningless with
801        the CVS client disabled (--disable-client)])
802   fi
803 fi
804
805
806 dnl
807 dnl Give the confiscator control over whether the server code is compiled
808 dnl
809 AC_ARG_ENABLE(
810   [server],
811   AC_HELP_STRING(
812     [--enable-server],
813     [Include code for running as a server (default)]), ,
814   [if test "$ac_cv_search_connect" != no; then
815      enable_server=yes
816    fi])
817
818 if test no != "$enable_server"; then
819   AC_DEFINE(
820     [SERVER_SUPPORT], [1],
821     [Define if you want CVS to be able to serve repositories to remote
822      clients.])
823
824   dnl
825   dnl The auth server needs to be able to check passwords against passwd
826   dnl file entries, so we only #define AUTH_SERVER_SUPPORT if we can
827   dnl find the crypt function. 
828   dnl
829   AC_SEARCH_LIBS(
830     [crypt], [crypt],
831     [AC_DEFINE(
832        [HAVE_CRYPT], [1],
833        [Define if you have the crypt function.])
834      AC_DEFINE(
835        [AUTH_SERVER_SUPPORT], [1],
836        [Define if you want to use the password authenticated server.])dnl
837   ])dnl AC_SEARCH_LIBS
838
839   dnl
840   dnl Allow the configurer to enable server flowcontrol.  Read the help
841   dnl strings below for a full explanation.
842   dnl
843   AC_ARG_ENABLE(
844     [server-flow-control],
845     AC_HELP_STRING(
846       [--enable-server-flow-control],
847       [If you are working with a large remote repository and a 'cvs
848        checkout' is swamping your network and memory, define these to
849        enable flow control.  You may optionally pass a low water mark
850        in bytes and a high water mark in bytes, separated by commas.
851        (default is enabled 1M,2M)]),
852     [if test yes = $enable_server_flow_control; then
853        enable_server_flow_control=1M,2M
854      fi],
855     [enable_server_flow_control=1M,2M])
856   if test no != $enable_server_flow_control; then
857     ccvs_lwm=`expr "$enable_server_flow_control" : '\(.*\),'`
858     ccvs_hwm=`expr "$enable_server_flow_control" : '.*,\(.*\)'`
859     ccvs_lwm_E=`expr "$ccvs_lwm" : '[[0-9]][[0-9]]*\(.*\)'`
860     ccvs_lwm=`expr "$ccvs_lwm" : '\([[0-9]][[0-9]]*\)'`
861     test "" != "$ccvs_lwm" || ccvs_lwm_E="?"
862     case $ccvs_lwm_E in
863         G) ccvs_lwm="$ccvs_lwm * 1024 * 1024 * 1024";;
864         M) ccvs_lwm="$ccvs_lwm * 1024 * 1024";;
865         k) ccvs_lwm="$ccvs_lwm * 1024";;
866         b | '') ;;
867         *) AC_MSG_ERROR([Can't parse argument to --enable-server-flow-control
868                         ('$enable_server_flow_control') as <lwm>,<hwm>])
869       esac
870     ccvs_hwm_E=`expr "$ccvs_hwm" : '[[0-9]][[0-9]]*\(.*\)'`
871     ccvs_hwm=`expr "$ccvs_hwm" : '\([[0-9]][[0-9]]*\).*'`
872     test "" != "$ccvs_hwm" || ccvs_hwm_E="?"
873     case $ccvs_hwm_E in
874         G) ccvs_hwm="$ccvs_hwm * 1024 * 1024 * 1024";;
875         M) ccvs_hwm="$ccvs_hwm * 1024 * 1024";;
876         k) ccvs_hwm="$ccvs_hwm * 1024";;
877         b | '') ccvs_hwm="$ccvs_hwm";;
878         *) AC_MSG_ERROR([Can't parse argument to --enable-server-flow-control
879                         ('$enable_server_flow_control') as <lwm>,<hwm>])
880       esac
881
882     AC_DEFINE(
883       [SERVER_FLOWCONTROL], [1],
884       [If you are working with a large remote repository and a 'cvs
885        checkout' is swamping your network and memory, define these to
886        enable flow control.  You will end up with even less probability of
887        a consistent checkout (see Concurrency in cvs.texinfo), but CVS
888        doesn't try to guarantee that anyway.  The master server process
889        will monitor how far it is getting behind, if it reaches the high
890        water mark, it will signal the child process to stop generating
891        data when convenient (ie: no locks are held, currently at the
892        beginning of a new directory).  Once the buffer has drained
893        sufficiently to reach the low water mark, it will be signalled to
894        start again.])
895     AC_DEFINE_UNQUOTED(
896       [SERVER_LO_WATER], [($ccvs_lwm)],
897       [The low water mark in bytes for server flow control.  Required if
898        SERVER_FLOWCONTROL is defined, and useless otherwise.])
899     AC_DEFINE_UNQUOTED(
900       [SERVER_HI_WATER], [($ccvs_hwm)],
901       [The high water mark in bytes for server flow control.  Required if
902        SERVER_FLOWCONTROL is defined, and useless otherwise.])
903   fi # enable_server_flow_control
904 fi # enable_server
905
906
907 dnl
908 dnl begin --enable-case-sensitivity
909 dnl
910
911 AC_ARG_ENABLE(
912   [case-sensitivity],
913   AC_HELP_STRING(
914     [--enable-case-sensitivity],
915     [Force CVS to expect a case sensitive file system.  Enabling this on a case
916      insensitive system should have little effect on the server or client
917      operation, though client users may ocassionally be suprised that the CVS
918      server appears to be case sensitive.  Disabling this for a case sensitive
919      server disables server support for case insensitive clients, which can
920      confuse all users of case insensitive clients contacting the server.
921      Disabling this for a case sensitive client will cause the client to ask
922      servers to behave case insensitively, which could cause confusion for
923      users, but also probably no real harm.  (default autoselects based on the
924      case sensitivity of the file system containing the current working
925      directory)]),
926     [case "$enable_case_sensitivity" in
927        yes | no | auto) ;;
928        *)
929           AC_MSG_ERROR([Unrecognized argument to --enable-case-sensitivity: \`$enable_case_sensitivity'.  Acceptable values are \`yes', \`no', and \`auto'.])
930           ;;
931      esac],
932   [enable_case_sensitivity=auto])
933
934 acx_forced=' (forced)'
935 AC_MSG_CHECKING([for a case sensitive file system])
936 if test $enable_case_sensitivity = auto; then
937   dnl
938   dnl Check for a case insensitive filesystem, like Mac OS X and Windows have.
939   dnl
940   AC_CACHE_VAL([acx_cv_case_sensitive],
941   [ rm -f ac_TEST_filenames_CASE_sensitive
942     echo foo >ac_test_filenames_case_sensitive
943     if test -f ac_TEST_filenames_CASE_sensitive; then
944       acx_cv_case_sensitive=no
945     else
946       acx_cv_case_sensitive=yes
947     fi
948     rm ac_test_filenames_case_sensitive
949   ])
950   enable_case_sensitivity=$acx_cv_case_sensitive
951   acx_forced=
952 fi
953 AC_MSG_RESULT([$enable_case_sensitivity$acx_forced])
954 if test $enable_case_sensitivity = no; then
955   AC_DEFINE([FILENAMES_CASE_INSENSITIVE], [1],
956             [Define if this executable will be running on case insensitive
957              file systems.  In the client case, this means that it will request
958              that the server pretend to be case insensitive if it isn't
959              already.])
960   dnl Compile fncase.c (containing fncase() & fncmp()) to handle file name
961   dnl comparisons on case insensitive filesystems.
962   AC_LIBOBJ(fncase)
963 fi
964
965 dnl
966 dnl end --enable-case-sensitivity
967 dnl
968
969
970 dnl
971 dnl begin --enable-encryption
972 dnl
973
974 dnl
975 dnl Use --enable-encryption to turn on encryption support, but ignore this
976 dnl option unless either client or server is enabled.
977 dnl
978 AC_ARG_ENABLE(
979   [encryption],
980   AC_HELP_STRING(
981     [--enable-encryption],
982     [Enable encryption support (disabled by default)]), ,
983   [enable_encryption=no])
984 if test "$enable_encryption" = yes; then
985   if test no != "$with_client" || test no != "$with_server"; then
986     AC_DEFINE(
987       [ENCRYPTION], [1],
988       [Define to enable encryption support.])
989   else
990     AC_MSG_WARN(
991       [--enable-encryption is meaningless when neither the CVS client
992        nor the CVS server is enabled (--disable-client and --disable-server).])
993   fi
994 fi
995
996 dnl
997 dnl end --enable-encryption
998 dnl
999
1000
1001 dnl
1002 dnl begin --enable-force-editor
1003 dnl
1004
1005 AC_ARG_ENABLE(
1006   [force-editor],
1007   AC_HELP_STRING(
1008     [--enable-force-editor],
1009     [When committing or importing files, you must enter a log message.
1010      Normally, you can do this either via the -m flag on the command
1011      line, the -F flag on the command line, or an editor will be started
1012      for you.  If you like to use logging templates (the rcsinfo file
1013      within the $CVSROOT/CVSROOT directory), you might want to force
1014      people to use the editor even if they specify a message with -m or
1015      -F.  --enable-force-editor will cause the -m or -F message to be
1016      appended to the temp file when the editor is started. (disabled
1017      by default)]), ,
1018   [enable_force_editor=no])
1019
1020 if test yes = "$enable_force_editor"; then
1021   AC_DEFINE(
1022     [FORCE_USE_EDITOR], [1],
1023     [When committing or importing files, you must enter a log message.
1024     Normally, you can do this either via the -m flag on the command
1025     line, the -F flag on the command line, or an editor will be started
1026     for you.  If you like to use logging templates (the rcsinfo file
1027     within the $CVSROOT/CVSROOT directory), you might want to force
1028     people to use the editor even if they specify a message with -m or
1029     -F.  Enabling FORCE_USE_EDITOR will cause the -m or -F message to be
1030     appended to the temp file when the editor is started.])
1031 fi
1032
1033 dnl
1034 dnl end --enable-force-editor
1035 dnl
1036
1037
1038 dnl
1039 dnl begin --enable-rootcommit
1040 dnl
1041
1042 dnl
1043 dnl I don't like this here, but I don't really like options.h, either.
1044 dnl Besides, this is causing some problems currently when compiling under
1045 dnl Windows and moving it here should avoid the issue (the wrong options.h
1046 dnl is being used).
1047 dnl
1048 dnl I don't like making this a runtime option either.  I think I just don't
1049 dnl like making it easy to get to, but putting it here goes along with the
1050 dnl Autoconf ideal.
1051 dnl
1052 AC_ARG_ENABLE(
1053   [rootcommit],
1054   AC_HELP_STRING(
1055     [--enable-rootcommit],
1056     [Allow the root user to commit files (disabled by default)]), ,
1057   [enable_rootcommit=no])
1058 if test "$enable_rootcommit" = no; then
1059   AC_DEFINE(
1060     [CVS_BADROOT], [1],
1061     [When committing a permanent change, CVS and RCS make a log entry of
1062      who committed the change.  If you are committing the change logged
1063      in as "root" (not under "su" or other root-priv giving program),
1064      CVS/RCS cannot determine who is actually making the change.
1065
1066      As such, by default, CVS prohibits changes committed by users
1067      logged in as "root".  You can disable checking by passing the
1068      "--enable-rootcommit" option to configure or by commenting out the
1069      lines below.])
1070 fi
1071
1072 dnl
1073 dnl end --enable-rootcommit
1074 dnl
1075
1076
1077
1078 dnl
1079 dnl end --enable-*
1080 dnl
1081
1082
1083
1084 dnl For the moment we will assume that all systems which have
1085 dnl the unixyness to run configure are unixy enough to do the
1086 dnl PreservePermissions stuff.  I have this sinking feeling that
1087 dnl things won't be that simple, before long.
1088 dnl AC_DEFINE(PRESERVE_PERMISSIONS_SUPPORT, 1,
1089 dnl [Define if this system supports chown(), link(), and friends.])
1090
1091 dnl On cygwin32, we configure like a Unix system, but we need some support
1092 dnl libraries.  We do this at the end so that the new libraries are added at
1093 dnl the end of LIBS.
1094 dnl
1095 dnl FIXME: We should be trying to meet the autoconf ideal of checking for
1096 dnl the properties of the system rather than the name of the os here.  In other
1097 dnl words, we should check the case sensitivty of the system and then for
1098 dnl the support functions we are using and which library we find them in.
1099 AC_CACHE_CHECK(for cygwin32, ccvs_cv_sys_cygwin32,
1100 [AC_TRY_COMPILE([], [return __CYGWIN32__;],
1101 ccvs_cv_sys_cygwin32=yes, ccvs_cv_sys_cygwin32=no)])
1102 if test $ccvs_cv_sys_cygwin32 = yes; then
1103   LIBS="$LIBS -ladvapi32"
1104
1105   dnl On Windows you can only change file times if you can write to
1106   dnl the file.  cygwin32 should really handle this for us, but as of
1107   dnl January 1998 it doesn't.
1108   AC_DEFINE(UTIME_EXPECTS_WRITABLE, 1,
1109 [Define if utime requires write access to the file (true on Windows,
1110 but not Unix).])
1111
1112   dnl On Windows we must use setmode to change between binary and text
1113   dnl mode.  This probably doesn't really require two macro definitions
1114   AC_DEFINE(USE_SETMODE_STDOUT, 1,
1115 [Define if setmode is required when writing binary data to stdout.])
1116   AC_DEFINE(HAVE_SETMODE, 1,
1117 [Define if the diff library should use setmode for binary files.])
1118 fi
1119
1120 dnl associate the setting of the execute bit with the individual scripts
1121 AC_CONFIG_FILES(contrib/check_cvs, [chmod +x contrib/check_cvs])
1122 AC_CONFIG_FILES(contrib/clmerge, [chmod +x contrib/clmerge])
1123 AC_CONFIG_FILES(contrib/cln_hist, [chmod +x contrib/cln_hist])
1124 AC_CONFIG_FILES(contrib/commit_prep, [chmod +x contrib/commit_prep])
1125 AC_CONFIG_FILES(contrib/cvs_acls, [chmod +x contrib/cvs_acls])
1126 AC_CONFIG_FILES(contrib/log, [chmod +x contrib/log])
1127 AC_CONFIG_FILES(contrib/log_accum, [chmod +x contrib/log_accum])
1128 AC_CONFIG_FILES(contrib/mfpipe, [chmod +x contrib/mfpipe])
1129 AC_CONFIG_FILES(contrib/pvcs2rcs, [chmod +x contrib/pvcs2rcs])
1130 AC_CONFIG_FILES(contrib/rcs2log:contrib/rcs2log.sh, [chmod +x contrib/rcs2log])
1131 AC_CONFIG_FILES(contrib/rcslock, [chmod +x contrib/rcslock])
1132 AC_CONFIG_FILES(contrib/sccs2rcs, [chmod +x contrib/sccs2rcs])
1133 AC_CONFIG_FILES(doc/mkman:doc/mkman.pl, [chmod +x doc/mkman])
1134 AC_CONFIG_FILES(src/cvsbug, [chmod +x src/cvsbug])
1135 AC_CONFIG_FILES(windows-NT/fix-msvc-mak:windows-NT/fix-msvc-mak-head.pl:windows-NT/fix-msvc-mak.pl,
1136                 [chmod +x windows-NT/fix-msvc-mak])
1137
1138 dnl the bulk files
1139 AC_CONFIG_FILES([Makefile \
1140           contrib/Makefile \
1141           cvs.spec \
1142           diff/Makefile \
1143           doc/Makefile \
1144           emx/Makefile \
1145           lib/Makefile \
1146           man/Makefile \
1147           os2/Makefile \
1148           src/Makefile \
1149           tools/Makefile \
1150           vms/Makefile \
1151           windows-NT/Makefile \
1152           windows-NT/SCC/Makefile \
1153           zlib/Makefile])
1154
1155 dnl and we're done
1156 AC_OUTPUT
1157
1158
1159
1160 # Report the state of this version of CVS if this is from dev.
1161 m4_bmatch(m4_defn([AC_PACKAGE_VERSION]),  [[0-9]*\.[0-9]*\.[0-9]*\.[0-9]],
1162 [    cat <<EOF
1163
1164 You are about to use an unreleased version of CVS.  Be sure to
1165 read the relevant mailing lists, most importantly <info-cvs@nongnu.org>.
1166
1167 Below you will find information on the status of this version of CVS.
1168
1169
1170 EOF
1171     sed -n '/^\* Status/,$p' $srcdir/BUGS
1172 ])