aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wemm <peter@FreeBSD.org>2002-09-02 05:50:28 +0000
committerPeter Wemm <peter@FreeBSD.org>2002-09-02 05:50:28 +0000
commitb2b29aad0d0d63394479a7459a0f17936ce7c064 (patch)
tree8440832ece5130fad994f5f3489b01676ab1ca4a
parent025111ae1321e9d30f5615b762a47fb354971ba1 (diff)
downloadsrc-b2b29aad0d0d63394479a7459a0f17936ce7c064.tar.gz
src-b2b29aad0d0d63394479a7459a0f17936ce7c064.zip
Import cvs-1.11.2 onto vendor branch
Obtained from: http://www.cvshome.org/
Notes
Notes: svn path=/vendor/cvs/dist/; revision=102840
-rw-r--r--contrib/cvs/ChangeLog307
-rw-r--r--contrib/cvs/DEVEL-CVS2
-rw-r--r--contrib/cvs/HACKING20
-rw-r--r--contrib/cvs/INSTALL25
-rw-r--r--contrib/cvs/Makefile.am27
-rw-r--r--contrib/cvs/Makefile.in128
-rw-r--r--contrib/cvs/NEWS95
-rw-r--r--contrib/cvs/README1
-rw-r--r--contrib/cvs/TESTS92
-rw-r--r--contrib/cvs/TODO36
-rw-r--r--contrib/cvs/acinclude.m48
-rw-r--r--contrib/cvs/aclocal.m4369
-rwxr-xr-xcontrib/cvs/compile82
-rw-r--r--contrib/cvs/config.h.in15
-rwxr-xr-xcontrib/cvs/configure1664
-rw-r--r--contrib/cvs/configure.in83
-rw-r--r--contrib/cvs/contrib/ChangeLog121
-rw-r--r--contrib/cvs/contrib/Makefile.am5
-rw-r--r--contrib/cvs/contrib/Makefile.in68
-rwxr-xr-xcontrib/cvs/contrib/cvs_acls.in57
-rw-r--r--contrib/cvs/contrib/pvcs2rcs.in1150
-rw-r--r--contrib/cvs/contrib/rcs2log.sh446
-rw-r--r--contrib/cvs/contrib/rcs2sccs.sh2
-rwxr-xr-xcontrib/cvs/contrib/sccs2rcs.in16
-rwxr-xr-xcontrib/cvs/depcomp81
-rw-r--r--contrib/cvs/diff/ChangeLog35
-rw-r--r--contrib/cvs/diff/Makefile.in148
-rw-r--r--contrib/cvs/diff/diff3.c6
-rw-r--r--contrib/cvs/diff/io.c4
-rw-r--r--contrib/cvs/diff/system.h10
-rw-r--r--contrib/cvs/doc/ChangeLog297
-rw-r--r--contrib/cvs/doc/Makefile.am88
-rw-r--r--contrib/cvs/doc/Makefile.in219
-rw-r--r--contrib/cvs/doc/cvs.texinfo1163
-rw-r--r--contrib/cvs/doc/cvsclient.texi6
-rwxr-xr-xcontrib/cvs/doc/mdate-sh92
-rw-r--r--contrib/cvs/doc/stamp-14
-rw-r--r--contrib/cvs/doc/stamp-vti4
-rw-r--r--contrib/cvs/doc/version-client.texi4
-rw-r--r--contrib/cvs/doc/version.texi4
-rw-r--r--contrib/cvs/lib/ChangeLog48
-rw-r--r--contrib/cvs/lib/Makefile.in189
-rw-r--r--contrib/cvs/lib/fnmatch.c4
-rw-r--r--contrib/cvs/lib/getdate.y2
-rw-r--r--contrib/cvs/lib/getline.c1
-rw-r--r--contrib/cvs/lib/valloc.c2
-rw-r--r--contrib/cvs/lib/xselect.h6
-rw-r--r--contrib/cvs/man/ChangeLog47
-rw-r--r--contrib/cvs/man/Makefile.in89
-rw-r--r--contrib/cvs/man/cvs.127
-rw-r--r--contrib/cvs/man/cvs.55
-rw-r--r--contrib/cvs/man/cvsbug.82
-rwxr-xr-xcontrib/cvs/mdate-sh92
-rwxr-xr-xcontrib/cvs/noautomake.sh92
-rw-r--r--contrib/cvs/src/ChangeLog804
-rw-r--r--contrib/cvs/src/Makefile.am34
-rw-r--r--contrib/cvs/src/Makefile.in295
-rw-r--r--contrib/cvs/src/admin.c10
-rw-r--r--contrib/cvs/src/annotate.c32
-rw-r--r--contrib/cvs/src/buffer.c167
-rw-r--r--contrib/cvs/src/buffer.h6
-rw-r--r--contrib/cvs/src/checkout.c128
-rw-r--r--contrib/cvs/src/client.c755
-rw-r--r--contrib/cvs/src/client.h62
-rw-r--r--contrib/cvs/src/commit.c18
-rw-r--r--contrib/cvs/src/cvs.h38
-rw-r--r--contrib/cvs/src/diff.c120
-rw-r--r--contrib/cvs/src/error.h11
-rw-r--r--contrib/cvs/src/filesubr.c3
-rw-r--r--contrib/cvs/src/find_names.c7
-rw-r--r--contrib/cvs/src/history.c11
-rw-r--r--contrib/cvs/src/import.c25
-rw-r--r--contrib/cvs/src/lock.c11
-rw-r--r--contrib/cvs/src/log.c139
-rw-r--r--contrib/cvs/src/login.c14
-rw-r--r--contrib/cvs/src/logmsg.c167
-rw-r--r--contrib/cvs/src/main.c8
-rw-r--r--contrib/cvs/src/mkmodules.c12
-rw-r--r--contrib/cvs/src/modules.c25
-rw-r--r--contrib/cvs/src/myndbm.c23
-rw-r--r--contrib/cvs/src/parseinfo.c16
-rw-r--r--contrib/cvs/src/patch.c10
-rw-r--r--contrib/cvs/src/rcs.c249
-rw-r--r--contrib/cvs/src/recurse.c3
-rw-r--r--contrib/cvs/src/remove.c8
-rw-r--r--contrib/cvs/src/root.c63
-rw-r--r--contrib/cvs/src/root.h37
-rwxr-xr-xcontrib/cvs/src/sanity.sh1963
-rw-r--r--contrib/cvs/src/server.c176
-rw-r--r--contrib/cvs/src/server.h1
-rw-r--r--contrib/cvs/src/subr.c8
-rw-r--r--contrib/cvs/src/tag.c86
-rw-r--r--contrib/cvs/src/update.c20
-rw-r--r--contrib/cvs/src/vers_ts.c17
-rw-r--r--contrib/cvs/src/version.c85
-rw-r--r--contrib/cvs/src/version.h.in15
-rw-r--r--contrib/cvs/src/wrapper.c64
-rw-r--r--contrib/cvs/src/zlib.c16
-rw-r--r--contrib/cvs/tools/ChangeLog20
-rw-r--r--contrib/cvs/tools/Makefile.in54
-rw-r--r--contrib/cvs/tools/README2
101 files changed, 10035 insertions, 3393 deletions
diff --git a/contrib/cvs/ChangeLog b/contrib/cvs/ChangeLog
index f22a7ba177d0..46b6e5421df6 100644
--- a/contrib/cvs/ChangeLog
+++ b/contrib/cvs/ChangeLog
@@ -1,3 +1,296 @@
+2002-04-17 Derek Price <oberon@umich.edu>
+
+ * configure.in: Update version number.
+ * configure: Regenerated.
+
+2002-04-03 Derek Price <oberon@umich.edu>
+
+ * cvs.spec.in: Use a lowercase "cvshome.org". Add some RedHat safety
+ features to avoid "rm -rf /". No need to rebuild the docs in the
+ distribution. Don't strip the binary.
+
+2002-03-26 Derek Price <oberon@umich.edu>
+
+ * configure.in: Add a FIXME comment.
+
+2002-03-21 Derek Price <oberon@umich.edu>
+
+ * aclocal.m4: Regenerate with recent version of Autoconf. It looks
+ like things changed because of some RedHat patches or the like which
+ didn't change the Autoconf version number, but the differences look
+ like useful changes so I'm going to use them for consistency.
+ * config.h.in: Ditto.
+ * configure: Ditto.
+
+2002-03-19 Larry Jones <larry.jones@sdrc.com>
+
+ * NEWS (Changes since 1.11.1p1): Note -S flag for [r]log.
+
+2002-02-08 Larry Jones <larry.jones@sdrc.com>
+
+ * NEWS (Changes since 1.11.1p1): Note read-only tag fix.
+
+2002-02-01 Larry Jones <larry.jones@sdrc.com>
+
+ * NEWS (Changes from 1.9 to 1.10): Note -t/-f wrappers disabled.
+
+2001-12-12 Larry Jones <larry.jones@sdrc.com>
+
+ * NEWS (Changes from 1.10 to 1.11): Note update -C.
+
+2001-12-03 Larry Jones <larry.jones@sdrc.com>
+
+ * TODO (206, 207): New items.
+
+ * NEWS (Changes since 1.11.1p1): Note -F flag for [r]annotate.
+ (Changes from 1.11 to 1.11.1): Note :: for log.
+
+2001-10-18 Derek Price <dprice@collab.net>
+
+ * TESTS: Remove outdated note about tests that don't use the dotest
+ function and add some notes on writing tests.
+ * HACKING: Reference TESTS file in note about submitting test cases
+ with patches.
+
+2001-09-28 Larry Jones <larry.jones@sdrc.com>
+
+ * noautomake.sh: Protect wildcards from shell expansion.
+ (Patch submitted by Stephen Cameron <smcameron@yahoo.com>.)
+
+2001-09-22 Derek Price <dprice@collab.net>
+
+ * INSTALL (Building from source code under Unix): Continue
+ noautoconf.sh note, stressing source checked out from CVS.
+
+2001-09-22 Derek Price <dprice@collab.net>
+
+ * noautomake.sh: Correct usage.
+
+2001-09-13 Derek Price <dprice@collab.net>
+
+ * Makefile.am (AUTOMAKE_OPTIONS): Updated to require Automake 1.5.
+ * NEWS (Changes since 1.11.1p1): Added note about standardizing on
+ Automake 1.5.
+ * INSTALL (Building from source code under UNIX): It's Automake version
+ `1.5', not `2.5'.
+ (Detailed information about your interaction with "configure"): Added
+ note about using `configure --help'.
+ * README (Installation): Add noautoconf.sh to the list of build and
+ installation commands.
+
+ * Makefile.in: Regenerated.
+
+2001-09-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with automake 1.5.
+ * aclocal.m4: Ditto.
+ * configure: Ditto.
+
+2001-09-04 Derek Price <dprice@collab.net>
+
+ * INSTALL (Building from source code under UNIX): Add a comment about
+ the noautomake.sh script and autotool versions.
+
+2001-08-20 Derek Price <dprice@collab.net>
+
+ * configure.in (AC_OUTPUT): Add src/version.h.
+ (Patch from Alexey Mahotkin <alexm@hsys.msk.ru>.)
+
+ * configure: Regenerated.
+
+2001-08-20 Derek Price <dprice@collab.net>
+
+ * .cvsignore: Add cvs.spec.
+
+2001-08-14 Derek Price <dprice@collab.net>
+
+ * configure.in (AC_OUTPUT): Add cvs.spec.
+ * Makefile.am (EXTRA_DIST): Remove cvs.spec.in and cvs.spec.
+ (Original patch from Alexey Mahotkin <alexm@hsys.msk.ru>.)
+
+ * cvs.spec.in: Use @PACKAGE@ from configure.
+ * cvs.spec: Remove this file.
+
+ * configure: Regenerated.
+ * Makefile.in: Ditto.
+
+2001-08-14 Derek Price <dprice@collab.net>
+
+ * DEVEL-CVS: Update mailing list addresses.
+ * HACKING: Ditto.
+
+2001-08-09 Derek Price <dprice@collab.net>
+
+ * cvsnt.mak: Add entry for annotate.c.
+
+2001-08-07 Derek Price <dprice@collab.net>
+
+ * build.com: correct name of build .com for zlib.
+ (Patch from Mike Marciniszyn <Mike.Marciniszyn@sanchez.com>.)
+
+2001-08-06 Derek Price <dprice@collab.net>
+
+ * configure.in: Remove some redundant macros (they appear to be run
+ automatically by AC_INIT).
+
+ * configure: Regenerated.
+
+2001-08-06 Derek Price <dprice@collab.net>
+
+ * configure.in: Add AC_EXEEXT to get things right when under Windows.
+ (Report and patch from manklu@web.de.)
+
+ * configure.in: Reorder some macros to prevent Autoconf warnings.
+
+ * configure: Regenerated.
+ * Makefile.in: Ditto.
+
+2001-07-26 Larry Jones <larry.jones@sdrc.com>
+
+ * NEWS: Fix format, add note about tag -B.
+
+2001-07-16 Derek Price <dprice@collab.net>
+
+ * compile: New Automake file.
+ * configure.in: Add AM_PROG_CC_C_O to work around problems with some
+ compilers.
+
+ * aclocal.m4: Regenerated.
+ * Makefile.in: Ditto.
+ * config.h.in: Ditto.
+ * configure: Ditto.
+ (Thanks to Stephen Cameron <smcameron@yahoo.com> and
+ Tom Tromey <tromey@redhat.com>.)
+
+2001-07-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new Automake release candidate 1.4h.
+ * aclocal.m4: Ditto.
+
+2001-07-04 Derek Price <dprice@collab.net>
+
+ * configure.in: Tidy and add some comments.
+
+ * configure: Regenerated.
+
+2001-07-03 Derek Price <dprice@collab.net>
+
+ * HACKING (Source): Add a note about where to obtain the development
+ sources.
+ (Thanks to Bear Giles <bear@coyotesong.com>.)
+
+2001-07-03 Derek Price <dprice@collab.net>
+
+ * configure.in: Test for mmap.
+
+ * configure: Regenerated.
+ * config.h.in: Ditto.
+
+2001-06-28 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new version of Automake.
+ * aclocal.m4: Ditto.
+ * configure: Regenerated.
+
+2001-06-28 Derek Price <dprice@collab.net>
+
+ * mdate-sh: New file to support doc/version.texi.
+
+2001-06-27 Larry Jones <larry.jones@sdrc.com>
+
+ * TESTS: Note environment variables to select certain tools,
+ potential problems with big environments.
+
+ * TODO: Add note about non-canonical paths. Reformat long lines.
+
+ * NEWS (Changes since 1.11): Note new loginfo format string expansion.
+ Reformat some long lines.
+
+2001-06-11 Derek Price <dprice@collab.net>
+
+ * cvsnt.dsp: Add src/annotate.c to source file list.
+ (Thanks to Jerzy Kaczorowski <kaczoroj@hotmail.com>.)
+
+2001-05-30 Derek Price <dprice@collab.net>
+
+ * configure.in (AC_OUTPUT): Change contrib/pvcs2cvs to contrib/pvcs2rcs.
+
+ * configure: Regenerated.
+
+2001-05-29 Derek Price <dprice@collab.net>
+
+ * configure.in (AC_OUTPUT): Add pvcs2cvs.
+
+ * configure: Regenerated.
+
+2001-05-21 Derek Price <dprice@collab.net>
+
+ * NEWS (Changes since 1.11): It's "noautomake.sh", not "noautoconf.sh".
+ * Makefile.am (EXTRA_DIST): Include noautomake.sh.
+ (AUTOMAKE_OPTIONS): Update required Automake version to 1.4e.
+ (Reported by Alexey Mahotkin <alexm@hsys.msk.ru>).
+
+2001-05-21 Derek Price <dprice@collab.net>
+
+ * Makefile.am (EXTRA_DIST): Add noautoconf.sh.
+
+2001-05-17 Larry Jones <larry.jones@sdrc.com>
+
+ * depcomp: Yet another newer (unofficial) version from Automake.
+
+2001-05-10 Larry Jones <larry.jones@sdrc.com>
+
+ * configure.in (AC_OUTPUT): Remove -f from chmod -- not portable.
+ * configure: Regenerated.
+
+2001-05-03 Derek Price <dprice@collab.net>
+
+ * TODO (204): New item.
+
+2001-05-02 Derek Price <dprice@collab.net>
+
+ * acinclude.m4 (ACX_WITH_GSSAPI): Make krb5.h a requirement for GSSAPI.
+ krb5.h shouldn't be required, but CVS's GSSAPI implementation is
+ broken.
+ (Reported by Stephen Rasku <stephen@tgivan.com>.)
+
+ * aclocal.m4: Regenerated.
+ * configure: Ditto.
+
+2001-04-29 Derek Price <dprice@collab.net>
+
+ * Makefile.am (distcheck-hook): Undo last change.
+ (localcheck): New target.
+
+ * Makefile.in: Regenerated.
+
+2001-04-29 Derek Price <dprice@collab.net>
+
+ * Makefile.am: Add remotecheck to distcheck-hook.
+
+ * Makefile.in: Regenerated.
+
+2001-04-27 Derek Price <dprice@collab.net>
+
+ * TODO (202): Remove my claim.
+ (203): New item.
+
+2001-04-27 Derek Price <dprice@collab.net>
+
+ * configure.in: Update version number.
+
+ * configure: Regenerated.
+ * cvs.spec: Ditto.
+
+2001-04-27 Derek Price <dprice@collab.net>
+
+ * configure.in: Update version number.
+ * NEWS (new since 1.11.1): Broke read-only fix.
+ (new since 1.11): Diff fix.
+
+ * configure: Regenerated.
+ * cvs.spec: Ditto.
+
2001-04-26 Derek Price <dprice@collab.net>
* cvs.spec.in: Don't include %{_infodir}/dir.
@@ -18,11 +311,11 @@
* NEWS: Correct punctuation.
-2001-04-25 Larry Jones <larry.jones@sdr.com>
+2001-04-25 Larry Jones <larry.jones@sdrc.com>
* depcomp (aix, sgi): Correct previous fixes.
-2001-04-24 Larry Jones <larry.jones@sdr.com>
+2001-04-24 Larry Jones <larry.jones@sdrc.com>
* depcomp (sgi): Remove stray HP-UX code.
@@ -32,23 +325,23 @@
prevent unecessary AUtomake rebuilds after updates.
* NEWS: Note this new scipt.
-2001-04-16 Larry Jones <larry.jones@sdr.com>
+2001-04-16 Larry Jones <larry.jones@sdrc.com>
* depcomp (aix): Remove stray HP-UX code.
-2001-04-12 Larry Jones <larry.jones@sdr.com>
+2001-04-12 Larry Jones <larry.jones@sdrc.com>
* mkinstalldirs: Newer version from Automake.
-2001-04-12 Larry Jones <larry.jones@sdr.com>
+2001-04-12 Larry Jones <larry.jones@sdrc.com>
* depcomp: Newer version from Automake.
-2001-04-04 Larry Jones <larry.jones@sdr.com>
+2001-04-04 Larry Jones <larry.jones@sdrc.com>
* depcomp: Don't count on $? being set in then or else clauses.
-2001-03-30 Larry Jones <larry.jones@sdr.com>
+2001-03-30 Larry Jones <larry.jones@sdrc.com>
* NEWS: Note new rlog and rannotate commands.
diff --git a/contrib/cvs/DEVEL-CVS b/contrib/cvs/DEVEL-CVS
index 803d78cc1277..464003c8535a 100644
--- a/contrib/cvs/DEVEL-CVS
+++ b/contrib/cvs/DEVEL-CVS
@@ -6,7 +6,7 @@ development group operates. Also see the HACKING file.
----------------------------------------------------------------------
Charter for the devel-cvs mailing list:
-The CVS Developers' List <devel-cvs@cvshome.org> exists to help people
+The CVS Developers' List <dev@ccvs.cvshome.org> exists to help people
with access to the CVS source repository co-ordinate changes, make
releases, and administer the repository.
diff --git a/contrib/cvs/HACKING b/contrib/cvs/HACKING
index a2840273ebd9..38f33bbeade5 100644
--- a/contrib/cvs/HACKING
+++ b/contrib/cvs/HACKING
@@ -1,5 +1,11 @@
How to write code for CVS
+* Source
+
+Patches against the development version of CVS are most likely to be accepted:
+
+ $ cvs -d:pserver:anoncvs@cvs.cvshome.org/cvsroot co ccvs
+
* Compiler options
If you are using GCC, you'll want to configure with -Wall, which can
@@ -141,7 +147,7 @@ process the following should exist:
- Most of the time, a test case (see TESTS). It can be quite
frustrating to fix a bug only to see it reappear later, and adding
the case to the testsuite, where feasible, solves this and other
- problems.
+ problems. See the TESTS file for notes on writing new tests.
If you solve several unrelated problems, it is generally easier to
consider the desirability of the changes if there is a separate patch
@@ -180,20 +186,20 @@ intentional, to avoid a last minute rush to get new features in.
Anyone can add themselves to the following mailing lists:
- devel-cvs. Unless you are accepted as a CVS developer as
+ dev. Unless you are accepted as a CVS developer as
described in the DEVEL-CVS file, you will only be able to
read this list, not send to it. The charter of the list is
also in DEVEL-CVS.
- commit-cvs. The only messages sent to this list are sent
+ cvs. The only messages sent to this list are sent
automatically, via the CVS `loginfo' mechanism, when someone
checks something in to the master CVS repository.
test-results. The only messages sent to this list are sent
automatically, daily, by a script which runs "make check"
and "make remotecheck" on the master CVS sources.
-To subscribe to devel-cvs, commit-cvs, or test-results, send
-a message to "majordomo@cvshome.org" whose body consists of
-"subscribe <list>", where <list> is devel-cvs, commit-cvs or
-test-results.
+To subscribe to dev, cvs, or test-results, send
+a message to "<list>-subscribe@ccvs.cvshome.org" or visit
+http://ccvs.cvshome.org/servlets/ProjectMailingListList and follow the
+instructions there.
One other list related to CVS development is bug-cvs. This is the
list which users are requested to send bug reports to. Anyone can
diff --git a/contrib/cvs/INSTALL b/contrib/cvs/INSTALL
index 589599ed1deb..d379c71ca5c3 100644
--- a/contrib/cvs/INSTALL
+++ b/contrib/cvs/INSTALL
@@ -241,7 +241,19 @@ VAX:
Building from source code under Unix:
-1) Run "configure":
+1) Some combinations of Automake and Autoconf versions may break the CVS build
+ if file timestamps aren't set correctly, so you may wish to run
+ noautomake.sh to set the timestamps and avoid attempting to run the
+ autotools on your system, especially if you are building from source
+ checked out from CVS:
+
+ $ ./noautomake.sh --noautoconf
+
+ The CVS Makefiles and configure script were built using Automake 1.5 and
+ Autoconf 2.13, respectively. Other combinations of autotool versions may
+ or may not work.
+
+2) Run "configure":
$ ./configure
@@ -332,10 +344,10 @@ Building from source code under Unix:
END OF NOTE FOR NDBM GUNK.
-2) Edit src/options.h. The defaults should be reasonable, and in fact
+3) Edit src/options.h. The defaults should be reasonable, and in fact
if you are lazy you can safely skip this step.
-3) Try to build it:
+4) Try to build it:
$ make
@@ -346,7 +358,7 @@ Building from source code under Unix:
compiler information, make output, and anything else you think
will be helpful.
-3a) Run the regression tests (optional).
+4a) Run the regression tests (optional).
You may also wish to validate the correctness of the new binary by
running the regression tests. If they succeed, that is nice to
@@ -358,7 +370,7 @@ Building from source code under Unix:
If you want to run the tests, see the file TESTS for more information.
-4) Install the binaries/documentation:
+5) Install the binaries/documentation:
$ make install
@@ -371,7 +383,8 @@ Detailed information about your interaction with "configure":
The "configure" script and its interaction with its options and the
environment is described here. For more detailed documentation about
-"configure", please refer to the GNU Autoconf documentation.
+"configure", please run `./configure --help' or refer to the GNU Autoconf
+documentation.
Supported options are:
diff --git a/contrib/cvs/Makefile.am b/contrib/cvs/Makefile.am
index 90b7324f7615..c2c268e0faf3 100644
--- a/contrib/cvs/Makefile.am
+++ b/contrib/cvs/Makefile.am
@@ -12,7 +12,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-AUTOMAKE_OPTIONS = 1.4a dist-bzip2
+AUTOMAKE_OPTIONS = 1.5 dist-bzip2
## Subdirectories to run make in for the primary targets.
# Unix source subdirs, where we'll want to run lint and etags:
@@ -35,32 +35,23 @@ EXTRA_DIST = \
TESTS \
build.com \
cvs-format.el \
- cvs.spec \
- cvs.spec.in \
cvsnt.dsp \
cvsnt.dsw \
- cvsnt.mak
+ cvsnt.mak \
+ noautomake.sh
-.PHONY: remotecheck
-remotecheck: all
+
+
+## MAINTAINER Targets
+
+.PHONY: localcheck remotecheck
+localcheck remotecheck: all
cd src && $(MAKE) $(AM_MAKEFLAGS) "$@"
.PHONY: doc
doc:
cd doc && $(MAKE) $(AM_MAKEFLAGS) "$@"
-## MAINTAINER Targets
-
-## cvs.spec ##
-# - cvs.spec needs to be updated only once, since it depends on
-# configure.in, not on the results of a 'configure' run.
-# - It is guaranteed (with GNU Make) that when the version in configure.in
-# is changed, acversion.m4 is built only after the new version number is
-# propagated to the Makefile. (Libtool uses the same guarantee.)
-cvs.spec: $(srcdir)/cvs.spec.in $(top_srcdir)/configure.in
- sed 's,@VERSION\@,$(VERSION),g' $(srcdir)/cvs.spec.in >cvs.tspec
- mv cvs.tspec $(srcdir)/cvs.spec
-
# for backwards compatibility with the old makefiles
.PHONY: realclean
realclean: maintainer-clean
diff --git a/contrib/cvs/Makefile.in b/contrib/cvs/Makefile.in
index 27af9dc6dc50..d5732e0d6ea3 100644
--- a/contrib/cvs/Makefile.in
+++ b/contrib/cvs/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4e from Makefile.am.
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
@@ -26,7 +26,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-
SHELL = @SHELL@
srcdir = @srcdir@
@@ -47,11 +46,9 @@ infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
-
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-
top_builddir = .
ACLOCAL = @ACLOCAL@
@@ -65,7 +62,6 @@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
-
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
@@ -77,29 +73,26 @@ AWK = @AWK@
CC = @CC@
CSH = @CSH@
DEPDIR = @DEPDIR@
-ETAGS = @ETAGS@
-ETAGS_INCLUDE_OPTION = @ETAGS_INCLUDE_OPTION@
+EXEEXT = @EXEEXT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTALL_STRIP_PROGRAM_ENV = @INSTALL_STRIP_PROGRAM_ENV@
KRB4 = @KRB4@
LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
-STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
-_am_include = @_am_include@
-_am_quote = @_am_quote@
+am__include = @am__include@
+am__quote = @am__quote@
includeopt = @includeopt@
install_sh = @install_sh@
-AUTOMAKE_OPTIONS = 1.4a dist-bzip2
+AUTOMAKE_OPTIONS = 1.5 dist-bzip2
# Unix source subdirs, where we'll want to run lint and etags:
# This is a legacy variable from b4 Automake
@@ -122,52 +115,47 @@ EXTRA_DIST = \
TESTS \
build.com \
cvs-format.el \
- cvs.spec \
- cvs.spec.in \
cvsnt.dsp \
cvsnt.dsw \
- cvsnt.mak
+ cvsnt.mak \
+ noautomake.sh
-EXEEXT =
-OBJEXT = o
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h $(top_builddir)/src/options.h
-CONFIG_CLEAN_FILES = emx/Makefile os2/Makefile zlib/Makefile
+CONFIG_CLEAN_FILES = cvs.spec emx/Makefile os2/Makefile zlib/Makefile
DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive install-data-recursive \
+RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
+ uninstall-info-recursive all-recursive install-data-recursive \
install-exec-recursive installdirs-recursive install-recursive \
uninstall-recursive check-recursive installcheck-recursive
DIST_COMMON = README ./stamp-h1.in AUTHORS COPYING COPYING.LIB \
ChangeLog INSTALL Makefile.am Makefile.in NEWS TODO acconfig.h \
- acinclude.m4 aclocal.m4 config.h.in configure configure.in \
- depcomp install-sh missing mkinstalldirs
+ acinclude.m4 aclocal.m4 compile config.h.in configure \
+ configure.in cvs.spec.in depcomp install-sh mdate-sh missing \
+ mkinstalldirs
DIST_SUBDIRS = $(SUBDIRS)
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
-
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
-
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$@ $(SHELL) ./config.status
-config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
-
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): configure.in acinclude.m4
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-
config.h: stamp-h1
@if test ! -f $@; then \
rm -f stamp-h1; \
@@ -193,12 +181,15 @@ $(srcdir)/./stamp-h1.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) $(top_srcdir)/
distclean-hdr:
-rm -f config.h
+cvs.spec: $(top_builddir)/config.status cvs.spec.in
+ cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
emx/Makefile: $(top_builddir)/config.status $(top_srcdir)/emx/Makefile.in
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
os2/Makefile: $(top_builddir)/config.status $(top_srcdir)/os2/Makefile.in
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
zlib/Makefile: $(top_builddir)/config.status $(top_srcdir)/zlib/Makefile.in
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
+uninstall-info-am:
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
@@ -272,39 +263,44 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
here=`pwd`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
- test -f $$subdir/TAGS && tags="$$tags $(ETAGS_INCLUDE_OPTION)$$here/$$subdir/TAGS"; \
+ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
- unique=`for i in $$list @CONFIG@; do \
+ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
- || $(ETAGS) $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP)
+ || etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP)
GTAGS:
here=`CDPATH=: && cd $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
- && gtags -i $$here
+ && gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
- -rm -f TAGS ID
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = .
-distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+# Avoid unsightly `./'.
+distdir = $(PACKAGE)-$(VERSION)
GZIP_ENV = --best
distdir: $(DISTFILES)
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
mkdir $(distdir)
- $(mkinstalldirs) $(distdir)/contrib $(distdir)/emx $(distdir)/os2 $(distdir)/src $(distdir)/zlib
+ $(mkinstalldirs) $(distdir)/. $(distdir)/contrib $(distdir)/emx $(distdir)/os2 $(distdir)/src $(distdir)/zlib
@for file in $(DISTFILES); do \
- d=$(srcdir); \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
if test -d $$d/$$file; then \
cp -pR $$d/$$file $(distdir) \
|| exit 1; \
@@ -359,7 +355,9 @@ distcheck: dist
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
- && test `find $$dc_install_base -type f -print | wc -l` -le 1 \
+ && (test `find $$dc_install_base -type f -print | wc -l` -le 1 \
+ || (echo "Error: files left after uninstall" 1>&2; \
+ exit 1) ) \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& $(MAKE) $(AM_MAKEFLAGS) distclean \
&& rm -f $(distdir).tar.gz \
@@ -372,7 +370,6 @@ distcheck: dist
check-am: all-am
check: check-recursive
all-am: Makefile config.h
-
installdirs: installdirs-recursive
installdirs-am:
@@ -385,38 +382,37 @@ install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
-
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- INSTALL_PROGRAM_ENV='$(INSTALL_STRIP_PROGRAM_ENV)' install
-
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- -rm -f Makefile.in
clean: clean-recursive
clean-am: clean-generic mostlyclean-am
-dist-all: dist dist-bzip2
-
+dist-all: distdir
+ $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
+ -chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
distclean: distclean-recursive
- -rm -f config.status
+ -rm -f config.status config.cache config.log
distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
-dvi:
+dvi: dvi-recursive
dvi-am:
-info:
+info: info-recursive
info-am:
@@ -424,56 +420,52 @@ install-data-am:
install-exec-am:
-install-info:
+install-info: install-info-recursive
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
- -rm -f config.status
+
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic
-.PHONY: $(RECURSIVE_TARGETS) all all-am check check-am clean \
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
clean-generic clean-recursive dist dist-all dist-bzip2 \
distcheck distclean distclean-generic distclean-hdr \
- distclean-recursive distclean-tags distdir dvi dvi-am info \
- info-am install install-am install-data install-data-am \
- install-data-recursive install-exec install-exec-am \
- install-exec-recursive install-info install-man \
+ distclean-recursive distclean-tags distdir dvi dvi-am \
+ dvi-recursive info info-am info-recursive install install-am \
+ install-data install-data-am install-data-recursive \
+ install-exec install-exec-am install-exec-recursive \
+ install-info install-info-am install-info-recursive install-man \
install-recursive install-strip installcheck installcheck-am \
installdirs installdirs-am installdirs-recursive \
maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-recursive tags tags-recursive uninstall \
- uninstall-am uninstall-recursive
+ uninstall-am uninstall-info-am uninstall-info-recursive \
+ uninstall-recursive
-.PHONY: remotecheck
-remotecheck: all
+.PHONY: localcheck remotecheck
+localcheck remotecheck: all
cd src && $(MAKE) $(AM_MAKEFLAGS) "$@"
.PHONY: doc
doc:
cd doc && $(MAKE) $(AM_MAKEFLAGS) "$@"
-# - cvs.spec needs to be updated only once, since it depends on
-# configure.in, not on the results of a 'configure' run.
-# - It is guaranteed (with GNU Make) that when the version in configure.in
-# is changed, acversion.m4 is built only after the new version number is
-# propagated to the Makefile. (Libtool uses the same guarantee.)
-cvs.spec: $(srcdir)/cvs.spec.in $(top_srcdir)/configure.in
- sed 's,@VERSION\@,$(VERSION),g' $(srcdir)/cvs.spec.in >cvs.tspec
- mv cvs.tspec $(srcdir)/cvs.spec
-
# for backwards compatibility with the old makefiles
.PHONY: realclean
realclean: maintainer-clean
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/contrib/cvs/NEWS b/contrib/cvs/NEWS
index cf6d4d5fc8da..b61b7d6acba0 100644
--- a/contrib/cvs/NEWS
+++ b/contrib/cvs/NEWS
@@ -1,46 +1,88 @@
-Changes since 1.11.1:
+Changes since 1.11.1p1:
+
+* The "log" and "rlog" commands now have a -S option to suppress the
+header information when no revisions are selected.
+
+* A serious error that allowed read-only users to tag files has been
+corrected.
+
+* The "annotate" command will no longer annotate binary files unless
+you specify the new -F option.
+
+* The "tag" and "rtag" commands will no longer move or delete branch
+tags unless you use the new -B option. (This prevents accidental
+changes to branch tags that are hard to undo.)
+
+* We've standardized on the 1.5 Automake release for the moment. Again, this
+should only really affect developers. See the section of the INSTALL file
+about using the autotools if you are compiling CVS yourself.
+
+Changes from 1.11.1 to 1.11.1p1:
* Read only access was broken - now fixed.
-Changes since 1.11:
+Changes from 1.11 to 1.11.1:
-* There was a bug in the diff code which caused conflicts to be flagged which shouldn't
-have been. This has been fixed.
+* The "cvs diff" command now accepts the -y/--side=by-side and -T/
+--initial-tab options. (To use these options with a remote repository,
+both the client and the server must support them.)
+
+* The expansion of the loginfo format string has changed slightly.
+Previously, the expansion was surrounded by single quotes ('); if a file
+name contained a single quote character, the string would not be parsed
+as a single entity by the Unix shell (and it would not be possible to
+parse it unambiguously). Now the expansion is surrounded by double
+quotes (") and any embedded dollar signs ($), backticks (`), backslashes
+(\), and double quotes are preceded by a backslash. This is parsed as a
+single entity by the shell reguardless of content. This change should
+not be noticable unless you're not using a Unix shell or you have
+embedded the format string inside a double quoted string.
+
+* There was a bug in the diff code which sometimes caused conflicts to
+be flagged which shouldn't have been. This has been fixed.
* New "cvs rlog" and "cvs rannotate" commands have been added to get log
messages and annotations without having to have a checked-out copy.
+* Exclusive revision ranges have been added to "cvs log" using ::
+(similar to "cvs admin -o").
+
* The VMS client now accepts wildcards if you're running VMS 7.x.
* ZLIB has been updated to version 1.1.3, the most current version. This
includes mostly some optimizations and minor bug fixes.
* The ~/.cvspass file has a slightly modified format. CVSROOTs are now
-stored in a new canonical form - hostnames are now case insensitive and port
-numbers are always stored in the new format. Until a new login for a
-particular CVSROOT is performed with the new version of CVS, new and old
-versions of CVS should interoperate invisibly. After that point, an extra login
-using the old version of CVS may be necessary to continue to allow the new and
-old versions of CVS to interoperate using the same ~/.cvspass file and CVSROOT.
-The exception to this rule occurs when the CVSROOTs used with the different
-versions use case insensitively different hostnames, for example, "empress",
-and "empress.2-wit.com".
-
-* A password and a port number may now be specified in CVSROOT for pserver
-connections. The new format is:
+stored in a new canonical form - hostnames are now case insensitive and
+port numbers are always stored in the new format. Until a new login for
+a particular CVSROOT is performed with the new version of CVS, new and
+old versions of CVS should interoperate invisibly. After that point, an
+extra login using the old version of CVS may be necessary to continue to
+allow the new and old versions of CVS to interoperate using the same
+~/.cvspass file and CVSROOT. The exception to this rule occurs when the
+CVSROOTs used with the different versions use case insensitively
+different hostnames, for example, "empress", and "empress.2-wit.com".
+
+* A password and a port number may now be specified in CVSROOT for
+pserver connections. The new format is:
:pserver:[[user][:password]@]host[:[port]]/path
-Note that passwords specified in a checkout command will be saved in the clear
-in the CVS/Root file in each created directory, so this is not recommended,
-except perhaps when accessing anonymous repositories or the like.
+Note that passwords specified in a checkout command will be saved in the
+clear in the CVS/Root file in each created directory, so this is not
+recommended, except perhaps when accessing anonymous repositories or the
+like.
-* The distribution has been converted to use Automake. This shouldn't affect
-most users except to ease some portability concerns, but if you are building
-from the repository and encounter problems with the makefiles, you might try
-running ./noautoconf.sh after a fresh update -AC.
+* The distribution has been converted to use Automake. This shouldn't
+affect most users except to ease some portability concerns, but if you
+are building from the repository and encounter problems with the
+makefiles, you might try running ./noautomake.sh after a fresh update
+-AC.
-Changes since 1.10:
+Changes from 1.10 to 1.11:
+
+* The "cvs update" command has a new -C option to get clean copies from
+the repository, abandoning any local changes.
* The new "cvs version" command gives a short version message. If
the repository is remote, both the client and server versions are
@@ -84,6 +126,11 @@ continues to be to put the lock files in the repository itself.
Changes from 1.9 to 1.10:
+* A bug was discovered in the -t/-f wrapper support that can cause
+serious data loss. Because of this (and also the fact that it doesn't
+work at all in client/server mode), the -t/-f wrapper code has been
+disabled until it can be fixed.
+
* There is a new feature, enabled by TopLevelAdmin in CVSROOT/config,
which tells CVS to modify the behavior of the "checkout" command. The
command now creates a CVS directory at the top level of the new
diff --git a/contrib/cvs/README b/contrib/cvs/README
index cde5be6e2e70..e1719886b469 100644
--- a/contrib/cvs/README
+++ b/contrib/cvs/README
@@ -75,6 +75,7 @@ Installation:
Please read the INSTALL file for installation instructions. Brief summary:
+ $ ./noautomake.sh --noautoconf
$ ./configure
$ make
(run the regression tests if desired)
diff --git a/contrib/cvs/TESTS b/contrib/cvs/TESTS
index bde8d1fd50f1..fe01101eca20 100644
--- a/contrib/cvs/TESTS
+++ b/contrib/cvs/TESTS
@@ -27,19 +27,22 @@ provide multiple versions of tools (typically an ancient, traditional
version and a new, standards-conforming version), so you may already
have a usable version even if the default version isn't. If you don't
have a suitable tool, you can probably get one from the GNU Project (see
-http://www.gnu.org). expr and id are both part of the GNU shellutils
-package, tr is part of the GNU textutils package, and awk is part of the
-GNU gawk package. The test script tries to verify that the tools exist
-and are usable; if not, it tries to find the GNU versions and use them
-instead. If it can't find the GNU versions either, it will print an
-error message and, depending on the severity of the deficiency, it may
-exit.
-
-If there is some unexpected output, that is a failure which can be
-somewhat hard to track down. Finding out which test is producing the
-output is not always easy. The newer tests (that is, ones using
-dotest*) will not have this problem, but there are many old tests
-which have not been converted.
+http://www.gnu.org). At this writting, expr and id are both part of the
+GNU shellutils package, tr is part of the GNU textutils package, and awk
+is part of the GNU gawk package. The test script tries to verify that
+the tools exist and are usable; if not, it tries to find the GNU
+versions and use them instead. If it can't find the GNU versions
+either, it will print an error message and, depending on the severity of
+the deficiency, it may exit. There are environment variables you can
+set to use a particular version of a tool -- see the test script
+(src/sanity.sh) for details.
+
+Some of the tests use fairly long command lines -- this usually isn't a
+problem, but if you have a very short command line length limit (or a
+lot of environment variables), you may run into trouble. Also, some of
+the tests expect your local timezone to be an integral number of hours
+from UTC -- if you usually use a fractional timezone, use a different
+(integral) timezone when running the tests to avoid spurious failures.
If running the tests produces the output "FAIL:" followed by the name
of the test that failed, then the details on the failure are in the
@@ -161,3 +164,66 @@ c. have a send-expect type dialog with the program under test
(e.g. see server-7 or pserver-4 which want to talk the CVS
protocol, or the many tests which need to answer the prompt of "cvs
release", e.g. deep-5).
+
+ABOUT ADDING YOUR OWN TESTS
+***************************
+
+As stated in the HACKING file, patches are not accepted without documentation
+and tests. Many people seem to be scared off by the large size of the
+sanity.sh script, but it is not really very complicated.
+
+You can probably ignore most of the begining of the script. This section
+just sets some environment variables and finds the tools the script needs to
+run.
+
+There is one main loop you can find by grepping for "The big loop". This loop
+repeatedly calls a case statement where the individual cases are of the form:
+
+ testname)
+ ...
+ ;;
+
+If you add a complete new test be sure to add it into the default list of tests
+(grep for 'tests=' near the begining of the script) as well as the case
+statement. During debugging, be aware that the sanity.sh usage allows for a '-f
+testname' option to continue through the default list "from" a particular test
+as well as interpreting everything in argv past the required options as test
+names to run individual tests.
+
+Within each major test section, individual tests usually look like:
+
+ dotest testname-subtestname "shell command" "optionally multiline regexp"
+
+Tests should always start in $testdir and create a subdirectory to operate in
+and remove their cruft and end back in $testdir. The dotest functions output
+failure messages and exit if the shell command exits with the wrong exit code or
+its stdin/stderr output doesn't match the regexp. There are a few dotest
+variations, most notably dotest_fail for expected non-zero exit codes.
+
+Other than that the script is mostly vanilla Bourne shell. There are a few
+constructs used for versatility and portability. You can grep for the ones I
+miss, but here are a few important ones. I'm leaving off long explanations
+after the first few since it probably gives you the idea and the data is in
+sanity.sh.
+
+
+ * $testdir = the directory this test is taking place in
+ (CVSROOT=$testdir/cvsroot or CVSROOT=:fork:$testdir/cvsroot)
+ * $testcvs = full path to the cvs executable we are testing
+ * $PLUS = expr dependant uninterpreted '+' since this can vary
+ * $DOTSTAR = expr dependant _interpreted_ .* since some exprs don't match
+ EOL
+ * $username = regexp to match a username
+ * $hostname = regexp to match a hostname
+ * $PROG = regexp to match progname in CVS error messages
+ * $remote = 'yes' or 'no', depending on whether the script is running with
+ a remote CVSROOT
+
+And, of course, some characters like '.' in regexps need to be '\' escaped when
+you mean them literally. Some characters may be interpreted by the shell,
+e.g. backquotes and '$', are usually either escaped or replaced with '.'.
+dotest adds the final '$' anchor to the regexp itself and all the expr
+implementations I know of implicitly supply the start anchor ('^').
+
+If you only make a few mistakes, the work is, of course, still usable, though we
+may send the patch back to you for repair. :)
diff --git a/contrib/cvs/TODO b/contrib/cvs/TODO
index 1747b684cca3..0a0fa02be964 100644
--- a/contrib/cvs/TODO
+++ b/contrib/cvs/TODO
@@ -801,15 +801,35 @@ but most unlinks should probably be using unlink_file and not CVS_UNLINK.
199. Add test for login & logout functionality, including support for
backwards compatibility with old CVSROOTs.
-200. Make a 'cvs add' without write access a non-fatal error so that the
-user's Entries file is updated and future 'cvs diffs' will work properly. This
-should ease patch submission.
+200. Make a 'cvs add' without write access a non-fatal error so that
+the user's Entries file is updated and future 'cvs diffs' will work
+properly. This should ease patch submission.
201. cvs_temp_file should be creating temporary files in a privately owned
subdirectory of of temp due to security issues on some systems.
-**
-202. Merge most of the diff & rdiff code. Enable rdiff to accept most diff
-options. Make rdiff output look like diff's. Make diff garbage go to stderr
-and only standard diff output go to stdout.
-** In progress - DRP
+202. Merge most of the diff & rdiff code. Enable rdiff to accept most
+diff options. Make rdiff output look like diff's. Make CVS diff
+garbage go to stderr and only standard diff output go to stdout.
+
+203. Add val-tags additions to the tagging code. Don't remove the
+update additions since val-tags could still be used as a cache when the
+repository was imported from elsewhere (the tags weren't applied with a
+version which wrote val-tags).
+
+204. Add test case for compression. A buf_shutdown error using compression
+wasn't caught by the test suite.
+
+205. There are lots of cases where trailing slashes on directory names
+and other non-canonical paths confuse CVS. Most of the cases that do
+work are handled on an ad-hoc basis. We need to come up with a coherent
+strategy to address path canonicalization and apply it consistently.
+
+206. Restore directory-at-a-time locking for tag operations instead of
+locking the entire tree.
+
+207. Fix the branch following logic in log to work with CVS branching.
+Right now the code assumes RCS branching where all revisions on the
+branch have the same number of components in their revision numbers and
+that isn't true for CVS (revisions 1.2 and 2.4.6.8 can be on the same
+branch in CVS).
diff --git a/contrib/cvs/acinclude.m4 b/contrib/cvs/acinclude.m4
index 9968adf4d67d..ebd2277f9a26 100644
--- a/contrib/cvs/acinclude.m4
+++ b/contrib/cvs/acinclude.m4
@@ -60,9 +60,11 @@ if test x$acx_gssapi_withgssapi = xyes; then
fi
unset ac_cv_header_gssapi_h
unset ac_cv_header_gssapi_gssapi_h
- AC_CHECK_HEADERS([gssapi.h gssapi/gssapi.h])
- if test "$ac_cv_header_gssapi_h" = "yes" ||
- test "$ac_cv_header_gssapi_gssapi_h" = "yes"; then
+ unset ac_cv_header_krb5_h
+ AC_CHECK_HEADERS([gssapi.h gssapi/gssapi.h krb5.h])
+ if (test "$ac_cv_header_gssapi_h" = yes ||
+ test "$ac_cv_header_gssapi_gssapi_h" = yes) &&
+ test "$ac_cv_header_krb5_h" = yes; then
break
fi
done
diff --git a/contrib/cvs/aclocal.m4 b/contrib/cvs/aclocal.m4
index a9c5488653fb..fad649b8ab45 100644
--- a/contrib/cvs/aclocal.m4
+++ b/contrib/cvs/aclocal.m4
@@ -1,6 +1,6 @@
-# aclocal.m4 generated automatically by aclocal 1.4e
+# aclocal.m4 generated automatically by aclocal 1.5
-# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -73,9 +73,11 @@ if test x$acx_gssapi_withgssapi = xyes; then
fi
unset ac_cv_header_gssapi_h
unset ac_cv_header_gssapi_gssapi_h
- AC_CHECK_HEADERS([gssapi.h gssapi/gssapi.h])
- if test "$ac_cv_header_gssapi_h" = "yes" ||
- test "$ac_cv_header_gssapi_gssapi_h" = "yes"; then
+ unset ac_cv_header_krb5_h
+ AC_CHECK_HEADERS([gssapi.h gssapi/gssapi.h krb5.h])
+ if (test "$ac_cv_header_gssapi_h" = yes ||
+ test "$ac_cv_header_gssapi_gssapi_h" = yes) &&
+ test "$ac_cv_header_krb5_h" = yes; then
break
fi
done
@@ -295,7 +297,16 @@ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])
# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow
# the ones we care about.
ifdef([m4_pattern_allow],
- [m4_pattern_allow([^AM_(C|CPP|CXX|OBJC|F|R|GCJ)FLAGS])])dnl
+ [m4_pattern_allow([^AM_[A-Z]+FLAGS])])dnl
+
+# Autoconf 2.50 always computes EXEEXT. However we need to be
+# compatible with 2.13, for now. So we always define EXEEXT, but we
+# don't compute it.
+AC_SUBST(EXEEXT)
+# Similar for OBJEXT -- only we only use OBJEXT if the user actually
+# requests that it be used. This is a bit dumb.
+: ${OBJEXT=o}
+AC_SUBST(OBJEXT)
# Some tools Automake needs.
AC_REQUIRE([AM_SANITY_CHECK])dnl
@@ -306,23 +317,22 @@ AM_MISSING_PROG(AUTOMAKE, automake)
AM_MISSING_PROG(AUTOHEADER, autoheader)
AM_MISSING_PROG(MAKEINFO, makeinfo)
AM_MISSING_PROG(AMTAR, tar)
-AM_MISSING_INSTALL_SH
+AM_PROG_INSTALL_SH
AM_PROG_INSTALL_STRIP
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_PROG_ETAGS])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl
AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_PROVIDE_IFELSE([AC_PROG_][CC],
- [AM_DEPENDENCIES(CC)],
+ [_AM_DEPENDENCIES(CC)],
[define([AC_PROG_][CC],
- defn([AC_PROG_][CC])[AM_DEPENDENCIES(CC)])])dnl
+ defn([AC_PROG_][CC])[_AM_DEPENDENCIES(CC)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_][CXX],
- [AM_DEPENDENCIES(CXX)],
+ [_AM_DEPENDENCIES(CXX)],
[define([AC_PROG_][CXX],
- defn([AC_PROG_][CXX])[AM_DEPENDENCIES(CXX)])])dnl
+ defn([AC_PROG_][CXX])[_AM_DEPENDENCIES(CXX)])])dnl
])
#
@@ -349,6 +359,7 @@ if (
# -L didn't work.
set X `ls -t $srcdir/configure conftest.file`
fi
+ rm -f conftest.file
if test "$[*]" != "X $srcdir/configure conftest.file" \
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
@@ -369,7 +380,6 @@ else
AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
-rm -f conftest*
AC_MSG_RESULT(yes)])
@@ -383,32 +393,13 @@ $1=${$1-"${am_missing_run}$2"}
AC_SUBST($1)])
-# AM_MISSING_INSTALL_SH
-# ---------------------
-# Like AM_MISSING_PROG, but only looks for install-sh.
-AC_DEFUN([AM_MISSING_INSTALL_SH],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-if test -z "$install_sh"; then
- for install_sh in "$ac_aux_dir/install-sh" \
- "$ac_aux_dir/install.sh" \
- "${am_missing_run}${ac_auxdir}/install-sh";
- do
- test -f "$install_sh" && break
- done
- # FIXME: an evil hack: we remove the SHELL invocation from
- # install_sh because automake adds it back in. Sigh.
- install_sh=`echo $install_sh | sed -e 's/\${SHELL}//'`
-fi
-AC_SUBST(install_sh)])
-
-
# AM_MISSING_HAS_RUN
# ------------------
# Define MISSING if not defined so far and test if it supports --run.
# If it does, set am_missing_run to use it, otherwise, to nothing.
AC_DEFUN([AM_MISSING_HAS_RUN],
-[test x"${MISSING+set}" = xset ||
- MISSING="\${SHELL} `CDPATH=:; cd $ac_aux_dir && pwd`/missing"
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
@@ -422,140 +413,71 @@ fi
# AM_AUX_DIR_EXPAND
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to ${srcdir}/foo. In other projects, it is set to `.'.
-# Of course, Automake must honor this variable whenever it call a tool
-# from the auxiliary directory. The problem is that $srcdir (hence
-# $ac_aux_dir) can be either an absolute path or a path relative to
-# $top_srcdir or absolute, this depends on how configure is run. This
-# is pretty anoying since it makes $ac_aux_dir quite unusable in
-# subdirectories: on the top source directory, any form will work
-# fine, but in subdirectories relative pat needs to be adapted.
-# - calling $top_srcidr/$ac_aux_dir/missing would success if $srcdir is
-# relative, but fail if $srcdir is absolute
-# - conversly, calling $ax_aux_dir/missing would fail if $srcdir is
-# absolute, and success on relative paths.
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
#
-# Consequently, we define and use $am_aux_dir, the "always absolute"
-# version of $ac_aux_dir.
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
AC_DEFUN([AM_AUX_DIR_EXPAND], [
# expand $ac_aux_dir to an absolute path
am_aux_dir=`CDPATH=:; cd $ac_aux_dir && pwd`
])
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
# One issue with vendor `install' (even GNU) is that you can't
# specify the program used to strip binaries. This is especially
-# annoying in cross=compiling environments, where the build's strip
+# annoying in cross-compiling environments, where the build's strip
# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so if we ever
-# need to use a non standard strip, we just have to make sure we use
-# install-sh with the STRIPPROG variable set.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_MISSING_INSTALL_SH])
-dnl Don't test for $cross_compiling = yes, it might be `maybe'...
-# We'd like to do this but we can't because it will unconditionally
-# require config.guess. One way would be if autoconf had the capability
-# to let us compile in this code only when config.guess was already
-# a possibility.
-#if test "$cross_compiling" != no; then
-# # since we are cross-compiling, we need to check for a suitable `strip'
-# AM_PROG_STRIP
-# if test -z "$STRIP"; then
-# AC_MSG_WARN([strip missing, install-strip will not strip binaries])
-# fi
-#fi
-
-# If $STRIP is defined (either by the user, or by AM_PROG_STRIP),
-# instruct install-strip to use install-sh and the given $STRIP program.
-# Otherwise, just use ${INSTALL}: the idea is to use the vendor install
-# as much as possible, because it's faster.
-if test -z "$STRIP"; then
- # The top level make will set INSTALL_PROGRAM=$(INSTALL_STRIP_PROGRAM)
- # and the double dolard below is there to make sure that ${INSTALL}
- # is substitued in the sub-makes, not at the top-level; this is
- # needed if ${INSTALL} is a relative path (ajusted in each subdirectory
- # by config.status).
- INSTALL_STRIP_PROGRAM='$${INSTALL} -s'
- INSTALL_STRIP_PROGRAM_ENV=''
-else
- _am_dirpart="`echo $install_sh | sed -e 's,//*[[^/]]*$,,'`"
- INSTALL_STRIP_PROGRAM="\${SHELL} \`CDPATH=: && cd $_am_dirpart && pwd\`/install-sh -c -s"
- INSTALL_STRIP_PROGRAM_ENV="STRIPPROG='\$(STRIP)'"
-fi
-AC_SUBST([STRIP])
-AC_SUBST([INSTALL_STRIP_PROGRAM])
-AC_SUBST([INSTALL_STRIP_PROGRAM_ENV])])
-
-#AC_DEFUN([AM_PROG_STRIP],
-#[# Check for `strip', unless the installer
-# has set the STRIP environment variable.
-# Note: don't explicitly check for -z "$STRIP" here because
-# that will cause problems if AC_CANONICAL_* is AC_REQUIREd after
-# this macro, and anyway it doesn't have an effect anyway.
-#AC_CHECK_TOOL([STRIP],[strip])
-#])
-
-#
-# Find some information about the etags program
-#
-# Sets
-# ETAGS = path to etags
-# ETAGS_INCLUDE_OPTION = option to pass to etags with arg for includes
-#
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
-AC_DEFUN([AM_PROG_ETAGS],
-[AC_BEFORE([$0], [AM_PROG_ETAGS_WORKS])dnl
-AC_CHECK_PROG(ETAGS, etags, etags)
-if test -z "$ETAGS"; then
- AC_CHECK_PROG(ETAGS, ctags, ctags -e)
-fi
-if test -n "$ETAGS"; then
- AM_PROG_ETAGS_WORKS
- if test "$am_cv_prog_etags_works" = yes ; then
- AM_PROG_ETAGS_INCLUDE_OPTION
- else
- AM_MISSING_PROG(ETAGS, etags)
- fi
-else
- AM_MISSING_PROG(ETAGS, etags)
-fi])
+# serial 4 -*- Autoconf -*-
-AC_DEFUN([AM_PROG_ETAGS_WORKS],
-[AC_CACHE_CHECK([whether ${ETAGS-etags} works], [am_cv_prog_etags_works],
-[cat >conftest.c <<EOF
-int globalvar;
-EOF
-if AC_TRY_COMMAND([${ETAGS-etags} -f - conftest.c |egrep ^int\ globalvar\; >&2]); then
- am_cv_prog_etags_works=yes
-else
- am_cv_prog_etags_works=no
-fi
-rm -f conftest.c])])
-
-AC_DEFUN([AM_PROG_ETAGS_INCLUDE_OPTION],
-[AC_REQUIRE([AM_PROG_ETAGS_WORKS])dnl
-if test "$am_cv_prog_etags_works" = yes ; then
- AC_CACHE_CHECK([for etags include option],
- [am_cv_prog_etags_include_option],
- [cat >conftest.c <<EOF
-int globalvar;
-EOF
- if AC_TRY_COMMAND([${ETAGS-etags} --etags-include=TAGS.inc -f - conftest.c |egrep ^TAGS.inc,include\$ >&2]); then
- am_cv_prog_etags_include_option=--etags-include=
- elif AC_TRY_COMMAND([${ETAGS-etags} -i TAGS.inc -f - conftest.c |egrep ^TAGS.inc,include\$ >&2]); then
- am_cv_prog_etags_include_option='"-i "'
- else :
- # AC_MSG_ERROR(unfamiliar etags implementation)
- fi
- rm -f conftest.c])
-else
- :
-fi
-ETAGS_INCLUDE_OPTION="$am_cv_prog_etags_include_option"
-AC_SUBST(ETAGS_INCLUDE_OPTION)])
-
-# serial 3
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
@@ -563,53 +485,57 @@ AC_SUBST(ETAGS_INCLUDE_OPTION)])
# C support machinery. Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-# AM_DEPENDENCIES(NAME)
+
+
+# _AM_DEPENDENCIES(NAME)
# ---------------------
# See how the compiler implements dependency checking.
# NAME is "CC", "CXX" or "OBJC".
# We try a few techniques and use that to set a single cache variable.
-AC_DEFUN([AM_DEPENDENCIES],
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
[AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-ifelse([$1], CC,
- [AC_REQUIRE([AC_PROG_][CC])dnl
-AC_REQUIRE([AC_PROG_][CPP])
-depcc="$CC"
-depcpp="$CPP"],
- [$1], CXX, [AC_REQUIRE([AC_PROG_][CXX])dnl
-AC_REQUIRE([AC_PROG_][CXXCPP])
-depcc="$CXX"
-depcpp="$CXXCPP"],
- [$1], OBJC, [am_cv_OBJC_dependencies_compiler_type=gcc],
- [AC_REQUIRE([AC_PROG_][$1])dnl
-depcc="$$1"
-depcpp=""])
-
-AC_REQUIRE([AM_MAKE_INCLUDE])
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc']
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
AC_CACHE_CHECK([dependency style of $depcc],
[am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP"; then
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named `D' -- because `-MD' means `put the output
# in D'.
- mkdir confdir
+ mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory.
- cp "$am_depcomp" confdir
- cd confdir
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
am_cv_$1_dependencies_compiler_type=none
- for depmode in `sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < "./depcomp"`; do
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
# We need to recreate these files for each test, as the compiler may
# overwrite some of them when testing with obscure command lines.
# This happens at least with the AIX C compiler.
echo '#include "conftest.h"' > conftest.c
echo 'int i;' > conftest.h
+ echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf
- case "$depmode" in
+ case $depmode in
nosideeffect)
# after this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested
@@ -624,18 +550,19 @@ AC_CACHE_CHECK([dependency style of $depcc],
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this.
- if depmode="$depmode" \
+ if depmode=$depmode \
source=conftest.c object=conftest.o \
depfile=conftest.Po tmpdepfile=conftest.TPo \
$SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
- grep conftest.h conftest.Po > /dev/null 2>&1; then
- am_cv_$1_dependencies_compiler_type="$depmode"
+ grep conftest.h conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ am_cv_$1_dependencies_compiler_type=$depmode
break
fi
done
cd ..
- rm -rf confdir
+ rm -rf conftest.dir
else
am_cv_$1_dependencies_compiler_type=none
fi
@@ -648,16 +575,17 @@ AC_SUBST([$1DEPMODE])
# AM_SET_DEPDIR
# -------------
# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in AM_DEPENDENCIES
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
AC_DEFUN([AM_SET_DEPDIR],
-[if test -d .deps || mkdir .deps 2> /dev/null || test -d .deps; then
+[rm -f .deps 2>/dev/null
+mkdir .deps 2>/dev/null
+if test -d .deps; then
DEPDIR=.deps
- # We redirect because .deps might already exist and be populated.
- # In this situation we don't want to see an error.
- rmdir .deps > /dev/null 2>&1
else
+ # MS-DOS does not allow filenames that begin with a dot.
DEPDIR=_deps
fi
+rmdir .deps 2>/dev/null
AC_SUBST(DEPDIR)
])
@@ -689,7 +617,7 @@ popdef([subst])
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],[
AC_OUTPUT_COMMANDS([
-test x"$AMDEP" != x"" ||
+test x"$AMDEP_TRUE" != x"" ||
for mf in $CONFIG_FILES; do
case "$mf" in
Makefile) dirpart=.;;
@@ -726,7 +654,7 @@ for mf in $CONFIG_FILES; do
echo '# dummy' > "$dirpart/$file"
done
done
-], [AMDEP="$AMDEP"
+], [AMDEP_TRUE="$AMDEP_TRUE"
ac_aux_dir="$ac_aux_dir"])])
# AM_MAKE_INCLUDE()
@@ -740,27 +668,32 @@ doit:
END
# If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make])
-_am_include='#'
-_am_quote=
+am__include='#'
+am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
-if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
- _am_include=include
- _am_quote=
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
_am_result=GNU
fi
# Now try BSD make style include.
-if test "$_am_include" = "#"; then
+if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
- _am_include=.include
- _am_quote='"'
+ am__include=.include
+ am__quote='"'
_am_result=BSD
fi
fi
-AC_SUBST(_am_include)
-AC_SUBST(_am_quote)
+AC_SUBST(am__include)
+AC_SUBST(am__quote)
AC_MSG_RESULT($_am_result)
rm -f confinc confmf
])
@@ -859,3 +792,43 @@ AC_DEFUN([_AM_DIRNAME],
m4_patsubst([$1], [^\(.*[^/]\)//*[^/][^/]*/*$], [\1]))[]dnl
]) # _AM_DIRNAME
+# serial 2
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+])
+
+#serial 1
+# This test replaces the one in autoconf.
+# Currently this macro should have the same name as the autoconf macro
+# because gettext's gettext.m4 (distributed in the automake package)
+# still uses it. Otherwise, the use in gettext.m4 makes autoheader
+# give these diagnostics:
+# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
+# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
+
+undefine([AC_ISC_POSIX])
+
+AC_DEFUN([AC_ISC_POSIX],
+ [
+ dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
+ AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
+ ]
+)
+
diff --git a/contrib/cvs/compile b/contrib/cvs/compile
new file mode 100755
index 000000000000..d4a34aa0ef97
--- /dev/null
+++ b/contrib/cvs/compile
@@ -0,0 +1,82 @@
+#! /bin/sh
+
+# Wrapper for compilers which do not understand `-c -o'.
+
+# Copyright 1999, 2000 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Usage:
+# compile PROGRAM [ARGS]...
+# `-o FOO.o' is removed from the args passed to the actual compile.
+
+prog=$1
+shift
+
+ofile=
+cfile=
+args=
+while test $# -gt 0; do
+ case "$1" in
+ -o)
+ ofile=$2
+ shift
+ ;;
+ *.c)
+ cfile=$1
+ args="$args $1"
+ ;;
+ *)
+ args="$args $1"
+ ;;
+ esac
+ shift
+done
+
+test -z "$ofile" && {
+ echo "compile: no \`-o' option seen" 1>&2
+ exit 1
+}
+
+test -z "$cfile" && {
+ echo "compile: no \`.c' file seen" 1>&2
+ exit 1
+}
+
+# Name of file we expect compiler to create.
+cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+
+# Create the lock directory.
+lockdir=`echo $ofile | sed -e 's|/|_|g'`
+while true; do
+ if mkdir $lockdir > /dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir $lockdir; exit 1" 1 2 15
+
+# Run the compile.
+"$prog" $args
+status=$?
+
+if test -f "$cofile"; then
+ mv "$cofile" "$ofile"
+fi
+
+rmdir $lockdir
+exit $status
diff --git a/contrib/cvs/config.h.in b/contrib/cvs/config.h.in
index 986998f0712e..dacf10c0ba51 100644
--- a/contrib/cvs/config.h.in
+++ b/contrib/cvs/config.h.in
@@ -22,6 +22,9 @@
/* Define if you support file names longer than 14 characters. */
#undef HAVE_LONG_FILE_NAMES
+/* Define if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
/* Define if your struct stat has st_blksize. */
#undef HAVE_ST_BLKSIZE
@@ -43,6 +46,9 @@
/* Define to `int' if <sys/types.h> doesn't define. */
#undef mode_t
+/* Define if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
/* Define to `int' if <sys/types.h> doesn't define. */
#undef pid_t
@@ -275,6 +281,9 @@
/* Define if you have the <ndir.h> header file. */
#undef HAVE_NDIR_H
+/* Define if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
/* Define if you have the <string.h> header file. */
#undef HAVE_STRING_H
@@ -299,12 +308,18 @@
/* Define if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H
+/* Define if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
/* Define if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
/* Define if you have the <sys/timeb.h> header file. */
#undef HAVE_SYS_TIMEB_H
+/* Define if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
/* Define if you have the <syslog.h> header file. */
#undef HAVE_SYSLOG_H
diff --git a/contrib/cvs/configure b/contrib/cvs/configure
index d4777323898c..458418630f1c 100755
--- a/contrib/cvs/configure
+++ b/contrib/cvs/configure
@@ -555,6 +555,10 @@ ac_config_guess=$ac_aux_dir/config.guess
ac_config_sub=$ac_aux_dir/config.sub
ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`CDPATH=:; cd $ac_aux_dir && pwd`
+
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
@@ -567,7 +571,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:571: checking for a BSD compatible install" >&5
+echo "configure:575: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -620,7 +624,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:624: checking whether build environment is sane" >&5
+echo "configure:628: checking whether build environment is sane" >&5
# Just in case
sleep 1
echo timestamp > conftest.file
@@ -635,6 +639,7 @@ if (
# -L didn't work.
set X `ls -t $srcdir/configure conftest.file`
fi
+ rm -f conftest.file
if test "$*" != "X $srcdir/configure conftest.file" \
&& test "$*" != "X conftest.file $srcdir/configure"; then
@@ -655,7 +660,6 @@ else
{ echo "configure: error: newly created file is older than distributed files!
Check your system clock" 1>&2; exit 1; }
fi
-rm -f conftest*
echo "$ac_t""yes" 1>&6
if test "$program_transform_name" = s,x,x,; then
program_transform_name=
@@ -676,8 +680,7 @@ test "$program_suffix" != NONE &&
# sed with no file args requires a program.
test "$program_transform_name" = "" && program_transform_name="s,x,x,"
-test x"${MISSING+set}" = xset ||
- MISSING="\${SHELL} `CDPATH=:; cd $ac_aux_dir && pwd`/missing"
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
@@ -692,7 +695,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:696: checking for $ac_word" >&5
+echo "configure:699: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -722,7 +725,7 @@ test -n "$AWK" && break
done
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:726: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:729: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -748,120 +751,6 @@ else
SET_MAKE="MAKE=${MAKE-make}"
fi
-# Extract the first word of "etags", so it can be a program name with args.
-set dummy etags; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:755: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_ETAGS'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$ETAGS"; then
- ac_cv_prog_ETAGS="$ETAGS" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_ETAGS="etags"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-ETAGS="$ac_cv_prog_ETAGS"
-if test -n "$ETAGS"; then
- echo "$ac_t""$ETAGS" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-if test -z "$ETAGS"; then
- # Extract the first word of "ctags", so it can be a program name with args.
-set dummy ctags; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:785: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_ETAGS'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$ETAGS"; then
- ac_cv_prog_ETAGS="$ETAGS" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_ETAGS="ctags -e"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-ETAGS="$ac_cv_prog_ETAGS"
-if test -n "$ETAGS"; then
- echo "$ac_t""$ETAGS" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-if test -n "$ETAGS"; then
- echo $ac_n "checking whether ${ETAGS-etags} works""... $ac_c" 1>&6
-echo "configure:814: checking whether ${ETAGS-etags} works" >&5
-if eval "test \"`echo '$''{'am_cv_prog_etags_works'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat >conftest.c <<EOF
-int globalvar;
-EOF
-if { ac_try='${ETAGS-etags} -f - conftest.c |egrep ^int\ globalvar\; >&2'; { (eval echo configure:821: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
- am_cv_prog_etags_works=yes
-else
- am_cv_prog_etags_works=no
-fi
-rm -f conftest.c
-fi
-
-echo "$ac_t""$am_cv_prog_etags_works" 1>&6
- if test "$am_cv_prog_etags_works" = yes ; then
- if test "$am_cv_prog_etags_works" = yes ; then
- echo $ac_n "checking for etags include option""... $ac_c" 1>&6
-echo "configure:833: checking for etags include option" >&5
-if eval "test \"`echo '$''{'am_cv_prog_etags_include_option'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat >conftest.c <<EOF
-int globalvar;
-EOF
- if { ac_try='${ETAGS-etags} --etags-include=TAGS.inc -f - conftest.c |egrep ^TAGS.inc,include\$ >&2'; { (eval echo configure:840: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
- am_cv_prog_etags_include_option=--etags-include=
- elif { ac_try='${ETAGS-etags} -i TAGS.inc -f - conftest.c |egrep ^TAGS.inc,include\$ >&2'; { (eval echo configure:842: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
- am_cv_prog_etags_include_option='"-i "'
- else :
- # AC_MSG_ERROR(unfamiliar etags implementation)
- fi
- rm -f conftest.c
-fi
-
-echo "$ac_t""$am_cv_prog_etags_include_option" 1>&6
-else
- :
-fi
-ETAGS_INCLUDE_OPTION="$am_cv_prog_etags_include_option"
-
- else
-
-ETAGS=${ETAGS-"${am_missing_run}etags"}
-
- fi
-else
-
-ETAGS=${ETAGS-"${am_missing_run}etags"}
-
-fi
# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
if test "${enable_dependency_tracking+set}" = set; then
enableval="$enable_dependency_tracking"
@@ -885,14 +774,15 @@ fi
-if test -d .deps || mkdir .deps 2> /dev/null || test -d .deps; then
+rm -f .deps 2>/dev/null
+mkdir .deps 2>/dev/null
+if test -d .deps; then
DEPDIR=.deps
- # We redirect because .deps might already exist and be populated.
- # In this situation we don't want to see an error.
- rmdir .deps > /dev/null 2>&1
else
+ # MS-DOS does not allow filenames that begin with a dot.
DEPDIR=_deps
fi
+rmdir .deps 2>/dev/null
# test to see if srcdir already configured
@@ -903,7 +793,7 @@ fi
# Define the identity of the package.
PACKAGE=cvs
-VERSION=1.11.1p1
+VERSION=1.11.2
cat >> confdefs.h <<EOF
#define PACKAGE "$PACKAGE"
EOF
@@ -916,6 +806,15 @@ EOF
# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow
# the ones we care about.
+# Autoconf 2.50 always computes EXEEXT. However we need to be
+# compatible with 2.13, for now. So we always define EXEEXT, but we
+# don't compute it.
+
+# Similar for OBJEXT -- only we only use OBJEXT if the user actually
+# requests that it be used. This is a bit dumb.
+: ${OBJEXT=o}
+
+
# Some tools Automake needs.
ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal"}
@@ -935,51 +834,9 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
AMTAR=${AMTAR-"${am_missing_run}tar"}
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
-if test -z "$install_sh"; then
- for install_sh in "$ac_aux_dir/install-sh" \
- "$ac_aux_dir/install.sh" \
- "${am_missing_run}${ac_auxdir}/install-sh";
- do
- test -f "$install_sh" && break
- done
- # FIXME: an evil hack: we remove the SHELL invocation from
- # install_sh because automake adds it back in. Sigh.
- install_sh=`echo $install_sh | sed -e 's/\${SHELL}//'`
-fi
-
-
-# We'd like to do this but we can't because it will unconditionally
-# require config.guess. One way would be if autoconf had the capability
-# to let us compile in this code only when config.guess was already
-# a possibility.
-#if test "$cross_compiling" != no; then
-# # since we are cross-compiling, we need to check for a suitable `strip'
-# AM_PROG_STRIP
-# if test -z "$STRIP"; then
-# AC_MSG_WARN([strip missing, install-strip will not strip binaries])
-# fi
-#fi
-
-# If $STRIP is defined (either by the user, or by AM_PROG_STRIP),
-# instruct install-strip to use install-sh and the given $STRIP program.
-# Otherwise, just use ${INSTALL}: the idea is to use the vendor install
-# as much as possible, because it's faster.
-if test -z "$STRIP"; then
- # The top level make will set INSTALL_PROGRAM=$(INSTALL_STRIP_PROGRAM)
- # and the double dolard below is there to make sure that ${INSTALL}
- # is substitued in the sub-makes, not at the top-level; this is
- # needed if ${INSTALL} is a relative path (ajusted in each subdirectory
- # by config.status).
- INSTALL_STRIP_PROGRAM='$${INSTALL} -s'
- INSTALL_STRIP_PROGRAM_ENV=''
-else
- _am_dirpart="`echo $install_sh | sed -e 's,//*[^/]*$,,'`"
- INSTALL_STRIP_PROGRAM="\${SHELL} \`CDPATH=: && cd $_am_dirpart && pwd\`/install-sh -c -s"
- INSTALL_STRIP_PROGRAM_ENV="STRIPPROG='\$(STRIP)'"
-fi
-
-
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
@@ -990,7 +847,7 @@ echo $ac_n "checking for prefix by $ac_c" 1>&6
# Extract the first word of "cvs", so it can be a program name with args.
set dummy cvs; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:994: checking for $ac_word" >&5
+echo "configure:851: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_CVS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1031,44 +888,10 @@ fi
-for ac_prog in gawk mawk nawk awk
-do
-# Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1040: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$AWK"; then
- ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_AWK="$ac_prog"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-AWK="$ac_cv_prog_AWK"
-if test -n "$AWK"; then
- echo "$ac_t""$AWK" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-test -n "$AWK" && break
-done
-
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1072: checking for $ac_word" >&5
+echo "configure:895: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1098,7 +921,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1102: checking for $ac_word" >&5
+echo "configure:925: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1149,7 +972,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1153: checking for $ac_word" >&5
+echo "configure:976: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1181,7 +1004,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1185: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1008: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1192,12 +1015,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 1196 "configure"
+#line 1019 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:1201: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -1223,12 +1046,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1227: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1050: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1232: checking whether we are using GNU C" >&5
+echo "configure:1055: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1237,7 +1060,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1241: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1064: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -1256,7 +1079,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1260: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1083: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1288,8 +1111,181 @@ else
fi
+am_make=${MAKE-make}
+cat > confinc << 'END'
+doit:
+ @echo done
+END
+# If we don't find an include directive, just comment out the code.
+echo $ac_n "checking for style of include used by $am_make""... $ac_c" 1>&6
+echo "configure:1122: checking for style of include used by $am_make" >&5
+am__include='#'
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote='"'
+ _am_result=BSD
+ fi
+fi
+
+
+echo "$ac_t""$_am_result" 1>&6
+rm -f confinc confmf
+
+
+depcc="$CC" am_compiler_list=
+
+echo $ac_n "checking dependency style of $depcc""... $ac_c" 1>&6
+echo "configure:1156: checking dependency style of $depcc" >&5
+if eval "test \"`echo '$''{'am_cv_CC_dependencies_compiler_type'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ echo '#include "conftest.h"' > conftest.c
+ echo 'int i;' > conftest.h
+ echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=conftest.c object=conftest.o \
+ depfile=conftest.Po tmpdepfile=conftest.TPo \
+ $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
+ grep conftest.h conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+
+echo "$ac_t""$am_cv_CC_dependencies_compiler_type" 1>&6
+CCDEPMODE="depmode=$am_cv_CC_dependencies_compiler_type"
+
+
+if test "x$CC" != xcc; then
+ echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6
+echo "configure:1224: checking whether $CC and cc understand -c and -o together" >&5
+else
+ echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6
+echo "configure:1227: checking whether cc understands -c and -o together" >&5
+fi
+set dummy $CC; ac_cc="`echo $2 |
+ sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`"
+if eval "test \"`echo '$''{'ac_cv_prog_cc_${ac_cc}_c_o'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'foo(){}' > conftest.c
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5'
+if { (eval echo configure:1239: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+ test -f conftest.o && { (eval echo configure:1240: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+then
+ eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+ if test "x$CC" != xcc; then
+ # Test first that cc exists at all.
+ if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1245: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ ac_try='cc -c conftest.c -o conftest.o 1>&5'
+ if { (eval echo configure:1247: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+ test -f conftest.o && { (eval echo configure:1248: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+ then
+ # cc works too.
+ :
+ else
+ # cc exists but doesn't like -o.
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+ fi
+ fi
+ fi
+else
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f conftest*
+
+fi
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+ cat >> confdefs.h <<\EOF
+#define NO_MINUS_C_MINUS_O 1
+EOF
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+
+
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1293: checking how to run the C preprocessor" >&5
+echo "configure:1289: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -1304,13 +1300,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1308 "configure"
+#line 1304 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1310: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1321,13 +1317,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1325 "configure"
+#line 1321 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1331: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1327: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1338,13 +1334,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 1342 "configure"
+#line 1338 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1348: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1344: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1368,202 +1364,131 @@ else
fi
echo "$ac_t""$CPP" 1>&6
-am_make=${MAKE-make}
-cat > confinc << 'END'
-doit:
- @echo done
-END
-# If we don't find an include directive, just comment out the code.
-echo $ac_n "checking for style of include used by $am_make""... $ac_c" 1>&6
-echo "configure:1379: checking for style of include used by $am_make" >&5
-_am_include='#'
-_am_quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
- _am_include=include
- _am_quote=
- _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$_am_include" = "#"; then
- echo '.include "confinc"' > confmf
- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
- _am_include=.include
- _am_quote='"'
- _am_result=BSD
- fi
-fi
-
-
-echo "$ac_t""$_am_result" 1>&6
-rm -f confinc confmf
-
+echo $ac_n "checking for AIX""... $ac_c" 1>&6
+echo "configure:1369: checking for AIX" >&5
+cat > conftest.$ac_ext <<EOF
+#line 1371 "configure"
+#include "confdefs.h"
+#ifdef _AIX
+ yes
+#endif
-depcc="$CC"
-depcpp="$CPP"
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF
+#define _ALL_SOURCE 1
+EOF
+else
+ rm -rf conftest*
+ echo "$ac_t""no" 1>&6
+fi
+rm -f conftest*
-echo $ac_n "checking dependency style of $depcc""... $ac_c" 1>&6
-echo "configure:1411: checking dependency style of $depcc" >&5
-if eval "test \"`echo '$''{'am_cv_CC_dependencies_compiler_type'+set}'`\" = set"; then
+ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6
+echo "configure:1394: checking for minix/config.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- if test -z "$AMDEP"; then
- # We make a subdir and do the tests there. Otherwise we can end up
- # making bogus files that we don't know about and never remove. For
- # instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
- mkdir confdir
- # Copy depcomp to subdir because otherwise we won't find it if we're
- # using a relative directory.
- cp "$am_depcomp" confdir
- cd confdir
-
- am_cv_CC_dependencies_compiler_type=none
- for depmode in `sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < "./depcomp"`; do
- # We need to recreate these files for each test, as the compiler may
- # overwrite some of them when testing with obscure command lines.
- # This happens at least with the AIX C compiler.
- echo '#include "conftest.h"' > conftest.c
- echo 'int i;' > conftest.h
-
- case "$depmode" in
- nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
- if test "x$enable_dependency_tracking" = xyes; then
- continue
- else
- break
- fi
- ;;
- none) break ;;
- esac
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
- # mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this.
- if depmode="$depmode" \
- source=conftest.c object=conftest.o \
- depfile=conftest.Po tmpdepfile=conftest.TPo \
- $SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
- grep conftest.h conftest.Po > /dev/null 2>&1; then
- am_cv_CC_dependencies_compiler_type="$depmode"
- break
- fi
- done
-
- cd ..
- rm -rf confdir
+ cat > conftest.$ac_ext <<EOF
+#line 1399 "configure"
+#include "confdefs.h"
+#include <minix/config.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1404: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
else
- am_cv_CC_dependencies_compiler_type=none
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
fi
-
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ MINIX=yes
+else
+ echo "$ac_t""no" 1>&6
+MINIX=
fi
-echo "$ac_t""$am_cv_CC_dependencies_compiler_type" 1>&6
-CCDEPMODE="depmode=$am_cv_CC_dependencies_compiler_type"
+if test "$MINIX" = yes; then
+ cat >> confdefs.h <<\EOF
+#define _POSIX_SOURCE 1
+EOF
+ cat >> confdefs.h <<\EOF
+#define _POSIX_1_SOURCE 2
+EOF
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1484: checking for a BSD compatible install" >&5
-if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
- for ac_dir in $PATH; do
- # Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- if test -f $ac_dir/$ac_prog; then
- if test $ac_prog = install &&
- grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
- fi
- fi
- done
- ;;
- esac
- done
- IFS="$ac_save_IFS"
+ cat >> confdefs.h <<\EOF
+#define _MINIX 1
+EOF
fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL="$ac_cv_path_install"
- else
- # As a last resort, use the slow shell script. We don't cache a
- # path for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the path is relative.
- INSTALL="$ac_install_sh"
- fi
-fi
-echo "$ac_t""$INSTALL" 1>&6
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1537: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+ echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6
+echo "configure:1443: checking for strerror in -lcposix" >&5
+ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- cat > conftestmake <<\EOF
-all:
- @echo 'ac_maketemp="${MAKE}"'
+ ac_save_LIBS="$LIBS"
+LIBS="-lcposix $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1451 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char strerror();
+
+int main() {
+strerror()
+; return 0; }
EOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
-if test -n "$ac_maketemp"; then
- eval ac_cv_prog_make_${ac_make}_set=yes
+if { (eval echo configure:1462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
else
- eval ac_cv_prog_make_${ac_make}_set=no
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
fi
-rm -f conftestmake
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
fi
-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
- SET_MAKE=
+ LIBS="$LIBS -lcposix"
else
echo "$ac_t""no" 1>&6
- SET_MAKE="MAKE=${MAKE-make}"
fi
-# Automake's more advanced version of AC_PROG_RANLIB
+
+
+if test "$ISC" = yes; then
+CFLAGS="$CFLAGS -D_SYSV3"
+LIBS="-lcrypt $LIBS"
+fi
+
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1567: checking for $ac_word" >&5
+echo "configure:1492: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1595,7 +1520,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1599: checking for $ac_word" >&5
+echo "configure:1524: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1626,7 +1551,7 @@ done
test -n "$YACC" || YACC="yacc"
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1630: checking whether ln -s works" >&5
+echo "configure:1555: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1646,11 +1571,106 @@ else
echo "$ac_t""no" 1>&6
fi
+echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
+echo "configure:1576: checking for Cygwin environment" >&5
+if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1581 "configure"
+#include "confdefs.h"
+
+int main() {
+
+#ifndef __CYGWIN__
+#define __CYGWIN__ __CYGWIN32__
+#endif
+return __CYGWIN__;
+; return 0; }
+EOF
+if { (eval echo configure:1592: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_cygwin=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_cygwin=no
+fi
+rm -f conftest*
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_cygwin" 1>&6
+CYGWIN=
+test "$ac_cv_cygwin" = yes && CYGWIN=yes
+echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
+echo "configure:1609: checking for mingw32 environment" >&5
+if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1614 "configure"
+#include "confdefs.h"
+
+int main() {
+return __MINGW32__;
+; return 0; }
+EOF
+if { (eval echo configure:1621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_mingw32=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_mingw32=no
+fi
+rm -f conftest*
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_mingw32" 1>&6
+MINGW32=
+test "$ac_cv_mingw32" = yes && MINGW32=yes
+
+
+echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
+echo "configure:1640: checking for executable suffix" >&5
+if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
+ ac_cv_exeext=.exe
+else
+ rm -f conftest*
+ echo 'int main () { return 0; }' > conftest.$ac_ext
+ ac_cv_exeext=
+ if { (eval echo configure:1650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+ for file in conftest.*; do
+ case $file in
+ *.c | *.o | *.obj) ;;
+ *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
+ esac
+ done
+ else
+ { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
+ fi
+ rm -f conftest*
+ test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
+fi
+fi
+
+EXEEXT=""
+test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
+echo "$ac_t""${ac_cv_exeext}" 1>&6
+ac_exeext=$EXEEXT
+
# Extract the first word of "perl", so it can be a program name with args.
set dummy perl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1654: checking for $ac_word" >&5
+echo "configure:1674: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1686,7 +1706,7 @@ fi
# Extract the first word of "csh", so it can be a program name with args.
set dummy csh; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1690: checking for $ac_word" >&5
+echo "configure:1710: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_CSH'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1722,7 +1742,7 @@ fi
# Extract the first word of "pr", so it can be a program name with args.
set dummy pr; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1726: checking for $ac_word" >&5
+echo "configure:1746: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_PR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1770,7 +1790,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1774: checking for $ac_word" >&5
+echo "configure:1794: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_ROFF'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1809,7 +1829,7 @@ test -n "$ROFF" || ROFF="$missing_dir/missing roff"
# Extract the first word of "ps2pdf", so it can be a program name with args.
set dummy ps2pdf; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1813: checking for $ac_word" >&5
+echo "configure:1833: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_PS2PDF'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1845,7 +1865,7 @@ fi
# Extract the first word of "texi2dvi", so it can be a program name with args.
set dummy texi2dvi; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1849: checking for $ac_word" >&5
+echo "configure:1869: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_TEXI2DVI'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1882,7 +1902,7 @@ fi
# Pull the hash mark out of the macro call to avoid m4 problems.
ac_msg="whether #! works in shell scripts"
echo $ac_n "checking $ac_msg""... $ac_c" 1>&6
-echo "configure:1886: checking $ac_msg" >&5
+echo "configure:1906: checking $ac_msg" >&5
if eval "test \"`echo '$''{'ac_cv_sys_interpreter'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1910,12 +1930,12 @@ fi
# BSD's logo is a devil for a reason, hey?
echo $ac_n "checking for BSD VPATH bug in make""... $ac_c" 1>&6
-echo "configure:1914: checking for BSD VPATH bug in make" >&5
+echo "configure:1934: checking for BSD VPATH bug in make" >&5
if eval "test \"`echo '$''{'ccvs_cv_bsd_make_vpath_bug'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test ! -d ac_test_dir ; then
- { ac_try='mkdir ac_test_dir'; { (eval echo configure:1919: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
+ { ac_try='mkdir ac_test_dir'; { (eval echo configure:1939: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
fi
cat >conftestmake <<EOF
VPATH = ac_test_dir
@@ -1929,12 +1949,12 @@ touch ac_test_target
# Don't know why, but the following test doesn't work under FreeBSD 4.2
# without this sleep command
sleep 1
-if { ac_try='make -f conftestmake 2>&1 >/dev/null |grep ^BSD\ VPATH\ bug\ present\$ >/dev/null'; { (eval echo configure:1933: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } ; then
+if { ac_try='make -f conftestmake 2>&1 >/dev/null |grep ^BSD\ VPATH\ bug\ present\$ >/dev/null'; { (eval echo configure:1953: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } ; then
ccvs_cv_bsd_make_vpath_bug=yes
else
ccvs_cv_bsd_make_vpath_bug=no
fi
-{ ac_try='rm -rf ac_test_dir ac_test_target conftestmake'; { (eval echo configure:1938: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
+{ ac_try='rm -rf ac_test_dir ac_test_target conftestmake'; { (eval echo configure:1958: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
fi
echo "$ac_t""$ccvs_cv_bsd_make_vpath_bug" 1>&6
@@ -1951,116 +1971,17 @@ else
MAKE_TARGETS_IN_VPATH_FALSE=
fi
-echo $ac_n "checking for AIX""... $ac_c" 1>&6
-echo "configure:1956: checking for AIX" >&5
-cat > conftest.$ac_ext <<EOF
-#line 1958 "configure"
-#include "confdefs.h"
-#ifdef _AIX
- yes
-#endif
-
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "yes" >/dev/null 2>&1; then
- rm -rf conftest*
- echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF
-#define _ALL_SOURCE 1
-EOF
-
-else
- rm -rf conftest*
- echo "$ac_t""no" 1>&6
-fi
-rm -f conftest*
-
-
-ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6
-echo "configure:1981: checking for minix/config.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1986 "configure"
-#include "confdefs.h"
-#include <minix/config.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- MINIX=yes
-else
- echo "$ac_t""no" 1>&6
-MINIX=
-fi
-
-if test "$MINIX" = yes; then
- cat >> confdefs.h <<\EOF
-#define _POSIX_SOURCE 1
-EOF
-
- cat >> confdefs.h <<\EOF
-#define _POSIX_1_SOURCE 2
-EOF
-
- cat >> confdefs.h <<\EOF
-#define _MINIX 1
-EOF
-
-fi
-
-echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
-echo "configure:2029: checking for POSIXized ISC" >&5
-if test -d /etc/conf/kconfig.d &&
- grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
-then
- echo "$ac_t""yes" 1>&6
- ISC=yes # If later tests want to check for ISC.
- cat >> confdefs.h <<\EOF
-#define _POSIX_SOURCE 1
-EOF
-
- if test "$GCC" = yes; then
- CC="$CC -posix"
- else
- CC="$CC -Xp"
- fi
-else
- echo "$ac_t""no" 1>&6
- ISC=
-fi
-
-if test "$ISC" = yes; then
-CFLAGS="$CFLAGS -D_SYSV3"
-LIBS="-lcrypt $LIBS"
-fi
-
ac_header_dirent=no
for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:2059: checking for $ac_hdr that defines DIR" >&5
+echo "configure:1980: checking for $ac_hdr that defines DIR" >&5
if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2064 "configure"
+#line 1985 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_hdr>
@@ -2068,7 +1989,7 @@ int main() {
DIR *dirp = 0;
; return 0; }
EOF
-if { (eval echo configure:2072: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1993: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "ac_cv_header_dirent_$ac_safe=yes"
else
@@ -2093,7 +2014,7 @@ done
# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
if test $ac_header_dirent = dirent.h; then
echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:2097: checking for opendir in -ldir" >&5
+echo "configure:2018: checking for opendir in -ldir" >&5
ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2101,7 +2022,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldir $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2105 "configure"
+#line 2026 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -2112,7 +2033,7 @@ int main() {
opendir()
; return 0; }
EOF
-if { (eval echo configure:2116: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2037: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -2134,7 +2055,7 @@ fi
else
echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:2138: checking for opendir in -lx" >&5
+echo "configure:2059: checking for opendir in -lx" >&5
ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2142,7 +2063,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lx $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2146 "configure"
+#line 2067 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -2153,7 +2074,7 @@ int main() {
opendir()
; return 0; }
EOF
-if { (eval echo configure:2157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -2176,12 +2097,12 @@ fi
fi
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2180: checking for ANSI C header files" >&5
+echo "configure:2101: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2185 "configure"
+#line 2106 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -2189,7 +2110,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2193: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2114: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2206,7 +2127,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 2210 "configure"
+#line 2131 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -2224,7 +2145,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 2228 "configure"
+#line 2149 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -2245,7 +2166,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 2249 "configure"
+#line 2170 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -2256,7 +2177,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
-if { (eval echo configure:2260: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -2280,12 +2201,12 @@ EOF
fi
echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:2284: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:2205: checking for sys/wait.h that is POSIX.1 compatible" >&5
if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2289 "configure"
+#line 2210 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
@@ -2301,7 +2222,7 @@ wait (&s);
s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
; return 0; }
EOF
-if { (eval echo configure:2305: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2226: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_sys_wait_h=yes
else
@@ -2321,24 +2242,40 @@ EOF
fi
-for ac_hdr in errno.h unistd.h string.h memory.h utime.h fcntl.h ndbm.h \
- limits.h sys/file.h \
- sys/param.h sys/select.h sys/time.h sys/timeb.h \
- io.h direct.h sys/bsdtypes.h sys/resource.h syslog.h
+for ac_hdr in \
+ errno.h \
+ direct.h \
+ fcntl.h \
+ io.h \
+ limits.h \
+ memory.h \
+ ndbm.h \
+ string.h \
+ syslog.h \
+ sys/bsdtypes.h \
+ sys/file.h \
+ sys/param.h \
+ sys/resource.h \
+ sys/select.h \
+ sys/time.h \
+ sys/timeb.h \
+ unistd.h \
+ utime.h\
+
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2332: checking for $ac_hdr" >&5
+echo "configure:2269: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2337 "configure"
+#line 2274 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2342: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2279: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2365,12 +2302,12 @@ fi
done
echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
-echo "configure:2369: checking whether stat file-mode macros are broken" >&5
+echo "configure:2306: checking whether stat file-mode macros are broken" >&5
if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2374 "configure"
+#line 2311 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/stat.h>
@@ -2421,12 +2358,12 @@ EOF
fi
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:2425: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:2362: checking whether time.h and sys/time.h may both be included" >&5
if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2430 "configure"
+#line 2367 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/time.h>
@@ -2435,7 +2372,7 @@ int main() {
struct tm *tp;
; return 0; }
EOF
-if { (eval echo configure:2439: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_time=yes
else
@@ -2457,12 +2394,12 @@ fi
echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:2461: checking for working const" >&5
+echo "configure:2398: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2466 "configure"
+#line 2403 "configure"
#include "confdefs.h"
int main() {
@@ -2511,7 +2448,7 @@ ccp = (char const *const *) p;
; return 0; }
EOF
-if { (eval echo configure:2515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2452: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
@@ -2532,12 +2469,12 @@ EOF
fi
echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:2536: checking for uid_t in sys/types.h" >&5
+echo "configure:2473: checking for uid_t in sys/types.h" >&5
if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2541 "configure"
+#line 2478 "configure"
#include "confdefs.h"
#include <sys/types.h>
EOF
@@ -2566,12 +2503,12 @@ EOF
fi
echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:2570: checking for mode_t" >&5
+echo "configure:2507: checking for mode_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2575 "configure"
+#line 2512 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -2599,12 +2536,12 @@ EOF
fi
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:2603: checking for pid_t" >&5
+echo "configure:2540: checking for pid_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2608 "configure"
+#line 2545 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -2632,12 +2569,12 @@ EOF
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:2636: checking for size_t" >&5
+echo "configure:2573: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2641 "configure"
+#line 2578 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -2665,12 +2602,12 @@ EOF
fi
echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:2669: checking return type of signal handlers" >&5
+echo "configure:2606: checking return type of signal handlers" >&5
if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2674 "configure"
+#line 2611 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
@@ -2687,7 +2624,7 @@ int main() {
int i;
; return 0; }
EOF
-if { (eval echo configure:2691: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2628: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_type_signal=void
else
@@ -2707,12 +2644,12 @@ EOF
echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6
-echo "configure:2711: checking for st_blksize in struct stat" >&5
+echo "configure:2648: checking for st_blksize in struct stat" >&5
if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2716 "configure"
+#line 2653 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/stat.h>
@@ -2720,7 +2657,7 @@ int main() {
struct stat s; s.st_blksize;
; return 0; }
EOF
-if { (eval echo configure:2724: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2661: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_st_blksize=yes
else
@@ -2741,12 +2678,12 @@ EOF
fi
echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6
-echo "configure:2745: checking for st_rdev in struct stat" >&5
+echo "configure:2682: checking for st_rdev in struct stat" >&5
if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2750 "configure"
+#line 2687 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/stat.h>
@@ -2754,7 +2691,7 @@ int main() {
struct stat s; s.st_rdev;
; return 0; }
EOF
-if { (eval echo configure:2758: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2695: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_st_rdev=yes
else
@@ -2774,15 +2711,25 @@ EOF
fi
-for ac_func in mkdir rename strstr dup2 strerror valloc waitpid memmove strtoul
+for ac_func in \
+ dup2 \
+ memmove \
+ mkdir \
+ rename \
+ strerror \
+ strstr \
+ strtoul\
+ valloc \
+ waitpid \
+
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2781: checking for $ac_func" >&5
+echo "configure:2728: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2786 "configure"
+#line 2733 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -2805,7 +2752,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:2809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2756: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -2860,12 +2807,12 @@ for ac_func in \
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2864: checking for $ac_func" >&5
+echo "configure:2811: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2869 "configure"
+#line 2816 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -2888,7 +2835,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:2892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -2920,12 +2867,12 @@ for ac_func in \
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2924: checking for $ac_func" >&5
+echo "configure:2871: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2929 "configure"
+#line 2876 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -2948,7 +2895,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:2952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -2992,17 +2939,17 @@ EOF
ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
-echo "configure:2996: checking for vfork.h" >&5
+echo "configure:2943: checking for vfork.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3001 "configure"
+#line 2948 "configure"
#include "confdefs.h"
#include <vfork.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3006: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2953: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -3027,18 +2974,18 @@ else
fi
echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:3031: checking for working vfork" >&5
+echo "configure:2978: checking for working vfork" >&5
if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
echo $ac_n "checking for vfork""... $ac_c" 1>&6
-echo "configure:3037: checking for vfork" >&5
+echo "configure:2984: checking for vfork" >&5
if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3042 "configure"
+#line 2989 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char vfork(); below. */
@@ -3061,7 +3008,7 @@ vfork();
; return 0; }
EOF
-if { (eval echo configure:3065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_vfork=yes"
else
@@ -3083,7 +3030,7 @@ fi
ac_cv_func_vfork_works=$ac_cv_func_vfork
else
cat > conftest.$ac_ext <<EOF
-#line 3087 "configure"
+#line 3034 "configure"
#include "confdefs.h"
/* Thanks to Paul Eggert for this test. */
#include <stdio.h>
@@ -3178,7 +3125,7 @@ main() {
}
}
EOF
-if { (eval echo configure:3182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_vfork_works=yes
else
@@ -3201,7 +3148,7 @@ EOF
fi
echo $ac_n "checking whether closedir returns void""... $ac_c" 1>&6
-echo "configure:3205: checking whether closedir returns void" >&5
+echo "configure:3152: checking whether closedir returns void" >&5
if eval "test \"`echo '$''{'ac_cv_func_closedir_void'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3209,13 +3156,13 @@ else
ac_cv_func_closedir_void=yes
else
cat > conftest.$ac_ext <<EOF
-#line 3213 "configure"
+#line 3160 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_header_dirent>
int closedir(); main() { exit(closedir(opendir(".")) != 0); }
EOF
-if { (eval echo configure:3219: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_closedir_void=no
else
@@ -3240,14 +3187,14 @@ fi
echo $ac_n "checking for library containing getspnam""... $ac_c" 1>&6
-echo "configure:3244: checking for library containing getspnam" >&5
+echo "configure:3191: checking for library containing getspnam" >&5
if eval "test \"`echo '$''{'ac_cv_search_getspnam'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_getspnam="no"
cat > conftest.$ac_ext <<EOF
-#line 3251 "configure"
+#line 3198 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3258,7 +3205,7 @@ int main() {
getspnam()
; return 0; }
EOF
-if { (eval echo configure:3262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3209: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_getspnam="none required"
else
@@ -3269,7 +3216,7 @@ rm -f conftest*
test "$ac_cv_search_getspnam" = "no" && for i in sec gen; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3273 "configure"
+#line 3220 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3280,7 +3227,7 @@ int main() {
getspnam()
; return 0; }
EOF
-if { (eval echo configure:3284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_getspnam="-l$i"
break
@@ -3305,7 +3252,7 @@ else :
fi
echo $ac_n "checking whether utime accepts a null argument""... $ac_c" 1>&6
-echo "configure:3309: checking whether utime accepts a null argument" >&5
+echo "configure:3256: checking whether utime accepts a null argument" >&5
if eval "test \"`echo '$''{'ac_cv_func_utime_null'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3315,7 +3262,7 @@ if test "$cross_compiling" = yes; then
ac_cv_func_utime_null=no
else
cat > conftest.$ac_ext <<EOF
-#line 3319 "configure"
+#line 3266 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/stat.h>
@@ -3326,7 +3273,7 @@ exit(!(stat ("conftestdata", &s) == 0 && utime("conftestdata", (long *)0) == 0
&& t.st_mtime - s.st_mtime < 120));
}
EOF
-if { (eval echo configure:3330: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3277: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_utime_null=yes
else
@@ -3350,7 +3297,7 @@ EOF
fi
echo $ac_n "checking for long file names""... $ac_c" 1>&6
-echo "configure:3354: checking for long file names" >&5
+echo "configure:3301: checking for long file names" >&5
if eval "test \"`echo '$''{'ac_cv_sys_long_file_names'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3395,7 +3342,7 @@ fi
echo $ac_n "checking for working fnmatch""... $ac_c" 1>&6
-echo "configure:3399: checking for working fnmatch" >&5
+echo "configure:3346: checking for working fnmatch" >&5
if eval "test \"`echo '$''{'ac_cv_func_fnmatch_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3406,11 +3353,11 @@ if test "$cross_compiling" = yes; then
ac_cv_func_fnmatch_works=no
else
cat > conftest.$ac_ext <<EOF
-#line 3410 "configure"
+#line 3357 "configure"
#include "confdefs.h"
main() { exit (fnmatch ("a*", "abc", 0) != 0); }
EOF
-if { (eval echo configure:3414: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_fnmatch_works=yes
else
@@ -3436,9 +3383,289 @@ if test "$ac_cv_func_fnmatch_works" = no; then
LIBOBJS="$LIBOBJS fnmatch.o"
fi
+for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:3391: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 3396 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3401: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_func in getpagesize
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:3430: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 3435 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+echo $ac_n "checking for working mmap""... $ac_c" 1>&6
+echo "configure:3483: checking for working mmap" >&5
+if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_mmap_fixed_mapped=no
+else
+ cat > conftest.$ac_ext <<EOF
+#line 3491 "configure"
+#include "confdefs.h"
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+ Here is a matrix of mmap possibilities:
+ mmap private not fixed
+ mmap private fixed at somewhere currently unmapped
+ mmap private fixed at somewhere already mapped
+ mmap shared not fixed
+ mmap shared fixed at somewhere currently unmapped
+ mmap shared fixed at somewhere already mapped
+ For private mappings, we should verify that changes cannot be read()
+ back from the file, nor mmap's back from the file at a different
+ address. (There have been systems where private was not correctly
+ implemented like the infamous i386 svr4.0, and systems where the
+ VM page cache was not coherent with the filesystem buffer cache
+ like early versions of FreeBSD and possibly contemporary NetBSD.)
+ For shared mappings, we should conversely verify that changes get
+ propogated back to all the places they're supposed to be.
+
+ Grep wants private fixed already mapped.
+ The main things grep needs to know about mmap are:
+ * does it exist and is it safe to write into the mmap'd area
+ * how to use it (BSD variants) */
+#include <sys/types.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+/* This mess was copied from the GNU getpagesize.h. */
+#ifndef HAVE_GETPAGESIZE
+
+/* Assume that all systems that can run configure have sys/param.h. */
+# ifndef HAVE_SYS_PARAM_H
+# define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+# define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+# ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# ifdef EXEC_PAGESIZE
+# define getpagesize() EXEC_PAGESIZE
+# else /* no EXEC_PAGESIZE */
+# ifdef NBPG
+# define getpagesize() NBPG * CLSIZE
+# ifndef CLSIZE
+# define CLSIZE 1
+# endif /* no CLSIZE */
+# else /* no NBPG */
+# ifdef NBPC
+# define getpagesize() NBPC
+# else /* no NBPC */
+# ifdef PAGESIZE
+# define getpagesize() PAGESIZE
+# endif /* PAGESIZE */
+# endif /* no NBPC */
+# endif /* no NBPG */
+# endif /* no EXEC_PAGESIZE */
+# else /* no HAVE_SYS_PARAM_H */
+# define getpagesize() 8192 /* punt totally */
+# endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+#ifdef __cplusplus
+extern "C" { void *malloc(unsigned); }
+#else
+char *malloc();
+#endif
+
+int
+main()
+{
+ char *data, *data2, *data3;
+ int i, pagesize;
+ int fd;
+
+ pagesize = getpagesize();
+
+ /*
+ * First, make a file with some known garbage in it.
+ */
+ data = malloc(pagesize);
+ if (!data)
+ exit(1);
+ for (i = 0; i < pagesize; ++i)
+ *(data + i) = rand();
+ umask(0);
+ fd = creat("conftestmmap", 0600);
+ if (fd < 0)
+ exit(1);
+ if (write(fd, data, pagesize) != pagesize)
+ exit(1);
+ close(fd);
+
+ /*
+ * Next, try to mmap the file at a fixed address which
+ * already has something else allocated at it. If we can,
+ * also make sure that we see the same garbage.
+ */
+ fd = open("conftestmmap", O_RDWR);
+ if (fd < 0)
+ exit(1);
+ data2 = malloc(2 * pagesize);
+ if (!data2)
+ exit(1);
+ data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1);
+ if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_FIXED, fd, 0L))
+ exit(1);
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data2 + i))
+ exit(1);
+
+ /*
+ * Finally, make sure that changes to the mapped area
+ * do not percolate back to the file as seen by read().
+ * (This is a bug on some variants of i386 svr4.0.)
+ */
+ for (i = 0; i < pagesize; ++i)
+ *(data2 + i) = *(data2 + i) + 1;
+ data3 = malloc(pagesize);
+ if (!data3)
+ exit(1);
+ if (read(fd, data3, pagesize) != pagesize)
+ exit(1);
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data3 + i))
+ exit(1);
+ close(fd);
+ unlink("conftestmmap");
+ exit(0);
+}
+
+EOF
+if { (eval echo configure:3644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ ac_cv_func_mmap_fixed_mapped=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_MMAP 1
+EOF
+
+fi
+
+
# Try to find connect and gethostbyname.
echo $ac_n "checking for main in -lnsl""... $ac_c" 1>&6
-echo "configure:3442: checking for main in -lnsl" >&5
+echo "configure:3669: checking for main in -lnsl" >&5
ac_lib_var=`echo nsl'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3446,14 +3673,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lnsl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3450 "configure"
+#line 3677 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:3457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3470,14 +3697,14 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for library containing connect""... $ac_c" 1>&6
-echo "configure:3474: checking for library containing connect" >&5
+echo "configure:3701: checking for library containing connect" >&5
if eval "test \"`echo '$''{'ac_cv_search_connect'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_connect="no"
cat > conftest.$ac_ext <<EOF
-#line 3481 "configure"
+#line 3708 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3488,7 +3715,7 @@ int main() {
connect()
; return 0; }
EOF
-if { (eval echo configure:3492: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3719: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_connect="none required"
else
@@ -3499,7 +3726,7 @@ rm -f conftest*
test "$ac_cv_search_connect" = "no" && for i in xnet socket inet; do
LIBS="-l$i -lnsl $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3503 "configure"
+#line 3730 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3510,7 +3737,7 @@ int main() {
connect()
; return 0; }
EOF
-if { (eval echo configure:3514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3741: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_connect="-l$i"
break
@@ -3537,14 +3764,14 @@ else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for library containing connect""... $ac_c" 1>&6
-echo "configure:3541: checking for library containing connect" >&5
+echo "configure:3768: checking for library containing connect" >&5
if eval "test \"`echo '$''{'ac_cv_search_connect'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_connect="no"
cat > conftest.$ac_ext <<EOF
-#line 3548 "configure"
+#line 3775 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3555,7 +3782,7 @@ int main() {
connect()
; return 0; }
EOF
-if { (eval echo configure:3559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_connect="none required"
else
@@ -3566,7 +3793,7 @@ rm -f conftest*
test "$ac_cv_search_connect" = "no" && for i in xnet socket inet; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3570 "configure"
+#line 3797 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3577,7 +3804,7 @@ int main() {
connect()
; return 0; }
EOF
-if { (eval echo configure:3581: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_connect="-l$i"
break
@@ -3604,14 +3831,14 @@ fi
echo $ac_n "checking for library containing gethostbyname""... $ac_c" 1>&6
-echo "configure:3608: checking for library containing gethostbyname" >&5
+echo "configure:3835: checking for library containing gethostbyname" >&5
if eval "test \"`echo '$''{'ac_cv_search_gethostbyname'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_gethostbyname="no"
cat > conftest.$ac_ext <<EOF
-#line 3615 "configure"
+#line 3842 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3622,7 +3849,7 @@ int main() {
gethostbyname()
; return 0; }
EOF
-if { (eval echo configure:3626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_gethostbyname="none required"
else
@@ -3633,7 +3860,7 @@ rm -f conftest*
test "$ac_cv_search_gethostbyname" = "no" && for i in netinet nsl; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3637 "configure"
+#line 3864 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3644,7 +3871,7 @@ int main() {
gethostbyname()
; return 0; }
EOF
-if { (eval echo configure:3648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_gethostbyname="-l$i"
break
@@ -3677,19 +3904,19 @@ echo "default place for krb4 is $KRB4"
krb_h=
echo $ac_n "checking for krb.h""... $ac_c" 1>&6
-echo "configure:3681: checking for krb.h" >&5
+echo "configure:3908: checking for krb.h" >&5
if test "$cross_compiling" != yes && test -r $KRB4/include/krb.h; then
hold_cflags=$CFLAGS
CFLAGS="$CFLAGS -I$KRB4/include"
cat > conftest.$ac_ext <<EOF
-#line 3686 "configure"
+#line 3913 "configure"
#include "confdefs.h"
#include <krb.h>
int main() {
int i;
; return 0; }
EOF
-if { (eval echo configure:3693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
krb_h=yes krb_incdir=$KRB4/include
else
@@ -3698,14 +3925,14 @@ else
rm -rf conftest*
CFLAGS=$hold_cflags
cat > conftest.$ac_ext <<EOF
-#line 3702 "configure"
+#line 3929 "configure"
#include "confdefs.h"
#include <krb.h>
int main() {
int i;
; return 0; }
EOF
-if { (eval echo configure:3709: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
krb_h=yes krb_incdir=
else
@@ -3718,14 +3945,14 @@ rm -f conftest*
CFLAGS=$hold_cflags
else
cat > conftest.$ac_ext <<EOF
-#line 3722 "configure"
+#line 3949 "configure"
#include "confdefs.h"
#include <krb.h>
int main() {
int i;
; return 0; }
EOF
-if { (eval echo configure:3729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3956: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
krb_h=yes krb_incdir=
else
@@ -3736,14 +3963,14 @@ rm -f conftest*
fi
if test -z "$krb_h"; then
cat > conftest.$ac_ext <<EOF
-#line 3740 "configure"
+#line 3967 "configure"
#include "confdefs.h"
#include <krb.h>
int main() {
int i;
; return 0; }
EOF
-if { (eval echo configure:3747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
krb_h=yes krb_incdir=
else
@@ -3754,14 +3981,14 @@ else
hold_cflags=$CFLAGS
CFLAGS="$CFLAGS -I$KRB4/include/kerberosIV"
cat > conftest.$ac_ext <<EOF
-#line 3758 "configure"
+#line 3985 "configure"
#include "confdefs.h"
#include <krb.h>
int main() {
int i;
; return 0; }
EOF
-if { (eval echo configure:3765: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
krb_h=yes krb_incdir=$KRB4/include/kerberosIV
else
@@ -3784,7 +4011,7 @@ if test -n "$krb_h"; then
hold_ldflags=$LDFLAGS
LDFLAGS="-L${KRB4}/lib $LDFLAGS"
echo $ac_n "checking for printf in -lkrb""... $ac_c" 1>&6
-echo "configure:3788: checking for printf in -lkrb" >&5
+echo "configure:4015: checking for printf in -lkrb" >&5
ac_lib_var=`echo krb'_'printf | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3792,7 +4019,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lkrb $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3796 "configure"
+#line 4023 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3803,7 +4030,7 @@ int main() {
printf()
; return 0; }
EOF
-if { (eval echo configure:3807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3825,7 +4052,7 @@ LDFLAGS=$hold_ldflags
# Using open here instead of printf so we don't
# get confused by the cached value for printf from above.
echo $ac_n "checking for open in -lkrb""... $ac_c" 1>&6
-echo "configure:3829: checking for open in -lkrb" >&5
+echo "configure:4056: checking for open in -lkrb" >&5
ac_lib_var=`echo krb'_'open | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3833,7 +4060,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lkrb $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3837 "configure"
+#line 4064 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3844,7 +4071,7 @@ int main() {
open()
; return 0; }
EOF
-if { (eval echo configure:3848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3869,7 +4096,7 @@ fi
LDFLAGS=$hold_ldflags
else
echo $ac_n "checking for printf in -lkrb""... $ac_c" 1>&6
-echo "configure:3873: checking for printf in -lkrb" >&5
+echo "configure:4100: checking for printf in -lkrb" >&5
ac_lib_var=`echo krb'_'printf | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3877,7 +4104,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lkrb $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3881 "configure"
+#line 4108 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3888,7 +4115,7 @@ int main() {
printf()
; return 0; }
EOF
-if { (eval echo configure:3892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3922,7 +4149,7 @@ EOF
hold_ldflags=$LDFLAGS
test -n "${krb_libdir}" && LDFLAGS="$LDFLAGS -L${krb_libdir}"
echo $ac_n "checking for printf in -ldes""... $ac_c" 1>&6
-echo "configure:3926: checking for printf in -ldes" >&5
+echo "configure:4153: checking for printf in -ldes" >&5
ac_lib_var=`echo des'_'printf | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3930,7 +4157,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldes $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3934 "configure"
+#line 4161 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3941,7 +4168,7 @@ int main() {
printf()
; return 0; }
EOF
-if { (eval echo configure:3945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3970,12 +4197,12 @@ fi
for ac_func in krb_get_err_text
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3974: checking for $ac_func" >&5
+echo "configure:4201: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3979 "configure"
+#line 4206 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -3998,7 +4225,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4048,7 +4275,7 @@ if test -n "$acx_gssapi_cv_gssapi"; then
# AC_CHECK_HEADER used in the search for a GSSAPI installation makes using
# AC_CACHE_CHECK worse
echo $ac_n "checking for GSSAPI""... $ac_c" 1>&6
-echo "configure:4052: checking for GSSAPI" >&5
+echo "configure:4279: checking for GSSAPI" >&5
else :; fi
if eval "test \"`echo '$''{'acx_gssapi_cv_gssapi'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4074,29 +4301,30 @@ if test x$acx_gssapi_withgssapi = xyes; then
fi
if test x$acx_gssapi_cv_gssapi = xyes; then
echo "checking for GSSAPI" 1>&6
-echo "configure:4078: checking for GSSAPI" >&5
+echo "configure:4305: checking for GSSAPI" >&5
else
CPPFLAGS="$acx_gssapi_save_CPPFLAGS -I$acx_gssapi_cv_gssapi/include"
echo "checking for GSSAPI in $acx_gssapi_cv_gssapi" 1>&6
-echo "configure:4082: checking for GSSAPI in $acx_gssapi_cv_gssapi" >&5
+echo "configure:4309: checking for GSSAPI in $acx_gssapi_cv_gssapi" >&5
fi
unset ac_cv_header_gssapi_h
unset ac_cv_header_gssapi_gssapi_h
- for ac_hdr in gssapi.h gssapi/gssapi.h
+ unset ac_cv_header_krb5_h
+ for ac_hdr in gssapi.h gssapi/gssapi.h krb5.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4090: checking for $ac_hdr" >&5
+echo "configure:4318: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4095 "configure"
+#line 4323 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4100: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4328: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4122,8 +4350,9 @@ else
fi
done
- if test "$ac_cv_header_gssapi_h" = "yes" ||
- test "$ac_cv_header_gssapi_gssapi_h" = "yes"; then
+ if (test "$ac_cv_header_gssapi_h" = yes ||
+ test "$ac_cv_header_gssapi_gssapi_h" = yes) &&
+ test "$ac_cv_header_krb5_h" = yes; then
break
fi
done
@@ -4132,7 +4361,7 @@ else
acx_gssapi_cv_gssapi=$acx_gssapi_withgssapi
fi
echo $ac_n "checking for GSSAPI""... $ac_c" 1>&6
-echo "configure:4136: checking for GSSAPI" >&5
+echo "configure:4365: checking for GSSAPI" >&5
fi
echo "$ac_t""$acx_gssapi_cv_gssapi" 1>&6
@@ -4167,17 +4396,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4171: checking for $ac_hdr" >&5
+echo "configure:4400: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4176 "configure"
+#line 4405 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4181: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4410: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4205,14 +4434,14 @@ done
# And look through them for GSS_C_NT_HOSTBASED_SERVICE or its alternatives
echo $ac_n "checking for GSS_C_NT_HOSTBASED_SERVICE""... $ac_c" 1>&6
-echo "configure:4209: checking for GSS_C_NT_HOSTBASED_SERVICE" >&5
+echo "configure:4438: checking for GSS_C_NT_HOSTBASED_SERVICE" >&5
if eval "test \"`echo '$''{'acx_gssapi_cv_gss_c_nt_hostbased_service'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
acx_gssapi_cv_gss_c_nt_hostbased_service=no
if test "$ac_cv_header_gssapi_h" = "yes"; then
cat > conftest.$ac_ext <<EOF
-#line 4216 "configure"
+#line 4445 "configure"
#include "confdefs.h"
#include <gssapi.h>
EOF
@@ -4223,7 +4452,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 4227 "configure"
+#line 4456 "configure"
#include "confdefs.h"
#include <gssapi.h>
EOF
@@ -4241,7 +4470,7 @@ rm -f conftest*
if test $acx_gssapi_cv_gss_c_nt_hostbased_service = no &&
test "$ac_cv_header_gssapi_gssapi_h" = "yes"; then
cat > conftest.$ac_ext <<EOF
-#line 4245 "configure"
+#line 4474 "configure"
#include "confdefs.h"
#include <gssapi/gssapi.h>
EOF
@@ -4252,7 +4481,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 4256 "configure"
+#line 4485 "configure"
#include "confdefs.h"
#include <gssapi/gssapi.h>
EOF
@@ -4270,7 +4499,7 @@ rm -f conftest*
if test $acx_gssapi_cv_gss_c_nt_hostbased_service = no &&
test "$ac_cv_header_gssapi_gssapi_generic_h" = "yes"; then
cat > conftest.$ac_ext <<EOF
-#line 4274 "configure"
+#line 4503 "configure"
#include "confdefs.h"
#include <gssapi/gssapi_generic.h>
EOF
@@ -4281,7 +4510,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 4285 "configure"
+#line 4514 "configure"
#include "confdefs.h"
#include <gssapi/gssapi_generic.h>
EOF
@@ -4332,14 +4561,14 @@ EOF
#
echo $ac_n "checking for library containing des_set_odd_parity""... $ac_c" 1>&6
-echo "configure:4336: checking for library containing des_set_odd_parity" >&5
+echo "configure:4565: checking for library containing des_set_odd_parity" >&5
if eval "test \"`echo '$''{'ac_cv_search_des_set_odd_parity'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_des_set_odd_parity="no"
cat > conftest.$ac_ext <<EOF
-#line 4343 "configure"
+#line 4572 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4350,7 +4579,7 @@ int main() {
des_set_odd_parity()
; return 0; }
EOF
-if { (eval echo configure:4354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4583: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_des_set_odd_parity="none required"
else
@@ -4361,7 +4590,7 @@ rm -f conftest*
test "$ac_cv_search_des_set_odd_parity" = "no" && for i in des; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4365 "configure"
+#line 4594 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4372,7 +4601,7 @@ int main() {
des_set_odd_parity()
; return 0; }
EOF
-if { (eval echo configure:4376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_des_set_odd_parity="-l$i"
break
@@ -4400,14 +4629,14 @@ fi
#
echo $ac_n "checking for library containing com_err""... $ac_c" 1>&6
-echo "configure:4404: checking for library containing com_err" >&5
+echo "configure:4633: checking for library containing com_err" >&5
if eval "test \"`echo '$''{'ac_cv_search_com_err'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_com_err="no"
cat > conftest.$ac_ext <<EOF
-#line 4411 "configure"
+#line 4640 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4418,7 +4647,7 @@ int main() {
com_err()
; return 0; }
EOF
-if { (eval echo configure:4422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_com_err="none required"
else
@@ -4429,7 +4658,7 @@ rm -f conftest*
test "$ac_cv_search_com_err" = "no" && for i in com_err; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4433 "configure"
+#line 4662 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4440,7 +4669,7 @@ int main() {
com_err()
; return 0; }
EOF
-if { (eval echo configure:4444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_com_err="-l$i"
break
@@ -4466,14 +4695,14 @@ fi
#
echo $ac_n "checking for library containing initialize_asn1_error_table_r""... $ac_c" 1>&6
-echo "configure:4470: checking for library containing initialize_asn1_error_table_r" >&5
+echo "configure:4699: checking for library containing initialize_asn1_error_table_r" >&5
if eval "test \"`echo '$''{'ac_cv_search_initialize_asn1_error_table_r'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_initialize_asn1_error_table_r="no"
cat > conftest.$ac_ext <<EOF
-#line 4477 "configure"
+#line 4706 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4484,7 +4713,7 @@ int main() {
initialize_asn1_error_table_r()
; return 0; }
EOF
-if { (eval echo configure:4488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_initialize_asn1_error_table_r="none required"
else
@@ -4495,7 +4724,7 @@ rm -f conftest*
test "$ac_cv_search_initialize_asn1_error_table_r" = "no" && for i in asn1; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4499 "configure"
+#line 4728 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4506,7 +4735,7 @@ int main() {
initialize_asn1_error_table_r()
; return 0; }
EOF
-if { (eval echo configure:4510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_initialize_asn1_error_table_r="-l$i"
break
@@ -4535,14 +4764,14 @@ fi
#
echo $ac_n "checking for library containing __dn_expand""... $ac_c" 1>&6
-echo "configure:4539: checking for library containing __dn_expand" >&5
+echo "configure:4768: checking for library containing __dn_expand" >&5
if eval "test \"`echo '$''{'ac_cv_search___dn_expand'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search___dn_expand="no"
cat > conftest.$ac_ext <<EOF
-#line 4546 "configure"
+#line 4775 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4553,7 +4782,7 @@ int main() {
__dn_expand()
; return 0; }
EOF
-if { (eval echo configure:4557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search___dn_expand="none required"
else
@@ -4564,7 +4793,7 @@ rm -f conftest*
test "$ac_cv_search___dn_expand" = "no" && for i in resolv; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4568 "configure"
+#line 4797 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4575,7 +4804,7 @@ int main() {
__dn_expand()
; return 0; }
EOF
-if { (eval echo configure:4579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search___dn_expand="-l$i"
break
@@ -4601,14 +4830,14 @@ fi
#
echo $ac_n "checking for library containing roken_gethostbyaddr""... $ac_c" 1>&6
-echo "configure:4605: checking for library containing roken_gethostbyaddr" >&5
+echo "configure:4834: checking for library containing roken_gethostbyaddr" >&5
if eval "test \"`echo '$''{'ac_cv_search_roken_gethostbyaddr'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_roken_gethostbyaddr="no"
cat > conftest.$ac_ext <<EOF
-#line 4612 "configure"
+#line 4841 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4619,7 +4848,7 @@ int main() {
roken_gethostbyaddr()
; return 0; }
EOF
-if { (eval echo configure:4623: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_roken_gethostbyaddr="none required"
else
@@ -4630,7 +4859,7 @@ rm -f conftest*
test "$ac_cv_search_roken_gethostbyaddr" = "no" && for i in roken; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4634 "configure"
+#line 4863 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4641,7 +4870,7 @@ int main() {
roken_gethostbyaddr()
; return 0; }
EOF
-if { (eval echo configure:4645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_roken_gethostbyaddr="-l$i"
break
@@ -4667,14 +4896,14 @@ fi
#
echo $ac_n "checking for library containing valid_enctype""... $ac_c" 1>&6
-echo "configure:4671: checking for library containing valid_enctype" >&5
+echo "configure:4900: checking for library containing valid_enctype" >&5
if eval "test \"`echo '$''{'ac_cv_search_valid_enctype'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_valid_enctype="no"
cat > conftest.$ac_ext <<EOF
-#line 4678 "configure"
+#line 4907 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4685,7 +4914,7 @@ int main() {
valid_enctype()
; return 0; }
EOF
-if { (eval echo configure:4689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_valid_enctype="none required"
else
@@ -4696,7 +4925,7 @@ rm -f conftest*
test "$ac_cv_search_valid_enctype" = "no" && for i in k5crypto; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4700 "configure"
+#line 4929 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4707,7 +4936,7 @@ int main() {
valid_enctype()
; return 0; }
EOF
-if { (eval echo configure:4711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_valid_enctype="-l$i"
break
@@ -4740,14 +4969,14 @@ fi
#
echo $ac_n "checking for library containing compile""... $ac_c" 1>&6
-echo "configure:4744: checking for library containing compile" >&5
+echo "configure:4973: checking for library containing compile" >&5
if eval "test \"`echo '$''{'ac_cv_search_compile'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_compile="no"
cat > conftest.$ac_ext <<EOF
-#line 4751 "configure"
+#line 4980 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4758,7 +4987,7 @@ int main() {
compile()
; return 0; }
EOF
-if { (eval echo configure:4762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4991: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_compile="none required"
else
@@ -4769,7 +4998,7 @@ rm -f conftest*
test "$ac_cv_search_compile" = "no" && for i in gen; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4773 "configure"
+#line 5002 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4780,7 +5009,7 @@ int main() {
compile()
; return 0; }
EOF
-if { (eval echo configure:4784: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_compile="-l$i"
break
@@ -4816,14 +5045,14 @@ fi
#
echo $ac_n "checking for library containing krb5_free_context""... $ac_c" 1>&6
-echo "configure:4820: checking for library containing krb5_free_context" >&5
+echo "configure:5049: checking for library containing krb5_free_context" >&5
if eval "test \"`echo '$''{'ac_cv_search_krb5_free_context'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_krb5_free_context="no"
cat > conftest.$ac_ext <<EOF
-#line 4827 "configure"
+#line 5056 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4834,7 +5063,7 @@ int main() {
krb5_free_context()
; return 0; }
EOF
-if { (eval echo configure:4838: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5067: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_krb5_free_context="none required"
else
@@ -4845,7 +5074,7 @@ rm -f conftest*
test "$ac_cv_search_krb5_free_context" = "no" && for i in krb5; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4849 "configure"
+#line 5078 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4856,7 +5085,7 @@ int main() {
krb5_free_context()
; return 0; }
EOF
-if { (eval echo configure:4860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_krb5_free_context="-l$i"
break
@@ -4890,14 +5119,14 @@ fi
#
echo $ac_n "checking for library containing gss_import_name""... $ac_c" 1>&6
-echo "configure:4894: checking for library containing gss_import_name" >&5
+echo "configure:5123: checking for library containing gss_import_name" >&5
if eval "test \"`echo '$''{'ac_cv_search_gss_import_name'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_gss_import_name="no"
cat > conftest.$ac_ext <<EOF
-#line 4901 "configure"
+#line 5130 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4908,7 +5137,7 @@ int main() {
gss_import_name()
; return 0; }
EOF
-if { (eval echo configure:4912: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_gss_import_name="none required"
else
@@ -4919,7 +5148,7 @@ rm -f conftest*
test "$ac_cv_search_gss_import_name" = "no" && for i in gssapi_krb5 gssapi; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4923 "configure"
+#line 5152 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4930,7 +5159,7 @@ int main() {
gss_import_name()
; return 0; }
EOF
-if { (eval echo configure:4934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_gss_import_name="-l$i"
break
@@ -4973,12 +5202,12 @@ EOF
fi
echo $ac_n "checking for gethostname""... $ac_c" 1>&6
-echo "configure:4977: checking for gethostname" >&5
+echo "configure:5206: checking for gethostname" >&5
if eval "test \"`echo '$''{'ac_cv_func_gethostname'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4982 "configure"
+#line 5211 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char gethostname(); below. */
@@ -5001,7 +5230,7 @@ gethostname();
; return 0; }
EOF
-if { (eval echo configure:5005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_gethostname=yes"
else
@@ -5066,14 +5295,14 @@ fi
if test "$enable_server" = yes; then
echo $ac_n "checking for library containing crypt""... $ac_c" 1>&6
-echo "configure:5070: checking for library containing crypt" >&5
+echo "configure:5299: checking for library containing crypt" >&5
if eval "test \"`echo '$''{'ac_cv_search_crypt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_crypt="no"
cat > conftest.$ac_ext <<EOF
-#line 5077 "configure"
+#line 5306 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5084,7 +5313,7 @@ int main() {
crypt()
; return 0; }
EOF
-if { (eval echo configure:5088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_crypt="none required"
else
@@ -5095,7 +5324,7 @@ rm -f conftest*
test "$ac_cv_search_crypt" = "no" && for i in crypt; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5099 "configure"
+#line 5328 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5106,7 +5335,7 @@ int main() {
crypt()
; return 0; }
EOF
-if { (eval echo configure:5110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_crypt="-l$i"
break
@@ -5136,19 +5365,19 @@ fi # enable_server
echo $ac_n "checking for cygwin32""... $ac_c" 1>&6
-echo "configure:5140: checking for cygwin32" >&5
+echo "configure:5369: checking for cygwin32" >&5
if eval "test \"`echo '$''{'ccvs_cv_sys_cygwin32'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5145 "configure"
+#line 5374 "configure"
#include "confdefs.h"
int main() {
return __CYGWIN32__;
; return 0; }
EOF
-if { (eval echo configure:5152: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ccvs_cv_sys_cygwin32=yes
else
@@ -5289,6 +5518,7 @@ ac_given_srcdir=$srcdir
ac_given_INSTALL="$INSTALL"
trap 'rm -fr `echo "Makefile \
+ cvs.spec \
contrib/Makefile \
contrib/clmerge \
contrib/cln_hist \
@@ -5297,6 +5527,7 @@ trap 'rm -fr `echo "Makefile \
contrib/log \
contrib/log_accum \
contrib/mfpipe \
+ contrib/pvcs2rcs \
contrib/rcslock \
contrib/sccs2rcs \
diff/Makefile \
@@ -5307,6 +5538,7 @@ trap 'rm -fr `echo "Makefile \
os2/Makefile \
src/Makefile \
src/cvsbug \
+ src/version.h \
tools/Makefile \
vms/Makefile \
windows-NT/Makefile \
@@ -5348,6 +5580,8 @@ s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
s%@INSTALL_DATA@%$INSTALL_DATA%g
s%@PACKAGE@%$PACKAGE%g
s%@VERSION@%$VERSION%g
+s%@EXEEXT@%$EXEEXT%g
+s%@OBJEXT@%$OBJEXT%g
s%@ACLOCAL@%$ACLOCAL%g
s%@AUTOCONF@%$AUTOCONF%g
s%@AUTOMAKE@%$AUTOMAKE%g
@@ -5355,23 +5589,19 @@ s%@AUTOHEADER@%$AUTOHEADER%g
s%@MAKEINFO@%$MAKEINFO%g
s%@AMTAR@%$AMTAR%g
s%@install_sh@%$install_sh%g
-s%@STRIP@%$STRIP%g
s%@INSTALL_STRIP_PROGRAM@%$INSTALL_STRIP_PROGRAM%g
-s%@INSTALL_STRIP_PROGRAM_ENV@%$INSTALL_STRIP_PROGRAM_ENV%g
s%@AWK@%$AWK%g
s%@SET_MAKE@%$SET_MAKE%g
-s%@ETAGS@%$ETAGS%g
-s%@ETAGS_INCLUDE_OPTION@%$ETAGS_INCLUDE_OPTION%g
s%@AMDEP_TRUE@%$AMDEP_TRUE%g
s%@AMDEP_FALSE@%$AMDEP_FALSE%g
s%@AMDEPBACKSLASH@%$AMDEPBACKSLASH%g
s%@DEPDIR@%$DEPDIR%g
s%@CVS@%$CVS%g
s%@CC@%$CC%g
-s%@CPP@%$CPP%g
-s%@_am_include@%$_am_include%g
-s%@_am_quote@%$_am_quote%g
+s%@am__include@%$am__include%g
+s%@am__quote@%$am__quote%g
s%@CCDEPMODE@%$CCDEPMODE%g
+s%@CPP@%$CPP%g
s%@RANLIB@%$RANLIB%g
s%@YACC@%$YACC%g
s%@LN_S@%$LN_S%g
@@ -5428,6 +5658,7 @@ EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"Makefile \
+ cvs.spec \
contrib/Makefile \
contrib/clmerge \
contrib/cln_hist \
@@ -5436,6 +5667,7 @@ CONFIG_FILES=\${CONFIG_FILES-"Makefile \
contrib/log \
contrib/log_accum \
contrib/mfpipe \
+ contrib/pvcs2rcs \
contrib/rcslock \
contrib/sccs2rcs \
diff/Makefile \
@@ -5446,6 +5678,7 @@ CONFIG_FILES=\${CONFIG_FILES-"Makefile \
os2/Makefile \
src/Makefile \
src/cvsbug \
+ src/version.h \
tools/Makefile \
vms/Makefile \
windows-NT/Makefile \
@@ -5637,14 +5870,14 @@ for am_file in config.h src/options.h; do
esac
am_indx=\`expr \$am_indx + 1\`
done
-AMDEP="$AMDEP"
+AMDEP_TRUE="$AMDEP_TRUE"
ac_aux_dir="$ac_aux_dir"
EOF
cat >> $CONFIG_STATUS <<\EOF
-test x"$AMDEP" != x"" ||
+test x"$AMDEP_TRUE" != x"" ||
for mf in $CONFIG_FILES; do
case "$mf" in
Makefile) dirpart=.;;
@@ -5682,7 +5915,7 @@ for mf in $CONFIG_FILES; do
done
done
-chmod -f +x \
+chmod +x \
contrib/clmerge \
contrib/cln_hist \
contrib/commit_prep \
@@ -5690,6 +5923,7 @@ chmod -f +x \
contrib/log \
contrib/log_accum \
contrib/mfpipe \
+ contrib/pvcs2rcs \
contrib/rcslock \
contrib/sccs2rcs \
src/cvsbug
diff --git a/contrib/cvs/configure.in b/contrib/cvs/configure.in
index 2a6a39088a48..fe78c7a559b1 100644
--- a/contrib/cvs/configure.in
+++ b/contrib/cvs/configure.in
@@ -1,18 +1,30 @@
dnl configure.in for cvs
AC_INIT(src/cvs.h)
-AM_INIT_AUTOMAKE(cvs, 1.11.1p1)
+AM_INIT_AUTOMAKE(cvs, 1.11.2)
AC_PREREQ(2.13)
AC_PREFIX_PROGRAM(cvs)
AM_CONFIG_HEADER(config.h src/options.h)
-AC_PROG_AWK
AC_PROG_CC
-AC_PROG_INSTALL
-AC_PROG_MAKE_SET
-# Automake's more advanced version of AC_PROG_RANLIB
+AM_PROG_CC_C_O
+
+dnl FIXME the next three calls should be avoided according to autoconf
+dnl philosophy. for example, AC_CHECK_LIB should be used to look for crypt.
+dnl
+dnl These are here instead of later because they want to be called before
+dnl anything that calls a C compiler.
+AC_AIX
+AC_MINIX
+AC_ISC_POSIX
+if test "$ISC" = yes; then
+CFLAGS="$CFLAGS -D_SYSV3"
+LIBS="-lcrypt $LIBS"
+fi
+
AC_PROG_RANLIB
AC_PROG_YACC
AC_PROG_LN_S
+AC_EXEEXT
AC_PATH_PROG(PERL, perl, no)
AC_PATH_PROG(CSH, csh, no)
@@ -26,6 +38,9 @@ dnl FIXME This is truly gross.
missing_dir=`cd $ac_aux_dir && pwd`
dnl FIXME I pulled this default list from sanity.sh. Perhaps these lists
dnl can be stored in one location?
+dnl
+dnl Yeah, put the value in a variable add it to the substitution list
+dnl then have configure create sanity.sh from sanity.sh.in...
glocs="$PATH:/usr/local/bin:/usr/contrib/bin:/usr/gnu/bin:/local/bin:/local/gnu/bin:/gnu/bin"
AC_PATH_PROGS(ROFF, groff roff, $missing_dir/missing roff, $glocs)
AC_PATH_PROG(PS2PDF, ps2pdf, $missing_dir/missing ps2pdf)
@@ -66,21 +81,29 @@ AM_CONDITIONAL(MAKE_TARGETS_IN_VPATH, \
test $ccvs_cv_bsd_make_vpath_bug = no \
|| test $srcdir = .)
-AC_AIX
-AC_MINIX
-AC_ISC_POSIX
-if test "$ISC" = yes; then
-CFLAGS="$CFLAGS -D_SYSV3"
-LIBS="-lcrypt $LIBS"
-fi
-
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
-AC_CHECK_HEADERS(errno.h unistd.h string.h memory.h utime.h fcntl.h ndbm.h \
- limits.h sys/file.h \
- sys/param.h sys/select.h sys/time.h sys/timeb.h \
- io.h direct.h sys/bsdtypes.h sys/resource.h syslog.h)
+AC_CHECK_HEADERS(\
+ errno.h \
+ direct.h \
+ fcntl.h \
+ io.h \
+ limits.h \
+ memory.h \
+ ndbm.h \
+ string.h \
+ syslog.h \
+ sys/bsdtypes.h \
+ sys/file.h \
+ sys/param.h \
+ sys/resource.h \
+ sys/select.h \
+ sys/time.h \
+ sys/timeb.h \
+ unistd.h \
+ utime.h\
+)
AC_HEADER_STAT
AC_HEADER_TIME
@@ -93,7 +116,17 @@ AC_TYPE_SIGNAL
AC_STRUCT_ST_BLKSIZE
AC_STRUCT_ST_RDEV
-AC_REPLACE_FUNCS(mkdir rename strstr dup2 strerror valloc waitpid memmove strtoul)
+AC_REPLACE_FUNCS(\
+ dup2 \
+ memmove \
+ mkdir \
+ rename \
+ strerror \
+ strstr \
+ strtoul\
+ valloc \
+ waitpid \
+)
AC_CHECK_FUNCS(\
fchdir \
fchmod \
@@ -174,6 +207,9 @@ if test "$ac_cv_func_fnmatch_works" = no; then
LIBOBJS="$LIBOBJS fnmatch.o"
fi
+dnl for the buffer routine replacements
+AC_FUNC_MMAP
+
# Try to find connect and gethostbyname.
AC_CHECK_LIB(nsl, main,
AC_SEARCH_LIBS(connect, xnet socket inet, AC_DEFINE(HAVE_CONNECT),, -lnsl),
@@ -319,6 +355,11 @@ dnl Windows support code in lib/fncase.c to handle the case
dnl insensitive file system. We also need some support libraries. We
dnl do this at the end so that the new libraries are added at the end
dnl of LIBS.
+dnl
+dnl FIXME: We should be trying to meet the autoconf ideal of checking for
+dnl the properties of the system rather than the name of the os here. In other
+dnl words, we should check the case sensitivty of the system and then for
+dnl the support functions we are using and which library we find them in.
AC_CACHE_CHECK(for cygwin32, ccvs_cv_sys_cygwin32,
[AC_TRY_COMPILE([], [return __CYGWIN32__;],
ccvs_cv_sys_cygwin32=yes, ccvs_cv_sys_cygwin32=no)])
@@ -345,6 +386,7 @@ test -f src/options.h && (
)
AC_OUTPUT([Makefile \
+ cvs.spec \
contrib/Makefile \
contrib/clmerge \
contrib/cln_hist \
@@ -353,6 +395,7 @@ AC_OUTPUT([Makefile \
contrib/log \
contrib/log_accum \
contrib/mfpipe \
+ contrib/pvcs2rcs \
contrib/rcslock \
contrib/sccs2rcs \
diff/Makefile \
@@ -363,12 +406,13 @@ AC_OUTPUT([Makefile \
os2/Makefile \
src/Makefile \
src/cvsbug \
+ src/version.h \
tools/Makefile \
vms/Makefile \
windows-NT/Makefile \
windows-NT/SCC/Makefile \
zlib/Makefile],
- [chmod -f +x \
+ [chmod +x \
contrib/clmerge \
contrib/cln_hist \
contrib/commit_prep \
@@ -376,6 +420,7 @@ AC_OUTPUT([Makefile \
contrib/log \
contrib/log_accum \
contrib/mfpipe \
+ contrib/pvcs2rcs \
contrib/rcslock \
contrib/sccs2rcs \
src/cvsbug])
diff --git a/contrib/cvs/contrib/ChangeLog b/contrib/cvs/contrib/ChangeLog
index d1ae3319f631..f97ab64676c6 100644
--- a/contrib/cvs/contrib/ChangeLog
+++ b/contrib/cvs/contrib/ChangeLog
@@ -1,3 +1,124 @@
+2002-03-21 Derek Price <oberon@umich.edu>
+
+ * Makefile.am (install-data-local): Import a patch from RedHat which
+ was no longer necessary but causes a FIXME to print - maybe someone
+ will see it and fix it.
+ * Makefile.in: Regenerated.
+
+2001-12-06 Derek Price <oberon@umich.edu>
+
+ * cvs_acls.in: Allow ACL specification based on branch matching.
+ (Patch from Aaron Voisine <voisine@bytemobile.com>.)
+
+2001-10-16 Derek Price <dprice@collab.net>
+
+ * sccs2rcs.in: Replace Y2K bug fix with something more succint.
+ (Suggested by SAKAI Hiroaki <sakai.hiroaki@pfu.fujitsu.com>.)
+
+2001-10-16 Derek Price <dprice@collab.net>
+
+ * rcs2sccs.in: Fix Y2K bug.
+ (Patch from SAKAI Hiroaki <sakai.hiroaki@pfu.fujitsu.com>.)
+
+2001-09-06 Larry Jones <larry.jones@sdrc.com>
+ for Paul Eggert <eggert@twinsun.com>
+
+ Sync with revision 1.48 of the GNU Emacs sources. This
+ incorporates the following changes:
+
+ * rcs2log (Help, mainline code): Add new option -L FILE.
+ (Copyright): Update year.
+
+ (LANG, LANGUAGE, LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES,
+ LC_NUMERIC, LC_TIME): New shell vars, to make sure we live in the C locale.
+
+ (mainline code): Handle nonstandard -u option differently, by
+ transforming it to standard form. Check for "Working file: ", not
+ "Working file:". Allow file names with spaces.
+
+ (SOH, rlogfile): New shell vars.
+ (rlogout): Remove. Its old functionality is mostly migrated to rlogfile.
+
+ Append ';;' to the last arm of every case statement, for portability to
+ ancient broken BSD shells.
+
+ (logins): Fix bug; was not being computed at all, lowering performance.
+
+ (pository): New var. This fixes some bugs where repositories are
+ remote, or have trailing slashes.
+
+ (authors): $llogout is never an empty shell var, so don't worry about that
+ possibility.
+
+ (printlogline, mainline code): Fix bug with SOH's being put into the output.
+
+
+ 2001-07-20 Gerd Moellmann <gerd@gnu.org>
+
+ * rcs2log: Update copyright notice.
+
+
+ 2001-01-03 Paul Eggert <eggert@twinsun.com>
+
+ * rcs2log: Avoid security hole allowing attacker to
+ cause user of rcs2log to overwrite arbitrary files, fixing
+ a bug reported by Morten Welinder.
+
+ Don't put "exit 1" at the end of the exit trap; it's
+ ineffective in POSIX shells.
+
+2001-09-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with automake 1.5.
+
+2001-08-21 Larry Jones <larry.jones@sdrc.com>
+
+ * sccs2rcs.in: Fix typo: missing quote.
+ (Patch submitted by "Mark D. Baushke" <mdb@cvshome.org>.)
+
+2001-08-06 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated.
+
+2001-07-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new Automake release candidate 1.4h.
+
+2001-06-28 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new version of Automake.
+
+2001-05-30 Derek Price <dprice@collab.net>
+
+ * pvcs2cvs.in: Rename to...
+ * pvcs2rcs.in: here.
+ * .cvsignore: Add pvcs2rcs.
+ * Makefile.am (contrib_SCRIPTS): Change pvcs2cvs to pvcs2rcs.
+
+ * Makefile.in: Regenerated.
+
+2001-05-29 Derek Price <dprice@collab.net>
+ patch from Pavel Roskin <proski@gnu.org>
+
+ * Makefile.am (install-data-local): Double hash comment in rule since
+ single hash comments are not portable.
+
+ * Makefile.in: Regenerated.
+
+2001-05-29 Derek Price <dprice@collab.net>
+
+ * pvcs2cvs.in: New file.
+ * Makefile.am (contrib_SCRIPTS): Add pcvs2cvs.
+
+ * Makefile.in: Regenerated.
+
+2001-05-23 Larry Jones <larry.jones@sdrc.com>
+
+ * sccs2rcs.in: No need for grep when you're already using awk.
+
+ * sccs2rcs.in: Fix y2k bug correctly.
+ (Reported by "Hayes, Ted (London)" <HayesRog@exchange.uk.ml.com>.)
+
2001-04-25 Derek Price <dprice@collab.net>
* Makefile.in: Regenerated using AM 1.4e as of today at 18:10 -0400.
diff --git a/contrib/cvs/contrib/Makefile.am b/contrib/cvs/contrib/Makefile.am
index 7bee1806b1ff..6972be879044 100644
--- a/contrib/cvs/contrib/Makefile.am
+++ b/contrib/cvs/contrib/Makefile.am
@@ -38,6 +38,7 @@ contrib_SCRIPTS = \
log \
log_accum \
mfpipe \
+ pvcs2rcs \
rcs-to-cvs \
rcs2log \
rcslock \
@@ -72,8 +73,8 @@ CLEANFILES = $(bin_SCRIPTS) $(contrib_SCRIPTS)
# we'd rather have a link here rather than two copies of a script
install-data-local:
- # FIXME - this path should be determined dynamically from bindir
- # & contribdir
+ : FIXME - this path should be determined dynamically from bindir
+ : and contribdir
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_LINKS)'; for p in $$list; do \
diff --git a/contrib/cvs/contrib/Makefile.in b/contrib/cvs/contrib/Makefile.in
index 910546e282ed..0a7bc142dc04 100644
--- a/contrib/cvs/contrib/Makefile.in
+++ b/contrib/cvs/contrib/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4e from Makefile.am.
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
@@ -39,7 +39,6 @@
#
# CONTRIB_FILES = README intro.doc cvscheck.man
-
SHELL = @SHELL@
srcdir = @srcdir@
@@ -60,11 +59,9 @@ infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
-
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-
top_builddir = ..
ACLOCAL = @ACLOCAL@
@@ -78,7 +75,6 @@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
-
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
@@ -90,25 +86,22 @@ AWK = @AWK@
CC = @CC@
CSH = @CSH@
DEPDIR = @DEPDIR@
-ETAGS = @ETAGS@
-ETAGS_INCLUDE_OPTION = @ETAGS_INCLUDE_OPTION@
+EXEEXT = @EXEEXT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTALL_STRIP_PROGRAM_ENV = @INSTALL_STRIP_PROGRAM_ENV@
KRB4 = @KRB4@
LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
-STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
-_am_include = @_am_include@
-_am_quote = @_am_quote@
+am__include = @am__include@
+am__quote = @am__quote@
includeopt = @includeopt@
install_sh = @install_sh@
@@ -125,6 +118,7 @@ contrib_SCRIPTS = \
log \
log_accum \
mfpipe \
+ pvcs2rcs \
rcs-to-cvs \
rcs2log \
rcslock \
@@ -163,13 +157,11 @@ EXTRA_DIST = \
CLEANFILES = $(bin_SCRIPTS) $(contrib_SCRIPTS)
SUFFIXES = .sh
-EXEEXT =
-OBJEXT = o
subdir = contrib
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/options.h
CONFIG_CLEAN_FILES = clmerge cln_hist commit_prep cvs_acls log log_accum \
- mfpipe rcslock sccs2rcs
+ mfpipe pvcs2rcs rcslock sccs2rcs
SCRIPTS = $(contrib_SCRIPTS)
DIST_SOURCES =
@@ -177,16 +169,14 @@ DATA = $(contrib_DATA)
DIST_COMMON = README ChangeLog Makefile.am Makefile.in clmerge.in \
cln_hist.in commit_prep.in cvs_acls.in log.in log_accum.in \
- mfpipe.in rcslock.in sccs2rcs.in
+ mfpipe.in pvcs2rcs.in rcslock.in sccs2rcs.in
all: all-am
.SUFFIXES:
.SUFFIXES: .sh
-
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu contrib/Makefile
-
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \
CONFIG_HEADERS= CONFIG_LINKS= \
@@ -205,6 +195,8 @@ log_accum: $(top_builddir)/config.status log_accum.in
cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
mfpipe: $(top_builddir)/config.status mfpipe.in
cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
+pvcs2rcs: $(top_builddir)/config.status pvcs2rcs.in
+ cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
rcslock: $(top_builddir)/config.status rcslock.in
cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
sccs2rcs: $(top_builddir)/config.status sccs2rcs.in
@@ -230,6 +222,7 @@ uninstall-contribSCRIPTS:
echo " rm -f $(DESTDIR)$(contribdir)/$$f"; \
rm -f $(DESTDIR)$(contribdir)/$$f; \
done
+uninstall-info-am:
install-contribDATA: $(contrib_DATA)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(contribdir)
@@ -258,7 +251,11 @@ distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
- d=$(srcdir); \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
if test -d $$d/$$file; then \
cp -pR $$d/$$file $(distdir) \
|| exit 1; \
@@ -284,24 +281,21 @@ install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
-
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- INSTALL_PROGRAM_ENV='$(INSTALL_STRIP_PROGRAM_ENV)' install
-
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- -rm -f Makefile.in
clean: clean-am
clean-am: clean-generic mostlyclean-am
@@ -310,11 +304,11 @@ distclean: distclean-am
distclean-am: clean-am distclean-generic
-dvi:
+dvi: dvi-am
dvi-am:
-info:
+info: info-am
info-am:
@@ -323,7 +317,7 @@ install-data-am: install-contribDATA install-contribSCRIPTS \
install-exec-am:
-install-info:
+install-info: install-info-am
install-man:
@@ -338,23 +332,24 @@ mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
uninstall-am: uninstall-contribDATA uninstall-contribSCRIPTS \
- uninstall-local
+ uninstall-info-am uninstall-local
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am info info-am install \
install-am install-contribDATA install-contribSCRIPTS \
install-data install-data-am install-data-local install-exec \
- install-exec-am install-info install-man install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-generic \
- uninstall uninstall-am uninstall-contribDATA \
- uninstall-contribSCRIPTS uninstall-local
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic uninstall uninstall-am \
+ uninstall-contribDATA uninstall-contribSCRIPTS \
+ uninstall-info-am uninstall-local
# we'd rather have a link here rather than two copies of a script
install-data-local:
- # FIXME - this path should be determined dynamically from bindir
- # & contribdir
+ : FIXME - this path should be determined dynamically from bindir
+ : and contribdir
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_LINKS)'; for p in $$list; do \
@@ -385,7 +380,6 @@ uninstall-local:
# for backwards compatibility with the old makefiles
realclean: maintainer-clean
.PHONY: realclean
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/contrib/cvs/contrib/cvs_acls.in b/contrib/cvs/contrib/cvs_acls.in
index 7bd991840e63..b33f6ffca156 100755
--- a/contrib/cvs/contrib/cvs_acls.in
+++ b/contrib/cvs/contrib/cvs_acls.in
@@ -2,6 +2,7 @@
# -*-Perl-*-
#
# Access control lists for CVS. dgg@ksr.com (David G. Grubbs)
+# Branch specific controls added by voisine@bytemobile.com (Aaron Voisine)
#
# CVS "commitinfo" for matching repository names, running the program it finds
# on the same line. More information is available in the CVS man pages.
@@ -32,7 +33,7 @@
# Lines beginning with "avail" or "unavail" are assumed to be '|'-separated
# triples: (All spaces and tabs are ignored in a line.)
#
-# {avail.*,unavail.*} [| user,user,... [| repos,repos,...]]
+# {avail.*,unavail.*} [|user,user,... [|repos,repos,... [|branch,branch,...]]]
#
# 1. String starting with "avail" or "unavail".
# 2. Optional, comma-separated list of usernames.
@@ -40,6 +41,9 @@
# These are pathnames relative to $CVSROOT. They can be directories or
# filenames. A directory name allows access to all files and
# directories below it.
+# 4. Optional, comma-separated list of branch tags.
+# If not specified, all branches are assumed. Use HEAD to reference the
+# main branch.
#
# Example: (Text from the ';;' rightward may not appear in the file.)
#
@@ -47,6 +51,8 @@
# avail|dgg ;; Except for user "dgg".
# avail|fred, john|bin/ls ;; Except when "fred" or "john" commit to
# ;; the module whose repository is "bin/ls"
+# avail|ed|/bin/ls|stable ;; Except when "ed" commits to the "stable"
+# ;; branch of the "bin/ls" repository
#
# PROGRAM LOGIC:
#
@@ -54,8 +60,8 @@
# appended to your $CVSROOT variable), followed by a list of filenames
# within that directory.
#
-# We walk through the avail file looking for a line that matches both
-# the username and repository.
+# We walk through the avail file looking for a line that matches the
+# username, repository and branch.
#
# A username match is simply the user's name appearing in the second
# column of the avail line in a space-or-comma separate list.
@@ -73,10 +79,18 @@
# all files specified in a single commit must all appear in
# third column of a single avail line.
#
+# A branch match is either:
+# - When no branches are listed in the fourth column.
+# - One element from the fourth column matches each of the tag
+# names for $ARGV[1..$#ARGV] found in the CVS/Entries file.
+# - HEAD specified in the fourth column will match if there
+# is no tag listed in the CVS/Entries file.
+#
$debug = 0;
$cvsroot = $ENV{'CVSROOT'};
$availfile = $cvsroot . "/CVSROOT/avail";
+$entries = "CVS/Entries";
$myname = $ENV{"USER"} if !($myname = $ENV{"LOGNAME"});
eval "print STDERR \$die='Unknown parameter $1\n' if !defined \$$1; \$$1=\$';"
@@ -92,12 +106,27 @@ print "$$ Repos: $repos\n","$$ ==== ",join("\n$$ ==== ",@ARGV),"\n" if $debug;
$exit_val = 0; # Good Exit value
$universal_off = 0;
+
+my %branch;
+my $f;
+
+open(ENTRIES, $entries) || die("Cannot open $entries.\n");
+while(<ENTRIES>) {
+ chop;
+ next if /^\s*$/;
+ if(m|^[^/]*/([^/]*)/(?:[^/]*/)*[^/]?([^/]*)$|) {
+ $branch{$repos . '/' . $1} = ($2) ? $2 : "HEAD";
+ print "$$ $1/$2\n" if $debug;
+ }
+}
+close(ENTRIES);
+
open (AVAIL, $availfile) || exit(0); # It is ok for avail file not to exist
while (<AVAIL>) {
chop;
next if /^\s*\#/;
next if /^\s*$/;
- ($flagstr, $u, $m) = split(/[\s,]*\|[\s,]*/, $_);
+ ($flagstr, $u, $m, $b) = split(/[\s,]*\|[\s,]*/, $_);
# Skip anything not starting with "avail" or "unavail" and complain.
(print "Bad avail line: $_\n"), next
@@ -107,7 +136,7 @@ while (<AVAIL>) {
$flag = (($& eq "avail") ? 0 : 1);
# If we find a "universal off" flag (i.e. a simple "unavail") remember it
- $universal_off = 1 if ($flag && !$u && !$m);
+ $universal_off = 1 if ($flag && !$u && !$m && !$b);
# $myname considered "in user list" if actually in list or is NULL
$in_user = (!$u || grep ($_ eq $myname, split(/[\s,]+/,$u)));
@@ -130,12 +159,26 @@ while (<AVAIL>) {
}
print "$$ \$repos($repos) in repository list: $_\n" if $debug && $in_repo;
- $exit_val = $flag if ($in_user && $in_repo);
+ # Branch matches if it is in the branch list in the avail line, the branch
+ # list is NULL, or there is no branch and HEAD is in the branch list.
+ if(!($in_branch = !$b)) {
+ @bls = split (/[\s,]+/,$b);
+
+ for $j (@ARGV) {
+ $f = $j;
+ last if !($in_branch = grep($_ eq $branch{$j}, @bls));
+ }
+ }
+ print "$$ \$branch($branch{$f}) in branch list: $_\n"
+ if $debug && $in_branch;
+
+ $exit_val = $flag if ($in_user && $in_repo && $in_branch);
print "$$ ==== \$exit_val = $exit_val\n$$ ==== \$flag = $flag\n" if $debug;
}
close(AVAIL);
print "$$ ==== \$exit_val = $exit_val\n" if $debug;
-print "**** Access denied: Insufficient Karma ($myname|$repos)\n" if $exit_val;
+print "**** Access denied: Insufficient Karma ($myname|$repos|$branch{$f})\n"
+ if $exit_val;
print "**** Access allowed: Personal Karma exceeds Environmental Karma.\n"
if $universal_off && !$exit_val;
exit($exit_val);
diff --git a/contrib/cvs/contrib/pvcs2rcs.in b/contrib/cvs/contrib/pvcs2rcs.in
new file mode 100644
index 000000000000..fd88c3f5c370
--- /dev/null
+++ b/contrib/cvs/contrib/pvcs2rcs.in
@@ -0,0 +1,1150 @@
+#! @PERL@
+# ---------------------------------
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+###########################################################################
+# FUNCTION:
+# To recursively walk through a PVCS archive directory tree (archives
+# located in VCS/ or vcs/ subdirectories) and convert them to RCS archives.
+# The RCS archive name is the PVCS workfile name with ",v" appended.
+#
+# SYNTAX:
+# pvcs_to_rcs.pl --help
+#
+# where -l indicates the operation is to be performed only in the current
+# directory (no recursion)
+#
+# EXAMPLE:
+# pvcs_to_rcs
+# Would walk through every VCS or vcs subdir starting at the current directory,
+# and produce corresponding RCS archives one level above the VCS or vcs subdir.
+# (VCS/../RCS/)
+#
+# NOTES:
+# * This script performs little error checking and logging
+# (i.e. USE AT YOUR OWN RISK)
+# * This script was last tested using ActiveState's port of Perl 5.005_02
+# (internalcut #507) under Win95, though it does compile under Perl-5.00404
+# for Solaris 2.4 run on a Solaris 2.6 system. The script crashed
+# occasionally under ActiveState's port of Perl 5.003_07 but this stopped
+# happening with the update so if you are having problems, try updating Perl.
+# Upgrading to cut #507 also seemed to coincide with a large speed
+# improvement, so try and keep up, hey? :) It was executed from MKS's
+# UNIX tools version 6.1 for Win32's sh. ALWAYS redirect your output to
+# a log!!!
+# * PVCS archives are left intact
+# * RCS archives are created in VCS/../RCS/ (or ./RCS using '-pflat')
+# * Branch labels in this script will be attached to the CVS magic
+# revision number. For branch a.b.c of a particular file, this means
+# the label will be attached to revision a.b.0.c of the converted
+# file. If you use the TrunkTip (1.*) label, be aware that it will convert
+# to RCS revision 0.1, which is useless to RCS and CVS. You'll probably
+# have to delete these.
+# * All revisions are saved with correct "metadata" (i.e. check-in date,
+# author, and log message). Any blank log message is replaced with
+# "no comment". This is because RCS does not allow non-interactive
+# check in of a new revision without a comment string.
+# * Revision numbers are incremented by 1 during the conversion (since
+# RCS does not allow revision 1.0).
+# * All converted branch numbers are even (the CVS paradigm)
+# * Version labels are assigned to the appropriate (incremented) revision
+# numbers. PVCS allows spaces and periods in version labels while RCS
+# does not. A global search and replace converts " " and "." to "_"
+# There may be other cases that ought to be added.
+# * Any working (checked-out) copies of PVCS archives
+# within the VCS/../ or vcs/../ (or possibly ./ with '-pflat')
+# will be deleted (or overwritten) depending on your mode of
+# operation since the current ./ is used in the checkout of each revision.
+# I suppose if development continues these files could be redirected to
+# temp space rather than ./ .
+# * Locks on PVCS archives should be removed (or the workfiles should be
+# checked-in) prior to conversion, although the script will blaze through
+# the archive nonetheless (But you would lose any checked out revision(s))
+# * The -kb option is added to the RCS archive for workfiles with the following
+# extensions: .bin .out .btl .rom .a07 .lib .exe .tco .obj .t8u .c8u .o .lku
+# .a and a few others. The %bin_ext variable holds these values in regexp
+# form.
+# * the --force-binary option can be used to convert binary files which don't
+# have proper extensions, but I'd *probably* edit the %bin_ext variable.
+# * This script will abort occasionally with the error "invalid revision
+# number". This is known to happen when a revision comment has
+# /^\s*Rev/ (Perl regexp notation) in it. Fix the comment and start over.
+# (The directory locks and existance checking make this a fairly quick
+# process.)
+# * This script writes lockfiles in the RCS/ directories. It will also not
+# convert an archive if it finds the RCS Archive existant in the RCS/
+# directory. This enables the conversion to quickly pick up where it left
+# off after errors or interrupts occur. If you interrupt the script make
+# sure you delete the last RCS Archive File which was being written.
+# If you recieve the "Invalid revision number" error, then the RCS archive
+# file for that particular PVCS file will not have been created yet.
+# * This script will not create lockfiles when processing single
+# filenames passed into the script, for hopefully obvious reasons.
+# (lockfiles lock directories - DRP)
+# * Log the output to a file. That makes it real easy to grep for errors
+# later. (grep for "^[ \t]*(rcs|ci):" and be aware I might have missed
+# a few cases (get? vcs?) !!!) *** Also note that this script will
+# exibit some harmless RCS errors. Namely, it will attempt to lock
+# branches which haven't been created yet. ***
+# * I tried to keep the error and warning info up to date, but it seems
+# to mean very little. This script almost always exits with a warning
+# or an error that didn't seem to cause any harm. I didn't trace it
+# and our imported source checks out and builds...
+# It is probably happening when trying to convert empty directories
+# or read files (possibly checked out workfiles ) which are not
+# pvcs_archives.
+# * You must use the -pflat option when processing single filenames
+# passed as arguments to the script. This is probably a bug.
+# * questions, comments, additions can be sent to info-cvs@gnu.org
+#########################################################################
+
+
+
+#
+# USER Configurables
+#
+
+# %bin_ext should be editable from the command line.
+#
+# NOTE: Each possible binary extension is listed as a Perl regexp
+#
+# The value associated with each regexp key is used to print a log
+# message when a binary file is found.
+my %bin_ext =
+ (
+ '\.(?i)bin$' => "Binary",
+ '\.(?i)out$' => "Default Compiler Output",
+ '\.(?i)btl$' => "",
+ '\.(?i)rom$' => "",
+ '\.(?i)a07$' => "",
+ '\.(?i)lib$' => "DOS/Wintel/Netware Compiler Library",
+ '\.(?i)lif$' => "Netware Binary File",
+ '\.(?i)exe$' => "DOS/Wintel Executable",
+ '\.(?i)tco$' => "",
+ '\.(?i)obj$' => "DOS/Wintel Compiler Object",
+ '\.(?i)res$' => "DOS/Wintel Resource File",
+ '\.(?i)ico$' => "DOS/Wintel Icon File",
+ '\.(?i)nlm$' => "Netware Loadable Module",
+ '\.(?i)t8u$' => "",
+ '\.(?i)c8u$' => "",
+ '\.(?i)lku$' => "",
+ '\.(?i)(bmp|gif|jpg|jpeg|jfif|tif|tiff|xbm)$' => "Image",
+ '\.(?i)dll$' => "DOS/Wintel Dynamically Linked Library",
+ '\.o$' => "UNIX Compiler Object",
+ '\.a$' => "UNIX Compiler Library",
+ '\.so(\.\d+\.\d+)?$' => "UNIX Shared Library"
+ );
+
+# The binaries this script is dependant on:
+my @bin_dependancies = ("vcs", "vlog", "rcs", "ci");
+
+# Where we should put temporary files
+my $tmpdir = $ENV{TMPDIR} ? $ENV{TMPDIR} : "/var/tmp";
+
+# We use these...
+use strict;
+
+use Cwd;
+use File::Path;
+use IO::File;
+use Getopt::Long;
+ $Getopt::Long::bundling = 1;
+# $Getopt::Long::ignorecase = 0;
+
+my $usage = "\
+usage: $0 -h
+ $0 [-lt] [-i vcsid] [-r flat|leaf] [-p flat|leaf] [-x rcs_extension]
+ [-v none|locks|exists] [options] [path...]
+";
+
+my $help = "\
+$usage
+ ---------------------------- -----------------------------------
+ -h | --Help Print this text
+
+ General Settings
+ ---------------------------- -----------------------------------
+ --Recurse Recurse through directories
+ (default)
+ -l | --NORecurse Process only .
+ --Errorfiles Save a count of conversion errors
+ in the RCS archive directory
+ (default) (unimplemented)
+ --NOErrorfiles Don't save a count of conversion
+ errors (unimplemented)
+ ( -m | --Mode ) Convert Convert PVCS files to RCS files
+ (default)
+ ( -m | --Mode ) Verify Perform verification ONLY (unimplemented)
+ ( -v | --VERIfy ) None Always replace existing RCS files
+ ( -v | --VERIfy ) LOCKS Same as exists unless a #conv.done
+ file exists in the RCS directory.
+ In that case, only the #conv.done
+ file's existance is verified for
+ that directory. (default)
+ ( -v | --VERIfy ) Exists Don't replace existing RCS files
+ ( -v | --VERIfy ) LOCKDates Verify that an existing RCS file's
+ last modification date is older
+ than that of the lockfile
+ (unimplemented)
+ ( -v | --VERIfy ) Revs Verify that the PVCS archive files
+ and RCS archive file contain the
+ same number of corresponding
+ revisions. Add only new revisions
+ to the RCS file. (unimplemented)
+ ( -v | --VERIfy ) Full Perform --verify=Revs and confirm
+ that the text of the revisions is
+ identical. Add only new revisions
+ unless an error is found. Then
+ erase the RCS archive and recreate
+ it. (unimplemented)
+ -t | --Test-binaries Use 'which' to check \$PATH for
+ the binaries required by this
+ script (default)
+ --NOTest-binaries Don't check for binaries
+ --VERBose Enable verbose output
+ --NOVerbose Disable verbose output (default)
+ -w | --Warnings Print warning messages (default)
+ --NOWarnings Don't print warning messages
+
+ RCS Settings
+ ---------------------------- -----------------------------------
+ ( -r | --RCS-Dirs ) leaf RCS files stored in ./RCS (default)
+ ( -r | --RCS-Dirs ) flat RCS files stored in .
+ (unimplemented)
+ ( -x | --RCS-Extension ) Set RCS file extension
+ (default = ',v')
+ --Force-binary Pass '-kb' to 'rcs -i' regardless of
+ the file extension
+ --NOForce-binary Only use '-kb' when the file has
+ a binary extension (default)
+ --Cvs-branch-labels Use CVS magic branch revision
+ numbers when attaching branch
+ labels (default)
+ --NOCvs-branch-labels Attach branch labels to RCS branch
+ revision numbers (unimplemented)
+
+ PVCS Settings
+ ---------------------------- -----------------------------------
+ ( -p | --Pvcs-dirs ) leaf PVCS files expected in ./VCS
+ (default)
+ ( -p | --Pvcs-dirs ) flat PVCS files expected in .
+ ( -i | --VCsid ) vcsid Use vcsid instead of \$VCSID
+
+ --------------------------------------------------------------------------
+ The optional path argument should contain the name of a file or directory
+ to convert. If not given, it will default to '.'.
+ --------------------------------------------------------------------------
+";
+
+
+
+#
+# Initialize globals
+#
+
+my ($errors, $warnings) = (0, 0);
+my ($curlevel, $maxlevel);
+my ($rcs_base_command, $ci_base_command);
+my ($donefile_name, $errorfile_name);
+
+# set up the default options
+my %options = (
+ recurse => 1,
+ mode => "convert",
+ errorfiles => 1,
+ 'rcs-dirs' => "leaf",
+ 'rcs-extension' => ",v",
+ 'force-binary' => 0,
+ 'cvs-branch-labels' => 1,
+ 'pvcs-dirs' => "leaf",
+ verify => "locks",
+ 'test-binaries' => 1,
+ vcsid => $ENV{VCSID} || "",
+ verbose => 0,
+ debug => 0,
+ warnings => 1
+ );
+
+
+
+# This is untested except under Solaris 2.4 or 2.6 and
+# may not be portable
+#
+# I think the readline lib or some such has an interface
+# which may enable this now. The perl installer sure looks
+# like it's testing this kind of thing, anyhow.
+sub hit_any_key
+ {
+ STDOUT->autoflush;
+ system "stty", "-icanon", "min", "1";
+
+ print "Hit any key to continue...";
+ getc;
+
+ system "stty", "icanon", "min", "0";
+ STDOUT->autoflush (0);
+
+ print "\nI always wondered where that key was...\n";
+ }
+
+
+
+# print the usage
+sub print_usage
+ {
+ my $fh = shift;
+ unless (ref $fh)
+ {
+ my $fdn = $fh ? $fh : "STDERR";
+ $fh = new IO::File;
+ $fh->fdopen ($fdn, "w");
+ }
+
+ $fh->print ($usage);
+ }
+
+# print the help
+sub print_help
+ {
+ my $fh = shift;
+ unless (ref $fh)
+ {
+ my $fdn = $fh ? $fh : "STDOUT";
+ $fh = new IO::File;
+ $fh->fdopen ($fdn, "w");
+ }
+
+ $fh->print ($help);
+ }
+
+# print the help and exit $_[0] || 0
+sub exit_help
+ {
+ print_help;
+ exit shift || 0;
+ }
+
+sub error_count
+ {
+ my $type = shift or die "$0: error - error_count usage: error_count type [, ref] [, LIST]\n";
+ my $error_count_ref;
+ my $outstring;
+
+ if (ref ($_[0]) && ref ($_[0]) == "SCALAR")
+ {
+ $error_count_ref = shift;
+ }
+ else
+ {
+ $error_count_ref = \$errors;
+ }
+ $$error_count_ref++;
+
+ push @_, "something wrong.\n" unless ( @_ > 0 );
+
+ $outstring = sprintf "$0: $type - " . join ("", @_);
+ $outstring .= sprintf " - $!\n" unless ($outstring =~ /\n$/);
+
+ print STDERR $outstring;
+
+ if ($options{errorfiles})
+ {
+ my $fh = new IO::File ">>$errorfile_name" or new IO::File ">$errorfile_name";
+ if ($fh)
+ {
+ $fh->print ($$error_count_ref . "\n");
+ $fh->print ($outstring);
+ $fh->close;
+ }
+ else
+ {
+ my $cd = cwd;
+ print STDERR "$0: error - failed to open errorfile $cd/$errorfile_name - $!\n"
+ if ($options{debug});
+ }
+ }
+
+ return $$error_count_ref;
+ }
+
+
+
+# the main procedure that is run once in each directory
+sub execdir
+ {
+ my $dir = shift;
+ my ($errors, $warnings) = (0, 0); # We return these error counters
+ my $old_dir = cwd;
+
+ local ($_, @_);
+
+ my $i; # Generic counter
+ my ($pvcsarchive, $workfile, $rcsarchive); # .??v, checked out file, and ,v files,
+ # respectively
+ my ($rev_count, $first_vl, $last_vl, $description,
+ $rev_index, @rev_num, %checked_in, %author,
+ $relative_comment_index, @comment_string,
+ %comment);
+ my ($num_version_labels, $label_index, @label_revision, $label,
+ @new_label, $rcs_rev);
+ my ($revision, %rcs_rev_num);
+ my ($get_output, $rcs_output, $ci_output, $mv_output);
+ my ($ci_command, $rcs_command, $wtr);
+ my @hits;
+ my ($num_fields);
+ my $skipdirlock; # if true, don't write conv.out
+ # used only for single file operations
+ # at the moment
+ my $cd;
+
+ my @filenames;
+ # We may have recieved a single file name to process...
+ if ( -d $dir )
+ {
+ # change into the directory to be processed
+ # open the current directory for listing
+ # initialize the list of filenames
+ # and set filenames equal to directory listing
+ unless ( ( chdir $dir ) and ( opendir CURDIR, "." ) and ( @filenames = readdir CURDIR ) )
+ {
+ $cd = cwd;
+ error_count 'error', \$errors, "skipping directory $dir from $cd";
+ chdir $old_dir or die "Failed to restore original directory ($old_dir): ", $!, ", stopped";
+ return ($errors, $warnings);
+ }
+
+ # clean up by closing the directory
+ closedir(CURDIR);
+ }
+ elsif ( -f $dir ) # we recieved a single file
+ {
+ push @filenames, $dir;
+ $skipdirlock = 1;
+ }
+ else
+ {
+ $cd = cwd;
+ error_count 'error', \$errors, "no such directory/file $dir from $cd\n";
+ # chdir $old_dir or die "Failed to restore original directory ($old_dir): ", $!, ", stopped";
+ return ($errors, $warnings);
+ }
+
+ # save the current directory
+ $cd = cwd;
+
+ # increment the global $curlevel variable
+ $curlevel = $curlevel +1;
+
+ # initialize a list for any subdirectories and any files
+ # we need to process
+ my $vcsdir = "";
+ my (@subdirs, $fn, $file, @files, @pvcsarchives);
+
+ # print "$cd: " . join (", ", @filenames) . "\n";
+ # hit_any_key;
+
+ (@files, @pvcsarchives) = ( (), () );
+ # begin a for loop to execute on each filename in the list @filename
+ foreach $fn (@filenames)
+ {
+ # if the file is a directory...
+ if (-d $fn)
+ {
+ # then if we are not expecting a flat arrangement of pvcs files
+ # and we found a vcs directory add its files to @pvcsarchives
+ if (!$options{'pvcs-dirs-flat'} and $fn =~ /^vcs$/i)
+ {
+ if ($options{verify} =~ /^locks$/ ) {
+ if ( -f $donefile_name ) {
+ print "Verified existence of lockfile $cd/$donefile_name."
+ . ( ($options{mode} =~ /^convert$/) ? " Skipping directory." : "" )
+ . "\n" if ($options{verbose});
+ next;
+ } elsif ( $options{mode} =~ /^verify$/ ) {
+ print "No lockfile found for $cd .\n";
+ next;
+ }
+ }
+
+ # else add the files in the vcs dir to our list of files to process
+ error_count 'warning', \$warnings, "Found two vcs dirs in directory $cd.\n"
+ if ($vcsdir and $options{warnings});
+
+ $vcsdir = $fn;
+
+ unless ( ( opendir VCSDIR, $vcsdir ) and ( @files = readdir VCSDIR ) )
+ {
+ error_count 'error', \$errors, "skipping directory &cd/$fn";
+ next;
+ }
+ closedir VCSDIR;
+
+ # and so we don't need to worry about where these
+ # files came from later...
+ foreach $file (@files)
+ {
+ push @pvcsarchives, "$vcsdir/$file" if (-f "$vcsdir/$file");
+ }
+
+ # don't want recursion here...
+ @pvcsarchives = grep !/^\.\.?$/, @pvcsarchives;
+ }
+ elsif ($fn !~ /^\.\.?$/)
+ {
+ next if (!$options{'rcs-dirs-flat'} and $fn =~ /^rcs$/i);
+ # include it in @subdir if it's not a parent directory
+ push(@subdirs,$fn);
+ }
+ }
+ # else if we are processing a flat arrangement of pvcs files...
+ elsif ($options{'pvcs-dirs-flat'} and -f $fn)
+ {
+ if ($options{verify} =~ /^locks$/) {
+ if ( -f $donefile_name) {
+ print "Found lockfile $cd/$donefile_name."
+ . ( ($options{mode} =~ /^convert$/) ? " Skipping directory." : "" )
+ . "\n" if ($options{verbose});
+ last;
+ } elsif ($options{mode} =~ /^verify$/) {
+ print "No lockfile found for $cd .\n";
+ last;
+ }
+ }
+ # else add this to the list of files to process
+ push (@pvcsarchives, $fn);
+ }
+ }
+
+ # print "pvcsarchives: " . join (", ", @pvcsarchives) . "\n";
+ # print "subdirs: " . join (", ", @subdirs) . "\n";
+ # hit_any_key;
+
+ # for loop of subdirs
+ foreach (@subdirs)
+ {
+ # run execdir on each sub dir
+ if ($maxlevel >= $curlevel)
+ {
+ my ($e, $w) = execdir ($_);
+ $errors += $e;
+ $warnings += $w;
+ }
+ }
+
+ # Print output header for each directory
+ print("Directory: $cd\n");
+
+ # the @files variable should already contain the list of files
+ # we should attempt to process
+ if ( @pvcsarchives && ( $options{mode} =~ /^convert$/ ) )
+ {
+ # create an RCS directory in parent to store RCS files in
+ if ( !( $options{'rcs-dirs-flat'} or (-d "RCS") or mkpath ( "RCS" ) ) )
+ {
+ error_count 'error', \$errors, "failed to make directory $cd/RCS - skipping directory $cd";
+ @pvcsarchives = ();
+ # after all, we have nowhere to put them...
+ }
+ }
+
+ # begin a for loop to execute on each filename in the list @files
+ foreach $pvcsarchive (@pvcsarchives)
+ {
+ my $got_workfile = 0;
+ my $got_version_labels = 0;
+ my $got_description = 0;
+ my $got_rev_count = 0;
+
+ my $abs_file = $cd . "/" . $pvcsarchive;
+
+ print("Verifying $abs_file...\n") if ($options{verbose});
+
+ print "vlog $pvcsarchive\n";
+ my $vlog_output = `vlog $pvcsarchive`;
+ $_ = $vlog_output;
+
+ # Split the vcs status output into individual lines
+ my @vlog_strings = split /\n/;
+ my $num_vlog_strings = @vlog_strings;
+ $_ = $vlog_strings[0];
+ if ( /^\s*$/ || /^vlog: warning/ )
+ {
+ error_count 'warning', \$warnings, "$abs_file is NOT a valid PVCS archive!!!\n";
+ next;
+ }
+
+ my $num;
+ # Collect all vlog output into appropriate variables
+ #
+ # This will ignore at the very least the /^\s*Archive:\s*/ field
+ # and maybe more. This should not be a problem.
+ for ( $num = 0; $num < $num_vlog_strings; $num++ )
+ {
+ # print("$vlog_strings[$num]\n");
+ $_ = $vlog_strings[$num];
+
+ if( ( /^Workfile:\s*/ ) && (!$got_workfile ) )
+ {
+ my $num_fields;
+
+ $got_workfile = 1;
+ # get the string to the right of the above search (with any path stripped)
+ $workfile = $';
+ $_ = $workfile;
+ $num_fields = split /[\/\\]/;
+ if ( $num_fields > 1 )
+ {
+ $workfile = $_[$num_fields - 1 ];
+ }
+
+ $rcsarchive = $options{'rcs-dirs-flat'} ? "" : "RCS/";
+ $rcsarchive .= $workfile;
+ $rcsarchive .= $options{'rcs-extension'} if ($options{'rcs-extension'});
+ print "Workfile is $workfile\n" if ($options{debug});
+ }
+
+ elsif ( ( /^Rev count:\s*/ ) && (!$got_rev_count ) )
+ {
+ $got_rev_count = 1;
+ # get the string to the right of the above search
+ $rev_count = $';
+ print "Revision count is $rev_count\n";
+ }
+
+ elsif ( ( /^Version labels:\s*/ ) && (!$got_version_labels ) )
+ {
+ $got_version_labels = 1;
+ $first_vl = $num+1;
+ print "Version labels start at $first_vl\n" if ($options{debug});
+ }
+
+ elsif ( ( /^Description:\s*/ ) && (!$got_description ) )
+ {
+ $got_description = 1;
+ $description = "\"" . $vlog_strings[$num+1] . "\"";
+ print "Description is $description\n" if ($options{debug});
+ $last_vl = $num - 1;
+ }
+
+ elsif ( /^Rev\s+/ ) # get all the revision information at once
+ {
+ $rev_index = 0;
+ @rev_num = ();
+ while ( $rev_index < $rev_count )
+ {
+ $_ = $vlog_strings[$num];
+ /^\s*Rev\s+(\d+\.(\d+\.\d+\.)*\d+)$/;
+ $rev_num[$rev_index] = $1;
+ print "Found revision: $rev_num[$rev_index]\n" if ($options{debug});
+ die "Not a valid revision ($rev_num[$rev_index]).\n"
+ if ($rev_num[$rev_index] !~ /^(\d+\.)(\d+\.\d+\.)*\d+$/);
+
+ $_ = $vlog_strings[$num+1];
+ /^\s*Locked\s*/ and $num++;
+
+ $_ = $vlog_strings[$num+1];
+ /^\s*Checked in:\s*/;
+ $checked_in{$rev_num[$rev_index]} = "\"" . $' . "\"";
+ print "Checked in: $checked_in{$rev_num[$rev_index]}\n" if ($options{debug});
+
+ $_ = $vlog_strings[$num+3];
+ /^\s*Author id:\s*/;
+ split;
+ $author{$rev_num[$rev_index]} = "\"" . $_[2] . "\"";
+ print "Author: $author{$rev_num[$rev_index]}\n" if ($options{debug});
+
+ my @branches = ();
+ $_ = $vlog_strings[$num+1];
+ if (/^\s*Branches:\s*/)
+ {
+ $num++;
+ @branches = split /\s+/, $';
+ }
+
+ $relative_comment_index = 0;
+ @comment_string = ();
+ while( ( ( $num + 4 + $relative_comment_index ) < @vlog_strings)
+ && ( $vlog_strings[$num+4+$relative_comment_index]
+ !~ /^\s*Rev\s+(\d+\.(\d+\.\d+\.)*\d+)$/ ) )
+ {
+ # We need the \n added for multi-line comments. There is no effect for
+ # single-line comments since RCS inserts the \n if it doesn't exist already
+ # print "Found commment line: $vlog_strings[$num+4+$relative_comment_index]\n"
+ # if ($options{debug});
+ push @comment_string, $vlog_strings[$num+4+$relative_comment_index], "\n";
+ $relative_comment_index += 1;
+ }
+ # print "Popped from comment: " . join ("", splice (@comment_string, -2))
+ # . "\n"
+ # if ($options{debug});
+ # Pop the "-+" or "=+" line from the comment
+ while ( (pop @comment_string) !~ /^-{35}|={35}$/ )
+ {}
+ $comment{$rev_num[$rev_index]} = join "", @comment_string;
+
+ $num += ( 4 + $relative_comment_index );
+ print "Got comment for $rev_num[$rev_index]\n" if ($options{debug});
+ print "comment string: $comment{$rev_num[$rev_index]}\n" if ($options{debug});
+ $rev_index += 1;
+ } # while ( $rev_index < $rev_count )
+ $num -= 1; #although there should be nothing left for this to matter
+ } # Get Rev information
+ } # for ($num = 0; $num < $num_vlog_strings; $num++)
+ # hit_any_key if ($options{debug});
+ # Create RCS revision numbers corresponding to PVCS version numbers
+ foreach $revision (@rev_num)
+ {
+ $rcs_rev_num{ $revision } = &pvcs_to_rcs_rev_number( $revision );
+ print"PVCS revision is $revision; RCS revision is $rcs_rev_num{ $revision }\n"
+ if ($options{debug});
+ }
+
+ # Sort the revision numbers - PVCS and RCS store them in different orders
+ # Clear @_ so we don't pass anything in by accident...
+ @_ = ();
+ @rev_num = sort revisions @rev_num;
+ print "Sorted rev_nums:\n" . join ("\n", @rev_num) . "\n" if ($options{debug});
+ # hit_any_key;
+
+ # Loop through each version label, checking for need to relabel ' ' with '_'.
+ $num_version_labels = $last_vl - $first_vl + 1;
+ print "Version label count is $num_version_labels\n";
+ for( $i = $first_vl; $i <= $last_vl; $i += 1 )
+ {
+ # print("$vlog_strings[$i]\n");
+ $label_index = $i - $first_vl;
+ $_=$vlog_strings[$i];
+ print "Starting with string '$_'\n" if ($options{debug});
+ split /\"/;
+ $label = $_[1];
+ print "Got label '$label'\n" if ($options{debug});
+ split /\s+/, $_[2];
+ $label_revision[$label_index] = $_[2];
+ print "Original label is $label_revision[$label_index]\n" if ($options{debug});
+
+ # Create RCS revision numbers corresponding to PVCS version numbers by
+ # adding 1 to the revision number (# after last .)
+ $label_revision[ $label_index ] = pvcs_to_rcs_rev_number( $label_revision [ $label_index ] );
+ # replace ' ' with '_', if needed
+ $_=$label;
+ $new_label[$label_index] = $label;
+ $new_label[$label_index] =~ s/ /_/g;
+ $new_label[$label_index] =~ s/\./_/g;
+ $new_label[$label_index] = "\"" . $new_label[$label_index] . "\"";
+ print"Label $new_label[$label_index] is for revision $label_revision[$label_index]\n" if ($options{debug});
+ }
+
+ ##########
+ #
+ # See if the RCS archive is up to date with the PVCS archive
+ #
+ ##########
+ if ($options{verify} =~ /^locks|exists$/ and -f $rcsarchive)
+ {
+ print "Verified existence of $cd/$rcsarchive."
+ . ( ($options{mode} =~ /^convert$/) ? " Skipping." : "" )
+ . "\n" if ($options{verbose});
+ next;
+ }
+
+ # Create RCS archive and check in all revisions, then label.
+ my $first_time = 1;
+ foreach $revision (@rev_num)
+ {
+ # print "get -p$revision $pvcsarchive >$workfile\n";
+ print "get -r$revision $pvcsarchive\n";
+ # $vcs_output = `vcs -u -r$revision $pvcsarchive`;
+ # $get_output = `get -p$revision $pvcsarchive >$workfile`;
+ $get_output = `get -r$revision $pvcsarchive`;
+
+ # if this is the first time, delete the rcs archive if it exists
+ # need for $options{verify} == none
+ unlink $rcsarchive if ($first_time and $options{verify} =~ /^none$/ and -f $rcsarchive);
+
+ # Also check here whether this file ought to be "binary"
+ if ( $first_time )
+ {
+ $rcs_command = "$rcs_base_command -i";
+ if ( ( @hits = grep { $workfile =~ /$_/ } keys %bin_ext ) || $options{'force-binary'} )
+ {
+ $rcs_command .= " -kb";
+ $workfile =~ /$hits[0]/ if (@hits);
+ print "Binary attribute -kb added ("
+ . (@hits ? "file type is '$bin_ext{$hits[0]}' for extension '$&'" : "forced")
+ . ")\n";
+ }
+ $first_time and $ci_command .= " -t-$description";
+
+ $rcs_command .= " $workfile";
+
+ # print and execute the rcs archive initialization command
+ print "$rcs_command\n";
+ $wtr = new IO::File "|$rcs_command";
+ $wtr->print ($description);
+ $wtr->print ("\n") unless ($description =~ /\n$/s);
+ $wtr->print (".\n");
+ $wtr->close;
+
+ # $rcs_output = `$rcs_base_command -i -kb $workfile`;
+ }
+
+ # if this isn't the first time, we need to lock the rcs branch
+ #
+ # This is a little messy, but it works. Some extra locking is attempted.
+ # (This happens the first time a branch is used, at the least)
+ my $branch = "";
+ my @branch;
+ @branch = split /\./, $rcs_rev_num{$revision};
+ pop @branch;
+ $branch = join ".", @branch;
+
+ $rcs_output = `$rcs_base_command -l$branch $workfile` if (!$first_time);
+
+ # If an empty comment is specified, RCS will not check in the file;
+ # check for this case. (but an empty -t- description is fine - go figure!)
+ # Since RCS will pause and ask for a comment if one is not given,
+ # substitute a dummy comment "no comment".
+ $comment{$revision} =~ /^\s*$/ and $comment{$revision} = "no comment\n";
+
+ $ci_command = $ci_base_command;
+ $ci_command .= " -f -r$rcs_rev_num{$revision} -d$checked_in{$revision}"
+ . " -w$author{$revision}";
+
+ $ci_command .= " $workfile";
+
+ # print and execute the ci command
+ print "$ci_command\n";
+ $wtr = new IO::File "|$ci_command";
+ $wtr->print ($comment{$revision});
+ $wtr->print ("\n") unless ($comment{$revision} =~ /\n$/s);
+ $wtr->print (".\n");
+ $wtr->close;
+ # $ci_output = `$ci_command`;
+ # $ci_output = `cat $tmpdir/ci.out`;
+
+ $first_time = 0 if ($first_time);
+ } # foreach revision
+
+ # Attach version labels
+ for( $i = $num_version_labels - 1; $i >= 0; $i -= 1 )
+ {
+ # print "rcs -x,v -n$new_label[$i]:$label_revision[$i] $workfile\n";
+ $rcs_output = `$rcs_base_command -n$new_label[$i]:$label_revision[$i] $workfile`;
+ print "Version label $new_label[$i] added to revision $label_revision[$i]\n";
+ } # foreach label
+
+ # hit_any_key;
+ } # foreach pvcs archive file
+
+ # We processed a vcs directory, so if there were any files, lock it.
+ # We are guaranteed to have made the attempt at
+ #
+ # $skipdirlock gets set if a single file name was passed to this function to enable
+ # a '$0 *' operation...
+ if ( @pvcsarchives && !$skipdirlock)
+ {
+ my $fh = new IO::File ">>$donefile_name" or new IO::File ">$donefile_name";
+ if ($fh)
+ {
+ $fh->close;
+ }
+ else
+ {
+ error_count 'error', \$errors, "couldn't create lockfile $cd/$donefile_name";
+ }
+ }
+
+ $curlevel = $curlevel - 1;
+
+ chdir $old_dir or die "Failed to restore original directory ($old_dir): ", $!, ", stopped";
+ return ($errors, $warnings);
+ }
+
+
+
+#
+# This function effectively does a cmp between two revision numbers
+# It is intended to be passed into Perl's sort routine.
+#
+# the pvcs_out is not implemented well. It should probably be
+# returnning $b[0] <=> $a[0] rather than $a[0] <=> $b[0]
+#
+# The @_ argument implementation was going to be used for revision
+# comparison as an aid to remove the /^\sRev/ in revision comment
+# error. The effort was fruitless at the time.
+sub revisions
+ {
+ my @a = split /\./, (defined $a) ? $a : shift;
+ my @b = split /\./, (defined $b) ? $b : shift;
+ my $function = @_ ? shift : 'rcs_in';
+ my ($i, $ret_val);
+
+ die "Not enough arguments to revisions : a = ", join (".", @a),
+ "; b = ", join (".", @b), ", stopped"
+ unless (@a and @b);
+
+ for ($i = 0; $i < scalar( @a ) && $i < scalar( @b ); $i++)
+ {
+ $a[$i] == $b[$i] or return ($a[$i] <=> $b[$i]);
+ }
+
+ return 0 if (scalar (@a) == scalar (@b));
+
+ if ($function eq 'rcs_in')
+ {
+ return (($i == @b) || -1);
+ }
+ elsif ($function eq 'pvcs_out')
+ {
+ return (($i == @a) || -1);
+ }
+ else
+ {
+ die "error - Invalid function type passed to revisions ($function)", ", stopped";
+ }
+ }
+
+
+
+sub pvcs_to_rcs_rev_number
+ {
+ my($input, $num_fields, @rev_string, $return_rev_num, $i);
+
+ $input = $_[0];
+ $_ = $input;
+ $num_fields = split /\./;
+ @rev_string = @_;
+ # @rev_string[$num_fields-1] += 1;
+
+ for( $i = 1; $i < $num_fields; $i += 1 )
+ {
+ if ( $i % 2 )
+ {
+ # DRP: 10/1
+ # RCS does not allow revision zero
+ $rev_string[ $i ] += 1;
+ }
+ elsif ( $i )
+ {
+ # DRP: 10/1
+ # Branches must have even references for compatibility
+ # with CVS's magic branch numbers.
+ # (Indexes 2, 4, 6...)
+ $rev_string[ $i ] *= 2;
+ }
+ }
+
+ # If this is a branch revision # (PVCS: a.b.c.*) then we want the CVS
+ # revision # instead. It's okay to do this conversion here since we
+ # never commit to branches. We'll only get a PVCS revision # in that
+ # form when looking through the revision labels.
+ if ($input =~ /\*$/)
+ {
+ pop @rev_string;
+ push @rev_string, splice (@rev_string, -1, 1, "0");
+ }
+
+ $return_rev_num = join ".", @rev_string;
+ return $return_rev_num;
+ }
+
+
+
+
+
+###
+###
+###
+###
+###
+### MAIN program: checks to see if there are command line parameters
+###
+###
+###
+###
+###
+
+
+
+
+
+# and read the options
+die $usage unless GetOptions (\%options, "h|help" => \&exit_help,
+ "recurse!", "mode|m=s", "errorfiles!", "l", "rcs-dirs|rcs-directories|r=s",
+ "pvcs-dirs|pvcs-directories|p=s", "test-binaries|t!",
+ "rcs-extension=s", "verify|v=s", "vcsid|i=s", "verbose!", "debug!",
+ "force-binary!", "cvs-branch-labels!", "warnings|w!");
+
+
+
+#
+# Special processing for -l !^#%$^@#$%#$
+#
+# At the moment, -l overrides --recurse, regardless of the order the
+# options were passed in
+#
+$options{recurse} = 0 if defined $options{l};
+delete $options{l};
+
+
+
+# Make sure we got acceptable values for rcs-dirs and pvcs-dirs
+my @hits = grep /^$options{'rcs-dirs'}/i, ("leaf", "flat");
+@hits == 1 or die
+ "$0: $options{'rcs-dirs'} invalid argument to --rcs-dirs or ambiguous\n"
+ . " abbreviation.\n"
+ . " Must be one of: 'leaf' or 'flat'.\n"
+ . $usage;
+$options{'rcs-dirs'} = $hits[0];
+$options{'rcs-dirs-flat'} = ($options{'rcs-dirs'} =~ /flat/);
+delete $options{'rcs-dirs'};
+
+@hits = grep /^$options{'pvcs-dirs'}/i, ("leaf", "flat");
+@hits == 1 or die
+ "$0: $options{'pvcs-dirs'} invalid argument to --pvcs-dirs or ambiguous\n"
+ . " abbreviation.\n"
+ . " Must be one of: 'leaf' or 'flat'.\n"
+ . $usage;
+$options{'pvcs-dirs'} = $hits[0];
+$options{'pvcs-dirs-flat'} = ($options{'pvcs-dirs'} =~ /flat/);
+delete $options{'pvcs-dirs'};
+
+# and for verify
+@hits = grep /^$options{verify}/i, ("none", "locks", "exists", "lockdates", "revs", "full");
+@hits == 1 or die
+ "$0: $options{verify} invalid argument to --verify or ambiguous\n"
+ . " abbreviation.\n"
+ . " Must be one of: 'none', 'locks', 'exists', 'lockdates', 'revs',\n"
+ . " or 'full'.\n"
+ . $usage;
+$options{verify} = $hits[0];
+$options{verify} =~ /^none|locks|exists$/ or die
+ "$0: --verify=$options{verify} unimplemented.\n"
+ . $usage;
+
+# and mode
+@hits = grep /^$options{mode}/i, ("convert", "verify");
+@hits == 1 or die
+ "$0: $options{mode} invalid argument to --mode or ambiguous abbreviation.\n"
+ . " Must be 'convert' or 'verify'.\n"
+ . $usage;
+$options{mode} = $hits[0];
+
+$options{'cvs-branch-labels'} or die
+ "$0: RCS Branch Labels unimplemented.\n"
+ . $usage;
+
+# export VCSID into th environment for ourselves and our children
+$ENV{VCSID} = $options{vcsid};
+
+
+
+#
+# Verify we have all the binary executables we need to run this script
+#
+# Allowed this feature to be disabled in case which is missing or we are
+# running on a system which does not return error codes properly (e.g. WIN95)
+#
+# -- i.e. I don't feel like grepping output yet. --
+#
+my @missing_binaries = ();
+if ($options{'test-binaries'})
+ {
+ foreach (@bin_dependancies)
+ {
+ if (system "which", $_)
+ {
+ push @missing_binaries, $_;
+ }
+ }
+
+ if (scalar @missing_binaries)
+ {
+ print STDERR "The following executables were not found in your PATH: "
+ . join ( " ", @missing_binaries )
+ . "\n"
+ . "You must correct this before continuing.\n";
+ exit 1;
+ }
+ }
+delete $options{'test-binaries'};
+
+
+
+#
+# set up our base archive manipulation commands
+#
+
+# set up our rcs_command mods
+$rcs_base_command = "rcs";
+$rcs_base_command .= " -x$options{'rcs-extension'}" if ($options{'rcs-extension'});
+
+# set up our rcs_command mods
+$ci_base_command = "ci";
+$ci_base_command .= " -x$options{'rcs-extension'}" if ($options{'rcs-extension'});
+
+
+
+#
+# So our logs fill in a manner we can monitor with 'tail -f' fairly easily:
+#
+STDERR->autoflush (1);
+STDOUT->autoflush (1);
+
+
+
+# Initialize the globals we use to keep track of recursion
+if ($options{recurse})
+ {
+ $maxlevel = 10000; # Arbitrary recursion limit
+ }
+else
+ {
+ $maxlevel = 1;
+ }
+delete $options{recurse};
+
+# So we can lock the directories behind us
+$donefile_name = $options{'rcs-dirs-flat'} ? "" : "RCS/";
+$errorfile_name = $donefile_name . "#conv.errors";
+$donefile_name .= "#conv.done";
+
+
+
+#
+# start the whole thing and drop the return code on exit
+#
+push (@ARGV, ".") unless (@ARGV);
+while ($_ = shift)
+ {
+ # reset the recursion level (corresponds to directory depth)
+ # level 0 is the first directory we enter...
+ $curlevel = -1;
+ my ($e, $w) = execdir($_);
+ $errors += $e;
+ $warnings += $w;
+ }
+
+
+
+print STDERR "$0: " . ($errors ? "Aborted" : "Done") . ".\n";
+print STDERR "$0: ";
+print STDERR ($errors ? $errors : "No") . " error" . (($errors != 1) ? "s" : "");
+print STDERR ", " . ($warnings ? $warnings : "no") . " warning" . (($warnings != 1) ? "s" : "")
+ if ($options{warnings});
+print STDERR ".\n";
+
+
+
+#
+# Woo-hoo! We made it!
+#
+exit $errors;
diff --git a/contrib/cvs/contrib/rcs2log.sh b/contrib/cvs/contrib/rcs2log.sh
index bc663d840408..de2b912e9691 100644
--- a/contrib/cvs/contrib/rcs2log.sh
+++ b/contrib/cvs/contrib/rcs2log.sh
@@ -18,6 +18,7 @@ Options:
-h HOSTNAME Use HOSTNAME in change log entries (default current host).
-i INDENT Indent change log lines by INDENT spaces (default 8).
-l LENGTH Try to limit log lines to LENGTH characters (default 79).
+ -L FILE Use rlog-format FILE for source of logs.
-R If no FILEs are given and RCS is used, recurse through working directory.
-r OPTION Pass OPTION to subsidiary log command.
-t TABWIDTH Tab stops are every TABWIDTH characters (default 8).
@@ -28,9 +29,10 @@ Options:
Report bugs to <bug-gnu-emacs@gnu.org>.'
-Id='$Id: rcs2log,v 1.45 1998/08/12 22:33:01 eggert Exp $'
+Id='$Id: rcs2log,v 1.48 2001/09/05 23:07:46 eggert Exp $'
-# Copyright 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
+# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2001
+# Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -47,13 +49,29 @@ Id='$Id: rcs2log,v 1.45 1998/08/12 22:33:01 eggert Exp $'
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
-Copyright='Copyright 1998 Free Software Foundation, Inc.
+Copyright='Copyright 2001 Free Software Foundation, Inc.
This program comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of this program
under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.
Author: Paul Eggert <eggert@twinsun.com>'
+# Use the traditional C locale.
+LANG=C
+LANGUAGE=C
+LC_ALL=C
+LC_COLLATE=C
+LC_CTYPE=C
+LC_MESSAGES=C
+LC_NUMERIC=C
+LC_TIME=C
+export LANG LANGUAGE LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_TIME
+
+# These variables each contain a single ASCII character.
+# Unfortunately, there's no portable way of writing these characters
+# in older Unix implementations, other than putting them directly into
+# this text file.
+SOH='' # SOH, octal code 001
tab=' '
nl='
'
@@ -74,6 +92,7 @@ logTZ= # time zone for log dates (if empty, use local time)
recursive= # t if we want recursive rlog
revision= # t if we want revision numbers
rlog_options= # options to pass to rlog
+rlogfile= # log file to read from
tabwidth=8 # width of horizontal tab
while :
@@ -83,17 +102,16 @@ do
-i) indent=${2?}; shift;;
-h) hostname=${2?}; shift;;
-l) length=${2?}; shift;;
+ -L) rlogfile=${2?}; shift;;
-[nu]) # -n is obsolescent; it is replaced by -u.
case $1 in
-n) case ${2?}${3?}${4?} in
*"$tab"* | *"$nl"*)
echo >&2 "$0: -n '$2' '$3' '$4': tabs, newlines not allowed"
- exit 1
- esac
- case $loginFullnameMailaddrs in
- '') loginFullnameMailaddrs=$2$tab$3$tab$4;;
- ?*) loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$2$tab$3$tab$4
+ exit 1;;
esac
+ login=$2
+ lfm=$2$tab$3$tab$4
shift; shift; shift;;
-u)
# If $2 is not tab-separated, use colon for separator.
@@ -104,33 +122,39 @@ do
*"$tab"*)
t=$tab;;
*)
- t=:
+ t=':';;
esac
case $2 in
*"$t"*"$t"*"$t"*)
echo >&2 "$0: -u '$2': too many fields"
exit 1;;
*"$t"*"$t"*)
- ;;
+ uf="[^$t]*$t" # An unselected field, followed by a separator.
+ sf="\\([^$t]*\\)" # The selected field.
+ login=`expr "X$2" : "X$sf"`
+ lfm="$login$tab"`
+ expr "X$2" : "$uf$sf"
+ `"$tab"`
+ expr "X$2" : "$uf$uf$sf"
+ `;;
*)
echo >&2 "$0: -u '$2': not enough fields"
- exit 1
- esac
- case $loginFullnameMailaddrs in
- '') loginFullnameMailaddrs=$2;;
- ?*) loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$2
+ exit 1;;
esac
- shift
+ shift;;
esac
case $logins in
'') logins=$login;;
- ?*) logins=$logins$nl$login
+ ?*) logins=$logins$nl$login;;
esac
- ;;
+ case $loginFullnameMailaddrs in
+ '') loginFullnameMailaddrs=$lfm;;
+ ?*) loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$lfm;;
+ esac;;
-r)
case $rlog_options in
'') rlog_options=${2?};;
- ?*) rlog_options=$rlog_options$nl${2?}
+ ?*) rlog_options=$rlog_options$nl${2?};;
esac
shift;;
-R) recursive=t;;
@@ -144,9 +168,9 @@ do
-*) echo >&2 "Usage: $0 [OPTION]... [FILE ...]$nl$Help"
case $1 in
--help) exit 0;;
- *) exit 1
+ *) exit 1;;
esac;;
- *) break
+ *) break;;
esac
shift
done
@@ -158,157 +182,176 @@ month_data='
m[9]="Oct"; m[10]="Nov"; m[11]="Dec"
'
+logdir=$TMPDIR/rcs2log$$
+llogout=$logdir/l
+trap exit 1 2 13 15
+trap "rm -fr $logdir 2>/dev/null" 0
+(umask 077 && exec mkdir $logdir) || exit
-# Put rlog output into $rlogout.
-
-# If no rlog options are given,
-# log the revisions checked in since the first ChangeLog entry.
-# Since ChangeLog is only by date, some of these revisions may be duplicates of
-# what's already in ChangeLog; it's the user's responsibility to remove them.
-case $rlog_options in
+# If no rlog-format log file is given, generate one into $rlogfile.
+case $rlogfile in
'')
+ rlogfile=$logdir/r
+
+ # If no rlog options are given,
+ # log the revisions checked in since the first ChangeLog entry.
+ # Since ChangeLog is only by date, some of these revisions may be duplicates of
+ # what's already in ChangeLog; it's the user's responsibility to remove them.
+ case $rlog_options in
+ '')
+ if test -s "$changelog"
+ then
+ e='
+ /^[0-9]+-[0-9][0-9]-[0-9][0-9]/{
+ # ISO 8601 date
+ print $1
+ exit
+ }
+ /^... ... [ 0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9]+ /{
+ # old-fashioned date and time (Emacs 19.31 and earlier)
+ '"$month_data"'
+ year = $5
+ for (i=0; i<=11; i++) if (m[i] == $2) break
+ dd = $3
+ printf "%d-%02d-%02d\n", year, i+1, dd
+ exit
+ }
+ '
+ d=`$AWK "$e" <"$changelog"` || exit
+ case $d in
+ ?*) datearg="-d>$d";;
+ esac
+ fi;;
+ esac
+
+ # Use TZ specified by ChangeLog local variable, if any.
if test -s "$changelog"
then
- e='
- /^[0-9]+-[0-9][0-9]-[0-9][0-9]/{
- # ISO 8601 date
- print $1
- exit
+ extractTZ='
+ /^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*"\([^"]*\)".*/{
+ s//\1/; p; q
}
- /^... ... [ 0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9]+ /{
- # old-fashioned date and time (Emacs 19.31 and earlier)
- '"$month_data"'
- year = $5
- for (i=0; i<=11; i++) if (m[i] == $2) break
- dd = $3
- printf "%d-%02d-%02d\n", year, i+1, dd
- exit
+ /^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*t.*/{
+ s//UTC0/; p; q
}
'
- d=`$AWK "$e" <"$changelog"` || exit
- case $d in
- ?*) datearg="-d>$d"
+ logTZ=`tail "$changelog" | sed -n "$extractTZ"`
+ case $logTZ in
+ ?*) TZ=$logTZ; export TZ;;
esac
fi
-esac
-# Use TZ specified by ChangeLog local variable, if any.
-if test -s "$changelog"
-then
- extractTZ='
- /^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*"\([^"]*\)".*/{
- s//\1/; p; q
- }
- /^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*t.*/{
- s//UTC0/; p; q
- }
- '
- logTZ=`tail "$changelog" | sed -n "$extractTZ"`
- case $logTZ in
- ?*) TZ=$logTZ; export TZ
- esac
-fi
-
-# If CVS is in use, examine its repository, not the normal RCS files.
-if test ! -f CVS/Repository
-then
- rlog=rlog
- repository=
-else
- rlog='cvs -q log'
- repository=`sed 1q <CVS/Repository` || exit
- test ! -f CVS/Root || CVSROOT=`cat <CVS/Root` || exit
- case $CVSROOT in
- *:/*)
- # remote repository
- ;;
- *)
- # local repository
- case $repository in
- /*) ;;
- *) repository=${CVSROOT?}/$repository
+ # If CVS is in use, examine its repository, not the normal RCS files.
+ if test ! -f CVS/Repository
+ then
+ rlog=rlog
+ repository=
+ else
+ rlog='cvs -q log'
+ repository=`sed 1q <CVS/Repository` || exit
+ test ! -f CVS/Root || CVSROOT=`cat <CVS/Root` || exit
+ case $CVSROOT in
+ *:/*:/*)
+ echo >&2 "$0: $CVSROOT: CVSROOT has multiple ':/'s"
+ exit 1;;
+ *:/*)
+ # remote repository
+ pository=`expr "X$repository" : '.*:\(/.*\)'`;;
+ *)
+ # local repository
+ case $repository in
+ /*) ;;
+ *) repository=${CVSROOT?}/$repository;;
+ esac
+ if test ! -d "$repository"
+ then
+ echo >&2 "$0: $repository: bad repository (see CVS/Repository)"
+ exit 1
+ fi
+ pository=$repository;;
esac
- if test ! -d "$repository"
- then
- echo >&2 "$0: $repository: bad repository (see CVS/Repository)"
- exit 1
- fi
- esac
-fi
-# Use $rlog's -zLT option, if $rlog supports it.
-case `$rlog -zLT 2>&1` in
-*' option'*) ;;
-*)
- case $rlog_options in
- '') rlog_options=-zLT;;
- ?*) rlog_options=-zLT$nl$rlog_options
+ # Ensure that $pository ends in exactly one slash.
+ while :
+ do
+ case $pository in
+ *//) pository=`expr "X$pository" : 'X\(.*\)/'`;;
+ */) break;;
+ *) pository=$pository/; break;;
+ esac
+ done
+
+ fi
+
+ # Use $rlog's -zLT option, if $rlog supports it.
+ case `$rlog -zLT 2>&1` in
+ *' option'*) ;;
+ *)
+ case $rlog_options in
+ '') rlog_options=-zLT;;
+ ?*) rlog_options=-zLT$nl$rlog_options;;
+ esac;;
esac
-esac
-# With no arguments, examine all files under the RCS directory.
-case $# in
-0)
- case $repository in
- '')
- oldIFS=$IFS
- IFS=$nl
- case $recursive in
- t)
- RCSdirs=`find . -name RCS -type d -print`
- filesFromRCSfiles='s|,v$||; s|/RCS/|/|; s|^\./||'
- files=`
- {
- case $RCSdirs in
- ?*) find $RCSdirs \
- -type f \
- ! -name '*_' \
- ! -name ',*,' \
- ! -name '.*_' \
- ! -name .rcsfreeze.log \
- ! -name .rcsfreeze.ver \
- -print
+ # With no arguments, examine all files under the RCS directory.
+ case $# in
+ 0)
+ case $repository in
+ '')
+ oldIFS=$IFS
+ IFS=$nl
+ case $recursive in
+ t)
+ RCSdirs=`find . -name RCS -type d -print`
+ filesFromRCSfiles='s|,v$||; s|/RCS/|/|; s|^\./||'
+ files=`
+ {
+ case $RCSdirs in
+ ?*) find $RCSdirs \
+ -type f \
+ ! -name '*_' \
+ ! -name ',*,' \
+ ! -name '.*_' \
+ ! -name .rcsfreeze.log \
+ ! -name .rcsfreeze.ver \
+ -print;;
+ esac
+ find . -name '*,v' -print
+ } |
+ sort -u |
+ sed "$filesFromRCSfiles"
+ `;;
+ *)
+ files=
+ for file in RCS/.* RCS/* .*,v *,v
+ do
+ case $file in
+ RCS/. | RCS/.. | RCS/,*, | RCS/*_) continue;;
+ RCS/.rcsfreeze.log | RCS/.rcsfreeze.ver) continue;;
+ RCS/.\* | RCS/\* | .\*,v | \*,v) test -f "$file" || continue;;
+ RCS/*,v | RCS/.*,v) ;;
+ RCS/* | RCS/.*) test -f "$file" || continue;;
esac
- find . -name '*,v' -print
- } |
- sort -u |
- sed "$filesFromRCSfiles"
- `;;
- *)
- files=
- for file in RCS/.* RCS/* .*,v *,v
- do
- case $file in
- RCS/. | RCS/.. | RCS/,*, | RCS/*_) continue;;
- RCS/.rcsfreeze.log | RCS/.rcsfreeze.ver) continue;;
- RCS/.\* | RCS/\* | .\*,v | \*,v) test -f "$file" || continue;;
- RCS/*,v | RCS/.*,v) ;;
- RCS/* | RCS/.*) test -f "$file" || continue
- esac
+ case $files in
+ '') files=$file;;
+ ?*) files=$files$nl$file;;
+ esac
+ done
case $files in
- '') files=$file;;
- ?*) files=$files$nl$file
- esac
- done
- case $files in
- '') exit 0
+ '') exit 0;;
+ esac;;
esac
- esac
- set x $files
- shift
- IFS=$oldIFS
+ set x $files
+ shift
+ IFS=$oldIFS;;
+ esac;;
esac
-esac
-
-llogout=$TMPDIR/rcs2log$$l
-rlogout=$TMPDIR/rcs2log$$r
-trap exit 1 2 13 15
-trap "rm -f $llogout $rlogout; exit 1" 0
-case $datearg in
-?*) $rlog $rlog_options "$datearg" ${1+"$@"} >$rlogout;;
-'') $rlog $rlog_options ${1+"$@"} >$rlogout
-esac || exit
+ case $datearg in
+ ?*) $rlog $rlog_options "$datearg" ${1+"$@"} >$rlogfile;;
+ '') $rlog $rlog_options ${1+"$@"} >$rlogfile;;
+ esac || exit;;
+esac
# Get the full name of each author the logs mention, and set initialize_fullname
@@ -326,17 +369,14 @@ case $loginFullnameMailaddrs in
sed 's/["\\]/\\&/g' >$llogout <<EOF || exit
$loginFullnameMailaddrs
EOF
- loginFullnameMailaddrs=`cat $llogout`
+ loginFullnameMailaddrs=`cat $llogout`;;
esac
oldIFS=$IFS
IFS=$nl
for loginFullnameMailaddr in $loginFullnameMailaddrs
do
- case $loginFullnameMailaddr in
- *"$tab"*) IFS=$tab;;
- *) IFS=:
- esac
+ IFS=$tab
set x $loginFullnameMailaddr
login=$2
fullname=$3
@@ -346,25 +386,26 @@ EOF
initialize_mailaddr="$initialize_mailaddr
mailaddr[\"$login\"] = \"$mailaddr\""
done
- IFS=$oldIFS
+ IFS=$oldIFS;;
esac
-case $llogout in
-?*) sort -u -o $llogout <<EOF || exit
+case $logins in
+?*)
+ sort -u -o $llogout <<EOF
$logins
EOF
-esac
+ ;;
+'')
+ : ;;
+esac >$llogout || exit
+
output_authors='/^date: / {
if ($2 ~ /^[0-9]*[-\/][0-9][0-9][-\/][0-9][0-9]$/ && $3 ~ /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9][-+0-9:]*;$/ && $4 == "author:" && $5 ~ /^[^;]*;$/) {
print substr($5, 1, length($5)-1)
}
}'
authors=`
- $AWK "$output_authors" <$rlogout |
- case $llogout in
- '') sort -u;;
- ?*) sort -u | comm -23 - $llogout
- esac
+ $AWK "$output_authors" <"$rlogfile" | sort -u | comm -23 - $llogout
`
case $authors in
?*)
@@ -436,13 +477,13 @@ EOF
)
} 2>/dev/null |
$AWK -F: "$awkscript"
- `$initialize_fullname
+ `$initialize_fullname;;
esac
# Function to print a single log line.
# We don't use awk functions, to stay compatible with old awk versions.
-# `Log' is the log message (with \n replaced by \001).
+# `Log' is the log message.
# `files' contains the affected files.
printlogline='{
@@ -452,19 +493,25 @@ printlogline='{
# * file (function): comment
if (Log ~ /^\([^)]*\): /) {
i = index(Log, ")")
- files = files " " substr(Log, 1, i)
+ filefunc = substr(Log, 1, i)
+ while ((j = index(filefunc, "\n"))) {
+ files = files " " substr(filefunc, 1, j-1)
+ filefunc = substr(filefunc, j+1)
+ }
+ files = files " " filefunc
Log = substr(Log, i+3)
}
# If "label: comment" is too long, break the line after the ":".
sep = " "
- if ('"$length"' <= '"$indent"' + 1 + length(files) + index(Log, SOH)) sep = "\n" indent_string
+ i = index(Log, "\n")
+ if ('"$length"' <= '"$indent"' + 1 + length(files) + i) sep = "\n" indent_string
# Print the label.
printf "%s*%s:", indent_string, files
- # Print each line of the log, transliterating \001 to \n.
- while ((i = index(Log, SOH)) != 0) {
+ # Print each line of the log.
+ while (i) {
logline = substr(Log, 1, i-1)
if (logline ~ /[^'"$tab"' ]/) {
printf "%s%s\n", sep, logline
@@ -473,6 +520,7 @@ printlogline='{
}
sep = indent_string
Log = substr(Log, i+1)
+ i = index(Log, "\n")
}
}'
@@ -493,24 +541,27 @@ case $hostname in
*)
domainname=`(domainname) 2>/dev/null` &&
case $domainname in
- *.*) hostname=$hostname.$domainname
- esac
- esac
+ *.*) hostname=$hostname.$domainname;;
+ esac;;
+ esac;;
esac
# Process the rlog output, generating ChangeLog style entries.
# First, reformat the rlog output so that each line contains one log entry.
-# Transliterate \n to \001 so that multiline entries fit on a single line.
+# Transliterate \n to SOH so that multiline entries fit on a single line.
# Discard irrelevant rlog output.
-$AWK <$rlogout '
- BEGIN { repository = "'"$repository"'" }
- /^RCS file:/ {
- if (repository != "") {
- filename = $3
- if (substr(filename, 1, length(repository) + 1) == repository "/") {
- filename = substr(filename, length(repository) + 2)
+$AWK '
+ BEGIN {
+ pository = "'"$pository"'"
+ SOH="'"$SOH"'"
+ }
+ /^RCS file: / {
+ if (pository != "") {
+ filename = substr($0, 11)
+ if (substr(filename, 1, length(pository)) == pository) {
+ filename = substr(filename, length(pository) + 1)
}
if (filename ~ /,v$/) {
filename = substr(filename, 1, length(filename) - 2)
@@ -523,7 +574,7 @@ $AWK <$rlogout '
}
rev = "?"
}
- /^Working file:/ { if (repository == "") filename = $3 }
+ /^Working file: / { if (repository == "") filename = substr($0, 15) }
/'"$rlog_revision_pattern"'/, /^(-----------*|===========*)$/ {
line = $0
if (line ~ /'"$rlog_revision_pattern"'/) {
@@ -544,7 +595,7 @@ $AWK <$rlogout '
}
time = substr($3, 1, length($3) - 1)
author = substr($5, 1, length($5)-1)
- printf "%s %s %s %s %s %c", filename, rev, date, time, author, 1
+ printf "%s%s%s%s%s%s%s%s%s%s", filename, SOH, rev, SOH, date, SOH, time, SOH, author, SOH
rev = "?"
next
}
@@ -553,29 +604,25 @@ $AWK <$rlogout '
if (line == "Initial revision" || line ~ /^file .+ was initially added on branch .+\.$/) {
line = "New file."
}
- printf "%s%c", line, 1
+ printf "%s%s", line, SOH
}
-' |
+' <"$rlogfile" |
# Now each line is of the form
-# FILENAME REVISION YYYY-MM-DD HH:MM:SS[+-TIMEZONE] AUTHOR \001LOG
-# where \001 stands for a carriage return,
-# and each line of the log is terminated by \001 instead of \n.
+# FILENAME@REVISION@YYYY-MM-DD@HH:MM:SS[+-TIMEZONE]@AUTHOR@LOG
+# where @ stands for an SOH (octal code 001),
+# and each line of LOG is terminated by SOH instead of \n.
# Sort the log entries, first by date+time (in reverse order),
# then by author, then by log entry, and finally by file name and revision
# (just in case).
-sort +2 -4r +4 +0 |
+sort -t"$SOH" +2 -4r +4 +0 |
# Finally, reformat the sorted log entries.
-$AWK '
+$AWK -F"$SOH" '
BEGIN {
logTZ = "'"$logTZ"'"
revision = "'"$revision"'"
- # Some awk variants do not understand "\001", so we have to
- # put the char directly in the file.
- SOH="" # <-- There is a single SOH (octal code 001) here.
-
# Initialize the fullname and mailaddr associative arrays.
'"$initialize_fullname"'
'"$initialize_mailaddr"'
@@ -591,7 +638,8 @@ $AWK '
}
{
- newlog = substr($0, 1 + index($0, SOH))
+ newlog = ""
+ for (i = 6; i < NF; i++) newlog = newlog $i "\n"
# Ignore log entries prefixed by "#".
if (newlog ~ /^#/) { next }
@@ -670,7 +718,7 @@ $AWK '
# Exit successfully.
-exec rm -f $llogout $rlogout
+exec rm -fr $logdir
# Local Variables:
# tab-width:4
diff --git a/contrib/cvs/contrib/rcs2sccs.sh b/contrib/cvs/contrib/rcs2sccs.sh
index b089dfef065a..9b2fdd247d16 100644
--- a/contrib/cvs/contrib/rcs2sccs.sh
+++ b/contrib/cvs/contrib/rcs2sccs.sh
@@ -55,7 +55,7 @@ for vfile in *,v; do
exit
fi
# get file into current dir and get stats
- date=`rlog -r$rev $file | grep "^date: " | awk '{print $2; exit}' | sed -e 's/^19//'`
+ date=`rlog -r$rev $file | grep "^date: " | awk '{print $2; exit}' | sed -e 's/^19\|^20//'`
time=`rlog -r$rev $file | grep "^date: " | awk '{print $3; exit}' | sed -e 's/;//'`
author=`rlog -r$rev $file | grep "^date: " | awk '{print $5; exit}' | sed -e 's/;//'`
date="$date $time"
diff --git a/contrib/cvs/contrib/sccs2rcs.in b/contrib/cvs/contrib/sccs2rcs.in
index 018b4ff48c7e..9278c05171a8 100755
--- a/contrib/cvs/contrib/sccs2rcs.in
+++ b/contrib/cvs/contrib/sccs2rcs.in
@@ -69,7 +69,7 @@ endif
if (-d RCS) then
echo "Warning: RCS directory exists"
if (`ls -a RCS | wc -l` > 2) then
- echo "Error: RCS directory not empty
+ echo "Error: RCS directory not empty"
exit 1
endif
else
@@ -177,14 +177,12 @@ foreach sfile (SCCS/s.*)
if ($status != 0) goto ERROR
# get file into current dir and get stats
- set year = `echo $date | cut -c3-4`
- if ($year < 70) then
- # Y2K Bug, change century to 20
- set date = `sccs prs -r$rev $file | grep "^D " | awk '{printf("20%s %s", $3, $4); exit}'`
- else
- set date = `sccs prs -r$rev $file | grep "^D " | awk '{printf("19%s %s", $3, $4); exit}'`
- endif
- set author = `sccs prs -r$rev $file | grep "^D " | awk '{print $5; exit}'`
+
+ # Is the substr stuff and the +0 in the following awk script really
+ # necessary? It seems to me that if we didn't find the date format
+ # we expected in the output we have other problems.
+ set date = `sccs prs -r$rev $file | awk '/^D / {print (substr($3,0,2)+0<70?20:19) $3, $4; exit}'`
+ set author = `sccs prs -r$rev $file | awk '/^D / {print $5; exit}'`
echo ""
echo "==> file $file, rev=$rev, date=$date, author=$author"
sccs edit -r$rev $file >>& $logfile
diff --git a/contrib/cvs/depcomp b/contrib/cvs/depcomp
index 86774be1e7cd..02458b8923a3 100755
--- a/contrib/cvs/depcomp
+++ b/contrib/cvs/depcomp
@@ -123,18 +123,29 @@ sgi)
rm -f "$tmpdepfile"
exit $stat
fi
+ rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
- rm -f "$depfile"
- cp "$tmpdepfile" "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header). We avoid this by adding
-## dummy dependencies for each header file.
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like `#:fec' to the end of the
+ # dependency line.
tr ' ' '
-' < "$tmpdepfile" | \
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' -e '/^#/d' | sed -e 's/$/ :/' >> "$depfile"
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> $depfile
+ echo >> $depfile
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> $depfile
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
@@ -146,8 +157,12 @@ sgi)
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
- # in a .u file.
- tmpdepfile=`echo "$object" | sed 's/\(.*\)\..*$/\1.u/'`
+ # in a .u file. This file always lives in the current directory.
+ # Also, the AIX compiler puts `$object:' at the start of each line;
+ # $object doesn't have directory information.
+ stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
+ tmpdepfile="$stripped.u"
+ outname="$stripped.o"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
@@ -162,16 +177,11 @@ aix)
fi
if test -f "$tmpdepfile"; then
- rm -f "$depfile"
- cp "$tmpdepfile" "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header). We avoid this by adding
-## dummy dependencies for each header file.
- tr ' ' '
-' < "$tmpdepfile" | \
- sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
@@ -181,6 +191,35 @@ aix)
rm -f "$tmpdepfile"
;;
+tru64)
+ # The Tru64 AIX compiler uses -MD to generate dependencies as a side
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+ # Subdirectories are respected.
+
+ tmpdepfile="$object.d"
+ if test "$libtool" = yes; then
+ "$@" -Wc,-MD
+ else
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a space and a tab in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
diff --git a/contrib/cvs/diff/ChangeLog b/contrib/cvs/diff/ChangeLog
index 565bdb781780..5c1dfc2d0a0f 100644
--- a/contrib/cvs/diff/ChangeLog
+++ b/contrib/cvs/diff/ChangeLog
@@ -1,3 +1,38 @@
+2001-09-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with automake 1.5.
+
+2001-08-09 Derek Price <dprice@collab.net>
+
+ * system.h: Source some header files when present to eliminate warning
+ messages under Windows.
+ (Patch from "Manfred Klug" <manklu@web.de>.)
+
+2001-08-07 Derek Price <dprice@collab.net>
+
+ * build_diff.com: Turn on verify to get a better trace of the DCL.
+ * diff3.c: Eliminate compiler warning. The VMS read rval is ssize_t
+ (signed). The VMS size_t appears to be unsigned.
+ * io.c: Eliminate compiler warning (ssize_t).
+ (Patch from Mike Marciniszyn <Mike.Marciniszyn@sanchez.com>.)
+
+2001-08-06 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated.
+
+2001-07-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new Automake release candidate 1.4h.
+
+2001-06-28 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new version of Automake.
+
+2001-05-07 Larry Jones <larry.jones@sdrc.com>
+
+ * diff3.c (diff3_run): Put the name of the output file in the error
+ message instead of "could not open output file" to aid in debugging.
+
2001-04-25 Derek Price <dprice@collab.net>
* Makefile.in: Regenerated using AM 1.4e as of today at 18:10 -0400.
diff --git a/contrib/cvs/diff/Makefile.in b/contrib/cvs/diff/Makefile.in
index d9d1703d9a88..4320fc5b0a69 100644
--- a/contrib/cvs/diff/Makefile.in
+++ b/contrib/cvs/diff/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4e from Makefile.am.
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
@@ -13,7 +13,6 @@
@SET_MAKE@
-
SHELL = @SHELL@
srcdir = @srcdir@
@@ -34,11 +33,9 @@ infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
-
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-
top_builddir = ..
ACLOCAL = @ACLOCAL@
@@ -52,7 +49,6 @@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
-
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
@@ -64,25 +60,22 @@ AWK = @AWK@
CC = @CC@
CSH = @CSH@
DEPDIR = @DEPDIR@
-ETAGS = @ETAGS@
-ETAGS_INCLUDE_OPTION = @ETAGS_INCLUDE_OPTION@
+EXEEXT = @EXEEXT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTALL_STRIP_PROGRAM_ENV = @INSTALL_STRIP_PROGRAM_ENV@
KRB4 = @KRB4@
LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
-STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
-_am_include = @_am_include@
-_am_quote = @_am_quote@
+am__include = @am__include@
+am__quote = @am__quote@
includeopt = @includeopt@
install_sh = @install_sh@
@@ -96,8 +89,6 @@ libdiff_a_SOURCES = diff.c diff3.c analyze.c cmpbuf.c cmpbuf.h io.c \
EXTRA_DIST = ChangeLog build_diff.com diagmeet.note libdiff.dsp
-EXEEXT =
-OBJEXT = o
subdir = diff
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/options.h
@@ -111,19 +102,12 @@ am_libdiff_a_OBJECTS = diff.$(OBJEXT) diff3.$(OBJEXT) analyze.$(OBJEXT) \
normal.$(OBJEXT) ifdef.$(OBJEXT) util.$(OBJEXT) dir.$(OBJEXT) \
version.$(OBJEXT) side.$(OBJEXT)
libdiff_a_OBJECTS = $(am_libdiff_a_OBJECTS)
-AR = ar
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CFLAGS = @CFLAGS@
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/src
DEFS = @DEFS@
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/src
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
-DIST_SOURCES = $(libdiff_a_SOURCES)
depcomp = $(SHELL) $(top_srcdir)/depcomp
@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/analyze.Po $(DEPDIR)/cmpbuf.Po \
@AMDEP_TRUE@ $(DEPDIR)/context.Po $(DEPDIR)/diff.Po \
@@ -131,28 +115,32 @@ depcomp = $(SHELL) $(top_srcdir)/depcomp
@AMDEP_TRUE@ $(DEPDIR)/ifdef.Po $(DEPDIR)/io.Po \
@AMDEP_TRUE@ $(DEPDIR)/normal.Po $(DEPDIR)/side.Po \
@AMDEP_TRUE@ $(DEPDIR)/util.Po $(DEPDIR)/version.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(libdiff_a_SOURCES)
DIST_COMMON = ChangeLog Makefile.am Makefile.in
SOURCES = $(libdiff_a_SOURCES)
-OBJECTS = $(am_libdiff_a_OBJECTS)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj
-
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu diff/Makefile
-
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+AR = ar
+
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-
-libdiff.a: $(libdiff_a_OBJECTS) $(libdiff_a_DEPENDENCIES)
+libdiff.a: $(libdiff_a_OBJECTS) $(libdiff_a_DEPENDENCIES)
-rm -f libdiff.a
$(libdiff_a_AR) libdiff.a $(libdiff_a_OBJECTS) $(libdiff_a_LIBADD)
$(RANLIB) libdiff.a
@@ -163,6 +151,37 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/analyze.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/cmpbuf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/context.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/diff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/diff3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/dir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ed.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ifdef.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/io.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/normal.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/side.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/util.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/version.Po@am__quote@
+
+distclean-depend:
+ -rm -rf $(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@@ -179,53 +198,21 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
- unique=`for i in $$list @CONFIG@; do \
+ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || $(ETAGS) $(ETAGS_ARGS) $$tags $$unique $(LISP)
+ || etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
GTAGS:
here=`CDPATH=: && cd $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
- && gtags -i $$here
+ && gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
- -rm -f TAGS ID
-
-@_am_include@ @_am_quote@$(DEPDIR)/analyze.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/cmpbuf.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/context.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/diff.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/diff3.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/dir.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/ed.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/ifdef.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/io.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/normal.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/side.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/util.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/version.Po@_am_quote@
-
-distclean-depend:
- -rm -rf $(DEPDIR)
-
-CCDEPMODE = @CCDEPMODE@
-
-.c.o:
- source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
- $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- $(COMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
-
-.c.obj:
- source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
- $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- $(COMPILE) -c -o $@ `cygpath -w $<`
-
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -234,7 +221,11 @@ distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
- d=$(srcdir); \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
if test -d $$d/$$file; then \
cp -pR $$d/$$file $(distdir) \
|| exit 1; \
@@ -259,23 +250,20 @@ install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
-
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- INSTALL_PROGRAM_ENV='$(INSTALL_STRIP_PROGRAM_ENV)' install
-
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- -rm -f Makefile.in
clean: clean-am
clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
@@ -285,11 +273,11 @@ distclean: distclean-am
distclean-am: clean-am distclean-compile distclean-depend \
distclean-generic distclean-tags
-dvi:
+dvi: dvi-am
dvi-am:
-info:
+info: info-am
info-am:
@@ -297,7 +285,7 @@ install-data-am:
install-exec-am:
-install-info:
+install-info: install-info-am
install-man:
@@ -311,16 +299,18 @@ mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
-.PHONY: all all-am check check-am clean clean-generic \
+uninstall-am: uninstall-info-am
+
+.PHONY: GTAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES distclean distclean-compile \
distclean-depend distclean-generic distclean-tags distdir dvi \
dvi-am info info-am install install-am install-data \
install-data-am install-exec install-exec-am install-info \
- install-man install-strip installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic tags \
- uninstall uninstall-am
-
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic tags uninstall uninstall-am \
+ uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/contrib/cvs/diff/diff3.c b/contrib/cvs/diff/diff3.c
index 4a6fba618c23..6de8c81cbc4d 100644
--- a/contrib/cvs/diff/diff3.c
+++ b/contrib/cvs/diff/diff3.c
@@ -444,7 +444,7 @@ diff3_run (argc, argv, out, callbacks_arg)
outfile = fopen (out, "w");
if (outfile == NULL)
{
- perror_with_name ("could not open output file");
+ perror_with_name (out);
return 2;
}
opened_file = 1;
@@ -1847,10 +1847,10 @@ myread (fd, ptr, size)
char *ptr;
size_t size;
{
- size_t result = read (fd, ptr, size);
+ ssize_t result = read (fd, ptr, size);
if (result == -1)
diff3_perror_with_exit ("read failed");
- return result;
+ return (size_t)result;
}
static void
diff --git a/contrib/cvs/diff/io.c b/contrib/cvs/diff/io.c
index 730c09acd548..9eb2d5d4e976 100644
--- a/contrib/cvs/diff/io.c
+++ b/contrib/cvs/diff/io.c
@@ -101,7 +101,7 @@ sip (current, skip_test)
#if HAVE_SETMODE
int oldmode = setmode (current->desc, O_BINARY);
#endif
- size_t n = read (current->desc, current->buffer, current->bufsize);
+ ssize_t n = read (current->desc, current->buffer, current->bufsize);
if (n == -1)
pfatal_with_name (current->name);
current->buffered_chars = n;
@@ -128,7 +128,7 @@ void
slurp (current)
struct file_data *current;
{
- size_t cc;
+ ssize_t cc;
if (current->desc < 0)
/* The file is nonexistent. */
diff --git a/contrib/cvs/diff/system.h b/contrib/cvs/diff/system.h
index f5037ecf70a9..218d047dc114 100644
--- a/contrib/cvs/diff/system.h
+++ b/contrib/cvs/diff/system.h
@@ -69,6 +69,16 @@ GNU General Public License for more details.
#include <unistd.h>
#endif
+#ifdef HAVE_IO_H
+# include <io.h>
+#endif
+
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#else
+# include <sys/file.h>
+#endif
+
#ifndef SEEK_SET
#define SEEK_SET 0
#endif
diff --git a/contrib/cvs/doc/ChangeLog b/contrib/cvs/doc/ChangeLog
index eca8f91f86e1..713fa709dce5 100644
--- a/contrib/cvs/doc/ChangeLog
+++ b/contrib/cvs/doc/ChangeLog
@@ -1,3 +1,300 @@
+2002-04-18 Derek Price <oberon@umich.edu>
+
+ * doc/Makefile.am: Add FIXME comment about an automake bug.
+ * doc/Makefile.in: Regenerated.
+ * doc/stamp-vti: Regenerated as a workaround for the above mentioned
+ automake bug.
+ * doc/version.texi: Ditto.
+
+2002-04-17 Derek Price <oberon@umich.edu>
+
+ * stamp-vti: Regenerated.
+ * version.texi: Ditto.
+
+2002-04-17 Derek Price <oberon@umich.edu>
+
+ * cvs.texinfo: Add index entries for inetd and xinetd.
+
+2002-03-26 Derek Price <oberon@umich.edu>
+
+ * stamp-vti: Regenerated.
+ * version.texi: Ditto.
+
+2002-03-17 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (log options): Add new -S option.
+
+2002-03-12 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (diff options): Add missing menu for new subsections.
+ (Patch from Pavel Roskin <proski@gnu.org>.)
+
+2002-03-09 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (Update imports): Suggest merging with two rel tags
+ instead of the branch tag and a date and explain why.
+
+2002-02-26 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (diff options): Document all the diff options.
+
+2002-01-10 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (log options): Update -r :: to match code changes.
+ (Variables): Document LOGNAME and USER environment variables.
+
+2001-12-03 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (Invoking CVS): Add -F option for annotate and
+ rannotate.
+
+2001-11-28 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (File permissions): Add note about SGID being required
+ on some systems. Add note about LockDir.
+
+2001-10-18 Derek Price <dprice@collab.net>
+
+ * Makefile.am: Add --batch to texi2dvi invocations.
+ (Thanks to Akim Demaille <akim@epita.fr> for the suggestion.)
+
+ * Makefile.in: Regenerated.
+
+2001-10-04 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (Connecting via rsh): Add : between host name and
+ root directory in example since some versions of CVS require it.
+ (Reported by Trevor Jim <trevor@research.att.com>.)
+
+2001-09-14 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (commit files): Make following sections (commitinfo,
+ verifymsg, editinfo, and loginfo) subsections of this one.
+
+2001-09-06 Derek Price <dprice@collab.net>
+
+ * cvs.texinfo (Watch information): Cleanup some watch/edit
+ explanations and discourage the belief that files should be
+ releasable.
+
+ * stamp-vti: Regenerated.
+ * version.texi: Ditto.
+ (Patch from Eric Siegerman <erics@telepres.com>.)
+
+2001-09-05 Derek Price <dprice@collab.net>
+
+ * cvsclient.texi: Use version-client.texi instead of version.texi so
+ cvsclient.* can have a different build date than cvs.texinfo.
+
+ * Makefile.in: Regenerated.
+ * stamp-1: New file.
+ * version-client.texi: Ditto.
+ (Reportred by Alexey Mahotkin <alexm@hsys.msk.ru>.)
+
+2001-09-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with automake 1.5.
+ * version.texi: Ditto.
+
+2001-08-24 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (Error messages): Add new message about root not
+ being allowed to do commit.
+
+2001-08-24 Derek Price <dprice@collab.net>
+
+ * cvs.texinfo (config): Add a new RereadLogAfterVerify
+ CVSROOT/config option to control how verifymsg scripts deal with
+ read-write log messages.
+ (Patch from Mark D. Baushke <mdb@cvshome.org>.)
+
+ * cvs.texinfo (verifymsg): The verification script may now modify
+ the log message.
+ (Patch from Mark D. Baushke <mdb@cvshome.org>.)
+
+ * cvs.texinfo (config, verifymsg): Correct default, changes for clarity,
+ and add a warning about `stat' and large repositories.
+
+ * version.texi: Regenerated.
+ * stamp-vti: Ditto.
+
+2001-08-20 Derek Price <dprice@collab.net>
+
+ * Makefile.am: Reformat comment for 80 chars.
+
+ * Makefile.in: Regenerated.
+
+2001-08-10 Derek Price <dprice@collab.net>
+
+ * cvs.texinfo (Default options and the ~/.cvsrc file): Added a few more
+ "standard" options to the example.
+
+ * stamp-vti: Regenerated.
+ * version.texi: Ditto.
+
+2001-08-06 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated.
+
+2001-07-17 Derek Price <dprice@collab.net>
+
+ * version.texi: Regenerated.
+ * stamp-vti: Ditto.
+
+2001-07-06 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (Variables): Add index entry for CVS_USER.
+ (Reported by Jens Schweikhardt <Jens.Schweikhardt@marconi.com>.)
+ (Working directory storage): Fix Emptydir index entry: Emptydir
+ is a directory, not a file.
+
+2001-07-05 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (Working directory storage): Add Emptydir to index.
+
+2001-07-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new Automake release candidate 1.4h.
+
+2001-06-28 Derek Price <dprice@collab.net>
+
+ * Makefile.am: Reference to CVSvn.texi removed.
+ * cvs.texinfo: @include version.texi and change CVSVN to VERSION.
+ * cvsclient.texi: Ditto.
+
+ * version.texi: New file.
+ * stamp-vti: Ditto.
+ * mdate-sh: New File. Work-around bug in Automake 1.4f by copying
+ top-level mdate-sh here.
+
+ * CVSvn.texi.in: Removed.
+ * CVSvn.texi: Ditto.
+
+ * Makefile.in: Regenerated.
+ (Patch from Alexey Mahotkin <alexm@hsys.msk.ru>.)
+
+2001-06-27 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (loginfo): Note that format string expansion is
+ quoted and contains escapes.
+
+2001-06-22 Derek Price <dprice@collab.net>
+
+ * cvs.texinfo (checkout options): Fix transliteration typo in co
+ example.
+ (Patch from Adrian Aichner <adrian@xemacs.org>.)
+
+2001-06-12 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (Global options): Note that -T only affects the local
+ process in client/server mode.
+ (Environment variables): Note that CVS_SERVER can include arguments
+ as well as a program name, and note that it applies to :fork: as well
+ as to :ext: and :server:, although the default value is different.
+
+2001-06-08 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (config): Mention using LockDir on in-memory
+ filesystem to speed up locking.
+
+2001-06-07 Derek Price <dprice@collab.net>
+
+ * Makefile.am (EXTRA_DIST): Remove *.aux.
+ (MOSTLYCLEAN_FILES): Remove this macro since the Automake bug it was
+ working around has been fixed.
+
+2001-06-07 Derek Price <dprice@collab.net>
+
+ * HACKING.DOCS: Add link to the main texinfo documentation.
+
+2001-06-07 Derek Price <dprice@collab.net>
+
+ * README.DOCS: Rename to
+ * HACKING.DOCS: this.
+
+2001-06-07 Derek Price <dprice@collab.net>
+
+ * README.DOCS: New file attempting to document some of our texinfo
+ conventions.
+
+2001-06-06 Derek Price <dprice@collab.net>
+
+ (Reformatting, rewording, & additions to a patch from
+ Stephen Cameron <steve.cameron@compaq.com>.)
+
+ * cvs.texinfo (Invoking cvs, Modifying tags)
+ document new -B option of rtag and tag commands.
+
+2001-06-04 Derek Price <dprice@collab.net>
+
+ * Makefile.am: Remove commented out DISTFILES &
+ AUTOMAKE_OPTIONS=no-texinfo.tex.
+ (Reported by Alexey Mahotkin <alexm@hsys.msk.ru>.)
+ * Makefile.in: Regenerated.
+
+2001-06-04 Larry Jones <larry.jones@sdrc.com>
+
+ * Makefile.am: Fix rules for cvs-paper (.pdf rule actually generated
+ .ps and vice versa).
+ (Reported by Alexey Mahotkin <alexm@hsys.msk.ru>.)
+ * Makefile.in: Regenerated.
+
+2001-05-29 Derek Price <dprice@collab.net>
+
+ * cvs.texinfo (Repository): Fix explanation of CVSROOT parsing
+ algorithm.
+
+2001-05-29 Derek Price <dprice@collab.net>
+ patch from Pavel Roskin <proski@gnu.org>
+
+ * Makefile.am (CVSvn.texi): Double hash comment in rule since single
+ hash comments are not portable.
+
+ * Makefile.in: Regenerated.
+
+2001-05-21 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (Error messages): Fix ordering; add "cannot commit
+ files as root".
+
+ * cvs.texinfo (Invoking CVS): Add entries for kserver, pserver,
+ rannotate, rlog, and server.
+
+ * cvs.texinfo: Lots of minor editorial corrections. Mostly adding
+ @noindent after examples where the following text is intended to
+ be a continuation of the preceding text, not a new paragraph.
+
+ * cvs.texinfo (Connection): Replace information about unsetting
+ $HOME for people with old releases.
+
+
+ * cvs.texinfo (Connecting via rsh): Use @samp{} instead of @file{}
+ where it seemed appropriate.
+ (Patch from Alexey Mahotkin <alexm@hsys.msk.ru>).
+
+2001-05-18 Larry Jones <larry.jones@sdrc.com>
+
+ * cvs.texinfo (Password authentication server): Add xinetd info.
+ (Connection): Add "broken pipe" to possible error messages.
+
+2001-05-18 Derek Price <dprice@collab.net>
+
+ * cvs.texinfo (update output): Change wording to something that sounds
+ a bit more like english.
+
+2001-05-02 Derek Price <dprice@collab.net>
+
+ * cvs.texinfo (Top): Change @ifinfo to @ifnottex to placate HTML
+ generators.
+
+2001-04-27 Derek Price <dprice@collab.net>
+
+ * CVSvn.texi: Regenerated.
+
+2001-04-27 Derek Price <dprice@collab.net>
+
+ * CVSvn.texi: Regenerated.
+
2001-04-25 Derek Price <dprice@collab.net>
* Makefile.in: Regenerated using AM 1.4e as of today at 18:10 -0400.
diff --git a/contrib/cvs/doc/Makefile.am b/contrib/cvs/doc/Makefile.am
index 7821058baa07..c00ed3f65a49 100644
--- a/contrib/cvs/doc/Makefile.am
+++ b/contrib/cvs/doc/Makefile.am
@@ -12,20 +12,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-#DISTFILES = \
-# .cvsignore \
-# RCSFILES \
-
-# AUTOMAKE_OPTIONS = no-texinfo.tex
-
-# FIXME - these rebuild every 'make dist' with some BSD makes due to a bug
-# that prevents make from searching VPATH for targets. There is some
-# machinery in place in configure.in to work around this for some targets
-# (see the CVSvn.texi target below) now, but fixing the two info_TEXINFOS
-# targets below is probably going to require work on Automake
info_TEXINFOS = cvs.texinfo cvsclient.texi
-cvs_TEXINFOS = CVSvn.texi
-cvsclient_TEXINFOS = CVSvn.texi
POSTSCRIPTS = \
cvs.ps \
@@ -44,17 +31,10 @@ TXTS = \
EXTRA_DIST = \
$(POSTSCRIPTS) \
.cvsignore \
- CVSvn.texi.in \
ChangeLog.fsf \
RCSFILES \
- cvs-paper.ms \
- cvs.aux \
- cvsclient.aux
-
-# Listing cvs.cps & cvs.fns here is a workaround for an Automake deficiency
-MOSTLYCLEANFILES = \
- cvs.cps \
- cvs.fns
+ mdate-sh \
+ cvs-paper.ms
CLEANFILES = \
$(PDFS) \
@@ -75,18 +55,21 @@ txt: $(TXTS)
dvi: cvs.dvi cvsclient.dvi
.PHONY: dvi
-cvs.aux cvs.pdf cvs.txt: cvs.texinfo $(cvs_TEXINFOS)
-cvsclient.aux cvsclient.pdf cvsclient.txt: cvsclient.texi $(cvsclient_TEXINFOS)
+# FIXME-AUTOMAKE:
+# For some reason if I remove version.texi, it doesn't get built automatically.
+# This needs to be fixed in automake.
+cvs.aux cvs.pdf cvs.txt: cvs.texinfo $(srcdir)/version.texi
+cvsclient.aux cvsclient.pdf cvsclient.txt: cvsclient.texi
-# These targets need to be very specific so that the other PDFs get generated correctly.
-# If they are more generic and cvs.ps is made before cvs.pdf, then cvs.pdf will be
-# generated from the generic target and the PS source, which contains less information
-# than the usual texinfo source.
-cvs-paper.pdf: cvs-paper.ps
+# These targets need to be very specific so that the other PDFs get generated
+# correctly. If they are more generic and cvs.ps is made before cvs.pdf, then
+# cvs.pdf will be generated from the generic target and the PS source, which
+# contains less information (hyperlinks and such) than the usual texinfo source.
+cvs-paper.ps: cvs-paper.ms
$(ROFF) -t -p -ms -Tps $< > $@-t
mv $@-t $@
-cvs-paper.ps: cvs-paper.ms
+cvs-paper.pdf: cvs-paper.ps
$(PS2PDF) $< $@
SUFFIXES = .aux .txt .pdf
@@ -94,23 +77,13 @@ SUFFIXES = .aux .txt .pdf
# texinfo based targets automake neglects to include
.texinfo.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf $<
+ MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.txi.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf $<
+ MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.texi.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf $<
-
-.texinfo.aux:
- TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
-.txi.aux:
- TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
-.texi.aux:
- TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
+ MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.texinfo.txt:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
@@ -122,34 +95,9 @@ SUFFIXES = .aux .txt .pdf
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(MAKEINFO) $< --no-headers -o $@
+##
## MAINTAINER Targets
-
-## CVSvn.texi ##
-# - CVSvn.texi needs to be updated only once, since it depends on
-# configure.in, not on the results of a 'configure' run.
-# - It is guaranteed (with GNU Make) that when the version in configure.in
-# is changed, acversion.m4 is built only after the new version number is
-# propagated to the Makefile. (Libtool uses the same guarantee.)
-# - Of the next three targets, only the next one or the following two should be
-# enabled, not all three
-if MAKE_TARGETS_IN_VPATH
-# - This is the target for systems without the BSD VPATH bug in make or with
-# $(srcdir) = $(builddir)
-CVSvn.texi: $(srcdir)/CVSvn.texi.in $(top_srcdir)/configure.in
- sed 's,@VERSION\@,$(VERSION),g' $(srcdir)/CVSvn.texi.in >$(srcdir)/CVSvn.ttexi
- mv $(srcdir)/CVSvn.ttexi $(srcdir)/CVSvn.texi
-else
-# - The next two targets are a workaround for the fact that some BSD makes
-# don't look through VPATH for targets, but only for sources.
-# - They should be disabled on systems without the bug and in environments
-# where $(srcdir) = $(builddir)
-CVSvn.texi: $(srcdir)/CVSvn.texi
- # use cat so the time stamp gets set properly
- cat $(srcdir)/CVSvn.texi >$@
-$(srcdir)/CVSvn.texi: $(srcdir)/CVSvn.texi.in $(top_srcdir)/configure.in
- sed 's,@VERSION\@,$(VERSION),g' $(srcdir)/CVSvn.texi.in >$(srcdir)/CVSvn.ttexi
- mv $(srcdir)/CVSvn.ttexi $(srcdir)/CVSvn.texi
-endif
+##
## realclean ##
# for backwards compatibility with the old makefiles
diff --git a/contrib/cvs/doc/Makefile.in b/contrib/cvs/doc/Makefile.in
index a47f45d8b2cc..8d3814a49756 100644
--- a/contrib/cvs/doc/Makefile.in
+++ b/contrib/cvs/doc/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4e from Makefile.am.
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
@@ -26,19 +26,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-#DISTFILES = \
-# .cvsignore \
-# RCSFILES \
-
-# AUTOMAKE_OPTIONS = no-texinfo.tex
-
-# FIXME - these rebuild every 'make dist' with some BSD makes due to a bug
-# that prevents make from searching VPATH for targets. There is some
-# machinery in place in configure.in to work around this for some targets
-# (see the CVSvn.texi target below) now, but fixing the two info_TEXINFOS
-# targets below is probably going to require work on Automake
-
-
SHELL = @SHELL@
srcdir = @srcdir@
@@ -59,11 +46,9 @@ infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
-
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-
top_builddir = ..
ACLOCAL = @ACLOCAL@
@@ -77,7 +62,6 @@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
-
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
@@ -89,31 +73,26 @@ AWK = @AWK@
CC = @CC@
CSH = @CSH@
DEPDIR = @DEPDIR@
-ETAGS = @ETAGS@
-ETAGS_INCLUDE_OPTION = @ETAGS_INCLUDE_OPTION@
+EXEEXT = @EXEEXT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTALL_STRIP_PROGRAM_ENV = @INSTALL_STRIP_PROGRAM_ENV@
KRB4 = @KRB4@
LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
-STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
-_am_include = @_am_include@
-_am_quote = @_am_quote@
+am__include = @am__include@
+am__quote = @am__quote@
includeopt = @includeopt@
install_sh = @install_sh@
info_TEXINFOS = cvs.texinfo cvsclient.texi
-cvs_TEXINFOS = CVSvn.texi
-cvsclient_TEXINFOS = CVSvn.texi
POSTSCRIPTS = \
cvs.ps \
@@ -135,18 +114,10 @@ TXTS = \
EXTRA_DIST = \
$(POSTSCRIPTS) \
.cvsignore \
- CVSvn.texi.in \
ChangeLog.fsf \
RCSFILES \
- cvs-paper.ms \
- cvs.aux \
- cvsclient.aux
-
-
-# Listing cvs.cps & cvs.fns here is a workaround for an Automake deficiency
-MOSTLYCLEANFILES = \
- cvs.cps \
- cvs.fns
+ mdate-sh \
+ cvs-paper.ms
CLEANFILES = \
@@ -159,8 +130,6 @@ MAINTAINERCLEANFILES = \
SUFFIXES = .aux .txt .pdf
-EXEEXT =
-OBJEXT = o
subdir = doc
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/options.h
@@ -174,63 +143,110 @@ DIST_SOURCES =
INFO_DEPS = cvs.info cvsclient.info
DVIS = cvs.dvi cvsclient.dvi
TEXINFOS = cvs.texinfo cvsclient.texi
-DIST_COMMON = $(cvs_TEXINFOS) $(cvsclient_TEXINFOS) ChangeLog \
- Makefile.am Makefile.in texinfo.tex
+DIST_COMMON = ChangeLog Makefile.am Makefile.in mdate-sh stamp-1 \
+ stamp-vti texinfo.tex version-client.texi version.texi
all: all-am
.SUFFIXES:
.SUFFIXES: .aux .txt .pdf .dvi .info .ps .texi .texinfo .txi
-
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile
-
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
-cvs.info: cvs.texinfo $(cvs_TEXINFOS)
-cvs.dvi: cvs.texinfo $(cvs_TEXINFOS)
-
-cvsclient.info: cvsclient.texi $(cvsclient_TEXINFOS)
-cvsclient.dvi: cvsclient.texi $(cvsclient_TEXINFOS)
+$(srcdir)/version.texi: $(srcdir)/stamp-vti
+ @:
+$(srcdir)/stamp-vti: cvs.texinfo $(top_srcdir)/configure.in
+ @(set `$(SHELL) $(srcdir)/mdate-sh $(srcdir)/cvs.texinfo`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > vti.tmp
+ @cmp -s vti.tmp $(srcdir)/version.texi \
+ || (echo "Updating $(srcdir)/version.texi"; \
+ cp vti.tmp $(srcdir)/version.texi)
+ -@rm -f vti.tmp
+ @cp $(srcdir)/version.texi $@
+
+mostlyclean-vti:
+ -rm -f vti.tmp
+
+maintainer-clean-vti:
+ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
+
+cvs.info: cvs.texinfo $(srcdir)/version.texi
+cvs.dvi: cvs.texinfo $(srcdir)/version.texi
+
+$(srcdir)/version-client.texi: $(srcdir)/stamp-1
+ @:
+$(srcdir)/stamp-1: cvsclient.texi $(top_srcdir)/configure.in
+ @(set `$(SHELL) $(srcdir)/mdate-sh $(srcdir)/cvsclient.texi`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > 1.tmp
+ @cmp -s 1.tmp $(srcdir)/version-client.texi \
+ || (echo "Updating $(srcdir)/version-client.texi"; \
+ cp 1.tmp $(srcdir)/version-client.texi)
+ -@rm -f 1.tmp
+ @cp $(srcdir)/version-client.texi $@
+
+mostlyclean-1:
+ -rm -f 1.tmp
+
+maintainer-clean-1:
+ -rm -f $(srcdir)/stamp-1 $(srcdir)/version-client.texi
+
+cvsclient.info: cvsclient.texi $(srcdir)/version-client.texi
+cvsclient.dvi: cvsclient.texi $(srcdir)/version-client.texi
.texi.info:
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
- && $(MAKEINFO) `echo $< | sed 's,.*/,,'`
+ && $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
+ `echo $< | sed 's,.*/,,'`
.texi.dvi:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) $<
.texi:
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
- && $(MAKEINFO) `echo $< | sed 's,.*/,,'`
+ && $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
+ `echo $< | sed 's,.*/,,'`
.texinfo.info:
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
- && $(MAKEINFO) `echo $< | sed 's,.*/,,'`
+ && $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
+ `echo $< | sed 's,.*/,,'`
.texinfo.dvi:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) $<
.texinfo:
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
- && $(MAKEINFO) `echo $< | sed 's,.*/,,'`
+ && $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
+ `echo $< | sed 's,.*/,,'`
+MAKEINFO = @MAKEINFO@
+TEXI2DVI = texi2dvi
DVIPS = dvips
.dvi.ps:
$(DVIPS) $< -o $@
uninstall-info-am:
$(PRE_UNINSTALL)
- @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
+ @if (install-info --version && \
+ install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file"; \
@@ -282,7 +298,11 @@ distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
- d=$(srcdir); \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
if test -d $$d/$$file; then \
cp -pR $$d/$$file $(distdir) \
|| exit 1; \
@@ -311,25 +331,21 @@ install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
-
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- INSTALL_PROGRAM_ENV='$(INSTALL_STRIP_PROGRAM_ENV)' install
-
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- -rm -f Makefile.in
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
@@ -367,7 +383,8 @@ install-info-am: $(INFO_DEPS)
done; \
done
@$(POST_INSTALL)
- @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
+ @if (install-info --version && \
+ install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\
@@ -380,25 +397,26 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-maintainer-clean-am: distclean-am maintainer-clean-aminfo \
- maintainer-clean-generic
+maintainer-clean-am: distclean-am maintainer-clean-1 \
+ maintainer-clean-aminfo maintainer-clean-generic \
+ maintainer-clean-vti
mostlyclean: mostlyclean-am
-mostlyclean-am: mostlyclean-aminfo mostlyclean-generic
+mostlyclean-am: mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \
+ mostlyclean-vti
uninstall-am: uninstall-info-am
-uninstall-info: uninstall-info-am
-
.PHONY: all all-am check check-am clean clean-generic dist-info \
distclean distclean-generic distdir dvi dvi-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-aminfo \
- maintainer-clean-generic mostlyclean mostlyclean-aminfo \
- mostlyclean-generic uninstall uninstall-am uninstall-info-am
+ maintainer-clean maintainer-clean-1 maintainer-clean-aminfo \
+ maintainer-clean-generic maintainer-clean-vti mostlyclean \
+ mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \
+ mostlyclean-vti uninstall uninstall-am uninstall-info-am
doc ps: $(POSTSCRIPTS)
@@ -413,40 +431,33 @@ txt: $(TXTS)
dvi: cvs.dvi cvsclient.dvi
.PHONY: dvi
-cvs.aux cvs.pdf cvs.txt: cvs.texinfo $(cvs_TEXINFOS)
-cvsclient.aux cvsclient.pdf cvsclient.txt: cvsclient.texi $(cvsclient_TEXINFOS)
+# FIXME-AUTOMAKE:
+# For some reason if I remove version.texi, it doesn't get built automatically.
+# This needs to be fixed in automake.
+cvs.aux cvs.pdf cvs.txt: cvs.texinfo $(srcdir)/version.texi
+cvsclient.aux cvsclient.pdf cvsclient.txt: cvsclient.texi
-# These targets need to be very specific so that the other PDFs get generated correctly.
-# If they are more generic and cvs.ps is made before cvs.pdf, then cvs.pdf will be
-# generated from the generic target and the PS source, which contains less information
-# than the usual texinfo source.
-cvs-paper.pdf: cvs-paper.ps
+# These targets need to be very specific so that the other PDFs get generated
+# correctly. If they are more generic and cvs.ps is made before cvs.pdf, then
+# cvs.pdf will be generated from the generic target and the PS source, which
+# contains less information (hyperlinks and such) than the usual texinfo source.
+cvs-paper.ps: cvs-paper.ms
$(ROFF) -t -p -ms -Tps $< > $@-t
mv $@-t $@
-cvs-paper.ps: cvs-paper.ms
+cvs-paper.pdf: cvs-paper.ps
$(PS2PDF) $< $@
# texinfo based targets automake neglects to include
.texinfo.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf $<
+ MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.txi.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf $<
+ MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.texi.pdf:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf $<
-
-.texinfo.aux:
- TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
-.txi.aux:
- TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
-.texi.aux:
- TEXINPUTS=$(srcdir):$$TEXINPUTS \
- MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<
+ MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) --pdf --batch $<
.texinfo.txt:
TEXINPUTS=$(srcdir):$$TEXINPUTS \
@@ -458,33 +469,9 @@ cvs-paper.ps: cvs-paper.ms
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(MAKEINFO) $< --no-headers -o $@
-# - CVSvn.texi needs to be updated only once, since it depends on
-# configure.in, not on the results of a 'configure' run.
-# - It is guaranteed (with GNU Make) that when the version in configure.in
-# is changed, acversion.m4 is built only after the new version number is
-# propagated to the Makefile. (Libtool uses the same guarantee.)
-# - Of the next three targets, only the next one or the following two should be
-# enabled, not all three
-# - This is the target for systems without the BSD VPATH bug in make or with
-# $(srcdir) = $(builddir)
-@MAKE_TARGETS_IN_VPATH_TRUE@CVSvn.texi: $(srcdir)/CVSvn.texi.in $(top_srcdir)/configure.in
-@MAKE_TARGETS_IN_VPATH_TRUE@ sed 's,@VERSION\@,$(VERSION),g' $(srcdir)/CVSvn.texi.in >$(srcdir)/CVSvn.ttexi
-@MAKE_TARGETS_IN_VPATH_TRUE@ mv $(srcdir)/CVSvn.ttexi $(srcdir)/CVSvn.texi
-# - The next two targets are a workaround for the fact that some BSD makes
-# don't look through VPATH for targets, but only for sources.
-# - They should be disabled on systems without the bug and in environments
-# where $(srcdir) = $(builddir)
-@MAKE_TARGETS_IN_VPATH_FALSE@CVSvn.texi: $(srcdir)/CVSvn.texi
-@MAKE_TARGETS_IN_VPATH_FALSE@ # use cat so the time stamp gets set properly
-@MAKE_TARGETS_IN_VPATH_FALSE@ cat $(srcdir)/CVSvn.texi >$@
-@MAKE_TARGETS_IN_VPATH_FALSE@$(srcdir)/CVSvn.texi: $(srcdir)/CVSvn.texi.in $(top_srcdir)/configure.in
-@MAKE_TARGETS_IN_VPATH_FALSE@ sed 's,@VERSION\@,$(VERSION),g' $(srcdir)/CVSvn.texi.in >$(srcdir)/CVSvn.ttexi
-@MAKE_TARGETS_IN_VPATH_FALSE@ mv $(srcdir)/CVSvn.ttexi $(srcdir)/CVSvn.texi
-
# for backwards compatibility with the old makefiles
realclean: maintainer-clean
.PHONY: realclean
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/contrib/cvs/doc/cvs.texinfo b/contrib/cvs/doc/cvs.texinfo
index 82ccea04793e..6e5b0a237e11 100644
--- a/contrib/cvs/doc/cvs.texinfo
+++ b/contrib/cvs/doc/cvs.texinfo
@@ -38,8 +38,8 @@
@finalout
@setfilename cvs.info
-@include CVSvn.texi
-@settitle CVS---Concurrent Versions System v@value{CVSVN}
+@include version.texi
+@settitle CVS---Concurrent Versions System v@value{VERSION}
@setchapternewpage odd
@c -- TODO list:
@@ -91,7 +91,7 @@ approved by the Free Software Foundation.
@sp
@center @titlefont{CVS}
@sp 2
-@center for @sc{cvs} @value{CVSVN}
+@center for @sc{cvs} @value{VERSION}
@comment -release-
@sp 3
@center Per Cederqvist et al
@@ -121,7 +121,7 @@ approved by the Free Software Foundation.
@comment The real text starts here
@comment ================================================================
-@ifinfo
+@ifnottex
@c ---------------------------------------------------------------------
@node Top
@top
@@ -132,8 +132,8 @@ approved by the Free Software Foundation.
@c something they can both cope with.
This info manual describes how to use and administer
-@sc{cvs} version @value{CVSVN}.
-@end ifinfo
+@sc{cvs} version @value{VERSION}.
+@end ifnottex
@c This menu is pretty long. Not sure how easily that
@c can be fixed (no brilliant ideas right away)...
@@ -743,8 +743,8 @@ access methods, see @ref{Remote repositories}.
@c Can se say this more concisely? Like by passing
@c more of the buck to the Remote repositories node?
If the access method is omitted, then if the repository
-does not contain @samp{:}, then @code{:local:} is
-assumed. If it does contain @samp{:} then either
+starts with @samp{/}, then @code{:local:} is
+assumed. If it does not start with @samp{/} then either
@code{:ext:} or @code{:server:} is assumed. For
example, if you have a local repository in
@file{/usr/local/cvsroot}, you can use
@@ -752,7 +752,7 @@ example, if you have a local repository in
@code{:local:/usr/local/cvsroot}. But if (under
Windows NT, for example) your local repository is
@file{c:\src\cvsroot}, then you must specify the access
-method, as in @code{:local:c:\src\cvsroot}.
+method, as in @code{:local:c:/src/cvsroot}.
@c This might appear to go in Repository storage, but
@c actually it is describing something which is quite
@@ -1004,6 +1004,11 @@ create a UNIX group (see group(5)) consisting of the
persons that are to edit the files in a project, and
set up the repository so that it is that group that
owns the directory.
+(On some systems, you also need to set the set-group-ID-on-execution bit
+on the repository directories (see chmod(1)) so that newly-created files
+and directories get the group-ID of the parent directory rather than
+that of the current process.)
+
@c See also comment in commitinfo node regarding cases
@c which are really awkward with unix groups.
@@ -1012,7 +1017,10 @@ a per-directory basis.
Note that users must also have write access to check
out files, because @sc{cvs} needs to create lock files
-(@pxref{Concurrency}).
+(@pxref{Concurrency}). You can use LockDir in CVSROOT/config
+to put the lock files somewhere other than in the repository
+if you want to allow read-only access to some directories
+(@pxref{config}).
@c CVS seems to use CVSUMASK in picking permissions for
@c val-tags, but maybe we should say more about this.
@@ -1153,12 +1161,14 @@ would be in
/usr/local/cvsroot/yoyodyne/tc/backend.c,v
@end example
+@noindent
but if it goes in the attic, it would be in
@example
/usr/local/cvsroot/yoyodyne/tc/Attic/backend.c,v
@end example
+@noindent
@cindex Dead state
instead. It should not matter from a user point of
view whether a file is in the attic; @sc{cvs} keeps
@@ -1259,6 +1269,7 @@ Ffile2 _watched=;_editors=sue>8 Jan 1975+workstn1+/home/sue/cvs
D _watched=
@end example
+@noindent
means that the file @file{file1} should be checked out
read-only. Furthermore, joe is watching for edits and
mary is watching for commits. The file @file{file2}
@@ -1461,12 +1472,14 @@ example, after the command
cvs -d :local:/usr/local/cvsroot checkout yoyodyne/tc
@end example
+@noindent
@file{Root} will contain
@example
:local:/usr/local/cvsroot
@end example
+@noindent
and @file{Repository} will contain either
@example
@@ -1483,6 +1496,8 @@ yoyodyne/tc
If the particular working directory does not correspond
to a directory in the repository, then @file{Repository}
should contain @file{CVSROOT/Emptydir}.
+@cindex Emptydir, in CVSROOT directory
+@cindex CVSROOT/Emptydir directory
@cindex Entries file, in CVS directory
@cindex CVS/Entries file
@@ -1500,6 +1515,7 @@ If the first character is @samp{/}, then the format is:
/@var{name}/@var{revision}/@var{timestamp}[+@var{conflict}]/@var{options}/@var{tagdate}
@end example
+@noindent
where @samp{[} and @samp{]} are not part of the entry,
but instead indicate that the @samp{+} and conflict
marker are optional. @var{name} is the name of the
@@ -1560,6 +1576,7 @@ like:
D/@var{name}/@var{filler1}/@var{filler2}/@var{filler3}/@var{filler4}
@end example
+@noindent
where @var{name} is the name of the subdirectory, and
all the @var{filler} fields should be silently ignored,
for future expansion. Programs which modify
@@ -1697,6 +1714,7 @@ the @file{Base} directory. The format is:
B@var{name}/@var{rev}/@var{expansion}
@end example
+@noindent
where @var{expansion} should be ignored, to allow for
future expansion.
@@ -2146,22 +2164,23 @@ For information on disk space requirements, see
@subsection Connecting with rsh
@cindex rsh
-@sc{cvs} uses the @file{rsh} protocol to perform these
+@sc{cvs} uses the @samp{rsh} protocol to perform these
operations, so the remote user host needs to have a
@file{.rhosts} file which grants access to the local
user.
-For example, suppose you are the user @file{mozart} on
-the local machine @file{toe.example.com}, and the
-server machine is @file{faun.example.org}. On
+For example, suppose you are the user @samp{mozart} on
+the local machine @samp{toe.example.com}, and the
+server machine is @samp{faun.example.org}. On
faun, put the following line into the file
-@file{.rhosts} in @file{bach}'s home directory:
+@file{.rhosts} in @samp{bach}'s home directory:
@example
toe.example.com mozart
@end example
-Then test that @code{rsh} is working with
+@noindent
+Then test that @samp{rsh} is working with
@example
rsh -l bach faun.example.org 'echo $PATH'
@@ -2226,9 +2245,10 @@ the module @file{foo} in the repository
@file{faun.example.org}, you are ready to go:
@example
-cvs -d :ext:bach@@faun.example.org/usr/local/cvsroot checkout foo
+cvs -d :ext:bach@@faun.example.org:/usr/local/cvsroot checkout foo
@end example
+@noindent
(The @file{bach@@} can be omitted if the username is
the same on both the local and remote hosts.)
@@ -2274,6 +2294,8 @@ authentication security}, for more details.
@cindex port, specifying for remote repositories
@cindex Password server, setting up
@cindex Authenticating server, setting up
+@cindex inetd, configuring for pserver
+@cindex xinetd, configuring for pserver
@c FIXME: this isn't quite right regarding port
@c numbers; CVS looks up "cvspserver" in
@c /etc/services (on unix, but what about non-unix?).
@@ -2296,8 +2318,9 @@ single line in @file{inetd.conf}) should be sufficient:
cvs -f --allow-root=/usr/cvsroot pserver
@end example
-You could also use the
-@samp{-T} option to specify a temporary directory.
+@noindent
+(You could also use the
+@samp{-T} option to specify a temporary directory.)
The @samp{--allow-root} option specifies the allowable
@sc{cvsroot} directory. Clients which attempt to use a
@@ -2318,8 +2341,30 @@ name instead of a raw port number, then put this in
cvspserver 2401/tcp
@end example
- and put @code{cvspserver} instead of
-@code{2401} in @file{inetd.conf}.
+@noindent
+and put @code{cvspserver} instead of @code{2401} in @file{inetd.conf}.
+
+If your system uses @code{xinetd} instead of @code{inetd},
+the procedure is slightly different.
+Create a file called @file{/etc/xinetd.d/cvspserver} containing the following:
+
+@example
+service cvspserver
+@{
+ port = 2401
+ socket_type = stream
+ protocol = tcp
+ wait = no
+ user = root
+ passenv = PATH
+ server = /usr/local/bin/cvs
+ server_args = -f --allow-root=/usr/cvsroot pserver
+@}
+@end example
+
+@noindent
+(If @code{cvspserver} is defined in @file{/etc/services}, you can omit
+the @code{port} line.)
Once the above is taken care of, restart your
@code{inetd}, or do whatever is necessary to force it
@@ -2352,6 +2397,7 @@ melissa:tGX1fS8sun6rY:pubcvs
qproj:XR4EZcEs0szik:pubcvs
@end example
+@noindent
(The passwords are encrypted according to the standard
Unix @code{crypt()} function, so it is possible to
paste in passwords directly from regular Unix
@@ -2416,6 +2462,7 @@ fish:rKa5jzULzmhOo:kfogel
sussman:1sOp854gDF3DY
@end example
+@noindent
When the password field is omitted or empty, then the
client's authentication attempt will succeed with any
password, including the empty string. However, the
@@ -2476,6 +2523,7 @@ optional port number, and path to the repository. For example:
cvs -d :pserver:faun.example.org:/usr/local/cvsroot checkout someproj
@end example
+@noindent
or
@example
@@ -2496,6 +2544,7 @@ cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot login
CVS password:
@end example
+@noindent
or
@example
@@ -2537,6 +2586,7 @@ with the stored password. So, for example
cvs -d :pserver:bach@@faun.example.org:/usr/local/cvsroot checkout foo
@end example
+@noindent
should just work (unless the password changes on the
server side, in which case you'll have to re-run
@code{cvs login}).
@@ -2809,6 +2859,7 @@ splotnik
jrandom
@end example
+@noindent
(Don't forget the newline after the last user.)
"Exclusion" means explicitly listing everyone
@@ -3430,6 +3481,7 @@ T frontend.c
T parser.c
@end example
+@noindent
(When you give @sc{cvs} a directory as argument, it generally applies the
operation to all the files in that directory, and (recursively), to any
subdirectories that it may contain. @xref{Recursive behavior}.)
@@ -3585,16 +3637,22 @@ what you want.
However, there might be cases in which one uses a tag
temporarily or accidentally puts one in the wrong
place. Therefore, one might delete, move, or rename a
-tag. Warning: the commands in this section are
+tag.
+
+@noindent
+@emph{Warning: the commands in this section are
dangerous; they permanently discard historical
-information and it can difficult or impossible to
+information and it can be difficult or impossible to
recover from errors. If you are a @sc{cvs}
administrator, you may consider restricting these
-commands with taginfo (@pxref{user-defined logging}).
+commands with taginfo (@pxref{user-defined logging}).}
@cindex Deleting tags
+@cindex Deleting branch tags
@cindex Removing tags
+@cindex Removing branch tags
@cindex Tags, deleting
+@cindex Branch tags, deleting
To delete a tag, specify the @samp{-d} option to either
@code{cvs tag} or @code{cvs rtag}. For example:
@@ -3602,15 +3660,30 @@ To delete a tag, specify the @samp{-d} option to either
cvs rtag -d rel-0-4 tc
@end example
-deletes the tag @code{rel-0-4} from the module @code{tc}.
+@noindent
+deletes the non-branch tag @code{rel-0-4} from the module @code{tc}.
+In the event that branch tags are encountered within the repository
+with the given name, a warning message will be issued and the branch
+tag will not be deleted. If you are absolutely certain you know what
+you are doing, the @code{-B} option may be specified to allow deletion
+of branch tags. In that case, any non-branch tags encountered will
+trigger warnings and will not be deleted.
+
+@noindent
+@emph{Warning: Moving branch tags is very dangerous! If you think you need the
+@code{-B} option, think again and ask your @sc{cvs} administrator about it (if
+that isn't you). There is almost certainly another way to accomplish what you
+want to accomplish.}
@cindex Moving tags
+@cindex Moving branch tags
@cindex Tags, moving
+@cindex Branch tags, moving
When we say @dfn{move} a tag, we mean to make the same
name point to different revisions. For example, the
@code{stable} tag may currently point to revision 1.4
of @file{backend.c} and perhaps we want to make it
-point to revision 1.6. To move a tag, specify the
+point to revision 1.6. To move a non-branch tag, specify the
@samp{-F} option to either @code{cvs tag} or @code{cvs
rtag}. For example, the task just mentioned might be
accomplished as:
@@ -3619,6 +3692,20 @@ accomplished as:
cvs tag -r 1.6 -F stable backend.c
@end example
+@noindent
+If any branch tags are encountered in the repository
+with the given name, a warning is issued and the branch
+tag is not disturbed. If you are absolutely certain you
+wish to move the branch tag, the @code{-B} option may be specified.
+In that case, non-branch tags encountered with the given
+name are ignored with a warning message.
+
+@noindent
+@emph{Warning: Moving branch tags is very dangerous! If you think you need the
+@code{-B} option, think again and ask your @sc{cvs} administrator about it (if
+that isn't you). There is almost certainly another way to accomplish what you
+want to accomplish.}
+
@cindex Renaming tags
@cindex Tags, renaming
When we say @dfn{rename} a tag, we mean to make a
@@ -3627,9 +3714,10 @@ tag. For example, one may have misspelled the tag name
and want to correct it (hopefully before others are
relying on the old spelling). To rename a tag, first
create a new tag using the @samp{-r} option to
-@code{cvs rtag}, and then delete the old name. This
-leaves the new tag on exactly the same files as the old
-tag. For example:
+@code{cvs rtag}, and then delete the old name. (Caution:
+this method will not work with branch tags.)
+This leaves the new tag on exactly the
+same files as the old tag. For example:
@example
cvs rtag -r old-name-0-4 rel-0-4 tc
@@ -3923,6 +4011,7 @@ it to a given branch with @samp{update -r}:
$ cvs update -r rel-1-0-patches tc
@end example
+@noindent
or equivalently:
@example
@@ -4228,6 +4317,7 @@ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !
+---------+ +---------+
@end example
+@noindent
where the starred line represents the merge from the
@samp{R1fix} branch to the main trunk, as just
discussed.
@@ -4246,6 +4336,7 @@ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !
+---------+ +---------+ +---------+
@end example
+@noindent
and then you want to merge those new changes onto the
main trunk. If you just use the @code{cvs update -j
R1fix m.c} command again, @sc{cvs} will attempt to
@@ -4401,6 +4492,7 @@ For example, suppose you have a file like this:
+-----+ +-----+
@end example
+@noindent
and your working directory is currently on the trunk
(revision 1.2). Then you might get the following
results from a merge:
@@ -5345,6 +5437,7 @@ commands. In the taginfo file put:
ALL /usr/local/cvsroot/CVSROOT/loggit
@end example
+@noindent
Where @file{/usr/local/cvsroot/CVSROOT/loggit} contains the
following script:
@@ -5357,7 +5450,7 @@ echo "$@@" >>/home/kingdon/cvsroot/CVSROOT/taglog
@section Annotate command
@cindex annotate (subcommand)
-@deffn Command {cvs annotate} [@code{-flR}] [@code{-r rev}|@code{-D date}] files @dots{}
+@deffn Command {cvs annotate} [@code{-FflR}] [@code{-r rev}|@code{-D date}] files @dots{}
For each file in @var{files}, print the head revision
of the trunk, together with information on the last
@@ -5385,7 +5478,7 @@ or replaced; you need to use @code{cvs diff} for that
The options to @code{cvs annotate} are listed in
@ref{Invoking CVS}, and can be used to select the files
and revisions to annotate. The options are described
-in more detail in @ref{Common options}.
+in more detail there and in @ref{Common options}.
@c FIXME: maybe an example using the options? Just
@c what it means to select a revision might be worth a
@@ -6183,14 +6276,15 @@ the locks prevent other people from reading or writing.
@c a/one.c and b/four.c and another commits a/two.c and
@c b/three.c. Then an update cannot get the new a/one.c
@c and a/two.c and the old b/four.c and b/three.c.
-One might hope for the following property
+One might hope for the following property:
-@example
+@quotation
If someone commits some changes in one cvs command,
then an update by someone else will either get all the
changes, or none of them.
-@end example
+@end quotation
+@noindent
but @sc{cvs} does @emph{not} have this property. For
example, given the files
@@ -6201,12 +6295,14 @@ b/three.c
b/four.c
@end example
+@noindent
if someone runs
@example
cvs ci a/two.c b/three.c
@end example
+@noindent
and someone else runs @code{cvs update} at the same
time, the person running @code{update} might get only
the change to @file{b/three.c} and not the change to
@@ -6320,7 +6416,7 @@ You can tell @sc{cvs} that you want to receive
notifications about various actions taken on a file.
You can do this without using @code{cvs watch on} for
the file, but generally you will want to use @code{cvs
-watch on}, so that developers use the @code{cvs edit}
+watch on}, to remind developers to use the @code{cvs edit}
command.
@cindex watch add (subcommand)
@@ -6336,15 +6432,28 @@ the user about. @var{action} is one of the following:
@item edit
Another user has applied the @code{cvs edit} command (described
-below) to a file.
+below) to a watched file.
+
+@item commit
+Another user has committed changes to one of the named @var{files}.
@item unedit
-Another user has applied the @code{cvs unedit} command (described
-below) or the @code{cvs release} command to a file, or has deleted
-the file and allowed @code{cvs update} to recreate it.
+Another user has abandoned editing a file (other than by committing changes).
+They can do this in several ways, by:
-@item commit
-Another user has committed changes to a file.
+@itemize @bullet
+
+@item
+applying the @code{cvs unedit} command (described below) to the file
+
+@item
+applying the @code{cvs release} command (@pxref{release}) to the file's parent directory
+(or recursively to a directory more than one level up)
+
+@item
+deleting the file and allowing @code{cvs update} to recreate it
+
+@end itemize
@item all
All of the above.
@@ -6358,8 +6467,8 @@ described below.)
The @code{-a} option may appear more than once, or not at all. If
omitted, the action defaults to @code{all}.
-The @var{files} and options are processed as for the
-@code{cvs watch} commands.
+The @var{files} and options are processed as for
+@code{cvs watch on}.
@end deffn
@@ -6392,6 +6501,7 @@ single line:
ALL mail %s -s "CVS notification"
@end example
+@noindent
This causes users to be notified by electronic mail.
@c FIXME: should it be this hard to set up this
@c behavior (and the result when one fails to do so,
@@ -6508,9 +6618,10 @@ The @var{files} and options are processed as for the
If watches are not in use, the @code{unedit} command
probably does not work, and the way to revert to the
-repository version is to remove the file and then use
-@code{cvs update} to get a new copy. The meaning is
-not precisely the same; removing and updating may also
+repository version is with the command @code{cvs update -C file}
+(@pxref{update}).
+The meaning is
+not precisely the same; the latter may also
bring in some changes which have been made in the
repository since the last time you updated.
@c It would be a useful enhancement to CVS to make
@@ -6567,6 +6678,7 @@ cvs update: cannot open CVS/Entries for reading:
No such file or directory
@end example
+@noindent
and your operation will likely be aborted. To use the
watch features, you must upgrade all copies of @sc{cvs}
which use that repository in local or server mode. If
@@ -6779,7 +6891,7 @@ messages are @emph{not} replaced. Instead, the new log
message is inserted after @code{$@asis{Log:@dots{}}$}.
Each new line is prefixed with the same string which
precedes the @code{$Log} keyword. For example, if the
-file contains
+file contains:
@example
/* Here is what people have been up to:
@@ -7125,7 +7237,7 @@ example, and the only release tag assigned is
When a new release of the source arrives, you import it into the
repository with the same @code{import} command that you used to set up
the repository in the first place. The only difference is that you
-specify a different release tag this time.
+specify a different release tag this time:
@example
$ tar xfz wdiff-0.05.tar.gz
@@ -7136,7 +7248,7 @@ $ cvs import -m "Import of FSF v. 0.05" fsf/wdiff FSF_DIST WDIFF_0_05
For files that have not been modified locally, the newly created
revision becomes the head revision. If you have made local
changes, @code{import} will warn you that you must merge the changes
-into the main trunk, and tell you to use @samp{checkout -j} to do so.
+into the main trunk, and tell you to use @samp{checkout -j} to do so:
@c FIXME: why "wdiff" here and "fsf/wdiff" in the
@c "import"? I think the assumption is that one has
@@ -7153,17 +7265,21 @@ since yesterday into the working copy. If any conflicts arise during
the merge they should be resolved in the normal way (@pxref{Conflicts
example}). Then, the modified files may be committed.
-Using a date, as suggested above, assumes that you do
-not import more than one release of a product per
-day. If you do, you can always use something like this
-instead:
+However, it is much better to use the two release tags rather than using
+a date on the branch as suggested above:
@example
$ cvs checkout -jWDIFF_0_04 -jWDIFF_0_05 wdiff
@end example
@noindent
-In this case, the two above commands are equivalent.
+The reason this is better is that
+using a date, as suggested above, assumes that you do
+not import more than one release of a product per day.
+More importantly, using the release tags allows @sc{cvs} to detect files
+that were removed between the two vendor releases and mark them for
+removal. Since @code{import} has no way to detect removed files, you
+should do a merge like this even if @code{import} doesn't tell you to.
@node Reverting local changes
@section Reverting to the latest vendor release
@@ -7627,9 +7743,11 @@ the file. So if this is the contents of the user's
@example
log -N
-diff -u
-update -P
+diff -uN
+rdiff -u
+update -Pd
checkout -P
+release -d
@end example
@noindent
@@ -7653,6 +7771,7 @@ example the following line in @file{.cvsrc}
cvs -z6
@end example
+@noindent
causes @sc{cvs} to use compression level 6.
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -7697,6 +7816,9 @@ Use @var{tempdir} as the directory where temporary files are
located. Overrides the setting of the @code{$TMPDIR} environment
variable and any precompiled directory. This parameter should be
specified as an absolute pathname.
+(When running client/server, @samp{-T} affects only the local process;
+specifying @samp{-T} for the client has no effect on the server and
+vice versa.)
@cindex CVSROOT, overriding
@cindex Overriding CVSROOT
@@ -7854,7 +7976,7 @@ file using @samp{-D}, @sc{cvs} records the date you specified, so that
further updates in the same directory will use the same date
(for more information on sticky tags/dates, @pxref{Sticky tags}).
-@samp{-D} is available with the @code{checkout},
+@samp{-D} is available with the @code{annotate}, @code{checkout},
@code{diff}, @code{export}, @code{history},
@code{rdiff}, @code{rtag}, and @code{update} commands.
(The @code{history} command uses this option in a
@@ -8707,8 +8829,8 @@ the file @samp{bar.c}, the command @samp{cvs co -d dir
foo} will create directory @samp{dir} and place
@samp{bar.c} inside. Similarly, given a module
@samp{bar} which has subdirectory @samp{baz} wherein
-there is a file @samp{quux.c}, the command @samp{cvs -d
-dir co bar/baz} will create directory @samp{dir} and
+there is a file @samp{quux.c}, the command @samp{cvs co
+-d dir bar/baz} will create directory @samp{dir} and
place @samp{quux.c} inside.
Using the @samp{-N} flag will defeat this behavior.
@@ -8978,7 +9100,7 @@ $ cvs checkout -r EXPR1 whatever_module
@itemize @bullet
@item
-Synopsis: diff [-lR] [format_options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files@dots{}]
+Synopsis: diff [-lR] [-k kflag] [format_options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files@dots{}]
@item
Requires: working directory, repository.
@item
@@ -9061,56 +9183,507 @@ One or both @samp{-r} options can be replaced by a
@c they are into that sort of thing.
The following options specify the format of the
output. They have the same meaning as in GNU diff.
+Most options have two equivalent names, one of which is a single letter
+preceded by @samp{-}, and the other of which is a long name preceded by
+@samp{--}.
+
+@table @samp
+@item -@var{lines}
+Show @var{lines} (an integer) lines of context. This option does not
+specify an output format by itself; it has no effect unless it is
+combined with @samp{-c} or @samp{-u}. This option is obsolete. For proper
+operation, @code{patch} typically needs at least two lines of context.
+
+@item -a
+Treat all files as text and compare them line-by-line, even if they
+do not seem to be text.
+
+@item -b
+Ignore trailing white space and consider all other sequences of one or
+more white space characters to be equivalent.
+
+@item -B
+Ignore changes that just insert or delete blank lines.
+
+@item --binary
+Read and write data in binary mode.
+
+@item --brief
+Report only whether the files differ, not the details of the
+differences.
+
+@item -c
+Use the context output format.
+
+@item -C @var{lines}
+@itemx --context@r{[}=@var{lines}@r{]}
+Use the context output format, showing @var{lines} (an integer) lines of
+context, or three if @var{lines} is not given.
+For proper operation, @code{patch} typically needs at least two lines of
+context.
+
+@item --changed-group-format=@var{format}
+Use @var{format} to output a line group containing differing lines from
+both files in if-then-else format. @xref{Line group formats}.
+
+@item -d
+Change the algorithm to perhaps find a smaller set of changes. This makes
+@code{diff} slower (sometimes much slower).
+
+@item -e
+@itemx --ed
+Make output that is a valid @code{ed} script.
+
+@item --expand-tabs
+Expand tabs to spaces in the output, to preserve the alignment of tabs
+in the input files.
+
+@item -f
+Make output that looks vaguely like an @code{ed} script but has changes
+in the order they appear in the file.
+
+@item -F @var{regexp}
+In context and unified format, for each hunk of differences, show some
+of the last preceding line that matches @var{regexp}.
+
+@item --forward-ed
+Make output that looks vaguely like an @code{ed} script but has changes
+in the order they appear in the file.
+
+@item -H
+Use heuristics to speed handling of large files that have numerous
+scattered small changes.
+
+@item --horizon-lines=@var{lines}
+Do not discard the last @var{lines} lines of the common prefix
+and the first @var{lines} lines of the common suffix.
+
+@item -i
+Ignore changes in case; consider upper- and lower-case letters
+equivalent.
+
+@item -I @var{regexp}
+Ignore changes that just insert or delete lines that match @var{regexp}.
+
+@item --ifdef=@var{name}
+Make merged if-then-else output using @var{name}.
+
+@item --ignore-all-space
+Ignore white space when comparing lines.
+
+@item --ignore-blank-lines
+Ignore changes that just insert or delete blank lines.
+
+@item --ignore-case
+Ignore changes in case; consider upper- and lower-case to be the same.
+
+@item --ignore-matching-lines=@var{regexp}
+Ignore changes that just insert or delete lines that match @var{regexp}.
+
+@item --ignore-space-change
+Ignore trailing white space and consider all other sequences of one or
+more white space characters to be equivalent.
+
+@item --initial-tab
+Output a tab rather than a space before the text of a line in normal or
+context format. This causes the alignment of tabs in the line to look
+normal.
+
+@item -L @var{label}
+Use @var{label} instead of the file name in the context format
+and unified format headers.
+
+@item --label=@var{label}
+Use @var{label} instead of the file name in the context format
+and unified format headers.
+
+@item --left-column
+Print only the left column of two common lines in side by side format.
+
+@item --line-format=@var{format}
+Use @var{format} to output all input lines in if-then-else format.
+@xref{Line formats}.
+
+@item --minimal
+Change the algorithm to perhaps find a smaller set of changes. This
+makes @code{diff} slower (sometimes much slower).
+
+@item -n
+Output RCS-format diffs; like @samp{-f} except that each command
+specifies the number of lines affected.
+
+@item -N
+@itemx --new-file
+In directory comparison, if a file is found in only one directory,
+treat it as present but empty in the other directory.
+
+@item --new-group-format=@var{format}
+Use @var{format} to output a group of lines taken from just the second
+file in if-then-else format. @xref{Line group formats}.
+
+@item --new-line-format=@var{format}
+Use @var{format} to output a line taken from just the second file in
+if-then-else format. @xref{Line formats}.
+
+@item --old-group-format=@var{format}
+Use @var{format} to output a group of lines taken from just the first
+file in if-then-else format. @xref{Line group formats}.
+
+@item --old-line-format=@var{format}
+Use @var{format} to output a line taken from just the first file in
+if-then-else format. @xref{Line formats}.
+
+@item -p
+Show which C function each change is in.
+
+@item --rcs
+Output RCS-format diffs; like @samp{-f} except that each command
+specifies the number of lines affected.
+
+@item --report-identical-files
+@itemx -s
+Report when two files are the same.
+
+@item --show-c-function
+Show which C function each change is in.
+
+@item --show-function-line=@var{regexp}
+In context and unified format, for each hunk of differences, show some
+of the last preceding line that matches @var{regexp}.
+
+@item --side-by-side
+Use the side by side output format.
+
+@item --speed-large-files
+Use heuristics to speed handling of large files that have numerous
+scattered small changes.
+
+@item --suppress-common-lines
+Do not print common lines in side by side format.
+
+@item -t
+Expand tabs to spaces in the output, to preserve the alignment of tabs
+in the input files.
+
+@item -T
+Output a tab rather than a space before the text of a line in normal or
+context format. This causes the alignment of tabs in the line to look
+normal.
+
+@item --text
+Treat all files as text and compare them line-by-line, even if they
+do not appear to be text.
+
+@item -u
+Use the unified output format.
+
+@item --unchanged-group-format=@var{format}
+Use @var{format} to output a group of common lines taken from both files
+in if-then-else format. @xref{Line group formats}.
+
+@item --unchanged-line-format=@var{format}
+Use @var{format} to output a line common to both files in if-then-else
+format. @xref{Line formats}.
+
+@item -U @var{lines}
+@itemx --unified@r{[}=@var{lines}@r{]}
+Use the unified output format, showing @var{lines} (an integer) lines of
+context, or three if @var{lines} is not given.
+For proper operation, @code{patch} typically needs at least two lines of
+context.
+
+@item -w
+Ignore white space when comparing lines.
+
+@item -W @var{columns}
+@itemx --width=@var{columns}
+Use an output width of @var{columns} in side by side format.
+
+@item -y
+Use the side by side output format.
+@end table
+
+@menu
+* Line group formats:: Line group formats
+* Line formats:: Line formats
+@end menu
+
+@c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+@node Line group formats
+@appendixsubsubsec Line group formats
+
+Line group formats let you specify formats suitable for many
+applications that allow if-then-else input, including programming
+languages and text formatting languages. A line group format specifies
+the output format for a contiguous group of similar lines.
+
+For example, the following command compares the TeX file @file{myfile}
+with the original version from the repository,
+and outputs a merged file in which old regions are
+surrounded by @samp{\begin@{em@}}-@samp{\end@{em@}} lines, and new
+regions are surrounded by @samp{\begin@{bf@}}-@samp{\end@{bf@}} lines.
+
+@example
+cvs diff \
+ --old-group-format='\begin@{em@}
+%<\end@{em@}
+' \
+ --new-group-format='\begin@{bf@}
+%>\end@{bf@}
+' \
+ myfile
+@end example
+
+The following command is equivalent to the above example, but it is a
+little more verbose, because it spells out the default line group formats.
+
+@example
+cvs diff \
+ --old-group-format='\begin@{em@}
+%<\end@{em@}
+' \
+ --new-group-format='\begin@{bf@}
+%>\end@{bf@}
+' \
+ --unchanged-group-format='%=' \
+ --changed-group-format='\begin@{em@}
+%<\end@{em@}
+\begin@{bf@}
+%>\end@{bf@}
+' \
+ myfile
+@end example
+
+Here is a more advanced example, which outputs a diff listing with
+headers containing line numbers in a ``plain English'' style.
+
+@example
+cvs diff \
+ --unchanged-group-format='' \
+ --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
+%<' \
+ --new-group-format='-------- %dN line%(N=1?:s) added after %de:
+%>' \
+ --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
+%<-------- to:
+%>' \
+ myfile
+@end example
+
+To specify a line group format, use one of the options
+listed below. You can specify up to four line group formats, one for
+each kind of line group. You should quote @var{format}, because it
+typically contains shell metacharacters.
+
+@table @samp
+@item --old-group-format=@var{format}
+These line groups are hunks containing only lines from the first file.
+The default old group format is the same as the changed group format if
+it is specified; otherwise it is a format that outputs the line group as-is.
+
+@item --new-group-format=@var{format}
+These line groups are hunks containing only lines from the second
+file. The default new group format is same as the the changed group
+format if it is specified; otherwise it is a format that outputs the
+line group as-is.
+
+@item --changed-group-format=@var{format}
+These line groups are hunks containing lines from both files. The
+default changed group format is the concatenation of the old and new
+group formats.
+
+@item --unchanged-group-format=@var{format}
+These line groups contain lines common to both files. The default
+unchanged group format is a format that outputs the line group as-is.
+@end table
+
+In a line group format, ordinary characters represent themselves;
+conversion specifications start with @samp{%} and have one of the
+following forms.
+
+@table @samp
+@item %<
+stands for the lines from the first file, including the trailing newline.
+Each line is formatted according to the old line format (@pxref{Line formats}).
+
+@item %>
+stands for the lines from the second file, including the trailing newline.
+Each line is formatted according to the new line format.
+
+@item %=
+stands for the lines common to both files, including the trailing newline.
+Each line is formatted according to the unchanged line format.
+
+@item %%
+stands for @samp{%}.
+
+@item %c'@var{C}'
+where @var{C} is a single character, stands for @var{C}.
+@var{C} may not be a backslash or an apostrophe.
+For example, @samp{%c':'} stands for a colon, even inside
+the then-part of an if-then-else format, which a colon would
+normally terminate.
+
+@item %c'\@var{O}'
+where @var{O} is a string of 1, 2, or 3 octal digits,
+stands for the character with octal code @var{O}.
+For example, @samp{%c'\0'} stands for a null character.
+
+@item @var{F}@var{n}
+where @var{F} is a @code{printf} conversion specification and @var{n} is one
+of the following letters, stands for @var{n}'s value formatted with @var{F}.
+
+@table @samp
+@item e
+The line number of the line just before the group in the old file.
+
+@item f
+The line number of the first line in the group in the old file;
+equals @var{e} + 1.
+
+@item l
+The line number of the last line in the group in the old file.
+
+@item m
+The line number of the line just after the group in the old file;
+equals @var{l} + 1.
+
+@item n
+The number of lines in the group in the old file; equals @var{l} - @var{f} + 1.
+
+@item E, F, L, M, N
+Likewise, for lines in the new file.
+
+@end table
+
+The @code{printf} conversion specification can be @samp{%d},
+@samp{%o}, @samp{%x}, or @samp{%X}, specifying decimal, octal,
+lower case hexadecimal, or upper case hexadecimal output
+respectively. After the @samp{%} the following options can appear in
+sequence: a @samp{-} specifying left-justification; an integer
+specifying the minimum field width; and a period followed by an
+optional integer specifying the minimum number of digits.
+For example, @samp{%5dN} prints the number of new lines in the group
+in a field of width 5 characters, using the @code{printf} format @code{"%5d"}.
+
+@item (@var{A}=@var{B}?@var{T}:@var{E})
+If @var{A} equals @var{B} then @var{T} else @var{E}.
+@var{A} and @var{B} are each either a decimal constant
+or a single letter interpreted as above.
+This format spec is equivalent to @var{T} if
+@var{A}'s value equals @var{B}'s; otherwise it is equivalent to @var{E}.
+
+For example, @samp{%(N=0?no:%dN) line%(N=1?:s)} is equivalent to
+@samp{no lines} if @var{N} (the number of lines in the group in the the
+new file) is 0, to @samp{1 line} if @var{N} is 1, and to @samp{%dN lines}
+otherwise.
+@end table
+
+@c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+@node Line formats
+@appendixsubsubsec Line formats
+
+Line formats control how each line taken from an input file is
+output as part of a line group in if-then-else format.
+
+For example, the following command outputs text with a one-column
+change indicator to the left of the text. The first column of output
+is @samp{-} for deleted lines, @samp{|} for added lines, and a space
+for unchanged lines. The formats contain newline characters where
+newlines are desired on output.
+
+@example
+cvs diff \
+ --old-line-format='-%l
+' \
+ --new-line-format='|%l
+' \
+ --unchanged-line-format=' %l
+' \
+ myfile
+@end example
+
+To specify a line format, use one of the following options. You should
+quote @var{format}, since it often contains shell metacharacters.
+
+@table @samp
+@item --old-line-format=@var{format}
+formats lines just from the first file.
+
+@item --new-line-format=@var{format}
+formats lines just from the second file.
+
+@item --unchanged-line-format=@var{format}
+formats lines common to both files.
+
+@item --line-format=@var{format}
+formats all lines; in effect, it sets all three above options simultaneously.
+@end table
+
+In a line format, ordinary characters represent themselves;
+conversion specifications start with @samp{%} and have one of the
+following forms.
+
+@table @samp
+@item %l
+stands for the the contents of the line, not counting its trailing
+newline (if any). This format ignores whether the line is incomplete.
+
+@item %L
+stands for the the contents of the line, including its trailing newline
+(if any). If a line is incomplete, this format preserves its
+incompleteness.
+
+@item %%
+stands for @samp{%}.
+
+@item %c'@var{C}'
+where @var{C} is a single character, stands for @var{C}.
+@var{C} may not be a backslash or an apostrophe.
+For example, @samp{%c':'} stands for a colon.
+
+@item %c'\@var{O}'
+where @var{O} is a string of 1, 2, or 3 octal digits,
+stands for the character with octal code @var{O}.
+For example, @samp{%c'\0'} stands for a null character.
+
+@item @var{F}n
+where @var{F} is a @code{printf} conversion specification,
+stands for the line number formatted with @var{F}.
+For example, @samp{%.5dn} prints the line number using the
+@code{printf} format @code{"%.5d"}. @xref{Line group formats}, for
+more about printf conversion specifications.
+
+@end table
+
+The default line format is @samp{%l} followed by a newline character.
+
+If the input contains tab characters and it is important that they line
+up on output, you should ensure that @samp{%l} or @samp{%L} in a line
+format is just after a tab stop (e.g.@: by preceding @samp{%l} or
+@samp{%L} with a tab character), or you should use the @samp{-t} or
+@samp{--expand-tabs} option.
+
+Taken together, the line and line group formats let you specify many
+different formats. For example, the following command uses a format
+similar to @code{diff}'s normal format. You can tailor this command
+to get fine control over @code{diff}'s output.
@example
--0 -1 -2 -3 -4 -5 -6 -7 -8 -9
---binary
---brief
---changed-group-format=@var{arg}
--c
- -C @var{nlines}
- --context[=@var{lines}]
--e --ed
--t --expand-tabs
--f --forward-ed
---horizon-lines=@var{arg}
---ifdef=@var{arg}
--w --ignore-all-space
--B --ignore-blank-lines
--i --ignore-case
--I @var{regexp}
- --ignore-matching-lines=@var{regexp}
--h
--b --ignore-space-change
--T --initial-tab
--L @var{label}
- --label=@var{label}
---left-column
--d --minimal
--N --new-file
---new-line-format=@var{arg}
---old-line-format=@var{arg}
---paginate
--n --rcs
--s --report-identical-files
--p
---show-c-function
--y --side-by-side
--F @var{regexp}
---show-function-line=@var{regexp}
--H --speed-large-files
---suppress-common-lines
--a --text
---unchanged-group-format=@var{arg}
--u
- -U @var{nlines}
- --unified[=@var{lines}]
-@c FIXCVS: This option is accepted by src/diff.c but
-@c not diff/diff.c; it would appear that any attempt to
-@c use it would get an error.
--V @var{arg}
--W @var{columns}
- --width=@var{columns}
+cvs diff \
+ --old-line-format='< %l
+' \
+ --new-line-format='> %l
+' \
+ --old-group-format='%df%(f=l?:,%dl)d%dE
+%<' \
+ --new-group-format='%dea%dF%(F=L?:,%dL)
+%>' \
+ --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
+%<---
+%>' \
+ --unchanged-group-format='' \
+ myfile
@end example
@c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
@@ -9748,21 +10321,18 @@ Revisions @var{rev1} to @var{rev2} (which must be on
the same branch).
@item @var{rev1}::@var{rev2}
-Revisions between, but not including, @var{rev1} and @var{rev2}.
+The same, but excluding @var{rev1}.
@item :@var{rev}
+@itemx ::@var{rev}
Revisions from the beginning of the branch up to
and including @var{rev}.
-@item ::@var{rev}
-Revisions from the beginning of the branch up to,
-but not including, @var{rev}.
-
@item @var{rev}:
Revisions starting with @var{rev} to the end of the
branch containing @var{rev}.
-@item @var{rev}:
+@item @var{rev}::
Revisions starting just after @var{rev} to the end of the
branch containing @var{rev}.
@@ -9784,6 +10354,9 @@ revision on the default branch, normally the trunk.
There can be no space between the @samp{-r} option and
its argument.
+@item -S
+Suppress the header if no revisions are selected.
+
@item -s @var{states}
Print information about revisions whose state
attributes match one of the states given in the
@@ -10074,7 +10647,7 @@ $
@itemize @bullet
@item
-update [-AdflPpR] [-d] [-r tag|-D date] files@dots{}
+update [-ACdflPpR] [-I name] [-j rev [-j rev]] [-k kflag] [-r tag|-D date] [-W spec] files@dots{}
@item
Requires: repository, working directory.
@item
@@ -10235,9 +10808,8 @@ that you haven't changed but are not the most recent
versions available in the repository.
@item P @var{file}
-Like @samp{U}, but the @sc{cvs} server sends a patch
-instead of an entire file. These two things accomplish
-the same thing.
+Like @samp{U}, but the @sc{cvs} server sends a patch instead of an entire
+file. This accomplishes the same thing as @samp{U} using less bandwidth.
@item A @var{file}
The file has been added to your private copy of the
@@ -10435,6 +11007,7 @@ Initial revision
Commands, command options, and command arguments:
@table @code
+@c ------------------------------------------------------------
@item add [@var{options}] [@var{files}@dots{}]
Add a new file/directory. See @ref{Adding files}.
@@ -10446,6 +11019,7 @@ Set keyword expansion.
Set file description.
@end table
+@c ------------------------------------------------------------
@item admin [@var{options}] [@var{files}@dots{}]
Administration of history files in the repository. See
@ref{admin}.
@@ -10495,6 +11069,7 @@ Set file description to @var{string}.
Unlock revision @var{rev}, or latest revision.
@end table
+@c ------------------------------------------------------------
@item annotate [@var{options}] [@var{files}@dots{}]
Show last revision where each line was modified. See
@ref{annotate}.
@@ -10504,6 +11079,10 @@ Show last revision where each line was modified. See
Annotate the most recent revision no later than
@var{date}. See @ref{Common options}.
+@item -F
+Force annotation of binary files. (Without this option,
+binary files are skipped with a message.)
+
@item -f
Use head revision if tag/date not found. See
@ref{Common options}.
@@ -10519,6 +11098,7 @@ behavior}.
Annotate revision @var{tag}. See @ref{Common options}.
@end table
+@c ------------------------------------------------------------
@item checkout [@var{options}] @var{modules}@dots{}
Get a copy of the sources. See @ref{checkout}.
@@ -10578,6 +11158,7 @@ Checkout revision @var{tag} (is sticky). See @ref{Common options}.
Like -c, but include module status. See @ref{checkout options}.
@end table
+@c ------------------------------------------------------------
@item commit [@var{options}] [@var{files}@dots{}]
Check changes into the repository. See @ref{commit}.
@@ -10611,6 +11192,7 @@ Commit to @var{rev}. See @ref{commit options}.
@c and made concise enough.
@end table
+@c ------------------------------------------------------------
@item diff [@var{options}] [@var{files}@dots{}]
Show differences between revisions. See @ref{diff}.
In addition to the options shown below, accepts a wide
@@ -10645,6 +11227,7 @@ Diff revision for @var{rev1} against working file. See
Diff @var{rev1}/@var{date1} against @var{rev2}. See @ref{diff options}.
@end table
+@c ------------------------------------------------------------
@item edit [@var{options}] [@var{files}@dots{}]
Get ready to edit a watched file. See @ref{Editing files}.
@@ -10663,6 +11246,7 @@ Operate recursively (default). @xref{Recursive
behavior}.
@end table
+@c ------------------------------------------------------------
@item editors [@var{options}] [@var{files}@dots{}]
See who is editing a watched file. See @ref{Watch information}.
@@ -10675,6 +11259,7 @@ Operate recursively (default). @xref{Recursive
behavior}.
@end table
+@c ------------------------------------------------------------
@item export [@var{options}] @var{modules}@dots{}
Export files from @sc{cvs}. See @ref{export}.
@@ -10715,6 +11300,7 @@ behavior}.
Checkout revision @var{tag}. See @ref{Common options}.
@end table
+@c ------------------------------------------------------------
@item history [@var{options}] [@var{files}@dots{}]
Show repository access history. See @ref{history}.
@@ -10739,8 +11325,7 @@ Report on all record types. See @ref{history options}.
Last modified (committed or modified report). See @ref{history options}.
@item -m @var{module}
-Report on @var{module} (repeatable). See @ref{history
-options}.
+Report on @var{module} (repeatable). See @ref{history options}.
@item -n @var{module}
In @var{module}. See @ref{history options}.
@@ -10748,6 +11333,9 @@ In @var{module}. See @ref{history options}.
@item -o
Report on checked out modules. See @ref{history options}.
+@item -p @var{repository}
+In @var{repository}. See @ref{history options}.
+
@item -r @var{rev}
Since revision @var{rev}. See @ref{history options}.
@@ -10761,8 +11349,7 @@ Since tag record placed in history file (by anyone).
See @ref{history options}.
@item -u @var{user}
-For user @var{user} (repeatable). See @ref{history
-options}.
+For user @var{user} (repeatable). See @ref{history options}.
@item -w
Working directory must match. See @ref{history options}.
@@ -10772,10 +11359,10 @@ Report on @var{types}, one or more of
@code{TOEFWUCGMAR}. See @ref{history options}.
@item -z @var{zone}
-Output for time zone @var{zone}. See @ref{history
-options}.
+Output for time zone @var{zone}. See @ref{history options}.
@end table
+@c ------------------------------------------------------------
@item import [@var{options}] @var{repository} @var{vendor-tag} @var{release-tags}@dots{}
Import files into @sc{cvs}, using vendor branches. See
@ref{import}.
@@ -10805,10 +11392,17 @@ More files to ignore (! to reset). See
More wrappers. See @ref{import options}.
@end table
+@c ------------------------------------------------------------
@item init
Create a @sc{cvs} repository if it doesn't exist. See
@ref{Creating a repository}.
+@c ------------------------------------------------------------
+@item kserver
+Kerberos authenticated server.
+See @ref{Kerberos authenticated}.
+
+@c ------------------------------------------------------------
@item log [@var{options}] [@var{files}@dots{}]
Print out history information for files. See @ref{log}.
@@ -10846,14 +11440,50 @@ options}.
Only list revisions checked in by specified logins. See @ref{log options}.
@end table
+@c ------------------------------------------------------------
@item login
Prompt for password for authenticating server. See
@ref{Password authentication client}.
+@c ------------------------------------------------------------
@item logout
Remove stored password for authenticating server. See
@ref{Password authentication client}.
+@c ------------------------------------------------------------
+@item pserver
+Password authenticated server.
+See @ref{Password authentication server}.
+
+@c ------------------------------------------------------------
+@item rannotate [@var{options}] [@var{modules}@dots{}]
+Show last revision where each line was modified. See
+@ref{annotate}.
+
+@table @code
+@item -D @var{date}
+Annotate the most recent revision no later than
+@var{date}. See @ref{Common options}.
+
+@item -F
+Force annotation of binary files. (Without this option,
+binary files are skipped with a message.)
+
+@item -f
+Use head revision if tag/date not found. See
+@ref{Common options}.
+
+@item -l
+Local; run only in current working directory. @xref{Recursive behavior}.
+
+@item -R
+Operate recursively (default). @xref{Recursive behavior}.
+
+@item -r @var{tag}
+Annotate revision @var{tag}. See @ref{Common options}.
+@end table
+
+@c ------------------------------------------------------------
@item rdiff [@var{options}] @var{modules}@dots{}
Show differences between releases. See @ref{rdiff}.
@@ -10893,6 +11523,7 @@ Use RCS Version @var{vers} for keyword expansion (obsolete). See
@ref{rdiff options}.
@end table
+@c ------------------------------------------------------------
@item release [@var{options}] @var{directory}
Indicate that a directory is no longer in use. See
@ref{release}.
@@ -10902,6 +11533,7 @@ Indicate that a directory is no longer in use. See
Delete the given directory. See @ref{release options}.
@end table
+@c ------------------------------------------------------------
@item remove [@var{options}] [@var{files}@dots{}]
Remove an entry from the repository. See @ref{Removing files}.
@@ -10917,6 +11549,44 @@ Operate recursively (default). @xref{Recursive
behavior}.
@end table
+@c ------------------------------------------------------------
+@item rlog [@var{options}] [@var{files}@dots{}]
+Print out history information for modules. See @ref{log}.
+
+@table @code
+@item -b
+Only list revisions on the default branch. See @ref{log options}.
+
+@item -d @var{dates}
+Specify dates (@var{d1}<@var{d2} for range, @var{d} for
+latest before). See @ref{log options}.
+
+@item -h
+Only print header. See @ref{log options}.
+
+@item -l
+Local; run only in current working directory. See @ref{Recursive behavior}.
+
+@item -N
+Do not list tags. See @ref{log options}.
+
+@item -R
+Only print name of RCS file. See @ref{log options}.
+
+@item -r@var{revs}
+Only list revisions @var{revs}. See @ref{log options}.
+
+@item -s @var{states}
+Only list revisions with specified states. See @ref{log options}.
+
+@item -t
+Only print header and descriptive text. See @ref{log options}.
+
+@item -w@var{logins}
+Only list revisions checked in by specified logins. See @ref{log options}.
+@end table
+
+@c ------------------------------------------------------------
@item rtag [@var{options}] @var{tag} @var{modules}@dots{}
Add a symbolic tag to a module.
See @ref{Revisions} and @ref{Branching and merging}.
@@ -10929,6 +11599,10 @@ be tagged. See @ref{Tagging add/remove}.
@item -b
Create a branch named @var{tag}. See @ref{Branching and merging}.
+@item -B
+Used in conjuntion with -F or -d, enables movement and deletion of
+branch tags. Use with extreme caution.
+
@item -D @var{date}
Tag revisions as of @var{date}. See @ref{Tagging by date/tag}.
@@ -10956,6 +11630,11 @@ behavior}.
Tag existing tag @var{rev}. See @ref{Tagging by date/tag}.
@end table
+@c ------------------------------------------------------------
+@item server
+Rsh server. See @ref{Connecting via rsh}.
+
+@c ------------------------------------------------------------
@item status [@var{options}] @var{files}@dots{}
Display status information in a working directory. See
@ref{File status}.
@@ -10972,6 +11651,7 @@ behavior}.
Include tag information for file. See @ref{Tags}.
@end table
+@c ------------------------------------------------------------
@item tag [@var{options}] @var{tag} [@var{files}@dots{}]
Add a symbolic tag to checked out version of files.
See @ref{Revisions} and @ref{Branching and merging}.
@@ -11008,24 +11688,19 @@ behavior}.
Tag existing tag @var{rev}. See @ref{Tagging by date/tag}.
@end table
+@c ------------------------------------------------------------
@item unedit [@var{options}] [@var{files}@dots{}]
Undo an edit command. See @ref{Editing files}.
@table @code
-@item -a @var{actions}
-Specify actions for temporary watch, where
-@var{actions} is @code{edit}, @code{unedit},
-@code{commit}, @code{all}, or @code{none}. See
-@ref{Editing files}.
-
@item -l
Local; run only in current working directory. See @ref{Recursive behavior}.
@item -R
-Operate recursively (default). @xref{Recursive
-behavior}.
+Operate recursively (default). @xref{Recursive behavior}.
@end table
+@c ------------------------------------------------------------
@item update [@var{options}] [@var{files}@dots{}]
Bring work tree in sync with repository. See
@ref{update}.
@@ -11085,12 +11760,14 @@ Checkout revision @var{tag} (is sticky). See @ref{Common options}.
More wrappers. See @ref{import options}.
@end table
+@c ------------------------------------------------------------
@item version
@cindex version (subcommand)
Display the version of @sc{cvs} being used. If the repository
is remote, display both the client and server versions.
+@c ------------------------------------------------------------
@item watch [on|off|add|remove] [@var{options}] [@var{files}@dots{}]
on/off: turn on/off read-only checkouts of files. See
@@ -11114,6 +11791,7 @@ Operate recursively (default). @xref{Recursive
behavior}.
@end table
+@c ------------------------------------------------------------
@item watchers [@var{options}] [@var{files}@dots{}]
See who is watching a file. See @ref{Watch information}.
@@ -11157,12 +11835,8 @@ file, which defines the modules inside the repository.
@menu
* modules:: Defining modules
* Wrappers:: Specify binary-ness based on file name
-* commit files:: The commit support files
-* commitinfo:: Pre-commit checking
-* verifymsg:: How are log messages evaluated?
-* editinfo:: Specifying how log messages are created
- (obsolete)
-* loginfo:: Where should log messages be sent?
+* commit files:: The commit support files (commitinfo,
+ verifymsg, editinfo, loginfo)
* rcsinfo:: Templates for the log messages
* cvsignore:: Ignoring files via cvsignore
* checkoutlist:: Adding your own administrative files
@@ -11335,6 +12009,7 @@ example, if modules contains
ampermod &first-dir
@end example
+@noindent
then a checkout will create an @code{ampermod} directory
which contains a directory called @code{first-dir},
which in turns contains all the directories and files
@@ -11395,6 +12070,7 @@ For example, if the modules file contains:
exmodule -a !first-dir/sdir first-dir
@end example
+@noindent
then checking out the module @samp{exmodule} will check
out everything in @samp{first-dir} except any files in
the subdirectory @samp{first-dir/sdir}.
@@ -11513,7 +12189,7 @@ If using remote access methods (pserver, ext, etc.),
@sc{cvs} will execute this program on the server from a temporary
directory. The path is searched for this program.
-If using ``local access'' (on a local or remote NFS filesystem, i.e.
+If using ``local access'' (on a local or remote NFS file system, i.e.
repository set just to a path),
the program will be executed from the newly checked-out tree, if
found there, or alternatively searched for in the path if not.
@@ -11762,6 +12438,11 @@ imagination is the limit!
@menu
* syntax:: The common syntax
+* commitinfo:: Pre-commit checking
+* verifymsg:: How are log messages evaluated?
+* editinfo:: Specifying how log messages are created
+ (obsolete)
+* loginfo:: Where should log messages be sent?
@end menu
@c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
@@ -11828,7 +12509,7 @@ is used as a file name or command-line as appropriate.
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@node commitinfo
-@appendixsec Commitinfo
+@appendixsubsec Commitinfo
@cindex Commitinfo
@cindex Checking commits
@cindex Precommit checking
@@ -11891,8 +12572,8 @@ repositories}).
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@node verifymsg
-@appendixsec Verifying log messages
-@cindex verifymsg (admin file)
+@appendixsubsec Verifying log messages
+@cindex @file{verifymsg} (admin file)
@cindex Log message, verifying
Once you have entered a log message, you can evaluate
@@ -11918,22 +12599,61 @@ line is found, the first one is used. This can be
useful for specifying a default verification script in a
directory, and then overriding it in a subdirectory.
-@cindex DEFAULT in verifymsg
+@cindex DEFAULT in @file{verifymsg}
If the repository name does not match any of the
regular expressions in this file, the @samp{DEFAULT}
line is used, if it is specified.
-@cindex Exit status, of verifymsg
+@cindex Exit status, of @file{verifymsg}
If the verification script exits with a non-zero exit status,
the commit is aborted.
-Note that the verification script cannot change the log
-message; it can merely accept it or reject it.
-@c FIXME? Is this an annoying limitation? It would be
-@c relatively easy to fix (although it would *not* be a
-@c good idea for a verifymsg script to interact with the user
-@c at least in the client/server case because of locks
-@c and all that jazz).
+@cindex @file{verifymsg}, changing the log message
+In the default configuration, CVS allows the
+verification script to change the log message. This is
+controlled via the RereadLogAfterVerify CVSROOT/config
+option.
+
+When @samp{RereadLogAfterVerify=always} or
+@samp{RereadLogAfterVerify=stat}, the log message will
+either always be reread after the verification script
+is run or reread only if the log message file status
+has changed.
+
+@xref{config}, for more on CVSROOT/config options.
+
+It is NOT a good idea for a @file{verifymsg} script to
+interact directly with the user in the various
+client/server methods. For the @code{pserver} method,
+there is no protocol support for communicating between
+@file{verifymsg} and the client on the remote end. For the
+@code{ext} and @code{server} methods, it is possible
+for CVS to become confused by the characters going
+along the same channel as the CVS protocol
+messages. See @ref{Remote repositories}, for more
+information on client/server setups. In addition, at the time
+the @file{verifymsg} script runs, the CVS
+server has locks in place in the repository. If control is
+returned to the user here then other users may be stuck waiting
+for access to the repository.
+
+This option can be useful if you find yourself using an
+rcstemplate that needs to be modified to remove empty
+elements or to fill in default values. It can also be
+useful if the rcstemplate has changed in the repository
+and the CVS/Template was not updated, but is able to be
+adapted to the new format by the verification script
+that is run by @file{verifymsg}.
+
+An example of an update might be to change all
+occurrences of 'BugId:' to be 'DefectId:' (which can be
+useful if the rcstemplate has recently been changed and
+there are still checked-out user trees with cached
+copies in the CVS/Template file of the older version).
+
+Another example of an update might be to delete a line
+that contains 'BugID: none' from the log message after
+validation of that value as being allowed is made.
The following is a little silly example of a
@file{verifymsg} file, together with the corresponding
@@ -11961,6 +12681,12 @@ evaluate the log message.
#
if head -1 < $1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then
exit 0
+elif head -1 < $1 | grep '^BugId:[ ]*none$' > /dev/null; then
+ # It is okay to allow commits with 'BugId: none',
+ # but do not put that text into the real log message.
+ grep -v '^BugId:[ ]*none$' > $1.rewrite
+ mv $1.rewrite $1
+ exit 0
else
echo "No BugId found."
exit 1
@@ -11979,11 +12705,17 @@ The @file{rcsinfo} file contains this line:
^tc /usr/cvssupport/tc.template
@end example
+The @file{config} file contains this line:
+
+@example
+RereadLogAfterVerify=always
+@end example
+
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@node editinfo
-@appendixsec Editinfo
+@appendixsubsec Editinfo
@cindex editinfo (admin file)
@cindex Editor, specifying per module
@cindex Per-module editor
@@ -12048,7 +12780,7 @@ There is no good workaround for this; use
@c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
@node editinfo example
-@appendixsubsec Editinfo example
+@appendixsubsubsec Editinfo example
The following is a little silly example of a
@file{editinfo} file, together with the corresponding
@@ -12101,7 +12833,7 @@ The @file{rcsinfo} file contains this line:
@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@node loginfo
-@appendixsec Loginfo
+@appendixsubsec Loginfo
@cindex loginfo (admin file)
@cindex Storing log messages
@cindex Mailing log messages
@@ -12155,8 +12887,13 @@ still provided).
For example, some valid format strings are @samp{%},
@samp{%s}, @samp{%@{s@}}, and @samp{%@{sVv@}}.
-The output will be a string of tokens separated by
-spaces. For backwards compatibility, the first
+The output will be a space separated string of tokens enclosed in
+quotation marks (@t{"}).
+Any embedded dollar signs (@t{$}), backticks (@t{`}),
+backslashes (@t{\}), or quotation marks will be preceded
+by a backslash (this allows the shell to correctly parse it
+as a single string, reguardless of the characters it contains).
+For backwards compatibility, the first
token will be the repository subdirectory. The rest of the
tokens will be comma-delimited lists of the information
requested in the format string. For example, if
@@ -12166,7 +12903,7 @@ is the format string, and three files (@t{ChangeLog},
might be:
@example
-yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13
+"yoyodyne/tc ChangeLog,1.1,1.2 Makefile,1.3,1.4 foo.c,1.12,1.13"
@end example
As another example, @samp{%@{@}} means that only the
@@ -12184,7 +12921,7 @@ repositories}).
@c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
@node loginfo example
-@appendixsubsec Loginfo example
+@appendixsubsubsec Loginfo example
The following @file{loginfo} file, together with the
tiny shell-script below, appends all log messages
@@ -12219,7 +12956,7 @@ like this:
@end example
@node Keeping a checked out copy
-@appendixsubsec Keeping a checked out copy
+@appendixsubsubsec Keeping a checked out copy
@c What other index entries? It seems like
@c people might want to use a lot of different
@@ -12464,6 +13201,7 @@ message such as:
cvs commit: Rebuilding administrative file database
@end example
+@noindent
and the checked out copy in the @file{CVSROOT}
directory should be updated.
@@ -12531,9 +13269,11 @@ internal variables are:
@table @code
@item CVSROOT
@cindex CVSROOT, internal variable
-This is the value of the @sc{cvs} root in use.
+This is the absolute path to the current @sc{cvs} root directory.
@xref{Repository}, for a description of the various
-ways to specify this.
+ways to specify this, but note that the internal
+variable contains just the directory and not any
+of the access method information.
@item RCSBIN
@cindex RCSBIN, internal variable
@@ -12560,6 +13300,7 @@ server machine).
When using pserver, this is the user specified in the repository
specification which need not be the same as the username the
server is running as (@pxref{Password authentication server}).
+Do not confuse this with the environment variable of the same name.
@end table
If you want to pass a value to the administrative files
@@ -12597,15 +13338,23 @@ Environment variables passed to administrative files are:
@table @code
@cindex environment variables, passed to administrative files
-@c FIXME: should document USER, LOGNAME, and whatever else is
-@c available both in internal variables and environment variables.
@item CVS_USER
+@cindex CVS_USER, environment variable
The @sc{cvs}-specific username provided by the user, if it
can be provided (currently just for the pserver access
-method), and to the empty string otherwise. (CVS_USER
-and USER may differ when @file{$CVSROOT/CVSROOT/passwd}
-is used to map cvs usernames to system usernames.)
+method), and to the empty string otherwise. (@code{CVS_USER}
+and @code{USER} may differ when @file{$CVSROOT/CVSROOT/passwd}
+is used to map @sc{cvs} usernames to system usernames.)
+
+@item LOGNAME
+@cindex LOGNAME, environment variable
+The username of the system user.
+
+@item USER
+@cindex USER, environment variable
+Same as @code{LOGNAME}.
+Do not confuse this with the internal variable of the same name.
@end table
@node config
@@ -12681,7 +13430,11 @@ Put @sc{cvs} lock files in @var{directory} rather than
directly in the repository. This is useful if you want
to let users read from the repository while giving them
write access only to @var{directory}, not to the
-repository. You need to create @var{directory}, but
+repository.
+It can also be used to put the locks on a very fast
+in-memory file system to speed up locking and unlocking
+the repository.
+You need to create @var{directory}, but
@sc{cvs} will create subdirectories of @var{directory} as it
needs them. For information on @sc{cvs} locks, see
@ref{Concurrency}.
@@ -12700,11 +13453,31 @@ repository with LockDir enabled.
@cindex LogHistory, in CVSROOT/config
@item LogHistory=@var{value}
-Control what is logged to the @file{CVSROOT/history} file.
+Control what is logged to the @file{CVSROOT/history} file (@pxref{history}).
Default of @samp{TOFEWGCMAR} (or simply @samp{all}) will log
all transactions. Any subset of the default is
legal. (For example, to only log transactions that modify the
@file{*,v} files, use @samp{LogHistory=TMAR}.)
+
+@cindex RereadLogAfterVerify, in CVSROOT/config
+@cindex @file{verifymsg}, changing the log message
+@item RereadLogAfterVerify=@var{value}
+Modify the @samp{commit} command such that CVS will reread the
+log message after running the program specified by @file{verifymsg}.
+@var{value} may be one of @samp{yes} or @samp{always}, indicating that
+the log message should always be reread; @samp{no}
+or @samp{never}, indicating that it should never be
+reread; or @var{value} may be @samp{stat}, indicating
+that the file should be checked with the filesystem
+@samp{stat()} function to see if it has changed (see warning below)
+before rereading. The default value is @samp{always}.
+
+@emph{Note that `stat' mode can cause CVS to pause for up to
+one extra second per directory committed. This can be less IO and
+CPU intensive but is not recommended for use with large repositories}
+
+@xref{verifymsg}, for more information on how verifymsg
+may be used.
@end table
@c ---------------------------------------------------------------------
@@ -12789,9 +13562,12 @@ when @code{:ext:} access method is specified.
@item $CVS_SERVER
Used in client-server mode when accessing a remote
repository using @sc{rsh}. It specifies the name of
-the program to start on the server side when accessing
-a remote repository using @sc{rsh}. The default value
-is @code{cvs}. @pxref{Connecting via rsh}
+the program to start on the server side (and any
+necessary arguments) when accessing a remote repository
+using the @code{:ext:}, @code{:fork:}, or @code{:server:} access methods.
+The default value for @code{:ext:} and @code{:server:} is @code{cvs};
+the default value for @code{:fork:} is the name used to run the client.
+@pxref{Connecting via rsh}
@item $CVS_PASSFILE
Used in client-server mode when accessing the @code{cvs
@@ -13001,6 +13777,11 @@ particular moment).
@c FIXME: What is the correct way to format a multiline
@c error message here? Maybe @table is the wrong
@c choice? Texinfo gurus?
+@item @var{file}:@var{line}: Assertion '@var{text}' failed
+The exact format of this message may vary depending on
+your system. It indicates a bug in @sc{cvs}, which can
+be handled as described in @ref{BUGS}.
+
@item cvs @var{command}: authorization failed: server @var{host} rejected access
This is a generic response when trying to connect to a
pserver server which chooses not to provide a
@@ -13009,11 +13790,6 @@ the username and password specified are correct and
that the @code{CVSROOT} specified is allowed by @samp{--allow-root}
in @file{inetd.conf}. See @ref{Password authenticated}.
-@item @var{file}:@var{line}: Assertion '@var{text}' failed
-The exact format of this message may vary depending on
-your system. It indicates a bug in @sc{cvs}, which can
-be handled as described in @ref{BUGS}.
-
@item cvs @var{command}: conflict: removed @var{file} was modified by second party
This message indicates that you removed a file, and
someone else modified it. To resolve the conflict,
@@ -13061,6 +13837,9 @@ for example @file{/var/tmp}; see @code{TMPDIR} in
@ref{Environment variables}, for how to set the
temporary directory.
+@item cannot commit files as 'root'
+See @samp{'root' is not allowed to commit files}.
+
@c For one example see basica-1a10 in the testsuite
@c For another example, "cvs co ." on NT; see comment
@c at windows-NT/filesubr.c (expand_wild).
@@ -13082,6 +13861,10 @@ completed successfully. This message should not occur
with current versions of @sc{cvs}, but it is documented
here for the benefit of @sc{cvs} 1.9 and older.
+@item cvs server: cannot open /root/.cvsignore: Permission denied
+@itemx cvs [server aborted]: can't chdir(/root): Permission denied
+See @ref{Connection}.
+
@item cvs [checkout aborted]: cannot rename file @var{file} to CVS/,,@var{file}: Invalid argument
This message has been reported as intermittently
happening with @sc{cvs} 1.9 on Solaris 2.5. The cause is
@@ -13275,6 +14058,16 @@ you should be able to just ignore the message.
However, if you have discovered information concerning its
cause, please let us know as described in @ref{BUGS}.
+@item 'root' is not allowed to commit files
+When committing a permanent change, @sc{cvs} makes a log entry of
+who committed the change. If you are committing the change logged
+in as "root" (not under "su" or other root-priv giving program),
+@sc{cvs} cannot determine who is actually making the change.
+As such, by default, @sc{cvs} disallows changes to be committed by users
+logged in as "root". (You can disable this option by commenting out
+the definition of @code{CVS_BADROOT} in @file{options.h} before
+building @sc{cvs}.
+
@item Too many arguments!
This message is typically printed by the @file{log.pl}
script which is in the @file{contrib} directory in the
@@ -13303,10 +14096,6 @@ find the log file which inetd writes
your system). For details, see @ref{Connection}, and
@ref{Password authentication server}.
-@item cvs server: cannot open /root/.cvsignore: Permission denied
-@itemx cvs [server aborted]: can't chdir(/root): Permission denied
-See @ref{Connection}.
-
@item cvs commit: Up-to-date check failed for `@var{file}'
This means that someone else has committed a change to
that file since the last time that you did a @code{cvs
@@ -13409,8 +14198,9 @@ directions given for :ext:.
@item :pserver:
Errors along the lines of "connection refused" typically indicate
that inetd isn't even listening for connections on port 2401
-whereas errors like "connection reset by peer" or "recv() from
-server: EOF" typically indicate that inetd is listening for
+whereas errors like "connection reset by peer",
+"received broken pipe signal", or "recv() from server: EOF"
+typically indicate that inetd is listening for
connections but is unable to start @sc{cvs} (this is frequently
caused by having an incorrect path in @file{inetd.conf}).
"unrecognized auth response" errors are caused by a bad command
@@ -13435,6 +14225,7 @@ Usage: cvs [cvs-options] command [command-options-and-arguments]
...
@end example
+@noindent
then you're missing the @samp{pserver} command at the end of the
line in @file{inetd.conf}; check to make sure that the entire command
is on one line and that it's complete.
@@ -13449,6 +14240,7 @@ CVS commands are:
...
@end example
+@noindent
then you've misspelled @samp{pserver} in some way. If it isn't
obvious, check for invisible control characters (particularly
carriage returns) in @file{inetd.conf}.
@@ -13485,7 +14277,14 @@ cvs server: cannot open /root/.cvsignore: Permission denied
cvs [server aborted]: can't chdir(/root): Permission denied
@end example
+@noindent
then you probably haven't specified @samp{-f} in @file{inetd.conf}.
+(In releases prior to @sc{cvs} 1.11.1, this problem can be caused by
+your system setting the @code{$HOME} environment variable
+for programs being run by inetd. In this case, you can either
+have inetd run a shell script that unsets @code{$HOME} and then runs
+@sc{cvs}, or you can use @code{env} to run @sc{cvs} with a pristine
+environment.)
If you can connect successfully for a while but then can't,
you've probably hit inetd's rate limit.
diff --git a/contrib/cvs/doc/cvsclient.texi b/contrib/cvs/doc/cvsclient.texi
index b81a7736c560..ff05d6c07c3f 100644
--- a/contrib/cvs/doc/cvsclient.texi
+++ b/contrib/cvs/doc/cvsclient.texi
@@ -1,7 +1,7 @@
\input texinfo @c -*- texinfo -*-
@setfilename cvsclient.info
-@include CVSvn.texi
+@include version-client.texi
@dircategory Programming
@direntry
@@ -13,7 +13,7 @@
This document describes the client/server protocol used by CVS. It does
not describe how to use or administer client/server CVS; see the regular
-CVS manual for that. This is version @value{CVSVN} of the protocol
+CVS manual for that. This is version @value{VERSION} of the protocol
specification---@xref{Introduction}, for more on what this version number
means.
@@ -59,7 +59,7 @@ to date than what you are reading now) of this document,
@file{cvsclient.texi}, can be found at the usual GNU FTP sites, with a
filename such as @file{cvs-@var{version}.tar.gz}.
-This is version @value{CVSVN} of the protocol specification. This
+This is version @value{VERSION} of the protocol specification. This
version number is intended only to aid in distinguishing different
versions of this specification. Although the specification is currently
maintained in conjunction with the CVS implementation, and carries the
diff --git a/contrib/cvs/doc/mdate-sh b/contrib/cvs/doc/mdate-sh
new file mode 100755
index 000000000000..0c88e758b8cf
--- /dev/null
+++ b/contrib/cvs/doc/mdate-sh
@@ -0,0 +1,92 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+# Copyright 1995, 1996, 1997 Free Software Foundation, Inc.
+# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+# Get the extended ls output of the file or directory.
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+if ls -L /dev/null 1>/dev/null 2>&1; then
+ set - x`ls -L -l -d $1`
+else
+ set - x`ls -l -d $1`
+fi
+# The month is at least the fourth argument
+# (3 shifts here, the next inside the loop).
+shift
+shift
+shift
+
+# Find the month. Next argument is day, followed by the year or time.
+month=
+until test $month
+do
+ shift
+ case $1 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+ esac
+done
+
+day=$2
+
+# Here we have to deal with the problem that the ls output gives either
+# the time of day or the year.
+case $3 in
+ *:*) set `date`; eval year=\$$#
+ case $2 in
+ Jan) nummonthtod=1;;
+ Feb) nummonthtod=2;;
+ Mar) nummonthtod=3;;
+ Apr) nummonthtod=4;;
+ May) nummonthtod=5;;
+ Jun) nummonthtod=6;;
+ Jul) nummonthtod=7;;
+ Aug) nummonthtod=8;;
+ Sep) nummonthtod=9;;
+ Oct) nummonthtod=10;;
+ Nov) nummonthtod=11;;
+ Dec) nummonthtod=12;;
+ esac
+ # For the first six month of the year the time notation can also
+ # be used for files modified in the last year.
+ if (expr $nummonth \> $nummonthtod) > /dev/null;
+ then
+ year=`expr $year - 1`
+ fi;;
+ *) year=$3;;
+esac
+
+# The result.
+echo $day $month $year
diff --git a/contrib/cvs/doc/stamp-1 b/contrib/cvs/doc/stamp-1
new file mode 100644
index 000000000000..6dd3bf80f303
--- /dev/null
+++ b/contrib/cvs/doc/stamp-1
@@ -0,0 +1,4 @@
+@set UPDATED 5 September 2001
+@set UPDATED-MONTH September 2001
+@set EDITION 1.11.2
+@set VERSION 1.11.2
diff --git a/contrib/cvs/doc/stamp-vti b/contrib/cvs/doc/stamp-vti
new file mode 100644
index 000000000000..2e257753246f
--- /dev/null
+++ b/contrib/cvs/doc/stamp-vti
@@ -0,0 +1,4 @@
+@set UPDATED 17 April 2002
+@set UPDATED-MONTH April 2002
+@set EDITION 1.11.2
+@set VERSION 1.11.2
diff --git a/contrib/cvs/doc/version-client.texi b/contrib/cvs/doc/version-client.texi
new file mode 100644
index 000000000000..6dd3bf80f303
--- /dev/null
+++ b/contrib/cvs/doc/version-client.texi
@@ -0,0 +1,4 @@
+@set UPDATED 5 September 2001
+@set UPDATED-MONTH September 2001
+@set EDITION 1.11.2
+@set VERSION 1.11.2
diff --git a/contrib/cvs/doc/version.texi b/contrib/cvs/doc/version.texi
new file mode 100644
index 000000000000..2e257753246f
--- /dev/null
+++ b/contrib/cvs/doc/version.texi
@@ -0,0 +1,4 @@
+@set UPDATED 17 April 2002
+@set UPDATED-MONTH April 2002
+@set EDITION 1.11.2
+@set VERSION 1.11.2
diff --git a/contrib/cvs/lib/ChangeLog b/contrib/cvs/lib/ChangeLog
index 107445d779cb..fe574396b5dd 100644
--- a/contrib/cvs/lib/ChangeLog
+++ b/contrib/cvs/lib/ChangeLog
@@ -1,3 +1,51 @@
+2001-09-18 Derek Price <dprice@collab.net>
+
+ * fnmatch.c: The header file for a system function we're replacing with
+ our own should be #included using double quotes.
+ (Patch from Corey Minyard <minyard@acm.org> via
+ Alexey Mahotkin <alexm@hsys.msk.ru>.)
+
+2001-09-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with automake 1.5.
+
+2001-08-09 Derek Price <dprice@collab.net>
+
+ * getpagesize.h: Only include sys/param.h when HAVE_SYS_PARAM_H has
+ been defined by configure.
+
+2001-08-07 Derek Price <dprice@collab.net>
+
+ * build_lib.com: Verify.
+ * getdate.y: Move the include of xtime.h out from underneath the ifdef
+ so that it is always included.
+ (Patch from Mike Marciniszyn <Mike.Marciniszyn@sanchez.com>.)
+
+ * getdate.c: Regenerated.
+
+2001-08-06 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated.
+
+2001-07-05 Larry Jones <larry.jones@sdrc.com>
+
+ * getpagesize.h: New file to define getpagesize() for systems that
+ don't already have it.
+ * valloc.c (valloc): Use it.
+
+2001-07-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new Automake release candidate 1.4h.
+
+2001-06-28 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new version of Automake.
+
+2001-06-15 Derek Price <dprice@collab.net>
+
+ * xselect.h: Don't include xtime.h.
+ (Thanks to Martin Neitzel <neitzel@sco.gaertner.de>.)
+
2001-04-25 Derek Price <dprice@collab.net>
* Makefile.in: Regenerated using AM 1.4e as of today at 18:10 -0400.
diff --git a/contrib/cvs/lib/Makefile.in b/contrib/cvs/lib/Makefile.in
index f53c852ea32f..a0e13b25e8dd 100644
--- a/contrib/cvs/lib/Makefile.in
+++ b/contrib/cvs/lib/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4e from Makefile.am.
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
@@ -39,7 +39,6 @@
#
# $(includeopt) is CVS specific and set by configure
-
SHELL = @SHELL@
srcdir = @srcdir@
@@ -60,11 +59,9 @@ infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
-
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-
top_builddir = ..
ACLOCAL = @ACLOCAL@
@@ -78,7 +75,6 @@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
-
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
@@ -90,25 +86,22 @@ AWK = @AWK@
CC = @CC@
CSH = @CSH@
DEPDIR = @DEPDIR@
-ETAGS = @ETAGS@
-ETAGS_INCLUDE_OPTION = @ETAGS_INCLUDE_OPTION@
+EXEEXT = @EXEEXT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTALL_STRIP_PROGRAM_ENV = @INSTALL_STRIP_PROGRAM_ENV@
KRB4 = @KRB4@
LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
-STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
-_am_include = @_am_include@
-_am_quote = @_am_quote@
+am__include = @am__include@
+am__quote = @am__quote@
includeopt = @includeopt@
install_sh = @install_sh@
@@ -159,8 +152,6 @@ EXTRA_DIST = \
build_lib.com \
xgssapi.h
-EXEEXT =
-OBJEXT = o
subdir = lib
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/options.h
@@ -175,19 +166,12 @@ am_libcvs_a_OBJECTS = argmatch.$(OBJEXT) ftruncate.$(OBJEXT) \
savecwd.$(OBJEXT) sighandle.$(OBJEXT) stripslash.$(OBJEXT) \
xgetwd.$(OBJEXT) yesno.$(OBJEXT)
libcvs_a_OBJECTS = $(am_libcvs_a_OBJECTS)
-AR = ar
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CFLAGS = @CFLAGS@
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/src
DEFS = @DEFS@
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/src
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
-DIST_SOURCES = $(libcvs_a_SOURCES)
depcomp = $(SHELL) $(top_srcdir)/depcomp
@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/argmatch.Po $(DEPDIR)/dup2.Po \
@AMDEP_TRUE@ $(DEPDIR)/fncase.Po $(DEPDIR)/fnmatch.Po \
@@ -202,36 +186,89 @@ depcomp = $(SHELL) $(top_srcdir)/depcomp
@AMDEP_TRUE@ $(DEPDIR)/strtoul.Po $(DEPDIR)/valloc.Po \
@AMDEP_TRUE@ $(DEPDIR)/waitpid.Po $(DEPDIR)/xgetwd.Po \
@AMDEP_TRUE@ $(DEPDIR)/yesno.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+DIST_SOURCES = $(libcvs_a_SOURCES)
DIST_COMMON = ChangeLog Makefile.am Makefile.in dup2.c fncase.c \
fnmatch.c getdate.c hostname.c memmove.c mkdir.c rename.c \
strerror.c strstr.c strtoul.c valloc.c waitpid.c
SOURCES = $(libcvs_a_SOURCES)
-OBJECTS = $(am_libcvs_a_OBJECTS)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj .y
-
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu lib/Makefile
-
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+AR = ar
+
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-
-libcvs.a: $(libcvs_a_OBJECTS) $(libcvs_a_DEPENDENCIES)
+libcvs.a: $(libcvs_a_OBJECTS) $(libcvs_a_DEPENDENCIES)
-rm -f libcvs.a
$(libcvs_a_AR) libcvs.a $(libcvs_a_OBJECTS) $(libcvs_a_LIBADD)
$(RANLIB) libcvs.a
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/argmatch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/dup2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/fncase.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/fnmatch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ftruncate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getdate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getline.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/hostname.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/md5.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memmove.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/mkdir.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/regex.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/rename.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/savecwd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/sighandle.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strerror.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/stripslash.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strstr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strtoul.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/valloc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/waitpid.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xgetwd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/yesno.Po@am__quote@
+
+distclean-depend:
+ -rm -rf $(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+
.y.c:
- $(YACC) $(AM_YFLAGS) $(YFLAGS) $< && mv y.tab.c $*.c
+ $(YACCCOMPILE) $< && mv y.tab.c $@
if test -f y.tab.h; then \
if cmp -s y.tab.h $*.h; then \
rm -f y.tab.h; \
@@ -239,13 +276,7 @@ libcvs.a: $(libcvs_a_OBJECTS) $(libcvs_a_DEPENDENCIES)
mv y.tab.h $*.h; \
fi; \
fi
-
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT) core *.core
-
-distclean-compile:
- -rm -f *.tab.c
+uninstall-info-am:
tags: TAGS
@@ -263,65 +294,21 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
- unique=`for i in $$list @CONFIG@; do \
+ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || $(ETAGS) $(ETAGS_ARGS) $$tags $$unique $(LISP)
+ || etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
GTAGS:
here=`CDPATH=: && cd $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
- && gtags -i $$here
+ && gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
- -rm -f TAGS ID
-
-@_am_include@ @_am_quote@$(DEPDIR)/argmatch.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/dup2.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/fncase.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/fnmatch.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/ftruncate.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/getdate.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/getline.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/getopt.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/getopt1.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/hostname.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/md5.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/memmove.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/mkdir.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/regex.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/rename.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/savecwd.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/sighandle.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/strerror.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/stripslash.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/strstr.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/strtoul.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/valloc.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/waitpid.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/xgetwd.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/yesno.Po@_am_quote@
-
-distclean-depend:
- -rm -rf $(DEPDIR)
-
-CCDEPMODE = @CCDEPMODE@
-
-.c.o:
- source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
- $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- $(COMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
-
-.c.obj:
- source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
- $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- $(COMPILE) -c -o $@ `cygpath -w $<`
-
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -330,7 +317,11 @@ distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
- d=$(srcdir); \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
if test -d $$d/$$file; then \
cp -pR $$d/$$file $(distdir) \
|| exit 1; \
@@ -355,24 +346,20 @@ install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
-
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- INSTALL_PROGRAM_ENV='$(INSTALL_STRIP_PROGRAM_ENV)' install
-
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- -rm -f Makefile.in
- -test -z "getdate.c" || rm -f getdate.c
clean: clean-am
clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
@@ -382,11 +369,11 @@ distclean: distclean-am
distclean-am: clean-am distclean-compile distclean-depend \
distclean-generic distclean-tags
-dvi:
+dvi: dvi-am
dvi-am:
-info:
+info: info-am
info-am:
@@ -394,7 +381,7 @@ install-data-am:
install-exec-am:
-install-info:
+install-info: install-info-am
install-man:
@@ -408,21 +395,23 @@ mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
-.PHONY: all all-am check check-am clean clean-generic \
+uninstall-am: uninstall-info-am
+
+.PHONY: GTAGS all all-am check check-am clean clean-generic \
clean-noinstLIBRARIES distclean distclean-compile \
distclean-depend distclean-generic distclean-tags distdir dvi \
dvi-am info info-am install install-am install-data \
install-data-am install-exec install-exec-am install-info \
- install-man install-strip installcheck installcheck-am \
- installdirs maintainer-clean maintainer-clean-generic \
- mostlyclean mostlyclean-compile mostlyclean-generic tags \
- uninstall uninstall-am
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic tags uninstall uninstall-am \
+ uninstall-info-am
# for backwards compatibility with the old makefiles
realclean: maintainer-clean
.PHONY: realclean
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/contrib/cvs/lib/fnmatch.c b/contrib/cvs/lib/fnmatch.c
index a41c0dc8a20c..33b25b831fa7 100644
--- a/contrib/cvs/lib/fnmatch.c
+++ b/contrib/cvs/lib/fnmatch.c
@@ -15,7 +15,7 @@ Library General Public License for more details. */
Jim Blandy <jimb@cyclic.com> for CVS use */
#ifdef HAVE_CONFIG_H
-#include "config.h"
+# include "config.h"
#endif
#include "system.h"
@@ -24,7 +24,7 @@ Library General Public License for more details. */
/* #include <ansidecl.h> */
/* @) */
#include <errno.h>
-#include <fnmatch.h>
+#include "fnmatch.h"
#if !defined(__GNU_LIBRARY__) && !defined(STDC_HEADERS)
extern int errno;
diff --git a/contrib/cvs/lib/getdate.y b/contrib/cvs/lib/getdate.y
index a2786eda7759..560b9e92960f 100644
--- a/contrib/cvs/lib/getdate.y
+++ b/contrib/cvs/lib/getdate.y
@@ -42,8 +42,8 @@
# include <types.h>
#else /* defined(vms) */
# include <sys/types.h>
-# include "xtime.h"
#endif /* !defined(vms) */
+# include "xtime.h"
#if defined (STDC_HEADERS) || defined (USG)
#include <string.h>
diff --git a/contrib/cvs/lib/getline.c b/contrib/cvs/lib/getline.c
index 84d7fce13e70..67e2b117ba4a 100644
--- a/contrib/cvs/lib/getline.c
+++ b/contrib/cvs/lib/getline.c
@@ -73,6 +73,7 @@ getstr (lineptr, n, stream, terminator, offset, limit)
errno = ENOMEM;
return -1;
}
+ *lineptr[0] = '\0';
}
nchars_avail = *n - offset;
diff --git a/contrib/cvs/lib/valloc.c b/contrib/cvs/lib/valloc.c
index 674b60f6e91b..17fb14b64d78 100644
--- a/contrib/cvs/lib/valloc.c
+++ b/contrib/cvs/lib/valloc.c
@@ -7,7 +7,7 @@
#include "system.h"
#ifndef HAVE_GETPAGESIZE
-#define getpagesize() 4096
+# include "getpagesize.h"
#endif
void *
diff --git a/contrib/cvs/lib/xselect.h b/contrib/cvs/lib/xselect.h
index f1df204cdb46..5605cbdb2a8b 100644
--- a/contrib/cvs/lib/xselect.h
+++ b/contrib/cvs/lib/xselect.h
@@ -9,13 +9,13 @@
GNU General Public License for more details. */
/* This file simply performs the include magic necessary for using select */
-#include <sys/types.h>
+
+/* select also requires <sys/types.h>, "xtime.h", and <unistd.h> */
+
#ifdef HAVE_SYS_BSDTYPES_H
# include <sys/bsdtypes.h>
#endif
-#include "xtime.h"
-
#if HAVE_SYS_SELECT_H
# include <sys/select.h>
#endif
diff --git a/contrib/cvs/man/ChangeLog b/contrib/cvs/man/ChangeLog
index ed9563c8f30a..ef99bb7c41af 100644
--- a/contrib/cvs/man/ChangeLog
+++ b/contrib/cvs/man/ChangeLog
@@ -1,3 +1,50 @@
+2002-04-17 Derek Price <oberon@umich.edu>
+
+ * cvs.1(cvs tag): Mention -c option.
+ (Correction from Michael Richardson <mcr@sandelman.ottawa.on.ca>.)
+
+2002-04-17 Derek Price <oberon@umich.edu>
+
+ * cvs.1(cvs commit): It's '-F' now, not '-f'.
+ (Correction from Norikatsu Shigemura <nork@cityfujisawa.ne.jp>.)
+
+2002-04-17 Derek Price <oberon@umich.edu>
+
+ * cvs.1: Claim to be out of date and direct users to the Cederqvist.
+ Replace www.cyclic.com with cvshome.org.
+ * cvs.5: Ditto.
+
+2001-11-27 Larry Jones <larry.jones@sdrc.com>
+
+ * cvsbug.8: Fixed typo.
+ (Correction from Mark D. Baushke <mdb@cvshome.org>.)
+
+2001-09-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with automake 1.5.
+
+2001-08-06 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated.
+
+2001-07-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new Automake release candidate 1.4h.
+
+2001-06-28 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new version of Automake.
+
+2001-05-21 Derek Price <dprice@collab.net>
+
+ * cvs.1: Correct a quoting error.
+ (Patch from Alexey Mahotkin <alexm@hsys.msk.ru>).
+
+2001-05-18 Derek Price <dprice@collab.net>
+
+ * cvs.1: Add note about 'P' file status from update.
+ (Reported by Jani Averbach <jaa@cc.jyu.fi>).
+
2001-04-25 Derek Price <dprice@collab.net>
* Makefile.in: Regenerated using AM 1.4e as of today at 18:10 -0400.
diff --git a/contrib/cvs/man/Makefile.in b/contrib/cvs/man/Makefile.in
index 7efae1228e02..b2da1993272a 100644
--- a/contrib/cvs/man/Makefile.in
+++ b/contrib/cvs/man/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4e from Makefile.am.
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
@@ -26,7 +26,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-
SHELL = @SHELL@
srcdir = @srcdir@
@@ -47,11 +46,9 @@ infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
-
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-
top_builddir = ..
ACLOCAL = @ACLOCAL@
@@ -65,7 +62,6 @@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
-
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
@@ -77,25 +73,22 @@ AWK = @AWK@
CC = @CC@
CSH = @CSH@
DEPDIR = @DEPDIR@
-ETAGS = @ETAGS@
-ETAGS_INCLUDE_OPTION = @ETAGS_INCLUDE_OPTION@
+EXEEXT = @EXEEXT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTALL_STRIP_PROGRAM_ENV = @INSTALL_STRIP_PROGRAM_ENV@
KRB4 = @KRB4@
LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
-STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
-_am_include = @_am_include@
-_am_quote = @_am_quote@
+am__include = @am__include@
+am__quote = @am__quote@
includeopt = @includeopt@
install_sh = @install_sh@
@@ -104,8 +97,6 @@ EXTRA_DIST = \
.cvsignore \
$(man_MANS)
-EXEEXT =
-OBJEXT = o
subdir = man
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/options.h
@@ -118,22 +109,22 @@ DIST_COMMON = ChangeLog Makefile.am Makefile.in
all: all-am
.SUFFIXES:
-
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu man/Makefile
-
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+uninstall-info-am:
man1dir = $(mandir)/man1
install-man1: $(man1_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(man1dir)
- @list='$(man1_MANS)'; \
- l2='$(man_MANS)'; for i in $$l2; do \
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
@@ -148,11 +139,11 @@ install-man1: $(man1_MANS) $(man_MANS)
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
done
-
uninstall-man1:
@$(NORMAL_UNINSTALL)
- @list='$(man1_MANS)'; \
- l2='$(man_MANS)'; for i in $$l2; do \
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
@@ -170,8 +161,9 @@ man5dir = $(mandir)/man5
install-man5: $(man5_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(man5dir)
- @list='$(man5_MANS)'; \
- l2='$(man_MANS)'; for i in $$l2; do \
+ @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
case "$$i" in \
*.5*) list="$$list $$i" ;; \
esac; \
@@ -186,11 +178,11 @@ install-man5: $(man5_MANS) $(man_MANS)
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man5dir)/$$inst"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(man5dir)/$$inst; \
done
-
uninstall-man5:
@$(NORMAL_UNINSTALL)
- @list='$(man5_MANS)'; \
- l2='$(man_MANS)'; for i in $$l2; do \
+ @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
case "$$i" in \
*.5*) list="$$list $$i" ;; \
esac; \
@@ -208,8 +200,9 @@ man8dir = $(mandir)/man8
install-man8: $(man8_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(man8dir)
- @list='$(man8_MANS)'; \
- l2='$(man_MANS)'; for i in $$l2; do \
+ @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
case "$$i" in \
*.8*) list="$$list $$i" ;; \
esac; \
@@ -224,11 +217,11 @@ install-man8: $(man8_MANS) $(man_MANS)
echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
done
-
uninstall-man8:
@$(NORMAL_UNINSTALL)
- @list='$(man8_MANS)'; \
- l2='$(man_MANS)'; for i in $$l2; do \
+ @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
case "$$i" in \
*.8*) list="$$list $$i" ;; \
esac; \
@@ -252,7 +245,11 @@ distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
- d=$(srcdir); \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
if test -d $$d/$$file; then \
cp -pR $$d/$$file $(distdir) \
|| exit 1; \
@@ -278,23 +275,20 @@ install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
-
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- INSTALL_PROGRAM_ENV='$(INSTALL_STRIP_PROGRAM_ENV)' install
-
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- -rm -f Makefile.in
clean: clean-am
clean-am: clean-generic mostlyclean-am
@@ -303,11 +297,11 @@ distclean: distclean-am
distclean-am: clean-am distclean-generic
-dvi:
+dvi: dvi-am
dvi-am:
-info:
+info: info-am
info-am:
@@ -315,7 +309,7 @@ install-data-am: install-man
install-exec-am:
-install-info:
+install-info: install-info-am
install-man: install-man1 install-man5 install-man8
@@ -329,25 +323,24 @@ mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
-uninstall-am: uninstall-man
+uninstall-am: uninstall-info-am uninstall-man
uninstall-man: uninstall-man1 uninstall-man5 uninstall-man8
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am info info-am install \
install-am install-data install-data-am install-exec \
- install-exec-am install-info install-man install-man1 \
- install-man5 install-man8 install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
+ install-exec-am install-info install-info-am install-man \
+ install-man1 install-man5 install-man8 install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
- uninstall uninstall-am uninstall-man uninstall-man1 \
- uninstall-man5 uninstall-man8
+ uninstall uninstall-am uninstall-info-am uninstall-man \
+ uninstall-man1 uninstall-man5 uninstall-man8
# for backwards compatibility with the old makefiles
realclean: maintainer-clean
.PHONY: realclean
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/contrib/cvs/man/cvs.1 b/contrib/cvs/man/cvs.1
index b29b71f4a04c..f02a87c9c269 100644
--- a/contrib/cvs/man/cvs.1
+++ b/contrib/cvs/man/cvs.1
@@ -26,8 +26,12 @@ cvs \- Concurrent Versions System
.SH "NOTE"
This manpage is a summary of some of the features of
.B cvs
-but for more in-depth documentation, consult the Cederqvist manual (as
-described in the SEE ALSO section of this manpage).
+but it may no longer be kept up-to-date.
+For more current and in-depth documentation, please consult the
+Cederqvist manual (via the
+.B info cvs
+command or otherwise,
+as described in the SEE ALSO section of this manpage).
.SH "DESCRIPTION"
.IX "revision control system" "\fLcvs\fR"
.IX cvs "" "\fLcvs\fP \- concurrent versions system"
@@ -909,7 +913,7 @@ the
.B \-s
option within the modules file.
.TP
-\fBcommit\fP [\fB\-lnR\fP] [\fB\-m\fP '\fIlog_message\fP' | \fB\-f\fP \fIfile\fP] [\fB\-r\fP \fIrevision\fP] [\fIfiles.\|.\|.\fP]
+\fBcommit\fP [\fB\-lnR\fP] [\fB\-m\fP '\fIlog_message\fP' | \fB\-F\fP \fIfile\fP] [\fB\-r\fP \fIrevision\fP] [\fIfiles.\|.\|.\fP]
.I Requires:
working directory, repository.
.br
@@ -1440,7 +1444,7 @@ Working directory.
Working directory, history log.
.br
This command is meant to safely cancel the effect of
-.` "cvs checkout'.
+.` "cvs checkout".
Since
.B cvs
doesn't lock files, it isn't strictly necessary to use this command.
@@ -1623,6 +1627,13 @@ Use this command to assign symbolic tags to the nearest repository
versions to your working sources. The tags are applied immediately to
the repository, as with \fBrtag\fP.
.SP
+One potentially surprising aspect of the fact that \fBcvs tag\fP
+operates on the repository is that you are tagging the checked-in
+revisions, which may differ from locally modified files in your working
+directory. If you want to avoid doing this by mistake, specify the
+\fB-c\fP option to \fBcvs tag\fP. If there are any locally modified files, CVS
+will abort with an error before it tags any files.
+.SP
One use for tags is to record a ``snapshot'' of the current sources
when the software freeze date of a project arrives. As bugs are fixed
after the freeze date, only those changed sources that are to be part
@@ -1708,7 +1719,7 @@ or
.B update
keeps you informed of its progress by printing a line for each file,
prefaced with one of the characters
-.` "U A R M C ?"
+.` "U P A R M C ?"
to indicate the status of the file:
.TP 1i
\fBU\fP \fIfile\fP
@@ -1717,6 +1728,10 @@ This is done for any file that exists in the repository but not in
your source, and for files that you haven't changed but are not the most
recent versions available in the repository.
.TP 1i
+\fBP\fP \fIfile\fP
+Like \fBU\fP, but the CVS server sends a patch instead of an entire file.
+This accomplishes the same thing as \fBU\fP using less bandwidth.
+.TP 1i
\fBA\fP \fIfile\fP
The file has been \fIadded\fP to your private copy of the sources, and
will be added to the
@@ -2115,7 +2130,7 @@ command or it may be available as cvs.ps (postscript), cvs.texinfo
For CVS updates, more information on documentation, software related
to CVS, development of CVS, and more, see:
.in +1i
-.B http://www.cyclic.com
+.B http://cvshome.org
.B http://www.loria.fr/~molli/cvs-index.html
.in -1i
.SP
diff --git a/contrib/cvs/man/cvs.5 b/contrib/cvs/man/cvs.5
index fb2bcec0a098..f6ca3337a2ea 100644
--- a/contrib/cvs/man/cvs.5
+++ b/contrib/cvs/man/cvs.5
@@ -6,6 +6,11 @@
..
.SH NAME
cvs \- Concurrent Versions System support files
+.SH NOTE
+This documentation may no longer be up to date. Please consult the Cederqvist
+(CVS Manual) as specified in
+.BR cvs ( 1 ).
+
.SH SYNOPSIS
.hy 0
.na
diff --git a/contrib/cvs/man/cvsbug.8 b/contrib/cvs/man/cvsbug.8
index ecf2eb8a7ee2..f5a96b39493c 100644
--- a/contrib/cvs/man/cvsbug.8
+++ b/contrib/cvs/man/cvsbug.8
@@ -180,7 +180,7 @@ describe only
with each problem report.
.IP \(bu 3m
For follow-up mail, use the same subject line as the one in the automatic
-acknowledgent. It consists of category, PR number and the original synopsis
+acknowledgement. It consists of category, PR number and the original synopsis
line. This allows the support site to relate several mail messages to a
particular PR and to record them automatically.
.IP \(bu 3m
diff --git a/contrib/cvs/mdate-sh b/contrib/cvs/mdate-sh
new file mode 100755
index 000000000000..0c88e758b8cf
--- /dev/null
+++ b/contrib/cvs/mdate-sh
@@ -0,0 +1,92 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+# Copyright 1995, 1996, 1997 Free Software Foundation, Inc.
+# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+# Get the extended ls output of the file or directory.
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+if ls -L /dev/null 1>/dev/null 2>&1; then
+ set - x`ls -L -l -d $1`
+else
+ set - x`ls -l -d $1`
+fi
+# The month is at least the fourth argument
+# (3 shifts here, the next inside the loop).
+shift
+shift
+shift
+
+# Find the month. Next argument is day, followed by the year or time.
+month=
+until test $month
+do
+ shift
+ case $1 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+ esac
+done
+
+day=$2
+
+# Here we have to deal with the problem that the ls output gives either
+# the time of day or the year.
+case $3 in
+ *:*) set `date`; eval year=\$$#
+ case $2 in
+ Jan) nummonthtod=1;;
+ Feb) nummonthtod=2;;
+ Mar) nummonthtod=3;;
+ Apr) nummonthtod=4;;
+ May) nummonthtod=5;;
+ Jun) nummonthtod=6;;
+ Jul) nummonthtod=7;;
+ Aug) nummonthtod=8;;
+ Sep) nummonthtod=9;;
+ Oct) nummonthtod=10;;
+ Nov) nummonthtod=11;;
+ Dec) nummonthtod=12;;
+ esac
+ # For the first six month of the year the time notation can also
+ # be used for files modified in the last year.
+ if (expr $nummonth \> $nummonthtod) > /dev/null;
+ then
+ year=`expr $year - 1`
+ fi;;
+ *) year=$3;;
+esac
+
+# The result.
+echo $day $month $year
diff --git a/contrib/cvs/noautomake.sh b/contrib/cvs/noautomake.sh
new file mode 100755
index 000000000000..fa53a30c9d62
--- /dev/null
+++ b/contrib/cvs/noautomake.sh
@@ -0,0 +1,92 @@
+#! /bin/sh
+
+# Let autoconf run when this is set
+autoconf=:
+
+usage()
+{
+ echo "usage: `basename $0` --help | --version"
+ echo "usage: `basename $0` [--[no]autoconf]"
+}
+
+help()
+{
+ echo
+ echo "This program will touch the files necessary to prevent Automake, aclocal,"
+ echo "and, optionally, Autoheader, Autoconf, and configure from running after a"
+ echo "fresh update from the CVS repository."
+ echo
+ echo " -h | --help Display this text and exit"
+ echo " -V | --version Display version and exit"
+ echo " -a | --autoconf Allow Autoconf & Autoheader to run (default)"
+ echo " -A | --noautoconf Prevent Autoconf & Autoheader from running"
+ echo
+ echo "Not running Automake & aclocal causes changes to the following user files"
+ echo "to be ignored:"
+ echo
+ echo " Makefile.am, acinclude.m4, configure.in"
+ echo
+ echo "Not running Autoconf & Autoheader causes changes to the following user"
+ echo "files to be ignored:"
+ echo
+ echo " acconfig.h, configure.in"
+}
+
+while getopts VACach-: opt; do
+ if test "x$opt" = "x-"; then
+ case $OPTARG in
+ help)
+ opt=h
+ ;;
+ version)
+ opt=V
+ ;;
+ autoconf)
+ opt=a
+ ;;
+ noautoconf)
+ opt=A
+ ;;
+ *)
+ opt=?
+ ;;
+ esac
+ fi
+ case $opt in
+ h)
+ usage
+ help
+ exit 0
+ ;;
+ V)
+ echo "CVS No Automake 0.1"
+ exit 0
+ ;;
+ A)
+ autoconf=false
+ ;;
+ a)
+ autoconf=:
+ ;;
+ ?)
+ usage >&2
+ exit 2
+ ;;
+ esac
+done
+
+# prevent aclocal from running
+find . -name aclocal.m4 -exec touch {} \;
+
+# prevent Automake from running
+find . -name Makefile.in -exec touch {} \;
+
+# prevent Autoheader from running
+if $autoconf; then :; else
+ find . -name 'stamp-h?.in' -exec touch {} \;
+fi
+
+# prevent Autoconf from running
+if $autoconf; then :; else
+ find . -name configure -exec touch {} \;
+fi
diff --git a/contrib/cvs/src/ChangeLog b/contrib/cvs/src/ChangeLog
index f483a7b23095..727332c29c8a 100644
--- a/contrib/cvs/src/ChangeLog
+++ b/contrib/cvs/src/ChangeLog
@@ -1,3 +1,807 @@
+2002-04-17 Derek Price <oberon@umich.edu>
+
+ * version.h: Regenerated for 1.11.2.
+
+2002-04-03 Derek Price <oberon@umich.edu>
+
+ * stamp-h2.in: Regenerate with recent version of Autoconf.
+
+2002-04-03 Derek Price <oberon@umich.edu>
+
+ * sanity.sh (TR): Send the stderr of one of the tool setup (tr) tests
+ to /dev/null to avoid spurious output on some operating systems
+ (notably Mac OS X).
+
+2002-03-22 Larry Jones <larry.jones@sdrc.com>
+
+ * sanity.sh (rcslib): Correct new tests to use ${testcvs} instead
+ of cvs.
+
+2002-03-21 Derek Price <oberon@umich.edu>
+
+ * vers_ts.c (time_stamp): Return the timestamp for the newer of the
+ link and the link's source when the file is a link.
+ (Patch from RedHat cvs-1.11.1p1-7 SRPM.)
+
+ * sanity.sh (rcslib): Test for same.
+
+2002-03-17 Larry Jones <larry.jones@sdrc.com>
+
+ * log.c (cvslog, log_fileproc): Add -S option to suppress head or
+ file name if no revisions selected.
+ * sanity.sh (log): New tests for above.
+
+2002-03-13 Derek Price <oberon@umich.edu>
+
+ * main.c (usg): Correct a spelling mistake in a comment.
+ (Thanks to Matt Kraai <kraai@alumni.cmu.edu>.)
+
+2002-03-09 Larry Jones <larry.jones@sdrc.com>
+
+ * import.c (import): Change the suggested merge message to use
+ rev tags instead of the branch tag with a date.
+ * sanity.sh (import, importb): Change to match.
+
+ * remove.c (remove_fileproc): Disallow removing files with sticky
+ dates for the same reason we already disallow sticky numeric tags.
+ * sanity.sh (sticky): New test for above.
+
+2002-02-27 Larry Jones <larry.jones@sdrc.com>
+
+ * diff.c (diff_fileproc): Treat dead revisions as nonexistent.
+
+2002-02-26 Larry Jones <larry.jones@sdrc.com>
+
+ * diff.c (diff): Remove -V and --paginate options: they aren't valid.
+ (diff_usage): Document all the diff options.
+
+2002-02-13 Larry Jones <larry.jones@sdrc.com>
+
+ * rcs.c (RCS_gettag): Do not interpret an empty tag as HEAD (nothing
+ else does and I don't see any documentation that says it should).
+ (translate_symtag): Break out of loop at end of symbols to prevent
+ looping forever when tag is "".
+ (Reported by Alain ENOUT <aln00@udcast.com>
+ via Eric Gillespie <epg@pretzelnet.org>.)
+
+2002-02-11 Larry Jones <larry.jones@sdrc.com>
+
+ * server.c (server_cleanup): Set buf_to_net back to blocking mode
+ and flush it (in case there are any error messages pending) before
+ shutting down buf_from_net and again right before shutting it down.
+
+2002-02-08 Larry Jones <larry.jones@sdrc.com>
+
+ * main.c (lookup_command_attribute): Throw a fatal error if the
+ command is not found.
+ * server.c (server_tag): Use the correct command name.
+
+2002-01-30 Larry Jones <larry.jones@sdrc.com>
+
+ * error.h (error_exit): Remove unintended prototype.
+
+ * server.c (serve_root): Remove check for impossible condition.
+ (serve_init): Save and restore current_parsed_root.
+
+2002-01-29 Larry Jones <larry.jones@sdrc.com>
+
+ * error.h (error_exit): Declare __noreturn__ to avoid spurious
+ warnings.
+
+ * server.c (serve_root): If the specified root doesn't match the
+ pserver root, return before changing current_parsed_root to prevent
+ subsequent commands from accessing an unchecked root directory.
+ (server_init): Check specified root against the pserver root and
+ complain if they don't match. Also, if there are pending errors,
+ print them and return before changing current_parsed_root to prevent
+ subsequent commands from accessing an unchecked root directory.
+ * sanity.sh (pserver): New tests for above.
+
+2002-01-10 Larry Jones <larry.jones@sdrc.com>
+
+ * log.c (log_version_requested): Change :: in revision spec to be
+ exclusive just on the low end (so -r tag1::tag2 gives revisions
+ after tag1 but up to and including tag2), which is much more useful
+ than the previous (exclusive at both ends) behavior.
+ (log_usage): Update to match.
+ * sanity.sh (log): Update to match.
+
+2002-01-02 Larry Jones <larry.jones@sdrc.com>
+
+ * server.c (LOG_DAEMON): Define if needed.
+ (Patch from John David Anglin <dave@hiauly1.hia.nrc.ca>.)
+
+ * server.c (pserver_authenticate_connection): Add a specific error
+ message for EOF at protocol start and syslog if available.
+ * sanity.sh (pserver-bufinit): Update to match.
+
+2001-12-10 Larry Jones <larry.jones@sdrc.com>
+
+ * log.c (log_usage): Note that -r and -d take lists, not just a
+ single specification.
+ (log_expand_revlist): Don't dereference null pointers when one end
+ of a revision range is a non-existent tag.
+
+2001-12-03 Larry Jones <larry.jones@sdrc.com>
+
+ * annotate.c (annotate, annotate_fileproc): Don't annotate binary
+ files unless new -F option given.
+ * sanity.sh (basica, ann, ann-id, rcs, keywordlog, tagdate): Update
+ to match.
+
+2001-11-30 Larry Jones <larry.jones@sdrc.com>
+
+ * admin.c (admin): Allow unrestricted usage of -q in addition to -k.
+
+2001-10-25 Larry Jones <larry.jones@sdrc.com>
+
+ * log.c (log_expand_revlist): Make erroneous or inconsistent revision
+ specs select no revisions rather than all revisions.
+
+2001-10-23 Larry Jones <larry.jones@sdrc.com>
+
+ * import.c (add_rcs_file): Don't put an expand entry into the file
+ for the default expansion mode (kv).
+ * wrapper.c (wrap_send, wrap_unparse_rcs_options): Process entries
+ with default expansion mode since they may be needed to avoid matching
+ a more general entry later.
+ (wrap_add): Set rcsOption to NULL for default (kv).
+ (wrap_add_entry): Use structure assignment to copy entries rather
+ that copying members by hand.
+ * sanity.sh (binwrap3): Revise to test wrapper entries that don't
+ specify any non-default options but just prevent matching later,
+ more general entries.
+
+2001-10-02 Larry Jones <larry.jones@sdrc.com>
+
+ * rcs.c (RCS_fully_parse): Add revision number to more error messages.
+
+2001-09-27 Larry Jones <larry.jones@sdrc.com>
+
+ * rcs.c (RCS_fully_parse, RCS_getdeltatext): Add the missing revision
+ number to the "mismatch" error message.
+
+ * sanity.sh (multiroot2-9a): Update to match changes to lock.c.
+
+2001-09-26 Larry Jones <larry.jones@sdrc.com>
+
+ * lock.c (Lock_Cleanup, Reader_Lock, write_lock): Add trace messages.
+
+2001-09-24 Derek Price <dprice@collab.net>
+
+ * find_names.c (add_entries_proc): Leave closure specified as such in the
+ function definition for clarity.
+
+ * find_names.c (Find_Names): Use 'closure' feature of walklist()
+ to eliminate the static variable.
+ (add_entries_proc): Expect closure to be the file list.
+ (Patch from Alexey Mahotkin <alexm@hsys.msk.ru>.)
+
+2001-09-19 Derek Price <dprice@collab.net>
+
+ * rcs.c (rcsbuf_valpolish_internal): Restore one of the
+ "if ( ... ) abort();" sequences since it seems to check the validity of
+ the RCS file rather than for a programming error. Also added a FIXME
+ comment to the effect that we should explain the RCS file error to the
+ user as such if it is such.
+ (Thanks to Larry Jones <scjones@sdrc.com>.)
+
+2001-09-19 Derek Price <dprice@collab.net>
+
+ * rcs.c (rcsbuf_getkey, rcsbuf_valpolish_internal): Replace some code
+ of the form "if ( ... ) abort();" with equivalent calls to assert().
+
+2001-09-17 Derek Price <dprice@collab.net>
+
+ * myndbm.c (mydbm_load_file): Fix buffer overflow error and make error
+ messages more informative.
+ * sanity.sh (modules6): New test.
+ (Original report from Taska <taska@collab.net> and others.)
+
+2001-09-14 Derek Price <dprice@collab.net>
+
+ * logmsg.c (do_verify): Dispose memory when finished with it.
+
+2001-09-07 Larry Jones <larry.jones@sdrc.com>
+
+ * mkmodules.c (notify_contents): In the example, move the %s to
+ the end since many, if not most, versions of mail insist on
+ options coming before addresses.
+
+2001-09-06 Derek Price <dprice@collab.net>
+
+ * login.c (login): Deal with NULL return value from getpass.
+
+2001-09-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with automake 1.5.
+ * stamp-h2.in: Ditto.
+
+2001-09-04 Derek Price <dprice@collab.net>
+
+ * main.c (main): Fix empty CVSROOT message to specify `valid' instead
+ of `legal'.
+
+2001-09-04 Derek Price <dprice@collab.net>
+
+ * server.c (pserver_authenticate_connection): Back out changes from the
+ 30th and...
+ * getline.c (getstr): init the buffer instead.
+
+2001-08-31 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Backed out accidental commit from yesterday.
+
+2001-08-30 Derek Price <dprice@collab.net>
+
+ * server.c (pserver_authenticate_connection): Don't print from the
+ NULL pointer in the error message string in the case where the client
+ didn't send any data.
+ * sanity.sh (pserver): Test for this case.
+ (Report from Mark Welch <mark@collab.net>).
+
+2001-08-24 Derek Price <dprice@collab.net>
+
+ * logmsg.c (do_editor): Add comment and assertion.
+ * import.c (import): Don't call do_editor with a repository argument
+ in client mode.
+ (Report and original patch from darkness <darkness@invado.com>.)
+
+2001-08-24 Larry Jones <larry.jones@sdrc.com>
+
+ * log.c (log_expand_revlist): Arrange for nil revision specs to
+ select nothing instead of everything.
+ * sanity.sh (log): New tests for above.
+
+2001-08-24 Derek Price <dprice@collab.net>
+
+ * parseinfo.c (Parse_Info): Change the function name in the trace
+ and add the client/server string.
+
+2001-08-24 Derek Price <dprice@collab.net>
+
+ * Implement RereadLogAfterVerify CVSROOT/config option to control
+ FreeBSD read-write of log messages in the verification script.
+ * logmsg.c: RereadLogAfterVerify defaults to LOGMSG_REREAD_NEVER
+ to preserve the status quo.
+ * parseinfo.c (parse_config): Add parsing for RereadLogAfterVerify
+ option. Possible values are: no | never | yes | always | stat
+ * cvs.h: Add extern for RereadLogAfterVerify and new value macros
+ LOGMSG_REREAD_NEVER, LOGMSG_REREAD_ALWAYS, LOGMSG_REREAD_STAT for
+ its values.
+ (Patch from Mark D. Baushke <mdb@cvshome.org>.)
+
+ * Apply changes from FreeBSD cvs sources to implement a read-write
+ user-defined verification script.
+ * logmsg.c (do_verify): Update do_verify to expect a pointer
+ to the saved message. The log file passed to the verifymsg_script
+ should be re-read after the user-defined verification script has
+ been run. The user-defined verification script is allowed to
+ modify the message. This allows the script to add extra
+ information to the log message or to remove template lines that
+ are not needed.
+ * cvs.h: Update prototype for do_verify prototype to expect a
+ pointer to the saved_message.
+ * commit.c (commit, commit_fileproc, commit_direntproc): Update
+ calls to do_verify as the saved_message arg is now read-write.
+ * import.c (import): Update calls to do_verify as the
+ saved_message arg is now read-write.
+ * sanity.sh (info-v4-[12]): Rename the old info-v4 test to info-v5
+ and add a new info-v4 test case have the verification script
+ modify the log message to test the above changes.
+ (Patch from Mark D. Baushke <mdb@cvshome.org>.)
+
+ * logmsg.c: Change RereadLogAfterVerify default to always.
+ (do_verify): Reformat and make minor fixes to Mark's patch.
+ * mkmodules.c (config_constants): Add comment about
+ RereadLogAfterVerify.
+ * sanity.sh (info-rereadlog): Rename the tests from Mark's patch and
+ reformat them a bit.
+
+2001-08-23 Derek Price <dprice@collab.net>
+
+ * sanity.sh (info): Demonstrate that the verifymsg scripts can
+ sometimes, but not always, retreive information on which directory is
+ being committed to.
+
+2001-08-22 Derek Price <dprice@collab.net>
+
+ * logmsg.c: Back out the last change - the repository which is passed
+ in is actually the directory and changes with each call to do_verify.
+ If a verifymsg script is using `pwd`, this could change the operation.
+ * cvs.h: Ditto.
+ * commit.c: Ditto.
+ * import.c: Ditto.
+
+2001-08-22 Derek Price <dprice@collab.net>
+
+ * logmsg.c (do_editor): Return reused_message.
+ (do_verify): Don't verify the same log message more than once.
+ * cvs.h: Update prototypes for do_verify and do_editor.
+ * commit.c (commit_fileproc, commit_direntproc): Use the new functionality.
+ * import.c (import): Ditto.
+
+2001-08-22 Derek Price <dprice@collab.net>
+
+ * logmsg.c (do_verify): Remove an unecessary "else" clause following an
+ exit and unindent the former contents.
+
+2001-08-22 Derek Price <dprice@collab.net>
+
+ * commit.c (commit): Don't call do_verify in client mode since we know
+ do_verify will just return anyhow.
+
+2001-08-20 Derek Price <dprice@collab.net>
+
+ * Makefile.am (cvs_SOURCES): Add version.c and version.h.
+ (BUILT_SOURCES): Add version.h.
+ (Maintainer Targets): Remove version.h.
+ * version.c: Remove @VERSION@ dependant bits.
+ * version.c.in: Removed.
+ * version.h.in: New file.
+ (Original patch from Alexey Mahotkin <alexm@hsys.msk.ru>.)
+
+ * Makefile.am: Various modifications to make Automake, make dist, and
+ windows targets work like they are supposed to.
+ * version.h: New (generated) file.
+
+ * Makefile.in: Regenerated.
+
+2001-08-09 Derek Price <dprice@collab.net>
+
+ * client.c (socket_buffer_shutdown): Use recv instead of read and
+ return 0 on success.
+ (Patch from "Manfred Klug" <manklu@web.de>.)
+
+2001-08-09 Derek Price <dprice@collab.net>
+
+ * buffer.c (stdio_buffer_shutdown): Assume the buffer is not a socket
+ when NO_SOCKET_TO_FD is defined.
+ * client.c (make_bufs_from_fds): Add is_sock argument and remove fstat
+ call and reference to S_ISSOCK since these functions aren't available
+ under Windows.
+ (connect_to_forked_server, connect_to_pserver, start_tcp_server,
+ start_server, start_rsh_server): Use new argument.
+ (Patch from "Manfred Klug" <manklu@web.de>.)
+
+ * buffer.c (stdio_buffer_shutdown): Various reformattings, fix bug
+ where rsh pipes weren't being closed.
+
+2001-08-09 Derek Price <dprice@collab.net>
+
+ * sanity.sh (rmadd, rm-update-message, join-two-branch,
+ ignore-on-branch): Change a few references to `cvs' to `$PROG'.
+
+2001-08-07 Derek Price <dprice@collab.net>
+
+ * build_src.com: Add annotate.c/annotate.obj,verify, correct zlib name.
+ * patch.c: VMS time_t appears to be unsigned. Add a cast when testing
+ for (time_t)-1.
+ * subr.c: #else,#endif for no symlinks should be moved.
+ (Patch from Mike Marciniszyn <Mike.Marciniszyn@sanchez.com>.)
+
+2001-08-06 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated.
+
+2001-08-01 Derek Price <dprice@collab.net>
+
+ * diff.c (diff): Send long option for side-by-side diffs to the server
+ rather than '-y', for backwards compatibility with old servers.
+ (Original patch from Peter Mathiasson <peter@mathiasson.nu>.)
+
+2001-07-19 Larry Jones <larry.jones@sdrc.com>
+
+ * mkmodules.c (cvswrappers_contents): Remove -t/-f since they're
+ disabled in wrapper.c.
+
+ * checkout.c (checkout): Don't complain about checking out into the
+ repository when piping output.
+ (Reported by der Mouse <mouse@Rodents.Montreal.QC.CA>.)
+ * sanity.sh (checkout_repository): New tests for above.
+
+2001-07-10 Larry Jones <larry.jones@sdrc.com>
+
+ * sanity.sh (importc-7): Now works correctly in local mode.
+
+ * commit.c (commit_dirleaveproc): We're still in the directory when
+ this is called, so the first argument to Name_Repository needs to
+ be NULL, not dir.
+ * sanity.sh (rmadd): New tests for above.
+
+ * commit.c (commit): Reword error messages for committing as root.
+
+2001-07-08 Larry Jones <larry.jones@sdrc.com>
+
+ * rcs.c (RCS_checkout): Correct scanf format to allow for trailing
+ NUL terminator.
+ * update.c (special_file_mismatch): Ditto.
+ (Reported by Pekka Savola <pekkas@netcore.fi>.)
+
+2001-07-05 Larry Jones <larry.jones@sdrc.com>
+
+ * client.c, root.c: Fix -Wall warnings.
+
+ * buffer.c: #include socket header to declare shutdown().
+
+ * rcs.c (rcsbuf_open): Use getpagesize() instead of sysconf() for
+ portability.
+ (RCS_copydeltas, rcsbuf_fill): Fix -Wall warnings.
+
+2001-07-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new Automake release candidate 1.4h.
+
+2001-07-03 Derek Price <dprice@collab.net>
+
+ * rcs.c (rcsbuf_open): Reduce memory consumption still further by not
+ mmapping the entire file when pos is specified.
+ (rcsbuf_cache_open): Add FIXME comment wrt read-only mmaps and rcsbuf
+ caching.
+
+2001-07-03 Derek Price <dprice@collab.net>
+
+ * rcs.c (rcsbuf_open): Use mmap when possible to reduce memory
+ consumption, especially with large (e.g. binary) files.
+ (rcsbuf_close): Call munmap.
+ (rcsbuf_getkey): Remove the buffer fill code when using mmap.
+ (rcsbuf_getrevnum): Ditto.
+ (rcsbuf_fill): Remove this function when using mmap.
+ (rcsbuf_cache_open): Mostly don't use this function with mmap.
+ (RCS_copydeltas): Don't depend on the file pointer with mmap.
+
+ * stamp-h2.in: Regenerated.
+
+2001-07-03 Derek Price <dprice@collab.net>
+
+ * update.c: Indent compiler directives.
+
+2001-07-02 Larry Jones <larry.jones@sdrc.com>
+
+ * import.c (update_rcs_file): Use -kb instead of -ko when comparing
+ binary files.
+ (Reported by Gyula Faller <gfaller@graphisoft.hu>.)
+
+2001-06-28 Larry Jones <larry.jones@sdrc.com>
+
+ * checkout.c (checkout): Explicitly initialize all the static options
+ so that multiple calls work right. Also fix potential memory leaks.
+ (Reported by Dr. Dieter Maurer <dieter@sz-sb.de>.)
+
+2001-06-28 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new version of Automake.
+
+2001-06-28 Larry Jones <larry.jones@sdrc.com>
+
+ * checkout.c (checkout): Set history_name for export as well as
+ checkout.
+ (checkout_proc): Use it.
+
+ * checkout.c (safe_location): Add missing argument in error message.
+
+2001-06-26 Larry Jones <larry.jones@sdrc.com>
+
+ * recurse.c (start_recursion): Use strip_trailing_slashes instead
+ of doing it by hand.
+
+ * server.c (pserver_authenticate_connection): Don't clear out
+ descrambled_password until *after* it's (potentially) logged.
+ (Reported by Eric Hanchrow <offby1@blarg.net>.)
+
+2001-06-25 Larry Jones <larry.jones@sdrc.com>
+
+ * recurse.c (start_recursion): Deal with at least some of the cases
+ where trailing slashes cause confusion.
+ (Reported by Malcolm Fernandes <fernande@redback.com>.)
+ * sanity.sh (basica, basicb): Tweak existing tests to check this.
+
+2001-06-22 Larry Jones <larry.jones@sdrc.com>
+
+ * sanity.sh (modules5): New tests with -d on command line.
+
+2001-06-21 Larry Jones <larry.jones@sdrc.com>
+
+ * modules.c (do_module): Use run_module_prog and server_active to
+ determine when to call server_prog instead of using server_expanding
+ so that we get the right paths in the replies as long as we take
+ mwhere into account in addition to where.
+ (Reported by Pascal Bourguignon <pjb@informatimago.com>.)
+ * server.c (server_prog): Use protocol pipe instead of buf_to_net.
+ * sanity.sh (modules5): Remove FIXCVS comment and update to match.
+ * server.c, server.h: Remove server_expanding since now unused.
+
+2001-06-21 Larry Jones <larry.jones@sdrc.com>
+ for Stephen Rasku <stephen@tgivan.com>
+
+ * admin.c: Corrected spelling mistakes in help.
+
+2001-06-20 Derek Price <dprice@collab.net>
+
+ * client.c (socket_buffer_shutdown): Fix untested typos.
+ (Reported by "Jerzy Kaczorowski" <jerzyk@wndtabs.com>.)
+
+ * buffer.c (stdio_buffer_shutdown): Put the call to SHUTDOWN_SERVER in
+ the correct place.
+
+2001-06-20 Derek Price <dprice@collab.net>
+
+ * logmsg.c (do_editor): Abort in the case that the file has only
+ comment lines.
+ (Original patch from Mark Valentine <mark@thuvia.demon.co.uk>.)
+
+ * logmsg.c (do_editor): Fix rare memory leak.
+ * sanity.sh (editor): Add tests for aborted log messages.
+
+2001-06-20 Larry Jones <larry.jones@sdrc.com>
+
+ * server.c (switch_to_user): Only set $CVS_USER if
+ AUTH_SERVER_SUPPORT is defined.
+ (Reported by Nalin Dahyabhai <nalin@blade.devel.redhat.com>.)
+
+2001-06-13 Derek Price <dprice@collab.net>
+
+ * client.c: Fix incorrect fixed-size buffer usage in
+ connect_to_gserver().
+ (Minor changes to a patch from Alexey Mahotkin <alexm@hsys.msk.ru>.)
+
+2001-06-11 Derek Price <dprice@collab.net>
+
+ * main.c (main): Always print $CVSROOT when parse_cvsroot fails.
+ * root.c (parse_cvsroot): Tidy error messages and provide more
+ consistent behavior.
+ * sanity.sh (crerepos): Adapt to new error messages.
+ (Suggested by Alexey Mahotkin <alexm@hsys.msk.ru>.)
+
+2001-06-08 Derek Price <dprice@collab.net>
+
+ * sanity.sh (tagf-28): Use $CVSROOT_DIRNAME.
+
+2001-06-07 Larry Jones <larry.jones@sdrc.com>
+
+ * rcs.c (RCS_unlock): Reverse kj's change of 1999-10-18: a bare -u
+ should never break locks, you have to specify a specific revision
+ to do that. Also add an informative message for a bare -u when
+ the user doesn't hold any locks.
+ * commit.c (unlockrcs): Make RCS_unlock quiet, like RCS_lock.
+ * sanity.sh (rmadd-24): Update to match.
+
+ * sanity.sh (crerepos-6a): Set CVS_RSH for ${testcvs}, not for
+ dotest_fail. Allow for "broken pipe" rather than "end of file".
+
+2001-06-07 Derek Price <dprice@collab.net>
+
+ * sanity.sh (tagf): Use $CVSROOT_DIRNAME rather than
+ /tmp/cvs-sanity/cvsroot.
+
+2001-06-06 Derek Price <dprice@collab.net>
+
+ (Reformatting, bug fixes, tests, and comments to a
+ patch from Stephen Cameron <steve.cameron@compaq.com>.)
+
+ * tag.c: (rtag_fileproc, rtag_delete, tag_fileproc)
+ Changed behavior of "cvs tag -F", "cvs tag -d", "cvs rtag -F"
+ and "cvs rtag -d" so that they will not disturb existing
+ branch tags unless a new "-B" option is given.
+ * sanity.sh (tagf-16 - tagf-33): Added tests for new -B option
+ to "cvs tag" and "cvs rtag"
+
+2001-06-06 Derek Price <dprice@collab.net>
+
+ * sanity.sh (crerepos-6a): Set CVS_RSH=false and only for the actual
+ test call at Larry's suggestion. Also, test the error message since
+ it's fixed now.
+
+2001-06-05 Larry Jones <larry.jones@sdrc.com>
+
+ * rcs.c (RCS_unlock): Note when breaking someone else's lock.
+ (Reported by MURVAI-BUZOGANY Laszlo
+ <Laszlo.MURVAI-BUZOGANY@gt-systems.hu>.)
+ * sanity.sh (reserved-14): Update to match.
+
+2001-06-05 Derek Price <dprice@collab.net>
+
+ * sanity.sh (crerepos-6a): Set CVS_RSH=/bin/false... this is a local
+ mode only test anyhow.
+ (Thanks to Larry Jones and Morgan Burke <morgan@sitka.triumf.ca>.)
+
+2001-05-31 Derek Price <dprice@collab.net>
+
+ * sanity.sh (rcs2-7): Add today to the list of failure dates for rcs2-7
+ in the hopes that the data will eventually prove useful to someone
+ motivated enough to fix the problem.
+
+2001-05-30 Derek Price <dprice@collab.net>
+
+ * stamp-h2.in: Regenerated.
+
+2001-05-30 Derek Price <dprice@collab.net>
+
+ * *: Various bug fixes and comments for the following
+ patch from Donald Sharp <sharpd@cisco.com>:
+
+ * checkout.c (safe_location): cvs co -d <directory> still had
+ failure modes from the way the -d option works.
+ * sanity.sh: Misc error message resynching.
+
+2001-05-29 Derek Price <dprice@collab.net>
+
+ * Makefile.am (cvs_SOURCES): Add root.h.
+
+ * Makefile.in: Regenerated.
+ * stamp-h2.in: Regenerated.
+
+2001-05-29 Derek Price <dprice@collab.net>
+
+ * checkout.c (safe_location): Correct formatting.
+
+2001-05-29 Derek Price <dprice@collab.net>
+
+ * root.c (parse_cvsroot): Fix a comment.
+
+2001-05-26 Larry Jones <larry.jones@sdrc.com>
+
+ * checkout.c (safe_location): Use old-style definition to keep
+ non-ANSI compilers happy.
+
+ * sanity.sh (check_respository): Use ${CVSROOT_DIRNAME} instead
+ of /tmp/cvs-sanity/cvsroot.
+
+2001-05-25 Larry Jones <larry.jones@sdrc.com>
+
+ * sanity.sh (modules5): Add sleep to script to help avoid out of
+ order messages.
+
+ * filesubr.c (mkdir_if_needed): Return 1 if the directory exists
+ reguardless of what errno is set to.
+ (Reported by "Robinson, Greg" <greg.robinson@dsto.defence.gov.au>.)
+
+2001-05-25 Derek Price <dprice@collab.net>
+ for Donald Sharp <sharpd@cisco.com>
+
+ * checkout.c: Modified safe_location() to refuse checkout if
+ the -d option to co specifies inside of the repository.
+ * import.c: New parameter to safe_location needed to be added.
+ * cvs.h: New parameter to safe_location needed to be added.
+ * sanity.sh: Test case to test for failure mode.
+
+2001-05-23 Larry Jones <larry.jones@sdrc.com>
+
+ * checkout.c (checkout_proc): Don't build top_level_admin directory
+ when exporting.
+ (Reported by Tony Byrne <tonyb@directski.com>.)
+
+2001-05-21 Derek Price <dprice@collab.net>
+
+ * client.c: Fix a mispelling in a comment.
+ (Patch from Alexey Mahotkin <alexm@hsys.msk.ru>).
+
+2001-05-05 Larry Jones <larry.jones@sdrc.com>
+
+ * login.c (password_entry_operation): Only warn if unable to open
+ .cvspass for reading: may be initial login and it doesn't exist yet.
+
+2001-05-15 Derek Price <dprice@collab.net>
+
+ * client.c (start_tcp_server): Use the struct sockaddr_in declared in
+ the function.
+ (Reported by Emil Isberg <isberg@dynarc.se>.)
+
+2001-05-05 Larry Jones <larry.jones@sdrc.com>
+
+ * annotate.c (annotate): Pass local to do_module and rannotate_proc
+ so that -l actually works.
+ * log.c (cvslog): Ditto.
+ * patch.c (patch): Ditto; make local local instead of global.
+ (patch_proc): Use local_specified parameter instead of global.
+ * tag.c (cvstag, rtag_proc): Ditto.
+
+2001-05-05 Larry Jones <larry.jones@sdrc.com>
+
+ * client.h: Declare "struct buffer" outside prototype for __STDC__
+ compilers.
+
+2001-05-04 Derek Price <dprice@collab.net>
+
+ * client.c: General refactoring. Removed several global variables in
+ favor of passing locals and/or dynamic evaluation.
+ (recv_line): Removed this function.
+ (make_bufs_from_fds): New function with factored code.
+ (connect_to_forked_server): New prototype. Use new functions.
+ (connect_to_pserver): New prototype. Use new functions.
+ (connect_to_gserver): New prototype. Use new API.
+ (auth_server): Factored this portion of the pserver code so it can be
+ shared. Rewrote to use buffers rather than depending on a socket.
+ (start_rsh_server): New prototype. Use new API.
+ (start_tcp_server): New prototype. Use new API.
+ (start_server): Factor some code. Use new API.
+ * client.h: New prototypes.
+ * cvs.h: Gratuitous reformatting. Use new root.h.
+ * login.c (login): Use new connect_to_pserver API.
+ * root.h: New file. Contains some code that used to be in cvs.h.
+
+2001-05-04 Derek Price <dprice@collab.net>
+
+ * client.c: Gratuitous reformatting.
+ * client.h: Ditto.
+
+2001-05-04 Derek Price <dprice@collab.net>
+
+ * zlib.c (compress_buffer_shutdown_input): Use new buffer shutdown
+ prototype.
+ (compress_buffer_shutdown_output): Ditto.
+ (Thanks to Pavel Roskin <proski@gnu.org>.)
+
+2001-05-03 Derek Price <dprice@collab.net>
+
+ * buffer.c (struct stdio_buffer_closure): New structure to hold a
+ FILE * and the child's PID when necessary.
+ (stdio_buffer_initialize): Change proto to accept PID. Set up new
+ closure. Pass new stdio_buffer_shutdown to buf_initialize.
+ (stdio_buffer_input): Use new closure.
+ (stdio_buffer_output): Ditto.
+ (stdio_buffer_flush): Ditto.
+ (stdio_buffer_shutdown): New function. Teach buffer to close itself.
+ (packetizing_buffer_shutdown): Use new buffer shutdown proto.
+ * buffer.h (struct buffer): New buffer shutdown proto.
+ (stdio_buffer_initialize): New proto.
+ * client.c (log_buffer_shutdown): Use new proto.
+ (socket_buffer_initialize): Pass shutdown func.
+ (socket_buffer_shutdown): New function.
+ * server.c (get_responses_and_close): Remove most of the guts. Rely
+ on the buffer shutdown function from now on.
+ (start_rsh_server): Return child PID.
+
+2001-05-03 Larry Jones <larry.jones@sdrc.com>
+
+ * history.c (history_write): Handle the case where the user's home
+ directory doesn't exist gracefully instead of erroring out.
+ (Reported by David Hoover <dhoover@cadence.com>.)
+
+2001-05-03 Derek Price <dprice@collab.net>
+
+ * cvs.h: s/allocate_and_strcat/xrealloc_and_strcat/ since that is what
+ I wrote in the ChangeLog, oh, so long ago.
+ * diff.c (diff): Ditto.
+ * subr.c (allocate_and_strcat, xrealloc_and_strcat): Ditto.
+
+2001-05-02 Larry Jones <larry.jones@sdrc.com>
+
+ * rcs.c (RCS_getdate): Handle the (unusual!) case where we
+ can't find any revisions at all.
+ (Reported by Ryan Grow <rgrow@Dbdoctor.net>.)
+
+2001-04-30 Larry Jones <larry.jones@sdrc.com>
+
+ * sanity.sh (multiroot2-9a): Rename (from multiroot2-9) to avoid
+ duplicate names; fix to work without SERVER_SUPPORT defined.
+ (Reported by Pavel Roskin <proski@gnu.org>.)
+
+2001-04-29 Derek Price <dprice@collab.net>
+
+ * Makefile.am (check-local): Make dependent on localcheck and
+ remotecheck and move old check target...
+ (localcheck): here.
+
+ * Makefile.in: Regenerated.
+
+2001-04-27 Larry Jones <larry.jones@sdrc.com>
+
+ * sanity.sh (pserver): Add tests for readers and writers.
+
+2001-04-27 Derek Price <dprice@collab.net>
+
+ * sanity.sh (version-2r): Update to handle patch releases in version
+ numbers.
+
+2001-04-27 Derek Price <dprice@collab.net>
+
+ * version.c: Regenerated.
+
+2001-04-27 Derek Price <dprice@collab.net>
+
+ * version.c: Regenerated.
+
2001-04-27 Larry Jones <larry.jones@sdrc.com>
* main.c (lookup_command_attribute): Lookup specified command, not
diff --git a/contrib/cvs/src/Makefile.am b/contrib/cvs/src/Makefile.am
index 768d4f8651a4..20201414c1a9 100644
--- a/contrib/cvs/src/Makefile.am
+++ b/contrib/cvs/src/Makefile.am
@@ -75,6 +75,7 @@ cvs_SOURCES = \
subr.c \
tag.c \
update.c \
+ version.c \
vers_ts.c \
watch.c \
wrapper.c \
@@ -89,15 +90,18 @@ cvs_SOURCES = \
hash.h \
myndbm.h \
rcs.h \
+ root.h \
server.h \
update.h \
+ version.h \
watch.h
+
+BUILT_SOURCES = version.h
+
cvs_LDADD = \
../diff/libdiff.a \
../lib/libcvs.a \
- ../zlib/libz.a \
- version.o
-cvs_EXTRA_DIST = version.c
+ ../zlib/libz.a
# extra clean targets
# wish this could be distclean-hdr-local but it's not part of automake
@@ -105,18 +109,18 @@ DISTCLEANFILES = options.h-SAVED check.log check.plog
# General
EXTRA_DIST = \
- $(cvs_EXTRA_DIST) \
.cvsignore \
ChangeLog-9194 \
ChangeLog-9395 \
ChangeLog-96 \
ChangeLog-97 \
build_src.com \
- sanity.sh \
- version.c \
- version.c.in
+ sanity.sh
+
+check-local: localcheck remotecheck
-check-local:
+.PHONY: localcheck
+localcheck:
$(SHELL) $(srcdir)/sanity.sh `pwd`/cvs
.PHONY: remotecheck
@@ -125,20 +129,6 @@ remotecheck: all
## MAINTAINER Targets
-# version.c
-# - build this here so that we can distribute it
-# - version.c needs to be updated only once, since it depends on
-# configure.in, not on the results of a 'configure' run.
-# - It is guaranteed (with GNU Make) that when the version in configure.in
-# is changed, acversion.m4 is built only after the new version number is
-# propagated to the Makefile. (Libtool uses the same guarantee.)
-# - need the explicit version.o dependency or else make won't match
-# $(srcdir)/version.c when looking for a dependency for version.c
-version.o: $(srcdir)/version.c
-$(srcdir)/version.c: $(srcdir)/version.c.in $(top_srcdir)/configure.in
- sed 's,@VERSION\@,$(VERSION),g' $(srcdir)/version.c.in >$(srcdir)/version.tc
- mv $(srcdir)/version.tc $(srcdir)/version.c
-
# for backwards compatibility with the old makefiles
.PHONY: realclean
realclean: maintainer-clean
diff --git a/contrib/cvs/src/Makefile.in b/contrib/cvs/src/Makefile.in
index c80deab8794a..a4d59669252e 100644
--- a/contrib/cvs/src/Makefile.in
+++ b/contrib/cvs/src/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4e from Makefile.am.
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
@@ -45,11 +45,9 @@ infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
-
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-
top_builddir = ..
ACLOCAL = @ACLOCAL@
@@ -63,7 +61,6 @@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
-
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
@@ -75,25 +72,22 @@ AWK = @AWK@
CC = @CC@
CSH = @CSH@
DEPDIR = @DEPDIR@
-ETAGS = @ETAGS@
-ETAGS_INCLUDE_OPTION = @ETAGS_INCLUDE_OPTION@
+EXEEXT = @EXEEXT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTALL_STRIP_PROGRAM_ENV = @INSTALL_STRIP_PROGRAM_ENV@
KRB4 = @KRB4@
LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
-STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
-_am_include = @_am_include@
-_am_quote = @_am_quote@
+am__include = @am__include@
+am__quote = @am__quote@
includeopt = @includeopt@
install_sh = @install_sh@
@@ -159,6 +153,7 @@ cvs_SOURCES = \
subr.c \
tag.c \
update.c \
+ version.c \
vers_ts.c \
watch.c \
wrapper.c \
@@ -173,17 +168,20 @@ cvs_SOURCES = \
hash.h \
myndbm.h \
rcs.h \
+ root.h \
server.h \
update.h \
+ version.h \
watch.h
+
+BUILT_SOURCES = version.h
+
cvs_LDADD = \
../diff/libdiff.a \
../lib/libcvs.a \
- ../zlib/libz.a \
- version.o
+ ../zlib/libz.a
-cvs_EXTRA_DIST = version.c
# extra clean targets
# wish this could be distclean-hdr-local but it's not part of automake
@@ -191,23 +189,18 @@ DISTCLEANFILES = options.h-SAVED check.log check.plog
# General
EXTRA_DIST = \
- $(cvs_EXTRA_DIST) \
.cvsignore \
ChangeLog-9194 \
ChangeLog-9395 \
ChangeLog-96 \
ChangeLog-97 \
build_src.com \
- sanity.sh \
- version.c \
- version.c.in
+ sanity.sh
-EXEEXT =
-OBJEXT = o
subdir = src
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h options.h
-CONFIG_CLEAN_FILES = cvsbug
+CONFIG_CLEAN_FILES = cvsbug version.h
bin_PROGRAMS = cvs$(EXEEXT)
PROGRAMS = $(bin_PROGRAMS)
@@ -226,26 +219,19 @@ am_cvs_OBJECTS = add.$(OBJEXT) admin.$(OBJEXT) annotate.$(OBJEXT) \
recurse.$(OBJEXT) release.$(OBJEXT) remove.$(OBJEXT) \
repos.$(OBJEXT) root.$(OBJEXT) run.$(OBJEXT) scramble.$(OBJEXT) \
server.$(OBJEXT) status.$(OBJEXT) subr.$(OBJEXT) tag.$(OBJEXT) \
- update.$(OBJEXT) vers_ts.$(OBJEXT) watch.$(OBJEXT) \
- wrapper.$(OBJEXT) zlib.$(OBJEXT)
+ update.$(OBJEXT) version.$(OBJEXT) vers_ts.$(OBJEXT) \
+ watch.$(OBJEXT) wrapper.$(OBJEXT) zlib.$(OBJEXT)
cvs_OBJECTS = $(am_cvs_OBJECTS)
-cvs_DEPENDENCIES = ../diff/libdiff.a ../lib/libcvs.a ../zlib/libz.a \
- version.o
+cvs_DEPENDENCIES = ../diff/libdiff.a ../lib/libcvs.a ../zlib/libz.a
cvs_LDFLAGS =
SCRIPTS = $(bin_SCRIPTS)
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CFLAGS = @CFLAGS@
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I.
DEFS = @DEFS@
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -I.
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
-DIST_SOURCES = $(cvs_SOURCES)
depcomp = $(SHELL) $(top_srcdir)/depcomp
@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/add.Po $(DEPDIR)/admin.Po \
@AMDEP_TRUE@ $(DEPDIR)/annotate.Po $(DEPDIR)/buffer.Po \
@@ -272,28 +258,30 @@ depcomp = $(SHELL) $(top_srcdir)/depcomp
@AMDEP_TRUE@ $(DEPDIR)/server.Po $(DEPDIR)/status.Po \
@AMDEP_TRUE@ $(DEPDIR)/subr.Po $(DEPDIR)/tag.Po \
@AMDEP_TRUE@ $(DEPDIR)/update.Po $(DEPDIR)/vers_ts.Po \
-@AMDEP_TRUE@ $(DEPDIR)/watch.Po $(DEPDIR)/wrapper.Po \
-@AMDEP_TRUE@ $(DEPDIR)/zlib.Po
+@AMDEP_TRUE@ $(DEPDIR)/version.Po $(DEPDIR)/watch.Po \
+@AMDEP_TRUE@ $(DEPDIR)/wrapper.Po $(DEPDIR)/zlib.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(cvs_SOURCES)
DIST_COMMON = ./stamp-h2.in ChangeLog Makefile.am Makefile.in cvsbug.in \
- options.h.in
+ options.h.in version.h.in
SOURCES = $(cvs_SOURCES)
-OBJECTS = $(am_cvs_OBJECTS)
-all: options.h
+all: $(BUILT_SOURCES) options.h
$(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .o .obj
-
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu src/Makefile
-
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
-
options.h: stamp-h2
@if test ! -f $@; then \
rm -f stamp-h2; \
@@ -321,12 +309,16 @@ distclean-hdr:
-rm -f options.h
cvsbug: $(top_builddir)/config.status cvsbug.in
cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
+version.h: $(top_builddir)/config.status version.h.in
+ cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
- if test -f $$p; then \
- f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f"; \
$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f; \
else :; fi; \
@@ -342,8 +334,7 @@ uninstall-binPROGRAMS:
clean-binPROGRAMS:
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
-
-cvs$(EXEEXT): $(cvs_OBJECTS) $(cvs_DEPENDENCIES)
+cvs$(EXEEXT): $(cvs_OBJECTS) $(cvs_DEPENDENCIES)
@rm -f cvs$(EXEEXT)
$(LINK) $(cvs_LDFLAGS) $(cvs_OBJECTS) $(cvs_LDADD) $(LIBS)
install-binSCRIPTS: $(bin_SCRIPTS)
@@ -374,6 +365,78 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/add.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/admin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/annotate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/buffer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/checkin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/checkout.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/classify.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/client.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/commit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/create_adm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/cvsrc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/diff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/edit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/entries.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/error.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/expand_path.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/fileattr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/filesubr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/find_names.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/hardlink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/hash.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/history.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ignore.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/import.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/lock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/log.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/login.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/logmsg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/mkmodules.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/modules.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/myndbm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/no_diff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/parseinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/patch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/rcs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/rcscmds.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/recurse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/release.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/remove.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/repos.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/root.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/run.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/scramble.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/server.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/status.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/subr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/tag.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/update.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vers_ts.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/version.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/watch.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/wrapper.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/zlib.Po@am__quote@
+
+distclean-depend:
+ -rm -rf $(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ $(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@@ -390,93 +453,21 @@ TAGS: $(HEADERS) $(SOURCES) options.h.in $(TAGS_DEPENDENCIES) \
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
- unique=`for i in $$list @CONFIG@; do \
+ unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)options.h.in$$unique$(LISP)$$tags" \
- || $(ETAGS) $(ETAGS_ARGS) $$tags options.h.in $$unique $(LISP)
+ || etags $(ETAGS_ARGS) $$tags options.h.in $$unique $(LISP)
GTAGS:
here=`CDPATH=: && cd $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
- && gtags -i $$here
+ && gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
- -rm -f TAGS ID
-
-@_am_include@ @_am_quote@$(DEPDIR)/add.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/admin.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/annotate.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/buffer.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/checkin.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/checkout.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/classify.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/client.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/commit.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/create_adm.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/cvsrc.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/diff.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/edit.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/entries.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/error.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/expand_path.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/fileattr.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/filesubr.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/find_names.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/hardlink.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/hash.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/history.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/ignore.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/import.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/lock.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/log.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/login.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/logmsg.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/main.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/mkmodules.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/modules.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/myndbm.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/no_diff.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/parseinfo.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/patch.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/rcs.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/rcscmds.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/recurse.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/release.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/remove.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/repos.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/root.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/run.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/scramble.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/server.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/status.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/subr.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/tag.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/update.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/vers_ts.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/watch.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/wrapper.Po@_am_quote@
-@_am_include@ @_am_quote@$(DEPDIR)/zlib.Po@_am_quote@
-
-distclean-depend:
- -rm -rf $(DEPDIR)
-
-CCDEPMODE = @CCDEPMODE@
-
-.c.o:
- source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
- $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- $(COMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
-
-.c.obj:
- source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
- depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
- $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- $(COMPILE) -c -o $@ `cygpath -w $<`
-
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -485,7 +476,11 @@ distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
- d=$(srcdir); \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
if test -d $$d/$$file; then \
cp -pR $$d/$$file $(distdir) \
|| exit 1; \
@@ -512,24 +507,22 @@ install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
-
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- INSTALL_PROGRAM_ENV='$(INSTALL_STRIP_PROGRAM_ENV)' install
-
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- -rm -f Makefile.in
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
@@ -539,11 +532,11 @@ distclean: distclean-am
distclean-am: clean-am distclean-compile distclean-depend \
distclean-generic distclean-hdr distclean-tags
-dvi:
+dvi: dvi-am
dvi-am:
-info:
+info: info-am
info-am:
@@ -551,7 +544,7 @@ install-data-am:
install-exec-am: install-binPROGRAMS install-binSCRIPTS
-install-info:
+install-info: install-info-am
install-man:
@@ -565,45 +558,35 @@ mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic
-uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS
-
-.PHONY: all all-am check check-am check-local clean clean-binPROGRAMS \
- clean-generic distclean distclean-compile distclean-depend \
- distclean-generic distclean-hdr distclean-tags distdir dvi \
- dvi-am info info-am install install-am install-binPROGRAMS \
- install-binSCRIPTS install-data install-data-am install-exec \
- install-exec-am install-info install-man install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
+ uninstall-info-am
+
+.PHONY: GTAGS all all-am check check-am check-local clean \
+ clean-binPROGRAMS clean-generic distclean distclean-compile \
+ distclean-depend distclean-generic distclean-hdr distclean-tags \
+ distdir dvi dvi-am info info-am install install-am \
+ install-binPROGRAMS install-binSCRIPTS install-data \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-man install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic tags uninstall uninstall-am \
- uninstall-binPROGRAMS uninstall-binSCRIPTS
+ uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-info-am
-check-local:
+check-local: localcheck remotecheck
+
+.PHONY: localcheck
+localcheck:
$(SHELL) $(srcdir)/sanity.sh `pwd`/cvs
.PHONY: remotecheck
remotecheck: all
$(SHELL) $(srcdir)/sanity.sh -r `pwd`/cvs
-# version.c
-# - build this here so that we can distribute it
-# - version.c needs to be updated only once, since it depends on
-# configure.in, not on the results of a 'configure' run.
-# - It is guaranteed (with GNU Make) that when the version in configure.in
-# is changed, acversion.m4 is built only after the new version number is
-# propagated to the Makefile. (Libtool uses the same guarantee.)
-# - need the explicit version.o dependency or else make won't match
-# $(srcdir)/version.c when looking for a dependency for version.c
-version.o: $(srcdir)/version.c
-$(srcdir)/version.c: $(srcdir)/version.c.in $(top_srcdir)/configure.in
- sed 's,@VERSION\@,$(VERSION),g' $(srcdir)/version.c.in >$(srcdir)/version.tc
- mv $(srcdir)/version.tc $(srcdir)/version.c
-
# for backwards compatibility with the old makefiles
.PHONY: realclean
realclean: maintainer-clean
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/contrib/cvs/src/admin.c b/contrib/cvs/src/admin.c
index 359bedf1a653..2a35d711e5d9 100644
--- a/contrib/cvs/src/admin.c
+++ b/contrib/cvs/src/admin.c
@@ -31,12 +31,12 @@ static const char *const admin_usage[] =
"\t (all names if omitted).\n",
"\t-I Run interactively.\n",
"\t-k subst Set keyword substitution mode:\n",
- "\t kv (Default) Substitue keyword and value.\n",
- "\t kvl Substitue keyword, value, and locker (if any).\n",
- "\t k Substitue keyword only.\n",
+ "\t kv (Default) Substitute keyword and value.\n",
+ "\t kvl Substitute keyword, value, and locker (if any).\n",
+ "\t k Substitute keyword only.\n",
"\t o Preserve original string.\n",
"\t b Like o, but mark file as binary.\n",
- "\t v Substitue value only.\n",
+ "\t v Substitute value only.\n",
"\t-l[rev] Lock revision (latest revision on branch,\n",
"\t latest revision on trunk if omitted).\n",
"\t-L Set strict locking.\n",
@@ -169,7 +169,7 @@ admin (argc, argv)
while ((c = getopt (argc, argv,
"+ib::c:a:A:e::l::u::LUn:N:m:o:s:t::IqxV:k:")) != -1)
{
- if (c != 'k')
+ if (c != 'k' && c != 'q')
only_k_option = 0;
switch (c)
diff --git a/contrib/cvs/src/annotate.c b/contrib/cvs/src/annotate.c
index 827619d29b36..41acdf7d8e5c 100644
--- a/contrib/cvs/src/annotate.c
+++ b/contrib/cvs/src/annotate.c
@@ -17,6 +17,7 @@
/* Options from the command line. */
static int force_tag_match = 1;
+static int force_binary = 0;
static char *tag = NULL;
static int tag_validated;
static char *date = NULL;
@@ -30,10 +31,11 @@ static int rannotate_proc PROTO((int argc, char **argv, char *xwhere,
static const char *const annotate_usage[] =
{
- "Usage: %s %s [-lRf] [-r rev] [-D date] [files...]\n",
+ "Usage: %s %s [-lRfF] [-r rev] [-D date] [files...]\n",
"\t-l\tLocal directory only, no recursion.\n",
"\t-R\tProcess directories recursively.\n",
"\t-f\tUse head revision if tag/date not found.\n",
+ "\t-F\tAnnotate binary files.\n",
"\t-r rev\tAnnotate file as of specified revision/tag.\n",
"\t-D date\tAnnotate file as of specified date.\n",
"(Specify the --help global option for a list of other help options)\n",
@@ -58,7 +60,7 @@ annotate (argc, argv)
usage (annotate_usage);
optind = 0;
- while ((c = getopt (argc, argv, "+lr:D:fR")) != -1)
+ while ((c = getopt (argc, argv, "+lr:D:fFR")) != -1)
{
switch (c)
{
@@ -77,6 +79,9 @@ annotate (argc, argv)
case 'f':
force_tag_match = 0;
break;
+ case 'F':
+ force_binary = 1;
+ break;
case '?':
default:
usage (annotate_usage);
@@ -100,6 +105,8 @@ annotate (argc, argv)
send_arg ("-l");
if (!force_tag_match)
send_arg ("-f");
+ if (force_binary)
+ send_arg ("-F");
option_with_arg ("-r", tag);
if (date)
client_senddate (date);
@@ -128,14 +135,14 @@ annotate (argc, argv)
for (i = 0; i < argc; i++)
{
err += do_module (db, argv[i], MISC, "Annotating", rannotate_proc,
- (char *) NULL, 0, 0, 0, 0, (char *) NULL);
+ (char *) NULL, 0, local, 0, 0, (char *) NULL);
}
close_module (db);
}
else
{
err = rannotate_proc (argc + 1, argv - 1, (char *) NULL,
- (char *) NULL, (char *) NULL, 0, 0, (char *) NULL,
+ (char *) NULL, (char *) NULL, 0, local, (char *) NULL,
(char *) NULL);
}
@@ -251,7 +258,7 @@ annotate_fileproc (callerdat, finfo)
void *callerdat;
struct file_info *finfo;
{
- char *version;
+ char *expand, *version;
if (finfo->rcs == NULL)
return (1);
@@ -259,19 +266,28 @@ annotate_fileproc (callerdat, finfo)
if (finfo->rcs->flags & PARTIAL)
RCS_reparsercsfile (finfo->rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
+ expand = RCS_getexpand (finfo->rcs);
version = RCS_getversion (finfo->rcs, tag, date, force_tag_match,
(int *) NULL);
+
if (version == NULL)
return 0;
/* Distinguish output for various files if we are processing
several files. */
- cvs_outerr ("Annotations for ", 0);
+ cvs_outerr ("\nAnnotations for ", 0);
cvs_outerr (finfo->fullname, 0);
cvs_outerr ("\n***************\n", 0);
- RCS_deltas (finfo->rcs, (FILE *) NULL, (struct rcsbuffer *) NULL,
- version, RCS_ANNOTATE, NULL, NULL, NULL, NULL);
+ if (!force_binary && expand && expand[0] == 'b')
+ {
+ cvs_outerr ("Skipping binary file -- -F not specified.\n", 0);
+ }
+ else
+ {
+ RCS_deltas (finfo->rcs, (FILE *) NULL, (struct rcsbuffer *) NULL,
+ version, RCS_ANNOTATE, NULL, NULL, NULL, NULL);
+ }
free (version);
return 0;
}
diff --git a/contrib/cvs/src/buffer.c b/contrib/cvs/src/buffer.c
index 8f9054506640..0c13cde46927 100644
--- a/contrib/cvs/src/buffer.c
+++ b/contrib/cvs/src/buffer.c
@@ -6,6 +6,12 @@
#if defined (SERVER_SUPPORT) || defined (CLIENT_SUPPORT)
+#ifdef HAVE_WINSOCK_H
+# include <winsock.h>
+#else
+# include <sys/socket.h>
+#endif
+
/* OS/2 doesn't have EIO. FIXME: this whole notion of turning
a different error into EIO strikes me as pretty dubious. */
#if !defined (EIO)
@@ -28,7 +34,7 @@ buf_initialize (input, output, flush, block, shutdown, memory, closure)
int (*output) PROTO((void *, const char *, int, int *));
int (*flush) PROTO((void *));
int (*block) PROTO((void *, int));
- int (*shutdown) PROTO((void *));
+ int (*shutdown) PROTO((struct buffer *));
void (*memory) PROTO((struct buffer *));
void *closure;
{
@@ -73,7 +79,7 @@ buf_nonio_initialize (memory)
(int (*) PROTO((void *, const char *, int, int *))) NULL,
(int (*) PROTO((void *))) NULL,
(int (*) PROTO((void *, int))) NULL,
- (int (*) PROTO((void *))) NULL,
+ (int (*) PROTO((struct buffer *))) NULL,
memory,
(void *) NULL));
}
@@ -1198,7 +1204,7 @@ buf_shutdown (buf)
struct buffer *buf;
{
if (buf->shutdown)
- return (*buf->shutdown) (buf->closure);
+ return (*buf->shutdown) (buf);
return 0;
}
@@ -1210,22 +1216,35 @@ buf_shutdown (buf)
static int stdio_buffer_input PROTO((void *, char *, int, int, int *));
static int stdio_buffer_output PROTO((void *, const char *, int, int *));
static int stdio_buffer_flush PROTO((void *));
+static int stdio_buffer_shutdown PROTO((struct buffer *buf));
/* Initialize a buffer built on a stdio FILE. */
+struct stdio_buffer_closure
+{
+ FILE *fp;
+ int child_pid;
+};
+
struct buffer *
-stdio_buffer_initialize (fp, input, memory)
+stdio_buffer_initialize (fp, child_pid, input, memory)
FILE *fp;
+ int child_pid;
int input;
void (*memory) PROTO((struct buffer *));
{
+ struct stdio_buffer_closure *bc = malloc (sizeof (*bc));
+
+ bc->fp = fp;
+ bc->child_pid = child_pid;
+
return buf_initialize (input ? stdio_buffer_input : NULL,
input ? NULL : stdio_buffer_output,
input ? NULL : stdio_buffer_flush,
(int (*) PROTO((void *, int))) NULL,
- (int (*) PROTO((void *))) NULL,
+ stdio_buffer_shutdown,
memory,
- (void *) fp);
+ (void *) bc);
}
/* The buffer input function for a buffer built on a stdio FILE. */
@@ -1238,7 +1257,7 @@ stdio_buffer_input (closure, data, need, size, got)
int size;
int *got;
{
- FILE *fp = (FILE *) closure;
+ struct stdio_buffer_closure *bc = (struct stdio_buffer_closure *) closure;
int nbytes;
/* Since stdio does its own buffering, we don't worry about
@@ -1248,11 +1267,11 @@ stdio_buffer_input (closure, data, need, size, got)
{
int ch;
- ch = getc (fp);
+ ch = getc (bc->fp);
if (ch == EOF)
{
- if (feof (fp))
+ if (feof (bc->fp))
return -1;
else if (errno == 0)
return EIO;
@@ -1265,12 +1284,12 @@ stdio_buffer_input (closure, data, need, size, got)
return 0;
}
- nbytes = fread (data, 1, need, fp);
+ nbytes = fread (data, 1, need, bc->fp);
if (nbytes == 0)
{
*got = 0;
- if (feof (fp))
+ if (feof (bc->fp))
return -1;
else if (errno == 0)
return EIO;
@@ -1292,7 +1311,7 @@ stdio_buffer_output (closure, data, have, wrote)
int have;
int *wrote;
{
- FILE *fp = (FILE *) closure;
+ struct stdio_buffer_closure *bc = (struct stdio_buffer_closure *) closure;
*wrote = 0;
@@ -1300,7 +1319,7 @@ stdio_buffer_output (closure, data, have, wrote)
{
int nbytes;
- nbytes = fwrite (data, 1, have, fp);
+ nbytes = fwrite (data, 1, have, bc->fp);
if (nbytes != have)
{
@@ -1324,9 +1343,9 @@ static int
stdio_buffer_flush (closure)
void *closure;
{
- FILE *fp = (FILE *) closure;
+ struct stdio_buffer_closure *bc = (struct stdio_buffer_closure *) closure;
- if (fflush (fp) != 0)
+ if (fflush (bc->fp) != 0)
{
if (errno == 0)
return EIO;
@@ -1337,6 +1356,116 @@ stdio_buffer_flush (closure)
return 0;
}
+
+
+static int
+stdio_buffer_shutdown (buf)
+ struct buffer *buf;
+{
+ struct stdio_buffer_closure *bc = (struct stdio_buffer_closure *) buf->closure;
+ struct stat s;
+ int closefp = 1;
+
+ /* Must be a pipe or a socket. What could go wrong? */
+ assert (fstat ( fileno (bc->fp), &s ) != -1);
+
+ /* Flush the buffer if we can */
+ if (buf->flush)
+ {
+ buf_flush (buf, 1);
+ buf->flush = NULL;
+ }
+
+ if (buf->input)
+ {
+ if (! buf_empty_p (buf)
+ || getc (bc->fp) != EOF)
+ {
+# ifdef SERVER_SUPPORT
+ if (server_active)
+ /* FIXME: This should probably be sysloged since it doesn't
+ * have anywhere else to go at this point.
+ */
+ error (0, 0, "dying gasps from client unexpected");
+ else
+#endif
+ error (0, 0, "dying gasps from %s unexpected", current_parsed_root->hostname);
+ }
+ else if (ferror (bc->fp))
+ {
+# ifdef SERVER_SUPPORT
+ if (server_active)
+ /* FIXME: This should probably be sysloged since it doesn't
+ * have anywhere else to go at this point.
+ */
+ error (0, errno, "reading from client");
+ else
+#endif
+ error (0, errno, "reading from %s", current_parsed_root->hostname);
+ }
+
+# ifdef SHUTDOWN_SERVER
+ if (current_parsed_root->method != server_method)
+# endif
+# ifndef NO_SOCKET_TO_FD
+ {
+ /* shutdown() sockets */
+ if (S_ISSOCK(s.st_mode))
+ shutdown ( fileno (bc->fp), 0);
+ }
+# endif /* NO_SOCKET_TO_FD */
+# ifdef START_RSH_WITH_POPEN_RW
+ /* Can't be set with SHUTDOWN_SERVER defined */
+ else if (pclose (bc->fp) == EOF)
+ {
+ error (1, errno, "closing connection to %s",
+ current_parsed_root->hostname);
+ closefp = 0;
+ }
+# endif /* START_RSH_WITH_POPEN_RW */
+
+ buf->input = NULL;
+ }
+ else if (buf->output)
+ {
+# ifdef SHUTDOWN_SERVER
+ /* FIXME: Should have a SHUTDOWN_SERVER_INPUT &
+ * SHUTDOWN_SERVER_OUTPUT
+ */
+ if (current_parsed_root->method == server_method)
+ SHUTDOWN_SERVER ( fileno (bc->fp) );
+ else
+# endif
+# ifndef NO_SOCKET_TO_FD
+ /* shutdown() sockets */
+ if (S_ISSOCK(s.st_mode))
+ shutdown ( fileno (bc->fp), 1);
+# else
+ {
+ /* I'm not sure I like this empty block, but the alternative
+ * is a another nested NO_SOCKET_TO_FD switch above.
+ */
+ }
+# endif /* NO_SOCKET_TO_FD */
+
+ buf->output = NULL;
+ }
+
+ if (closefp && fclose (bc->fp) == EOF)
+ error (1, errno,
+ "closing down connection to %s",
+ current_parsed_root->hostname);
+
+ /* If we were talking to a process, make sure it exited */
+ if (bc->child_pid
+ && waitpid (bc->child_pid, (int *) 0, 0) == -1)
+ error (1, errno, "waiting for process %d", bc->child_pid);
+
+ return 0;
+}
+
+
+
/* Certain types of communication input and output data in packets,
where each packet is translated in some fashion. The packetizing
buffer type supports that, given a buffer which handles lower level
@@ -1398,7 +1527,7 @@ static int packetizing_buffer_input PROTO((void *, char *, int, int, int *));
static int packetizing_buffer_output PROTO((void *, const char *, int, int *));
static int packetizing_buffer_flush PROTO((void *));
static int packetizing_buffer_block PROTO((void *, int));
-static int packetizing_buffer_shutdown PROTO((void *));
+static int packetizing_buffer_shutdown PROTO((struct buffer *));
/* Create a packetizing buffer. */
@@ -1763,10 +1892,10 @@ packetizing_buffer_block (closure, block)
/* Shut down a packetizing buffer. */
static int
-packetizing_buffer_shutdown (closure)
- void *closure;
+packetizing_buffer_shutdown (buf)
+ struct buffer *buf;
{
- struct packetizing_buffer *pb = (struct packetizing_buffer *) closure;
+ struct packetizing_buffer *pb = (struct packetizing_buffer *) buf->closure;
return buf_shutdown (pb->buf);
}
diff --git a/contrib/cvs/src/buffer.h b/contrib/cvs/src/buffer.h
index 0556781d0c8c..ebf1b7ae8b26 100644
--- a/contrib/cvs/src/buffer.h
+++ b/contrib/cvs/src/buffer.h
@@ -61,7 +61,7 @@ struct buffer
appropriate should be done at this point. This may be NULL.
It should return 0 on success, or an errno code. This entry
point exists for the compression code. */
- int (*shutdown) PROTO((void *closure));
+ int (*shutdown) PROTO((struct buffer *));
/* This field is passed to the INPUT, OUTPUT, and BLOCK functions. */
void *closure;
@@ -105,13 +105,13 @@ extern struct buffer *buf_initialize PROTO((int (*) (void *, char *, int,
int, int *),
int (*) (void *),
int (*) (void *, int),
- int (*) (void *),
+ int (*) (struct buffer *),
void (*) (struct buffer *),
void *));
extern void buf_free PROTO((struct buffer *));
extern struct buffer *buf_nonio_initialize PROTO((void (*) (struct buffer *)));
extern struct buffer *stdio_buffer_initialize
- PROTO((FILE *, int, void (*) (struct buffer *)));
+ PROTO((FILE *, int, int, void (*) (struct buffer *)));
extern struct buffer *compress_buffer_initialize
PROTO((struct buffer *, int, int, void (*) (struct buffer *)));
extern struct buffer *packetizing_buffer_initialize
diff --git a/contrib/cvs/src/checkout.c b/contrib/cvs/src/checkout.c
index 86dc9510eb0b..6b1f76964cc0 100644
--- a/contrib/cvs/src/checkout.c
+++ b/contrib/cvs/src/checkout.c
@@ -82,18 +82,18 @@ static const char *const export_usage[] =
};
static int checkout_prune_dirs;
-static int force_tag_match = 1;
+static int force_tag_match;
static int pipeout;
static int aflag;
-static char *options = NULL;
-static char *tag = NULL;
-static int tag_validated = 0;
-static char *date = NULL;
-static char *join_rev1 = NULL;
-static char *join_rev2 = NULL;
-static int join_tags_validated = 0;
-static char *preload_update_dir = NULL;
-static char *history_name = NULL;
+static char *options;
+static char *tag;
+static int tag_validated;
+static char *date;
+static char *join_rev1;
+static char *join_rev2;
+static int join_tags_validated;
+static char *preload_update_dir;
+static char *history_name;
static enum mtype m_type;
int
@@ -112,6 +112,18 @@ checkout (argc, argv)
char *valid_options;
const char *const *valid_usage;
+ /* initialize static options */
+ force_tag_match = 1;
+ if (options)
+ {
+ free (options);
+ options = NULL;
+ }
+ tag = date = join_rev1 = join_rev2 = preload_update_dir = NULL;
+ history_name = NULL;
+ tag_validated = join_tags_validated = 0;
+
+
/*
* A smaller subset of options are allowed for the export command, which
* is essentially like checkout, except that it hard-codes certain
@@ -248,7 +260,7 @@ checkout (argc, argv)
}
#endif
- if (!cat && !safe_location()) {
+ if (!cat && !pipeout && !safe_location( where )) {
error(1, 0, "Cannot check out files into the repository itself");
}
@@ -333,7 +345,10 @@ checkout (argc, argv)
{
cat_module (status);
if (options)
+ {
free (options);
+ options = NULL;
+ }
return (0);
}
db = open_module ();
@@ -351,17 +366,17 @@ checkout (argc, argv)
/* If we will be calling history_write, work out the name to pass
it. */
- if (m_type == CHECKOUT && !pipeout)
+ if (!pipeout)
{
- if (tag && date)
+ if (!date)
+ history_name = tag;
+ else if (!tag)
+ history_name = date;
+ else
{
history_name = xmalloc (strlen (tag) + strlen (date) + 2);
sprintf (history_name, "%s:%s", tag, date);
}
- else if (tag)
- history_name = tag;
- else
- history_name = date;
}
@@ -371,7 +386,12 @@ checkout (argc, argv)
(char *) NULL);
close_module (db);
if (options)
+ {
free (options);
+ options = NULL;
+ }
+ if (history_name != tag && history_name != date && history_name != NULL)
+ free (history_name);
return (err);
}
@@ -379,9 +399,11 @@ checkout (argc, argv)
reasons, probably want to move them. */
int
-safe_location ()
+safe_location (where)
+ char *where;
{
char *current;
+ char *where_location;
char hardpath[PATH_MAX+5];
size_t hardpath_len;
int x;
@@ -403,9 +425,68 @@ safe_location ()
{
hardpath[x] = '\0';
}
+
+ /* set current - even if where is set we'll need to cd back... */
current = xgetwd ();
if (current == NULL)
error (1, errno, "could not get working directory");
+
+ /* if where is set, set current to where, where - last_component( where ),
+ * or fail, depending on whether the directories exist or not.
+ */
+ if( where != NULL )
+ {
+ if( chdir( where ) != -1 )
+ {
+ /* where */
+ where_location = xgetwd();
+ if( where_location == NULL )
+ error( 1, errno, "could not get working directory" );
+
+ if( chdir( current ) == -1 )
+ error( 1, errno, "could not change directory to `%s'", current );
+
+ free( current );
+ current = where_location;
+ }
+ else if( errno == ENOENT )
+ {
+ if ( last_component( where ) != where )
+ {
+ /* where - last_component( where ) */
+ char *parent;
+
+ /* strip the last_component */
+ where_location = strdup( where );
+ parent = last_component( where_location );
+ parent[-1] = '\0';
+
+ if( chdir( where_location ) != -1 )
+ {
+ where_location = xgetwd();
+ if( where_location == NULL )
+ error( 1, errno, "could not get working directory (nominally `%s')", where_location );
+
+ if( chdir( current ) == -1 )
+ error( 1, errno, "could not change directory to `%s'", current );
+
+ free( current );
+ current = where_location;
+ }
+ else
+ /* fail */
+ error( 1, errno, "could not change directory to requested checkout directory `%s'", where_location );
+ }
+ /* else: ERRNO == ENOENT & last_component(where) == where
+ * for example, 'cvs co -d newdir module', where newdir hasn't
+ * been created yet, so leave current set to '.' and check that
+ */
+ }
+ else
+ /* fail */
+ error( 1, errno, "could not change directory to requested checkout directory `%s'", where );
+ }
+
hardpath_len = strlen (hardpath);
if (strlen (current) >= hardpath_len
&& strncmp (current, hardpath, hardpath_len) == 0)
@@ -851,7 +932,7 @@ internal error: %s doesn't start with %s in checkout_proc",
build_one_dir whenever the -d command option was specified
to checkout. */
- if (! where_is_absolute && top_level_admin)
+ if (! where_is_absolute && top_level_admin && m_type == CHECKOUT)
{
/* It may be argued that we shouldn't set any sticky
bits for the top-level repository. FIXME? */
@@ -998,12 +1079,9 @@ internal error: %s doesn't start with %s in checkout_proc",
*/
if (!(local_specified || argc > 1))
{
- if (m_type == CHECKOUT && !pipeout)
- history_write ('O', preload_update_dir, history_name, where,
- repository);
- else if (m_type == EXPORT && !pipeout)
- history_write ('E', preload_update_dir, tag ? tag : date, where,
- repository);
+ if (!pipeout)
+ history_write (m_type == CHECKOUT ? 'O' : 'E', preload_update_dir,
+ history_name, where, repository);
err += do_update (0, (char **) NULL, options, tag, date,
force_tag_match, 0 /* !local */ ,
1 /* update -d */ , aflag, checkout_prune_dirs,
diff --git a/contrib/cvs/src/client.c b/contrib/cvs/src/client.c
index 184cf9668d7f..4773b4f48e50 100644
--- a/contrib/cvs/src/client.c
+++ b/contrib/cvs/src/client.c
@@ -13,7 +13,7 @@
GNU General Public License for more details. */
#ifdef HAVE_CONFIG_H
-#include "config.h"
+# include "config.h"
#endif /* HAVE_CONFIG_H */
#include <assert.h>
@@ -24,68 +24,67 @@
#ifdef CLIENT_SUPPORT
-#include "md5.h"
-
-#if defined(AUTH_CLIENT_SUPPORT) || HAVE_KERBEROS || defined(SOCK_ERRNO) || defined(SOCK_STRERROR)
-# ifdef HAVE_WINSOCK_H
-# include <winsock.h>
-# else /* No winsock.h */
-# include <sys/socket.h>
-# include <netinet/in.h>
-# include <arpa/inet.h>
-# include <netdb.h>
-# endif /* No winsock.h */
-#endif
+# include "md5.h"
+
+# if defined(AUTH_CLIENT_SUPPORT) || HAVE_KERBEROS || defined(SOCK_ERRNO) || defined(SOCK_STRERROR)
+# ifdef HAVE_WINSOCK_H
+# include <winsock.h>
+# else /* No winsock.h */
+# include <sys/socket.h>
+# include <netinet/in.h>
+# include <arpa/inet.h>
+# include <netdb.h>
+# endif /* No winsock.h */
+# endif
/* If SOCK_ERRNO is defined, then send()/recv() and other socket calls
do not set errno, but that this macro should be used to obtain an
error code. This probably doesn't make sense unless
NO_SOCKET_TO_FD is also defined. */
-#ifndef SOCK_ERRNO
-#define SOCK_ERRNO errno
-#endif
+# ifndef SOCK_ERRNO
+# define SOCK_ERRNO errno
+# endif
/* If SOCK_STRERROR is defined, then the error codes returned by
socket operations are not known to strerror, and this macro must be
used instead to convert those error codes to strings. */
-#ifndef SOCK_STRERROR
-# define SOCK_STRERROR strerror
+# ifndef SOCK_STRERROR
+# define SOCK_STRERROR strerror
-# if STDC_HEADERS
-# include <string.h>
-# endif
+# if STDC_HEADERS
+# include <string.h>
+# endif
-# ifndef strerror
+# ifndef strerror
extern char *strerror ();
-# endif
-#endif /* ! SOCK_STRERROR */
+# endif
+# endif /* ! SOCK_STRERROR */
-#if HAVE_KERBEROS
-#define CVS_PORT 1999
+# if HAVE_KERBEROS
-#include <krb.h>
+# include <krb.h>
extern char *krb_realmofhost ();
-#ifndef HAVE_KRB_GET_ERR_TEXT
-#define krb_get_err_text(status) krb_err_txt[status]
-#endif /* HAVE_KRB_GET_ERR_TEXT */
+# ifndef HAVE_KRB_GET_ERR_TEXT
+# define krb_get_err_text(status) krb_err_txt[status]
+# endif /* HAVE_KRB_GET_ERR_TEXT */
/* Information we need if we are going to use Kerberos encryption. */
static C_Block kblock;
static Key_schedule sched;
-#endif /* HAVE_KERBEROS */
+# endif /* HAVE_KERBEROS */
-#ifdef HAVE_GSSAPI
+# ifdef HAVE_GSSAPI
-# include "xgssapi.h"
+# include "xgssapi.h"
/* This is needed for GSSAPI encryption. */
static gss_ctx_id_t gcontext;
-static int connect_to_gserver PROTO((int, struct hostent *));
+static int connect_to_gserver PROTO((cvsroot_t *, int, struct hostent *));
-#endif /* HAVE_GSSAPI */
+# endif /* HAVE_GSSAPI */
static void add_prune_candidate PROTO((char *));
@@ -134,9 +133,9 @@ static void handle_f PROTO((char *, int));
static void handle_notified PROTO((char *, int));
static size_t try_read_from_server PROTO ((char *, size_t));
-#endif /* CLIENT_SUPPORT */
-
-#ifdef CLIENT_SUPPORT
+
+static void auth_server PROTO ((cvsroot_t *, struct buffer *, struct buffer *,
+ int, int, struct hostent *));
/* We need to keep track of the list of directories we've sent to the
server. This list, along with the current CVSROOT, will help us
@@ -267,8 +266,11 @@ arg_should_not_be_sent_to_server (arg)
}
+
#endif /* CLIENT_SUPPORT */
-
+
+
+
#if defined(CLIENT_SUPPORT) || defined(SERVER_SUPPORT)
/* Shared with server. */
@@ -438,16 +440,9 @@ static List *ignlist = (List *) NULL;
/* Buffer to write to the server. */
static struct buffer *to_server;
-/* The stream underlying to_server, if we are using a stream. */
-static FILE *to_server_fp;
/* Buffer used to read from the server. */
static struct buffer *from_server;
-/* The stream underlying from_server, if we are using a stream. */
-static FILE *from_server_fp;
-
-/* Process ID of rsh subprocess. */
-static int rsh_pid = -1;
/* We want to be able to log data sent between us and the server. We
@@ -470,7 +465,7 @@ static int log_buffer_input PROTO((void *, char *, int, int, int *));
static int log_buffer_output PROTO((void *, const char *, int, int *));
static int log_buffer_flush PROTO((void *));
static int log_buffer_block PROTO((void *, int));
-static int log_buffer_shutdown PROTO((void *));
+static int log_buffer_shutdown PROTO((struct buffer *));
/* Create a log buffer. */
@@ -594,10 +589,10 @@ log_buffer_block (closure, block)
/* The shutdown function for a log buffer. */
static int
-log_buffer_shutdown (closure)
- void *closure;
+log_buffer_shutdown (buf)
+ struct buffer *buf;
{
- struct log_buffer *lb = (struct log_buffer *) closure;
+ struct log_buffer *lb = (struct log_buffer *) buf->closure;
int retval;
retval = buf_shutdown (lb->buf);
@@ -605,7 +600,7 @@ log_buffer_shutdown (closure)
error (0, errno, "closing log file");
return retval;
}
-
+
#ifdef NO_SOCKET_TO_FD
/* Under certain circumstances, we must communicate with the server
@@ -618,9 +613,6 @@ log_buffer_shutdown (closure)
in these cases. This is handled through the SOCK_ERRNO and
SOCK_STRERROR macros. */
-static int use_socket_style = 0;
-static int server_sock;
-
/* These routines implement a buffer structure which uses send and
recv. The buffer is always in blocking mode so we don't implement
the block routine. */
@@ -644,14 +636,17 @@ static struct buffer *socket_buffer_initialize
static int socket_buffer_input PROTO((void *, char *, int, int, int *));
static int socket_buffer_output PROTO((void *, const char *, int, int *));
static int socket_buffer_flush PROTO((void *));
+static int socket_buffer_shutdown PROTO((struct buffer *));
+
+
/* Create a buffer based on a socket. */
static struct buffer *
socket_buffer_initialize (socket, input, memory)
- int socket;
- int input;
- void (*memory) PROTO((struct buffer *));
+ int socket;
+ int input;
+ void (*memory) PROTO((struct buffer *));
{
struct socket_buffer *n;
@@ -661,11 +656,13 @@ socket_buffer_initialize (socket, input, memory)
input ? NULL : socket_buffer_output,
input ? NULL : socket_buffer_flush,
(int (*) PROTO((void *, int))) NULL,
- (int (*) PROTO((void *))) NULL,
+ socket_buffer_shutdown,
memory,
n);
}
+
+
/* The buffer input function for a buffer built on a socket. */
static int
@@ -725,6 +722,8 @@ socket_buffer_input (closure, data, need, size, got)
return 0;
}
+
+
/* The buffer output function for a buffer built on a socket. */
static int
@@ -764,6 +763,8 @@ socket_buffer_output (closure, data, have, wrote)
return 0;
}
+
+
/* The buffer flush function for a buffer built on a socket. */
/*ARGSUSED*/
@@ -775,8 +776,61 @@ socket_buffer_flush (closure)
return 0;
}
+
+
+static int
+socket_buffer_shutdown (buf)
+ struct buffer *buf;
+{
+ struct socket_buffer *n = (struct socket_buffer *) buf->closure;
+ char tmp;
+
+ /* no need to flush children of an endpoint buffer here */
+
+ if (buf->input)
+ {
+ int err = 0;
+ if (! buf_empty_p (buf)
+ || (err = recv (n->socket, &tmp, 1, 0)) > 0)
+ error (0, 0, "dying gasps from %s unexpected", current_parsed_root->hostname);
+ else if (err == -1)
+ error (0, 0, "reading from %s: %s", current_parsed_root->hostname, SOCK_STRERROR (SOCK_ERRNO));
+
+ /* shutdown() socket */
+# ifdef SHUTDOWN_SERVER
+ if (current_parsed_root->method != server_method)
+# endif
+ if (shutdown (n->socket, 0) < 0)
+ {
+ error (1, 0, "shutting down server socket: %s", SOCK_STRERROR (SOCK_ERRNO));
+ }
+
+ buf->input = NULL;
+ }
+ else if (buf->output)
+ {
+ /* shutdown() socket */
+# ifdef SHUTDOWN_SERVER
+ /* FIXME: Should have a SHUTDOWN_SERVER_INPUT &
+ * SHUTDOWN_SERVER_OUTPUT
+ */
+ if (current_parsed_root->method == server_method)
+ SHUTDOWN_SERVER (n->socket);
+ else
+# endif
+ if (shutdown (n->socket, 1) < 0)
+ {
+ error (1, 0, "shutting down server socket: %s", SOCK_STRERROR (SOCK_ERRNO));
+ }
+
+ buf->output = NULL;
+ }
+
+ return 0;
+}
+
#endif /* NO_SOCKET_TO_FD */
-
+
/*
* Read a line from the server. Result does not include the terminating \n.
*
@@ -3519,7 +3573,6 @@ get_server_responses ()
}
/* Get the responses and then close the connection. */
-int server_fd = -1;
/*
* Flag var; we'll set it in start_server() and not one of its
@@ -3548,79 +3601,18 @@ get_responses_and_close ()
if (client_prune_dirs)
process_prune_candidates ();
- /* The calls to buf_shutdown are currently only meaningful when we
- are using compression. First we shut down TO_SERVER. That
- tells the server that its input is finished. It then shuts
- down the buffer it is sending to us, at which point our shut
- down of FROM_SERVER will complete. */
+ /* First we shut down TO_SERVER. That tells the server that its input is
+ * finished. It then shuts down the buffer it is sending to us, at which
+ * point our shut down of FROM_SERVER will complete.
+ */
status = buf_shutdown (to_server);
if (status != 0)
- error (0, status, "shutting down buffer to server");
+ error (0, status, "shutting down buffer to server");
status = buf_shutdown (from_server);
if (status != 0)
error (0, status, "shutting down buffer from server");
-#ifdef NO_SOCKET_TO_FD
- if (use_socket_style)
- {
- if (shutdown (server_sock, 2) < 0)
- error (1, 0, "shutting down server socket: %s", SOCK_STRERROR (SOCK_ERRNO));
- }
- else
-#endif /* NO_SOCKET_TO_FD */
- {
-#if defined(HAVE_KERBEROS) || defined(AUTH_CLIENT_SUPPORT)
- if (server_fd != -1)
- {
- if (shutdown (server_fd, 1) < 0)
- error (1, 0, "shutting down connection to %s: %s",
- current_parsed_root->hostname, SOCK_STRERROR (SOCK_ERRNO));
- server_fd = -1;
- /*
- * This test will always be true because we dup the descriptor
- */
- if (fileno (from_server_fp) != fileno (to_server_fp))
- {
- if (fclose (to_server_fp) != 0)
- error (1, errno,
- "closing down connection to %s",
- current_parsed_root->hostname);
- }
- }
- else
-#endif
-
-#ifdef SHUTDOWN_SERVER
- SHUTDOWN_SERVER (fileno (to_server_fp));
-#else /* ! SHUTDOWN_SERVER */
- {
-
-#ifdef START_RSH_WITH_POPEN_RW
- if (pclose (to_server_fp) == EOF)
-#else /* ! START_RSH_WITH_POPEN_RW */
- if (fclose (to_server_fp) == EOF)
-#endif /* START_RSH_WITH_POPEN_RW */
- {
- error (1, errno, "closing connection to %s",
- current_parsed_root->hostname);
- }
- }
-
- if (! buf_empty_p (from_server)
- || getc (from_server_fp) != EOF)
- error (0, 0, "dying gasps from %s unexpected", current_parsed_root->hostname);
- else if (ferror (from_server_fp))
- error (0, errno, "reading from %s", current_parsed_root->hostname);
-
- fclose (from_server_fp);
-#endif /* SHUTDOWN_SERVER */
- }
-
- if (rsh_pid != -1
- && waitpid (rsh_pid, (int *) 0, 0) == -1)
- error (1, errno, "waiting for process %d", rsh_pid);
-
buf_free (to_server);
buf_free (from_server);
server_started = 0;
@@ -3635,7 +3627,7 @@ get_responses_and_close ()
}
#ifndef NO_EXT_METHOD
-static void start_rsh_server PROTO((int *, int *));
+static void start_rsh_server PROTO((cvsroot_t *, struct buffer **, struct buffer **));
#endif
int
@@ -3758,68 +3750,82 @@ get_cvs_port_number (root)
method_names[root->method]);
break;
}
+ /* NOTREACHED */
+ return -1;
}
-/* Read a line from socket SOCK. Result does not include the
- terminating linefeed. This is only used by the authentication
- protocol, which we call before we set up all the buffering stuff.
- It is possible it should use the buffers too, which would be faster
- (unlike the server, there isn't really a security issue in terms of
- separating authentication from the rest of the code).
-
- Space for the result is malloc'd and should be freed by the caller.
-
- Returns number of bytes read. */
-static int
-recv_line (sock, resultp)
- int sock;
- char **resultp;
+void
+make_bufs_from_fds (tofd, fromfd, child_pid, to_server, from_server, is_sock)
+ int tofd;
+ int fromfd;
+ int child_pid;
+ struct buffer **to_server;
+ struct buffer **from_server;
+ int is_sock;
{
- char *result;
- size_t input_index = 0;
- size_t result_size = 80;
-
- result = (char *) xmalloc (result_size);
+ FILE *to_server_fp;
+ FILE *from_server_fp;
- while (1)
+#ifdef NO_SOCKET_TO_FD
+ if (is_sock)
{
- char ch;
- int n;
- n = recv (sock, &ch, 1, 0);
- if (n <= 0)
- error (1, 0, "recv() from server %s: %s", current_parsed_root->hostname,
- n == 0 ? "EOF" : SOCK_STRERROR (SOCK_ERRNO));
-
- if (ch == '\012')
- break;
+ assert (tofd == fromfd);
+ *to_server = socket_buffer_initialize (tofd, 0,
+ (BUFMEMERRPROC) NULL);
+ *from_server = socket_buffer_initialize (tofd, 1,
+ (BUFMEMERRPROC) NULL);
+ }
+ else
+#endif /* NO_SOCKET_TO_FD */
+ {
+ /* todo: some OS's don't need these calls... */
+ close_on_exec (tofd);
+ close_on_exec (fromfd);
- result[input_index++] = ch;
- while (input_index + 1 >= result_size)
+ /* SCO 3 and AIX have a nasty bug in the I/O libraries which precludes
+ fdopening the same file descriptor twice, so dup it if it is the
+ same. */
+ if (tofd == fromfd)
{
- result_size *= 2;
- result = (char *) xrealloc (result, result_size);
+ fromfd = dup (tofd);
+ if (fromfd < 0)
+ error (1, errno, "cannot dup net connection");
}
- }
- if (resultp)
- *resultp = result;
-
- /* Terminate it just for kicks, but we *can* deal with embedded NULs. */
- result[input_index] = '\0';
+ /* These will use binary mode on systems which have it. */
+ /*
+ * Also, we know that from_server is shut down second, so we pass
+ * child_pid in there. In theory, it should be stored in both
+ * buffers with a ref count...
+ */
+ to_server_fp = fdopen (tofd, FOPEN_BINARY_WRITE);
+ if (to_server_fp == NULL)
+ error (1, errno, "cannot fdopen %d for write", tofd);
+ *to_server = stdio_buffer_initialize (to_server_fp, 0, 0,
+ (BUFMEMERRPROC) NULL);
- if (resultp == NULL)
- free (result);
- return input_index;
+ from_server_fp = fdopen (fromfd, FOPEN_BINARY_READ);
+ if (from_server_fp == NULL)
+ error (1, errno, "cannot fdopen %d for read", fromfd);
+ *from_server = stdio_buffer_initialize (from_server_fp, child_pid, 1,
+ (BUFMEMERRPROC) NULL);
+ }
}
+
+
/* Connect to a forked server process. */
void
-connect_to_forked_server (tofdp, fromfdp)
- int *tofdp, *fromfdp;
+connect_to_forked_server (to_server, from_server)
+ struct buffer **to_server;
+ struct buffer **from_server;
{
+ int tofd, fromfd;
+ int child_pid;
+
/* This is pretty simple. All we need to do is choose the correct
cvs binary and call piped_child. */
@@ -3836,8 +3842,12 @@ connect_to_forked_server (tofdp, fromfdp)
{
fprintf (stderr, " -> Forking server: %s %s\n", command[0], command[1]);
}
- if (! piped_child (command, tofdp, fromfdp))
+
+ child_pid = piped_child (command, &tofd, &fromfd);
+ if (child_pid < 0)
error (1, 0, "could not fork server process");
+
+ make_bufs_from_fds (tofd, fromfd, child_pid, to_server, from_server, 0);
}
/* Connect to the authenticating server.
@@ -3853,51 +3863,113 @@ connect_to_forked_server (tofdp, fromfdp)
If we fail to connect or if access is denied, then die with fatal
error. */
void
-connect_to_pserver (tofdp, fromfdp, verify_only, do_gssapi)
- int *tofdp, *fromfdp;
- int verify_only;
- int do_gssapi;
+connect_to_pserver (root, to_server_p, from_server_p, verify_only, do_gssapi)
+ cvsroot_t *root;
+ struct buffer **to_server_p;
+ struct buffer **from_server_p;
+ int verify_only;
+ int do_gssapi;
{
int sock;
-#ifndef NO_SOCKET_TO_FD
- int tofd, fromfd;
-#endif
int port_number;
- char *username; /* the username we use to connect */
struct sockaddr_in client_sai;
struct hostent *hostinfo;
- char no_passwd = 0; /* gets set if no password found */
+ struct buffer *to_server, *from_server;
sock = socket (AF_INET, SOCK_STREAM, 0);
if (sock == -1)
{
error (1, 0, "cannot create socket: %s", SOCK_STRERROR (SOCK_ERRNO));
}
- port_number = get_cvs_port_number (current_parsed_root);
- hostinfo = init_sockaddr (&client_sai, current_parsed_root->hostname, port_number);
+ port_number = get_cvs_port_number (root);
+ hostinfo = init_sockaddr (&client_sai, root->hostname, port_number);
if (trace)
{
fprintf (stderr, " -> Connecting to %s(%s):%d\n",
- current_parsed_root->hostname,
+ root->hostname,
inet_ntoa (client_sai.sin_addr), port_number);
}
if (connect (sock, (struct sockaddr *) &client_sai, sizeof (client_sai))
< 0)
error (1, 0, "connect to %s(%s):%d failed: %s",
- current_parsed_root->hostname,
+ root->hostname,
inet_ntoa (client_sai.sin_addr),
port_number, SOCK_STRERROR (SOCK_ERRNO));
+ make_bufs_from_fds (sock, sock, 0, &to_server, &from_server, 1);
+
+ auth_server (root, to_server, from_server, verify_only, do_gssapi, hostinfo);
+
+ if (verify_only)
+ {
+ int status;
+
+ status = buf_shutdown (to_server);
+ if (status != 0)
+ error (0, status, "shutting down buffer to server");
+ status = buf_shutdown (from_server);
+ if (status != 0)
+ error (0, status, "shutting down buffer from server");
+
+ buf_free (to_server);
+ buf_free (from_server);
+
+ /* Don't need to set server_started = 0 since we don't set it to 1
+ * until returning from this call.
+ */
+ }
+ else
+ {
+ *to_server_p = to_server;
+ *from_server_p = from_server;
+ }
+
+ return;
+}
+
+
+
+static void
+auth_server (root, lto_server, lfrom_server, verify_only, do_gssapi, hostinfo)
+ cvsroot_t *root;
+ struct buffer *lto_server;
+ struct buffer *lfrom_server;
+ int verify_only;
+ int do_gssapi;
+ struct hostent *hostinfo;
+{
+ char *username; /* the username we use to connect */
+ char no_passwd = 0; /* gets set if no password found */
+
+ /* FIXME!!!!!!!!!!!!!!!!!!
+ *
+ * THIS IS REALLY UGLY!
+ *
+ * I'm setting the globals here so we can make calls to send_to_server &
+ * read_line. This happens again _after_ we return if we're not in
+ * verify_only mode. We should be relying on the values we passed in, but
+ * sent_to_server and read_line don't require an outside buf yet.
+ */
+ to_server = lto_server;
+ from_server = lfrom_server;
+
/* Run the authorization mini-protocol before anything else. */
if (do_gssapi)
{
#ifdef HAVE_GSSAPI
- if (! connect_to_gserver (sock, hostinfo))
+ int fd = (int) lto_server->closure;
+ struct stat s;
+
+ if (fstat (fd, &s) < 0 || !S_ISSOCK(s.st_mode))
{
- error (0, 0,
+ error (1, 0, "gserver currently only enabled for socket connections");
+ }
+
+ if (! connect_to_gserver (root, fd, hostinfo))
+ {
+ error (1, 0,
"authorization failed: server %s rejected access to %s",
- current_parsed_root->hostname, current_parsed_root->directory);
- goto rejected;
+ root->hostname, root->directory);
}
#else
error (1, 0, "This client does not support GSSAPI authentication");
@@ -3911,48 +3983,42 @@ connect_to_pserver (tofdp, fromfdp, verify_only, do_gssapi)
if (verify_only)
{
- begin = "BEGIN VERIFICATION REQUEST\012";
- end = "END VERIFICATION REQUEST\012";
+ begin = "BEGIN VERIFICATION REQUEST";
+ end = "END VERIFICATION REQUEST";
}
else
{
- begin = "BEGIN AUTH REQUEST\012";
- end = "END AUTH REQUEST\012";
+ begin = "BEGIN AUTH REQUEST";
+ end = "END AUTH REQUEST";
}
/* Get the password, probably from ~/.cvspass. */
password = get_cvs_password ();
- username = current_parsed_root->username ? current_parsed_root->username : getcaller();
+ username = root->username ? root->username : getcaller();
- /* Send the empty string by default. This is so anonymous CVS
- access doesn't require client to have done "cvs login". */
- if (password == NULL)
- {
- no_passwd = 1;
- password = scramble ("");
- }
+ /* Send the empty string by default. This is so anonymous CVS
+ access doesn't require client to have done "cvs login". */
+ if (password == NULL)
+ {
+ no_passwd = 1;
+ password = scramble ("");
+ }
/* Announce that we're starting the authorization protocol. */
- if (send (sock, begin, strlen (begin), 0) < 0)
- error (1, 0, "cannot send: %s", SOCK_STRERROR (SOCK_ERRNO));
+ send_to_server(begin, 0);
+ send_to_server("\012", 1);
/* Send the data the server needs. */
- if (send (sock, current_parsed_root->directory, strlen (current_parsed_root->directory), 0) < 0)
- error (1, 0, "cannot send: %s", SOCK_STRERROR (SOCK_ERRNO));
- if (send (sock, "\012", 1, 0) < 0)
- error (1, 0, "cannot send: %s", SOCK_STRERROR (SOCK_ERRNO));
- if (send (sock, username, strlen (username), 0) < 0)
- error (1, 0, "cannot send: %s", SOCK_STRERROR (SOCK_ERRNO));
- if (send (sock, "\012", 1, 0) < 0)
- error (1, 0, "cannot send: %s", SOCK_STRERROR (SOCK_ERRNO));
- if (send (sock, password, strlen (password), 0) < 0)
- error (1, 0, "cannot send: %s", SOCK_STRERROR (SOCK_ERRNO));
- if (send (sock, "\012", 1, 0) < 0)
- error (1, 0, "cannot send: %s", SOCK_STRERROR (SOCK_ERRNO));
+ send_to_server(root->directory, 0);
+ send_to_server("\012", 1);
+ send_to_server(username, 0);
+ send_to_server("\012", 1);
+ send_to_server(password, 0);
+ send_to_server("\012", 1);
/* Announce that we're ending the authorization protocol. */
- if (send (sock, end, strlen (end), 0) < 0)
- error (1, 0, "cannot send: %s", SOCK_STRERROR (SOCK_ERRNO));
+ send_to_server(end, 0);
+ send_to_server("\012", 1);
/* Paranoia. */
memset (password, 0, strlen (password));
@@ -3964,7 +4030,7 @@ connect_to_pserver (tofdp, fromfdp, verify_only, do_gssapi)
/* Loop, getting responses from the server. */
while (1)
{
- recv_line (sock, &read_buf);
+ read_line (&read_buf);
if (strcmp (read_buf, "I HATE YOU") == 0)
{
@@ -3976,12 +4042,12 @@ connect_to_pserver (tofdp, fromfdp, verify_only, do_gssapi)
* can return 1 and we will not receive "I LOVE YOU" from the server, barring
* broken connections and garbled messages, of course).
*
- * i.e. This is a pserver specific error message and shoiuld be since
+ * i.e. This is a pserver specific error message and should be since
* GSSAPI doesn't use username.
*/
error (0, 0,
"authorization failed: server %s rejected access to %s for user %s",
- current_parsed_root->hostname, current_parsed_root->directory, username);
+ root->hostname, root->directory, username);
/* Output a special error message if authentication was attempted
with no password -- the user should be made aware that they may
@@ -3991,7 +4057,7 @@ connect_to_pserver (tofdp, fromfdp, verify_only, do_gssapi)
error (0, 0,
"used empty password; try \"cvs login\" with a real password");
}
- goto rejected;
+ error_exit();
}
else if (strncmp (read_buf, "E ", 2) == 0)
{
@@ -4014,7 +4080,7 @@ connect_to_pserver (tofdp, fromfdp, verify_only, do_gssapi)
/* Now output the text. */
fprintf (stderr, "%s\n", p);
- goto rejected;
+ error_exit();
}
else if (strcmp (read_buf, "I LOVE YOU") == 0)
{
@@ -4023,62 +4089,13 @@ connect_to_pserver (tofdp, fromfdp, verify_only, do_gssapi)
}
else
{
- /* Unrecognized response from server. */
- if (shutdown (sock, 2) < 0)
- {
- error (0, 0,
- "unrecognized auth response from %s: %s",
- current_parsed_root->hostname, read_buf);
- error (1, 0,
- "shutdown() failed, server %s: %s",
- current_parsed_root->hostname,
- SOCK_STRERROR (SOCK_ERRNO));
- }
error (1, 0,
"unrecognized auth response from %s: %s",
- current_parsed_root->hostname, read_buf);
+ root->hostname, read_buf);
}
free (read_buf);
}
}
-
- if (verify_only)
- {
- if (shutdown (sock, 2) < 0)
- error (0, 0, "shutdown() failed, server %s: %s", current_parsed_root->hostname,
- SOCK_STRERROR (SOCK_ERRNO));
- return;
- }
- else
- {
-#ifdef NO_SOCKET_TO_FD
- use_socket_style = 1;
- server_sock = sock;
- /* Try to break mistaken callers: */
- *tofdp = 0;
- *fromfdp = 0;
-#else /* ! NO_SOCKET_TO_FD */
- server_fd = sock;
- close_on_exec (server_fd);
- tofd = fromfd = sock;
- /* Hand them back to the caller. */
- *tofdp = tofd;
- *fromfdp = fromfd;
-#endif /* NO_SOCKET_TO_FD */
- }
-
- return;
-
- rejected:
- if (shutdown (sock, 2) < 0)
- {
- error (0, 0,
- "shutdown() failed (server %s): %s",
- current_parsed_root->hostname,
- SOCK_STRERROR (SOCK_ERRNO));
- }
-
- error_exit();
}
#endif /* AUTH_CLIENT_SUPPORT */
@@ -4090,10 +4107,12 @@ connect_to_pserver (tofdp, fromfdp, verify_only, do_gssapi)
(i.e., systems on which sockets cannot be converted to file
descriptors). The first person to try building a kerberos client
on such a system (OS/2, Windows 95, and maybe others) will have to
- make take care of this. */
+ take care of this. */
void
-start_tcp_server (tofdp, fromfdp)
- int *tofdp, *fromfdp;
+start_tcp_server (root, to_server, from_server)
+ cvsroot_t *root;
+ struct buffer **to_server;
+ struct buffer **from_server;
{
int s;
const char *portenv;
@@ -4106,9 +4125,9 @@ start_tcp_server (tofdp, fromfdp)
if (s < 0)
error (1, 0, "cannot create socket: %s", SOCK_STRERROR (SOCK_ERRNO));
- port = get_cvs_port_number (current_parsed_root);
+ port = get_cvs_port_number (root);
- hp = init_sockaddr (&sin, current_parsed_root->hostname, port);
+ hp = init_sockaddr (&sin, root->hostname, port);
hname = xmalloc (strlen (hp->h_name) + 1);
strcpy (hname, hp->h_name);
@@ -4116,13 +4135,13 @@ start_tcp_server (tofdp, fromfdp)
if (trace)
{
fprintf (stderr, " -> Connecting to %s(%s):%d\n",
- current_parsed_root->hostname,
+ root->hostname,
inet_ntoa (sin.sin_addr), port);
}
if (connect (s, (struct sockaddr *) &sin, sizeof sin) < 0)
error (1, 0, "connect to %s(%s):%d failed: %s",
- current_parsed_root->hostname,
+ root->hostname,
inet_ntoa (sin.sin_addr),
port, SOCK_STRERROR (SOCK_ERRNO));
@@ -4151,14 +4170,12 @@ start_tcp_server (tofdp, fromfdp)
memcpy (kblock, cred.session, sizeof (C_Block));
}
- server_fd = s;
- close_on_exec (server_fd);
+ close_on_exec (s);
free (hname);
/* Give caller the values it wants. */
- *tofdp = s;
- *fromfdp = s;
+ make_bufs_from_fds (s, s, 0, to_server, from_server, 1);
}
#endif /* HAVE_KERBEROS */
@@ -4189,13 +4206,29 @@ recv_bytes (sock, buf, need)
/* Connect to the server using GSSAPI authentication. */
+/* FIXME
+ *
+ * This really needs to be rewritten to use a buffer and not a socket.
+ * This would enable gserver to work with the SSL code I'm about to commit
+ * since the SSL connection is going to look like a FIFO and not a socket.
+ *
+ * I think, basically, it will need to use buf_output and buf_read directly
+ * since I don't think there is a read_bytes function - only read_line.
+ *
+ * recv_bytes could then be removed too.
+ *
+ * Besides, I added some cruft to reenable the socket which shouldn't be
+ * there. This would also enable its removal.
+ */
+#define BUFSIZE 1024
static int
-connect_to_gserver (sock, hostinfo)
- int sock;
- struct hostent *hostinfo;
+connect_to_gserver (root, sock, hostinfo)
+ cvsroot_t *root;
+ int sock;
+ struct hostent *hostinfo;
{
char *str;
- char buf[1024];
+ char buf[BUFSIZE];
gss_buffer_desc *tok_in_ptr, tok_in, tok_out;
OM_uint32 stat_min, stat_maj;
gss_name_t server_name;
@@ -4205,6 +4238,8 @@ connect_to_gserver (sock, hostinfo)
if (send (sock, str, strlen (str), 0) < 0)
error (1, 0, "cannot send: %s", SOCK_STRERROR (SOCK_ERRNO));
+ if (strlen (hostinfo->h_name) > BUFSIZE - 5)
+ error (1, 0, "Internal error: hostname exceeds length of buffer");
sprintf (buf, "cvs@%s", hostinfo->h_name);
tok_in.length = strlen (buf);
tok_in.value = buf;
@@ -4274,11 +4309,11 @@ connect_to_gserver (sock, hostinfo)
got = recv (sock, buf + 2, sizeof buf - 2, 0);
if (got < 0)
error (1, 0, "recv() from server %s: %s",
- current_parsed_root->hostname, SOCK_STRERROR (SOCK_ERRNO));
+ root->hostname, SOCK_STRERROR (SOCK_ERRNO));
buf[got + 2] = '\0';
if (buf[got + 1] == '\n')
buf[got + 1] = '\0';
- error (1, 0, "error from server %s: %s", current_parsed_root->hostname,
+ error (1, 0, "error from server %s: %s", root->hostname,
buf);
}
@@ -4315,10 +4350,9 @@ send_variable_proc (node, closure)
void
start_server ()
{
- int tofd, fromfd, rootless;
+ int rootless;
char *log = getenv ("CVS_CLIENT_LOG");
-
/* Clear our static variables for this invocation. */
if (toplevel_repos != NULL)
free (toplevel_repos);
@@ -4335,22 +4369,23 @@ start_server ()
#ifdef AUTH_CLIENT_SUPPORT
case pserver_method:
- /* Toss the return value. It will die with error if anything
- goes wrong anyway. */
- connect_to_pserver (&tofd, &fromfd, 0, 0);
+ /* Toss the return value. It will die with an error message if
+ * anything goes wrong anyway.
+ */
+ connect_to_pserver (current_parsed_root, &to_server, &from_server, 0, 0);
break;
#endif
#if HAVE_KERBEROS
case kserver_method:
- start_tcp_server (&tofd, &fromfd);
+ start_tcp_server (current_parsed_root, &to_server, &from_server);
break;
#endif
#ifdef HAVE_GSSAPI
case gserver_method:
/* GSSAPI authentication is handled by the pserver. */
- connect_to_pserver (&tofd, &fromfd, 0, 1);
+ connect_to_pserver (current_parsed_root, &to_server, &from_server, 0, 1);
break;
#endif
@@ -4359,34 +4394,34 @@ start_server ()
error (0, 0, ":ext: method not supported by this port of CVS");
error (1, 0, "try :server: instead");
#else
- start_rsh_server (&tofd, &fromfd);
+ start_rsh_server (current_parsed_root, &to_server, &from_server);
#endif
break;
case server_method:
#if defined(START_SERVER)
+ {
+ int tofd, fromfd;
START_SERVER (&tofd, &fromfd, getcaller (),
current_parsed_root->username, current_parsed_root->hostname,
current_parsed_root->directory);
-# if defined (START_SERVER_RETURNS_SOCKET) && defined (NO_SOCKET_TO_FD)
- /* This is a system on which we can only write to a socket
- using send/recv. Therefore its START_SERVER needs to
- return a socket. */
- use_socket_style = 1;
- server_sock = tofd;
-# endif
-
+# ifdef START_SERVER_RETURNS_SOCKET
+ make_bufs_from_fds (tofd, fromfd, 0, &to_server, &from_server, 1);
+# else
+ make_bufs_from_fds (tofd, fromfd, 0, &to_server, &from_server, 0);
+# endif /* START_SERVER_RETURNS_SOCKET */
+ }
#else
/* FIXME: It should be possible to implement this portably,
like pserver, which would get rid of the duplicated code
in {vms,windows-NT,...}/startserver.c. */
- error (1, 0, "\
-the :server: access method is not supported by this port of CVS");
+ error (1, 0,
+"the :server: access method is not supported by this port of CVS");
#endif
break;
case fork_method:
- connect_to_forked_server (&tofd, &fromfd);
+ connect_to_forked_server (&to_server, &from_server);
break;
default:
@@ -4398,46 +4433,11 @@ the :server: access method is not supported by this port of CVS");
/* "Hi, I'm Darlene and I'll be your server tonight..." */
server_started = 1;
-#ifdef NO_SOCKET_TO_FD
- if (use_socket_style)
- {
- to_server = socket_buffer_initialize (server_sock, 0,
- (BUFMEMERRPROC) NULL);
- from_server = socket_buffer_initialize (server_sock, 1,
- (BUFMEMERRPROC) NULL);
- }
- else
-#endif /* NO_SOCKET_TO_FD */
- {
- /* todo: some OS's don't need these calls... */
- close_on_exec (tofd);
- close_on_exec (fromfd);
-
- /* SCO 3 and AIX have a nasty bug in the I/O libraries which precludes
- fdopening the same file descriptor twice, so dup it if it is the
- same. */
- if (tofd == fromfd)
- {
- fromfd = dup (tofd);
- if (fromfd < 0)
- error (1, errno, "cannot dup net connection");
- }
-
- /* These will use binary mode on systems which have it. */
- to_server_fp = fdopen (tofd, FOPEN_BINARY_WRITE);
- if (to_server_fp == NULL)
- error (1, errno, "cannot fdopen %d for write", tofd);
- to_server = stdio_buffer_initialize (to_server_fp, 0,
- (BUFMEMERRPROC) NULL);
-
- from_server_fp = fdopen (fromfd, FOPEN_BINARY_READ);
- if (from_server_fp == NULL)
- error (1, errno, "cannot fdopen %d for read", fromfd);
- from_server = stdio_buffer_initialize (from_server_fp, 1,
- (BUFMEMERRPROC) NULL);
- }
-
- /* Set up logfiles, if any. */
+ /* Set up logfiles, if any.
+ *
+ * We do this _after_ authentication on purpose. Wouldn't really like to
+ * worry about logging passwords...
+ */
if (log)
{
int len = strlen (log);
@@ -4763,7 +4763,7 @@ the :server: access method is not supported by this port of CVS");
implementing piped_child)... but I'm doing something else at the
moment, and wish to make only one change at a time. -Karl */
-#ifdef START_RSH_WITH_POPEN_RW
+# ifdef START_RSH_WITH_POPEN_RW
/* This is actually a crock -- it's OS/2-specific, for no one else
uses it. If I get time, I want to make piped_child and all the
@@ -4771,10 +4771,13 @@ the :server: access method is not supported by this port of CVS");
up and running, and that's most important. */
static void
-start_rsh_server (tofdp, fromfdp)
- int *tofdp, *fromfdp;
+start_rsh_server (root, to_server, from_server)
+ cvsroot_t *root;
+ struct buffer **to_server;
+ struct buffer **from_server;
{
int pipes[2];
+ int child_pid;
/* If you're working through firewalls, you can set the
CVS_RSH environment variable to a script which uses rsh to
@@ -4814,19 +4817,19 @@ start_rsh_server (tofdp, fromfdp)
/* The command line starts out with rsh. */
rsh_argv[i++] = cvs_rsh;
-#ifdef RSH_NEEDS_BINARY_FLAG
+# ifdef RSH_NEEDS_BINARY_FLAG
/* "-b" for binary, under OS/2. */
rsh_argv[i++] = "-b";
-#endif /* RSH_NEEDS_BINARY_FLAG */
+# endif /* RSH_NEEDS_BINARY_FLAG */
/* Then we strcat more things on the end one by one. */
- if (current_parsed_root->username != NULL)
+ if (root->username != NULL)
{
rsh_argv[i++] = "-l";
- rsh_argv[i++] = current_parsed_root->username;
+ rsh_argv[i++] = root->username;
}
- rsh_argv[i++] = current_parsed_root->hostname;
+ rsh_argv[i++] = root->hostname;
rsh_argv[i++] = cvs_server;
rsh_argv[i++] = "server";
@@ -4842,21 +4845,21 @@ start_rsh_server (tofdp, fromfdp)
}
/* Do the deed. */
- rsh_pid = popenRW (rsh_argv, pipes);
- if (rsh_pid < 0)
+ child_pid = popenRW (rsh_argv, pipes);
+ if (child_pid < 0)
error (1, errno, "cannot start server via rsh");
- /* Give caller the file descriptors. */
- *tofdp = pipes[0];
- *fromfdp = pipes[1];
+ /* Give caller the file descriptors in a form it can deal with. */
+ make_bufs_from_fds (pipes[0], pipes[1], child_pid, to_server, from_server, 0);
}
-#else /* ! START_RSH_WITH_POPEN_RW */
+# else /* ! START_RSH_WITH_POPEN_RW */
static void
-start_rsh_server (tofdp, fromfdp)
- int *tofdp;
- int *fromfdp;
+start_rsh_server (root, to_server, from_server)
+ cvsroot_t *root;
+ struct buffer **to_server;
+ struct buffer **from_server;
{
/* If you're working through firewalls, you can set the
CVS_RSH environment variable to a script which uses rsh to
@@ -4864,6 +4867,8 @@ start_rsh_server (tofdp, fromfdp)
char *cvs_rsh = getenv ("CVS_RSH");
char *cvs_server = getenv ("CVS_SERVER");
char *command;
+ int tofd, fromfd;
+ int child_pid;
if (!cvs_rsh)
cvs_rsh = "rsh";
@@ -4874,9 +4879,7 @@ start_rsh_server (tofdp, fromfdp)
affect most rsh servers at all, and will pacify some buggy
versions of rsh that grab switches out of the middle of the
command (they're calling the GNU getopt routines incorrectly). */
- command = xmalloc (strlen (cvs_server)
- + strlen (current_parsed_root->directory)
- + 50);
+ command = xmalloc (strlen (cvs_server) + 8);
/* If you are running a very old (Nov 3, 1994, before 1.5)
* version of the server, you need to make sure that your .bashrc
@@ -4889,15 +4892,15 @@ start_rsh_server (tofdp, fromfdp)
char **p = argv;
*p++ = cvs_rsh;
- *p++ = current_parsed_root->hostname;
+ *p++ = root->hostname;
/* If the login names differ between client and server
* pass it on to rsh.
*/
- if (current_parsed_root->username != NULL)
+ if (root->username != NULL)
{
*p++ = "-l";
- *p++ = current_parsed_root->username;
+ *p++ = root->username;
}
*p++ = command;
@@ -4912,19 +4915,21 @@ start_rsh_server (tofdp, fromfdp)
fprintf (stderr, "%s ", argv[i]);
putc ('\n', stderr);
}
- rsh_pid = piped_child (argv, tofdp, fromfdp);
+ child_pid = piped_child (argv, &tofd, &fromfd);
- if (rsh_pid < 0)
+ if (child_pid < 0)
error (1, errno, "cannot start server via rsh");
}
free (command);
+
+ make_bufs_from_fds (tofd, fromfd, child_pid, to_server, from_server, 0);
}
-#endif /* START_RSH_WITH_POPEN_RW */
+# endif /* START_RSH_WITH_POPEN_RW */
#endif /* NO_EXT_METHOD */
-
+
/* Send an argument STRING. */
void
diff --git a/contrib/cvs/src/client.h b/contrib/cvs/src/client.h
index b4d404ad106d..d7f3392f9d18 100644
--- a/contrib/cvs/src/client.h
+++ b/contrib/cvs/src/client.h
@@ -15,32 +15,36 @@ extern int cvsencrypt;
/* Whether the connection should use per-packet authentication. */
extern int cvsauthenticate;
-#ifdef ENCRYPTION
+#ifdef __STDC__
+struct buffer;
+#endif
+
+# ifdef ENCRYPTION
-#ifdef HAVE_KERBEROS
+# ifdef HAVE_KERBEROS
/* We can't declare the arguments without including krb.h, and I don't
want to do that in every file. */
extern struct buffer *krb_encrypt_buffer_initialize ();
-#endif /* HAVE_KERBEROS */
+# endif /* HAVE_KERBEROS */
-#ifdef HAVE_GSSAPI
+# ifdef HAVE_GSSAPI
/* Set this to turn on GSSAPI encryption. */
extern int cvs_gssapi_encrypt;
-#endif /* HAVE_GSSAPI */
+# endif /* HAVE_GSSAPI */
-#endif /* ENCRYPTION */
+# endif /* ENCRYPTION */
-#ifdef HAVE_GSSAPI
+# ifdef HAVE_GSSAPI
/* We can't declare the arguments without including gssapi.h, and I
don't want to do that in every file. */
extern struct buffer *cvs_gssapi_wrap_buffer_initialize ();
-#endif /* HAVE_GSSAPI */
+# endif /* HAVE_GSSAPI */
#endif /* defined (CLIENT_SUPPORT) || defined (SERVER_SUPPORT) */
@@ -54,22 +58,30 @@ extern int server_started;
/* Is the -P option to checkout or update specified? */
extern int client_prune_dirs;
-#ifdef AUTH_CLIENT_SUPPORT
+# ifdef AUTH_CLIENT_SUPPORT
extern int use_authenticating_server;
-void connect_to_pserver PROTO ((int *tofdp, int* fromfdp, int verify_only,
- int do_gssapi));
-# ifndef CVS_AUTH_PORT
-# define CVS_AUTH_PORT 2401
-# endif /* CVS_AUTH_PORT */
-#endif /* AUTH_CLIENT_SUPPORT */
-
-#if defined (AUTH_SERVER_SUPPORT) || (defined (SERVER_SUPPORT) && defined (HAVE_GSSAPI))
+void connect_to_pserver PROTO ((cvsroot_t *,
+ struct buffer **,
+ struct buffer **,
+ int, int ));
+# ifndef CVS_AUTH_PORT
+# define CVS_AUTH_PORT 2401
+# endif /* CVS_AUTH_PORT */
+# endif /* AUTH_CLIENT_SUPPORT */
+
+# if HAVE_KERBEROS
+# ifndef CVS_PORT
+# define CVS_PORT 1999
+# endif
+# endif /* HAVE_KERBEROS */
+
+# if defined (AUTH_SERVER_SUPPORT) || (defined (SERVER_SUPPORT) && defined (HAVE_GSSAPI))
extern void pserver_authenticate_connection PROTO ((void));
-#endif
+# endif
-#if defined (SERVER_SUPPORT) && defined (HAVE_KERBEROS)
+# if defined (SERVER_SUPPORT) && defined (HAVE_KERBEROS)
extern void kserver_authenticate_connection PROTO ((void));
-#endif
+# endif
/* Talking to the server. */
void send_to_server PROTO((char *str, size_t len));
@@ -94,7 +106,7 @@ send_file_names PROTO((int argc, char **argv, unsigned int flags));
/* Flags for send_file_names. */
/* Expand wild cards? */
-#define SEND_EXPAND_WILD 1
+# define SEND_EXPAND_WILD 1
/*
* Send Repository, Modified and Entry. argc and argv contain only
@@ -106,10 +118,10 @@ send_files PROTO((int argc, char **argv, int local, int aflag,
unsigned int flags));
/* Flags for send_files. */
-#define SEND_BUILD_DIRS 1
-#define SEND_FORCE 2
-#define SEND_NO_CONTENTS 4
-#define BACKUP_MODIFIED_FILES 8
+# define SEND_BUILD_DIRS 1
+# define SEND_FORCE 2
+# define SEND_NO_CONTENTS 4
+# define BACKUP_MODIFIED_FILES 8
/* Send an argument to the remote server. */
void
diff --git a/contrib/cvs/src/commit.c b/contrib/cvs/src/commit.c
index 149da7cb74d3..ba5dc5cc6038 100644
--- a/contrib/cvs/src/commit.c
+++ b/contrib/cvs/src/commit.c
@@ -351,9 +351,10 @@ commit (argc, argv)
struct passwd *pw;
if ((pw = (struct passwd *) getpwnam (getcaller ())) == NULL)
- error (1, 0, "you are unknown to this system");
+ error (1, 0, "your apparent username (%s) is unknown to this system",
+ getcaller ());
if (pw->pw_uid == (uid_t) 0)
- error (1, 0, "cannot commit files as 'root'");
+ error (1, 0, "'root' is not allowed to commit files");
}
#endif /* CVS_BADROOT */
@@ -495,11 +496,6 @@ commit (argc, argv)
if (use_editor)
do_editor (".", &saved_message, (char *)NULL, find_args.ulist);
- /* Run the user-defined script to verify/check information in
- *the log message
- */
- do_verify (saved_message, (char *)NULL);
-
/* We always send some sort of message, even if empty. */
/* FIXME: is that true? There seems to be some code in do_editor
which can leave the message NULL. */
@@ -1230,7 +1226,7 @@ commit_fileproc (callerdat, finfo)
if (use_editor)
do_editor (finfo->update_dir, &saved_message,
finfo->repository, ulist);
- do_verify (saved_message, finfo->repository);
+ do_verify (&saved_message, finfo->repository);
}
p = findnode (cilist, finfo->file);
@@ -1552,7 +1548,7 @@ commit_direntproc (callerdat, dir, repos, update_dir, entries)
got_message = 1;
if (use_editor)
do_editor (update_dir, &saved_message, real_repos, ulist);
- do_verify (saved_message, real_repos);
+ do_verify (&saved_message, real_repos);
free (real_repos);
return (R_PROCESS);
}
@@ -1575,7 +1571,7 @@ commit_dirleaveproc (callerdat, dir, err, update_dir, entries)
this being a confusing feature! */
if (err == 0 && write_dirtag != NULL)
{
- char *repos = Name_Repository (dir, update_dir);
+ char *repos = Name_Repository (NULL, update_dir);
WriteTag (NULL, write_dirtag, NULL, write_dirnonbranch,
update_dir, repos);
free (repos);
@@ -1809,7 +1805,7 @@ unlockrcs (rcs)
{
int retcode;
- if ((retcode = RCS_unlock (rcs, NULL, 0)) != 0)
+ if ((retcode = RCS_unlock (rcs, NULL, 1)) != 0)
error (retcode == -1 ? 1 : 0, retcode == -1 ? errno : 0,
"could not unlock %s", rcs->path);
else
diff --git a/contrib/cvs/src/cvs.h b/contrib/cvs/src/cvs.h
index b4e3fa1f85e5..70e8a95113f2 100644
--- a/contrib/cvs/src/cvs.h
+++ b/contrib/cvs/src/cvs.h
@@ -81,8 +81,11 @@ extern int errno;
#include "system.h"
#include "hash.h"
+
+#include "root.h"
+
#if defined(SERVER_SUPPORT) || defined(CLIENT_SUPPORT)
-#include "client.h"
+# include "client.h"
#endif
#ifdef MY_NDBM
@@ -364,26 +367,7 @@ extern int use_editor;
extern int cvswrite;
extern mode_t cvsumask;
-/* Access method specified in CVSroot. */
-typedef enum {
- null_method, local_method, server_method, pserver_method, kserver_method, gserver_method,
- ext_method, fork_method
-} CVSmethod;
-extern char *method_names[]; /* change this in root.c if you change
- the enum above */
-
-typedef struct cvsroot_s {
- char *original; /* the complete source CVSroot string */
- CVSmethod method; /* one of the enum values above */
- char *username; /* the username or NULL if method == local */
- char *password; /* the username or NULL if method == local */
- char *hostname; /* the hostname or NULL if method == local */
- int port; /* the port or zero if method == local */
- char *directory; /* the directory name */
-#ifdef CLIENT_SUPPORT
- unsigned char isremote; /* nonzero if we are doing remote access */
-#endif /* CLIENT_SUPPORT */
-} cvsroot_t;
+
/* This global variable holds the global -d option. It is NULL if -d
was not used, which means that we must get the CVSroot information
@@ -396,7 +380,7 @@ extern List *root_directories;
extern cvsroot_t *current_parsed_root;
extern char *emptydir_name PROTO ((void));
-extern int safe_location PROTO ((void));
+extern int safe_location PROTO ((char *));
extern int trace; /* Show all commands */
extern int noexec; /* Don't modify disk anywhere */
@@ -404,6 +388,12 @@ extern int logoff; /* Don't write history entry */
extern int top_level_admin;
+
+#define LOGMSG_REREAD_NEVER 0 /* do_verify - never reread message */
+#define LOGMSG_REREAD_ALWAYS 1 /* do_verify - always reread message */
+#define LOGMSG_REREAD_STAT 2 /* do_verify - reread message if changed */
+extern int RereadLogAfterVerify;
+
#ifdef CLIENT_SUPPORT
extern List *dirs_sent_to_server; /* used to decide which "Argument
xxx" commands to send to each
@@ -475,7 +465,7 @@ char *time_stamp PROTO((char *file));
void *xmalloc PROTO((size_t bytes));
void *xrealloc PROTO((void *ptr, size_t bytes));
void expand_string PROTO ((char **, size_t *, size_t));
-void allocate_and_strcat PROTO ((char **, size_t *, const char *));
+void xrealloc_and_strcat PROTO ((char **, size_t *, const char *));
char *xstrdup PROTO((const char *str));
void strip_trailing_newlines PROTO((char *str));
int pathname_levels PROTO ((char *path));
@@ -589,7 +579,7 @@ void Update_Logfile PROTO((char *repository, char *xmessage, FILE * xlogfp,
void do_editor PROTO((char *dir, char **messagep,
char *repository, List * changes));
-void do_verify PROTO((char *message, char *repository));
+void do_verify PROTO((char **messagep, char *repository));
typedef int (*CALLBACKPROC) PROTO((int argc, char *argv[], char *where,
char *mwhere, char *mfile, int shorten, int local_specified,
diff --git a/contrib/cvs/src/diff.c b/contrib/cvs/src/diff.c
index 9732f5d1e91d..c3d0e83f9def 100644
--- a/contrib/cvs/src/diff.c
+++ b/contrib/cvs/src/diff.c
@@ -61,24 +61,71 @@ static size_t opts_allocated = 1;
static int diff_errors;
static int empty_files = 0;
-/* FIXME: should be documenting all the options here. They don't
- perfectly match rcsdiff options (for example, we always support
- --ifdef and --context, but rcsdiff only does if diff does). */
static const char *const diff_usage[] =
{
- "Usage: %s %s [-lNR] [rcsdiff-options]\n",
+ "Usage: %s %s [-lR] [-k kopt] [format_options]\n",
" [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files...] \n",
"\t-l\tLocal directory only, not recursive\n",
"\t-R\tProcess directories recursively.\n",
+ "\t-k kopt\tSpecify keyword expansion mode.\n",
"\t-D d1\tDiff revision for date against working file.\n",
"\t-D d2\tDiff rev1/date1 against date2.\n",
- "\t-N\tinclude diffs for added and removed files.\n",
"\t-r rev1\tDiff revision for rev1 against working file.\n",
"\t-r rev2\tDiff rev1/date1 against rev2.\n",
- "\t--ifdef=arg\tOutput diffs in ifdef format.\n",
- "(consult the documentation for your diff program for rcsdiff-options.\n",
- "The most popular is -c for context diffs but there are many more).\n",
- "(Specify the --help global option for a list of other help options)\n",
+ "\nformat_options:\n",
+ " -i --ignore-case Consider upper- and lower-case to be the same.\n",
+ " -w --ignore-all-space Ignore all white space.\n",
+ " -b --ignore-space-change Ignore changes in the amount of white space.\n",
+ " -B --ignore-blank-lines Ignore changes whose lines are all blank.\n",
+ " -I RE --ignore-matching-lines=RE Ignore changes whose lines all match RE.\n",
+ " --binary Read and write data in binary mode.\n",
+ " -a --text Treat all files as text.\n\n",
+ " -c -C NUM --context[=NUM] Output NUM (default 2) lines of copied context.\n",
+ " -u -U NUM --unified[=NUM] Output NUM (default 2) lines of unified context.\n",
+ " -NUM Use NUM context lines.\n",
+ " -L LABEL --label LABEL Use LABEL instead of file name.\n",
+ " -p --show-c-function Show which C function each change is in.\n",
+ " -F RE --show-function-line=RE Show the most recent line matching RE.\n",
+ " --brief Output only whether files differ.\n",
+ " -e --ed Output an ed script.\n",
+ " -f --forward-ed Output something like an ed script in forward order.\n",
+ " -n --rcs Output an RCS format diff.\n",
+ " -y --side-by-side Output in two columns.\n",
+ " -W NUM --width=NUM Output at most NUM (default 130) characters per line.\n",
+ " --left-column Output only the left column of common lines.\n",
+ " --suppress-common-lines Do not output common lines.\n",
+ " --ifdef=NAME Output merged file to show `#ifdef NAME' diffs.\n",
+ " --GTYPE-group-format=GFMT Similar, but format GTYPE input groups with GFMT.\n",
+ " --line-format=LFMT Similar, but format all input lines with LFMT.\n",
+ " --LTYPE-line-format=LFMT Similar, but format LTYPE input lines with LFMT.\n",
+ " LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'.\n",
+ " GFMT may contain:\n",
+ " %%< lines from FILE1\n",
+ " %%> lines from FILE2\n",
+ " %%= lines common to FILE1 and FILE2\n",
+ " %%[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER\n",
+ " LETTERs are as follows for new group, lower case for old group:\n",
+ " F first line number\n",
+ " L last line number\n",
+ " N number of lines = L-F+1\n",
+ " E F-1\n",
+ " M L+1\n",
+ " LFMT may contain:\n",
+ " %%L contents of line\n",
+ " %%l contents of line, excluding any trailing newline\n",
+ " %%[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number\n",
+ " Either GFMT or LFMT may contain:\n",
+ " %%%% %%\n",
+ " %%c'C' the single character C\n",
+ " %%c'\\OOO' the character with octal code OOO\n\n",
+ " -t --expand-tabs Expand tabs to spaces in output.\n",
+ " -T --initial-tab Make tabs line up by prepending a tab.\n\n",
+ " -N --new-file Treat absent files as empty.\n",
+ " -s --report-identical-files Report when two files are the same.\n",
+ " --horizon-lines=NUM Keep NUM lines of the common prefix and suffix.\n",
+ " -d --minimal Try hard to find a smaller set of changes.\n",
+ " -H --speed-large-files Assume large files and many scattered small changes.\n",
+ "\n(Specify the --help global option for a list of other help options)\n",
NULL
};
@@ -86,19 +133,20 @@ static const char *const diff_usage[] =
removing the following entries, none of which seem relevant to use
with CVS:
--help
- --version
- --recursive
- --unidirectional-new-file
- --starting-file
- --exclude
- --exclude-from
+ --version (-v)
+ --recursive (-r)
+ --unidirectional-new-file (-P)
+ --starting-file (-S)
+ --exclude (-x)
+ --exclude-from (-X)
--sdiff-merge-assist
+ --paginate (-l) (doesn't work with library callbacks)
I changed the options which take optional arguments (--context and
--unified) to return a number rather than a letter, so that the
optional argument could be handled more easily. I changed the
- --paginate and --brief options to return a number, since -l and -q
- mean something else to cvs diff.
+ --brief and --ifdef options to return numbers, since -q and -D mean
+ something else to cvs diff.
The numbers 129- that appear in the fourth element of some entries
tell the big switch in `diff' how to process those options. -- Ian
@@ -125,7 +173,6 @@ static struct option const longopts[] =
{"ed", 0, 0, 'e'},
{"forward-ed", 0, 0, 'f'},
{"ignore-case", 0, 0, 'i'},
- {"paginate", 0, 0, 144},
{"rcs", 0, 0, 'n'},
{"show-c-function", 0, 0, 'p'},
@@ -224,19 +271,22 @@ diff (argc, argv)
optind = 0;
while ((c = getopt_long (argc, argv,
- "+abcdefhilnpstuwy0123456789BHNRTC:D:F:I:L:U:V:W:k:r:",
+ "+abcdefhilnpstuwy0123456789BHNRTC:D:F:I:L:U:W:k:r:",
longopts, &option_index)) != -1)
{
switch (c)
{
+ case 'y':
+ xrealloc_and_strcat (&opts, &opts_allocated, " --side-by-side");
+ break;
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
case 'h': case 'i': case 'n': case 'p': case 's': case 't':
- case 'u': case 'w': case 'y':
+ case 'u': case 'w':
case '0': case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9':
case 'B': case 'H': case 'T':
(void) sprintf (tmp, " -%c", (char) c);
- allocate_and_strcat (&opts, &opts_allocated, tmp);
+ xrealloc_and_strcat (&opts, &opts_allocated, tmp);
break;
case 'L':
if (have_rev1_label++)
@@ -246,31 +296,31 @@ diff (argc, argv)
break;
}
- allocate_and_strcat (&opts, &opts_allocated, " -L");
- allocate_and_strcat (&opts, &opts_allocated, optarg);
+ xrealloc_and_strcat (&opts, &opts_allocated, " -L");
+ xrealloc_and_strcat (&opts, &opts_allocated, optarg);
break;
- case 'C': case 'F': case 'I': case 'U': case 'V': case 'W':
+ case 'C': case 'F': case 'I': case 'U': case 'W':
(void) sprintf (tmp, " -%c", (char) c);
- allocate_and_strcat (&opts, &opts_allocated, tmp);
- allocate_and_strcat (&opts, &opts_allocated, optarg);
+ xrealloc_and_strcat (&opts, &opts_allocated, tmp);
+ xrealloc_and_strcat (&opts, &opts_allocated, optarg);
break;
case 131:
/* --ifdef. */
- allocate_and_strcat (&opts, &opts_allocated, " --ifdef=");
- allocate_and_strcat (&opts, &opts_allocated, optarg);
+ xrealloc_and_strcat (&opts, &opts_allocated, " --ifdef=");
+ xrealloc_and_strcat (&opts, &opts_allocated, optarg);
break;
case 129: case 130: case 132: case 133: case 134:
case 135: case 136: case 137: case 138: case 139: case 140:
- case 141: case 142: case 143: case 144: case 145: case 146:
- allocate_and_strcat (&opts, &opts_allocated, " --");
- allocate_and_strcat (&opts, &opts_allocated,
+ case 141: case 142: case 143: case 145: case 146:
+ xrealloc_and_strcat (&opts, &opts_allocated, " --");
+ xrealloc_and_strcat (&opts, &opts_allocated,
longopts[option_index].name);
if (longopts[option_index].has_arg == 1
|| (longopts[option_index].has_arg == 2
&& optarg != NULL))
{
- allocate_and_strcat (&opts, &opts_allocated, "=");
- allocate_and_strcat (&opts, &opts_allocated, optarg);
+ xrealloc_and_strcat (&opts, &opts_allocated, "=");
+ xrealloc_and_strcat (&opts, &opts_allocated, optarg);
}
break;
case 'R':
@@ -437,7 +487,7 @@ diff_fileproc (callerdat, finfo)
(vers->vn_rcs == NULL
? NULL
: RCS_branch_head (vers->srcfile, vers->vn_rcs));
- exists = head != NULL;
+ exists = head != NULL && !RCS_isdead(vers->srcfile, head);
if (head != NULL)
free (head);
}
@@ -447,7 +497,7 @@ diff_fileproc (callerdat, finfo)
xvers = Version_TS (finfo, NULL, diff_rev1, diff_date1,
1, 0);
- exists = xvers->vn_rcs != NULL;
+ exists = xvers->vn_rcs != NULL && !RCS_isdead(xvers->srcfile, xvers->vn_rcs);
freevers_ts (&xvers);
}
if (exists)
diff --git a/contrib/cvs/src/error.h b/contrib/cvs/src/error.h
index c7268cea7bc6..1c8471d54ada 100644
--- a/contrib/cvs/src/error.h
+++ b/contrib/cvs/src/error.h
@@ -32,8 +32,9 @@
/* The __-protected variants of `format' and `printf' attributes
are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
-# define __format__ format
-# define __printf__ printf
+# define __format__ format
+# define __printf__ printf
+# define __noreturn__ noreturn
# endif
#endif
@@ -46,7 +47,11 @@ void error ();
/* Exit due to an error. Similar to error (1, 0, "message"), but call
it in the case where the message has already been printed. */
-extern void error_exit PROTO ((void));
+#ifdef __STDC__
+void error_exit (void) __attribute__ ((__noreturn__));
+#else
+void error_exit ();
+#endif
/* If non-zero, error will use the CVS protocol to report error
messages. This will only be set in the CVS server parent process;
diff --git a/contrib/cvs/src/filesubr.c b/contrib/cvs/src/filesubr.c
index 28575a352692..5b9c076d35e5 100644
--- a/contrib/cvs/src/filesubr.c
+++ b/contrib/cvs/src/filesubr.c
@@ -331,8 +331,7 @@ mkdir_if_needed (name)
{
if (mkdir (name, 0777) < 0)
{
- if (!(errno == EEXIST
- || (errno == EACCES && isdir (name))))
+ if (errno != EEXIST && !isdir (name))
error (1, errno, "cannot make directory %s", name);
return 1;
}
diff --git a/contrib/cvs/src/find_names.c b/contrib/cvs/src/find_names.c
index e34232efdc71..751ac6701801 100644
--- a/contrib/cvs/src/find_names.c
+++ b/contrib/cvs/src/find_names.c
@@ -24,8 +24,6 @@ static int find_rcs PROTO((char *dir, List * list));
static int add_subdir_proc PROTO((Node *, void *));
static int register_subdir_proc PROTO((Node *, void *));
-static List *filelist;
-
/*
* add the key from entry on entries list to the files list
*/
@@ -37,6 +35,7 @@ add_entries_proc (node, closure)
{
Entnode *entnode;
Node *fnode;
+ List *filelist = (List *) closure;
entnode = (Entnode *) node->data;
if (entnode->type != ENT_FILE)
@@ -66,7 +65,7 @@ Find_Names (repository, which, aflag, optentries)
List *files;
/* make a list for the files */
- files = filelist = getlist ();
+ files = getlist ();
/* look at entries (if necessary) */
if (which & W_LOCAL)
@@ -76,7 +75,7 @@ Find_Names (repository, which, aflag, optentries)
if (entries != NULL)
{
/* walk the entries file adding elements to the files list */
- (void) walklist (entries, add_entries_proc, NULL);
+ (void) walklist (entries, add_entries_proc, files);
/* if our caller wanted the entries list, return it; else free it */
if (optentries != NULL)
diff --git a/contrib/cvs/src/history.c b/contrib/cvs/src/history.c
index 4979398c19cf..40b5e1440985 100644
--- a/contrib/cvs/src/history.c
+++ b/contrib/cvs/src/history.c
@@ -770,11 +770,8 @@ history_write (type, update_dir, revs, name, repository)
if (save_cwd (&cwd))
error_exit ();
- if ( CVS_CHDIR (pwdir) < 0)
- error (1, errno, "can't chdir(%s)", pwdir);
- homedir = xgetwd ();
- if (homedir == NULL)
- error (1, errno, "can't getwd in %s", pwdir);
+ if ( CVS_CHDIR (pwdir) < 0 || (homedir = xgetwd ()) == NULL)
+ homedir = pwdir;
if (restore_cwd (&cwd, NULL))
error_exit ();
@@ -786,7 +783,9 @@ history_write (type, update_dir, revs, name, repository)
PrCurDir += i; /* Point to '/' separator */
tilde = "~";
}
- free (homedir);
+
+ if (homedir != pwdir)
+ free (homedir);
}
}
}
diff --git a/contrib/cvs/src/import.c b/contrib/cvs/src/import.c
index 6bd6abdf2dde..4d8ddce7f10e 100644
--- a/contrib/cvs/src/import.c
+++ b/contrib/cvs/src/import.c
@@ -218,10 +218,14 @@ import (argc, argv)
if (use_editor)
{
- do_editor ((char *) NULL, &message, repository,
+ do_editor ((char *) NULL, &message,
+#ifdef CLIENT_SUPPORT
+ current_parsed_root->isremote ? (char *) NULL :
+#endif
+ repository,
(List *) NULL);
}
- do_verify (message, repository);
+ do_verify (&message, repository);
msglen = message == NULL ? 0 : strlen (message);
if (msglen == 0 || message[msglen - 1] != '\n')
{
@@ -278,7 +282,7 @@ import (argc, argv)
}
#endif
- if (!safe_location ())
+ if (!safe_location ( NULL ))
{
error (1, 0, "attempt to import the repository");
}
@@ -311,7 +315,6 @@ import (argc, argv)
if (!really_quiet)
{
char buf[20];
- char *buf2;
cvs_output_tagged ("+importmergecmd", NULL);
cvs_output_tagged ("newline", NULL);
@@ -331,12 +334,9 @@ import (argc, argv)
cvs_output_tagged ("text", CVSroot_cmdline);
}
cvs_output_tagged ("text", " checkout -j");
- buf2 = xmalloc (strlen (argv[1]) + 20);
- sprintf (buf2, "%s:yesterday", argv[1]);
- cvs_output_tagged ("mergetag1", buf2);
- free (buf2);
+ cvs_output_tagged ("mergetag1", "<prev_rel_tag>");
cvs_output_tagged ("text", " -j");
- cvs_output_tagged ("mergetag2", argv[1]);
+ cvs_output_tagged ("mergetag2", argv[2]);
cvs_output_tagged ("text", " ");
cvs_output_tagged ("repository", argv[0]);
cvs_output_tagged ("newline", NULL);
@@ -618,6 +618,7 @@ update_rcs_file (message, vfile, vtag, targc, targv, inattic)
Vers_TS *vers;
int letter;
char *tocvsPath;
+ char *expand;
struct file_info finfo;
memset (&finfo, 0, sizeof finfo);
@@ -647,7 +648,9 @@ update_rcs_file (message, vfile, vtag, targc, targv, inattic)
tocvsPath = wrap_tocvs_process_file (vfile);
/* FIXME: Why don't we pass tocvsPath to RCS_cmp_file if it is
not NULL? */
- different = RCS_cmp_file (vers->srcfile, vers->vn_rcs, "-ko", vfile);
+ expand = vers->srcfile->expand != NULL &&
+ vers->srcfile->expand[0] == 'b' ? "-kb" : "-ko";
+ different = RCS_cmp_file (vers->srcfile, vers->vn_rcs, expand, vfile);
if (tocvsPath)
if (unlink_file_dir (tocvsPath) < 0)
error (0, errno, "cannot remove %s", tocvsPath);
@@ -1151,7 +1154,7 @@ add_rcs_file (message, rcs, user, add_vhead, key_opt,
goto write_error;
}
- if (local_opt != NULL)
+ if (local_opt != NULL && strcmp (local_opt, "kv") != 0)
{
if (fprintf (fprcs, "expand @%s@;\012", local_opt) < 0)
{
diff --git a/contrib/cvs/src/lock.c b/contrib/cvs/src/lock.c
index c05b83ec1b47..088f2062e763 100644
--- a/contrib/cvs/src/lock.c
+++ b/contrib/cvs/src/lock.c
@@ -291,6 +291,9 @@ Lock_Cleanup ()
/* FIXME-reentrancy: the workaround isn't reentrant. */
static int in_lock_cleanup = 0;
+ if (trace)
+ (void) fprintf (stderr, "%s-> Lock_Cleanup()\n", CLIENT_SERVER_STR);
+
if (in_lock_cleanup)
return;
in_lock_cleanup = 1;
@@ -396,6 +399,10 @@ Reader_Lock (xrepository)
FILE *fp;
char *tmp;
+ if (trace)
+ (void) fprintf (stderr, "%s-> Reader_Lock(%s)\n", CLIENT_SERVER_STR,
+ xrepository);
+
if (noexec)
return (0);
@@ -554,6 +561,10 @@ write_lock (lock)
FILE *fp;
char *tmp;
+ if (trace)
+ (void) fprintf (stderr, "%s-> write_lock(%s)\n",
+ CLIENT_SERVER_STR, lock->repository);
+
if (writelock == NULL)
{
writelock = xmalloc (strlen (hostname) + sizeof (CVSWFL) + 40);
diff --git a/contrib/cvs/src/log.c b/contrib/cvs/src/log.c
index 1930ae549932..ad780bb56ae8 100644
--- a/contrib/cvs/src/log.c
+++ b/contrib/cvs/src/log.c
@@ -84,6 +84,9 @@ struct log_data
/* Nonzero if the -b option was seen, meaning that only revisions
on the default branch should be printed. */
int default_branch;
+ /* Nonzero if the -S option was seen, meaning that the header/name
+ should be suppressed if no revisions are selected. */
+ int sup_header;
/* If not NULL, the value given for the -r option, which lists
sets of revisions to be printed. */
struct option_revlist *revlist;
@@ -150,18 +153,20 @@ static const char *const log_usage[] =
"\t-h\tOnly print header.\n",
"\t-t\tOnly print header and descriptive text.\n",
"\t-N\tDo not list tags.\n",
+ "\t-S\tDo not print name/header if no revisions selected.\n",
"\t-b\tOnly list revisions on the default branch.\n",
- "\t-r[revisions]\tSpecify revision(s)s to list.\n",
+ "\t-r[revisions]\tA comma-separated list of revisions to print:\n",
"\t rev1:rev2 Between rev1 and rev2, including rev1 and rev2.\n",
- "\t rev1::rev2 Between rev1 and rev2, excluding rev1 and rev2.\n",
+ "\t rev1::rev2 Between rev1 and rev2, excluding rev1.\n",
"\t rev: rev and following revisions on the same branch.\n",
"\t rev:: After rev on the same branch.\n",
"\t :rev rev and previous revisions on the same branch.\n",
- "\t ::rev Before rev on the same branch.\n",
+ "\t ::rev rev and previous revisions on the same branch.\n",
"\t rev Just rev.\n",
"\t branch All revisions on the branch.\n",
"\t branch. The last revision on the branch.\n",
- "\t-d dates\tSpecify dates (D1<D2 for range, D for latest before).\n",
+ "\t-d dates\tA semicolon-separated list of dates\n",
+ "\t \t(D1<D2 for range, D for latest before).\n",
"\t-s states\tOnly list revisions with specified states.\n",
"\t-w[logins]\tOnly list revisions checked in by specified logins.\n",
"(Specify the --help global option for a list of other help options)\n",
@@ -228,7 +233,7 @@ cvslog (argc, argv)
prl = &log_data.revlist;
optind = 0;
- while ((c = getopt (argc, argv, "+bd:hlNRr::s:tw::")) != -1)
+ while ((c = getopt (argc, argv, "+bd:hlNSRr::s:tw::")) != -1)
{
switch (c)
{
@@ -247,6 +252,9 @@ cvslog (argc, argv)
case 'N':
log_data.notags = 1;
break;
+ case 'S':
+ log_data.sup_header = 1;
+ break;
case 'R':
log_data.nameonly = 1;
break;
@@ -336,6 +344,8 @@ cvslog (argc, argv)
send_arg("-l");
if (log_data.notags)
send_arg("-N");
+ if (log_data.sup_header)
+ send_arg("-S");
if (log_data.nameonly)
send_arg("-R");
if (log_data.long_header)
@@ -405,14 +415,14 @@ cvslog (argc, argv)
for (i = 0; i < argc; i++)
{
err += do_module (db, argv[i], MISC, "Logging", rlog_proc,
- (char *) NULL, 0, 0, 0, 0, (char *) NULL);
+ (char *) NULL, 0, local, 0, 0, (char *) NULL);
}
close_module (db);
}
else
{
err = rlog_proc (argc + 1, argv - 1, (char *) NULL,
- (char *) NULL, (char *) NULL, 0, 0, (char *) NULL,
+ (char *) NULL, (char *) NULL, 0, local, (char *) NULL,
(char *) NULL);
}
@@ -782,6 +792,7 @@ log_fileproc (callerdat, finfo)
{
struct log_data *log_data = (struct log_data *) callerdat;
Node *p;
+ int selrev = -1;
RCSNode *rcsfile;
char buf[50];
struct revlist *revlist;
@@ -811,6 +822,38 @@ log_fileproc (callerdat, finfo)
return (1);
}
+ if (log_data->sup_header || !log_data->nameonly)
+ {
+
+ /* We will need all the information in the RCS file. */
+ RCS_fully_parse (rcsfile);
+
+ /* Turn any symbolic revisions in the revision list into numeric
+ revisions. */
+ revlist = log_expand_revlist (rcsfile, log_data->revlist,
+ log_data->default_branch);
+ if (log_data->sup_header || (!log_data->header && !log_data->long_header))
+ {
+ log_data_and_rcs.log_data = log_data;
+ log_data_and_rcs.revlist = revlist;
+ log_data_and_rcs.rcs = rcsfile;
+
+ /* If any single dates were specified, we need to identify the
+ revisions they select. Each one selects the single
+ revision, which is otherwise selected, of that date or
+ earlier. The log_fix_singledate routine will fill in the
+ start date for each specific revision. */
+ if (log_data->singledatelist != NULL)
+ walklist (rcsfile->versions, log_fix_singledate,
+ (void *) &log_data_and_rcs);
+
+ selrev = walklist (rcsfile->versions, log_count_print,
+ (void *) &log_data_and_rcs);
+ if (log_data->sup_header && selrev == 0) return 0;
+ }
+
+ }
+
if (log_data->nameonly)
{
cvs_output (rcsfile->path, 0);
@@ -818,14 +861,6 @@ log_fileproc (callerdat, finfo)
return 0;
}
- /* We will need all the information in the RCS file. */
- RCS_fully_parse (rcsfile);
-
- /* Turn any symbolic revisions in the revision list into numeric
- revisions. */
- revlist = log_expand_revlist (rcsfile, log_data->revlist,
- log_data->default_branch);
-
/* The output here is intended to be exactly compatible with the
output of rlog. I'm not sure whether this code should be here
or in rcs.c; I put it here because it is specific to the log
@@ -907,25 +942,10 @@ log_fileproc (callerdat, finfo)
sprintf (buf, "%d", walklist (rcsfile->versions, log_count, NULL));
cvs_output (buf, 0);
- if (! log_data->header && ! log_data->long_header)
+ if (selrev >= 0)
{
cvs_output (";\tselected revisions: ", 0);
-
- log_data_and_rcs.log_data = log_data;
- log_data_and_rcs.revlist = revlist;
- log_data_and_rcs.rcs = rcsfile;
-
- /* If any single dates were specified, we need to identify the
- revisions they select. Each one selects the single
- revision, which is otherwise selected, of that date or
- earlier. The log_fix_singledate routine will fill in the
- start date for each specific revision. */
- if (log_data->singledatelist != NULL)
- walklist (rcsfile->versions, log_fix_singledate,
- (void *) &log_data_and_rcs);
-
- sprintf (buf, "%d", walklist (rcsfile->versions, log_count_print,
- (void *) &log_data_and_rcs));
+ sprintf (buf, "%d", selrev);
cvs_output (buf, 0);
}
@@ -1029,24 +1049,25 @@ log_expand_revlist (rcs, revlist, default_branch)
{
branch = RCS_whatbranch (rcs, r->first);
if (branch == NULL)
+ nr->first = NULL;
+ else
{
- error (0, 0, "warning: `%s' is not a branch in `%s'",
- r->first, rcs->path);
- free (nr);
- continue;
+ nr->first = RCS_getbranch (rcs, branch, 1);
+ free (branch);
}
- nr->first = RCS_getbranch (rcs, branch, 1);
- free (branch);
}
if (nr->first == NULL)
{
- error (0, 0, "warning: no revision `%s' in `%s'",
+ error (0, 0, "warning: no branch `%s' in `%s'",
r->first, rcs->path);
- free (nr);
- continue;
+ nr->last = NULL;
+ nr->fields = 0;
+ }
+ else
+ {
+ nr->last = xstrdup (nr->first);
+ nr->fields = numdots (nr->first) + 1;
}
- nr->last = xstrdup (nr->first);
- nr->fields = numdots (nr->first) + 1;
}
else
{
@@ -1062,12 +1083,11 @@ log_expand_revlist (rcs, revlist, default_branch)
{
error (0, 0, "warning: no revision `%s' in `%s'",
r->first, rcs->path);
- free (nr);
- continue;
}
}
- if (r->last == r->first)
+ if (r->last == r->first || (r->last != NULL && r->first != NULL &&
+ strcmp (r->last, r->first) == 0))
nr->last = xstrdup (nr->first);
else if (r->last == NULL || isdigit ((unsigned char) r->last[0]))
nr->last = xstrdup (r->last);
@@ -1081,10 +1101,6 @@ log_expand_revlist (rcs, revlist, default_branch)
{
error (0, 0, "warning: no revision `%s' in `%s'",
r->last, rcs->path);
- if (nr->first != NULL)
- free (nr->first);
- free (nr);
- continue;
}
}
@@ -1092,7 +1108,7 @@ log_expand_revlist (rcs, revlist, default_branch)
does. This code is a bit cryptic for my tastes, but
keeping the same implementation as rlog ensures a
certain degree of compatibility. */
- if (r->first == NULL)
+ if (r->first == NULL && nr->last != NULL)
{
nr->fields = numdots (nr->last) + 1;
if (nr->fields < 2)
@@ -1106,7 +1122,7 @@ log_expand_revlist (rcs, revlist, default_branch)
strcpy (cp, ".0");
}
}
- else if (r->last == NULL)
+ else if (r->last == NULL && nr->first != NULL)
{
nr->fields = numdots (nr->first) + 1;
nr->last = xstrdup (nr->first);
@@ -1120,7 +1136,7 @@ log_expand_revlist (rcs, revlist, default_branch)
*cp = '\0';
}
}
- else
+ else if (nr->first != NULL && nr->last != NULL)
{
nr->fields = numdots (nr->first) + 1;
if (nr->fields != numdots (nr->last) + 1
@@ -1132,11 +1148,12 @@ log_expand_revlist (rcs, revlist, default_branch)
"invalid branch or revision pair %s:%s in `%s'",
r->first, r->last, rcs->path);
free (nr->first);
+ nr->first = NULL;
free (nr->last);
- free (nr);
- continue;
+ nr->last = NULL;
+ nr->fields = 0;
}
- if (version_compare (nr->first, nr->last, nr->fields) > 0)
+ else if (version_compare (nr->first, nr->last, nr->fields) > 0)
{
char *tmp;
@@ -1145,6 +1162,8 @@ log_expand_revlist (rcs, revlist, default_branch)
nr->last = tmp;
}
}
+ else
+ nr->fields = 0;
}
nr->next = NULL;
@@ -1288,11 +1307,9 @@ log_version_requested (log_data, revlist, rcs, vnode)
for (r = revlist; r != NULL; r = r->next)
{
if (vfields == r->fields + (r->fields & 1) &&
- (r->inclusive ?
- version_compare (v, r->first, r->fields) >= 0
- && version_compare (v, r->last, r->fields) <= 0 :
- version_compare (v, r->first, r->fields) > 0
- && version_compare (v, r->last, r->fields) < 0))
+ (r->inclusive ? version_compare (v, r->first, r->fields) >= 0 :
+ version_compare (v, r->first, r->fields) > 0)
+ && version_compare (v, r->last, r->fields) <= 0)
{
return 1;
}
diff --git a/contrib/cvs/src/login.c b/contrib/cvs/src/login.c
index 928973797fbf..b23d76745ac7 100644
--- a/contrib/cvs/src/login.c
+++ b/contrib/cvs/src/login.c
@@ -322,8 +322,8 @@ password_entry_operation (operation, root, newpassword)
fp = CVS_FOPEN (passfile, "r");
if (fp == NULL)
{
- error (0, errno, "failed to open %s for reading", passfile);
- goto error_exit;
+ error (0, errno, "warning: failed to open %s for reading", passfile);
+ goto process;
}
cvsroot_canonical = normalize_cvsroot (root);
@@ -361,6 +361,8 @@ password_entry_operation (operation, root, newpassword)
password = xstrdup (password);
}
+process:
+
/* might as well return now */
if (operation == password_entry_lookup)
goto out;
@@ -550,6 +552,12 @@ login (argc, argv)
{
char *tmp;
tmp = GETPASS ("CVS password: ");
+ /* Must deal with a NULL return value here. I haven't managed to
+ * disconnect the CVS process from the tty and force a NULL return
+ * in sanity.sh, but the Linux version of getpass is documented
+ * to return NULL when it can't open /dev/tty...
+ */
+ if (!tmp) error (1, errno, "login: Failed to read password.");
typed_password = scramble (tmp);
memset (tmp, 0, strlen (tmp));
}
@@ -560,7 +568,7 @@ login (argc, argv)
* will get zeroed by connect_to_server(). */
cvs_password = xstrdup (typed_password);
- connect_to_pserver (NULL, NULL, 1, 0);
+ connect_to_pserver (current_parsed_root, NULL, NULL, 1, 0);
password_entry_operation (password_entry_add, current_parsed_root, typed_password);
diff --git a/contrib/cvs/src/logmsg.c b/contrib/cvs/src/logmsg.c
index d2ef806d216e..f9d47cdd8785 100644
--- a/contrib/cvs/src/logmsg.c
+++ b/contrib/cvs/src/logmsg.c
@@ -6,6 +6,8 @@
* specified in the README file that comes with the CVS source distribution.
*/
+#include <assert.h>
+
#include "cvs.h"
#include "getline.h"
@@ -27,6 +29,15 @@ static char *editinfo_editor;
static char *verifymsg_script;
static Ctype type;
+/*
+ * Should the logmsg be re-read during the do_verify phase?
+ * RereadLogAfterVerify=no|stat|yes
+ * LOGMSG_REREAD_NEVER - never re-read the logmsg
+ * LOGMSG_REREAD_STAT - re-read the logmsg only if it has changed
+ * LOGMSG_REREAD_ALWAYS - always re-read the logmsg
+ */
+int RereadLogAfterVerify = LOGMSG_REREAD_ALWAYS;
+
/*
* Puts a standard header on the output which is either being prepared for an
* editor session, or being sent to a logfile program. The modified, added,
@@ -166,7 +177,8 @@ fmt_proc (p, closure)
* stripped and the log message is stored in the "message" argument.
*
* If REPOSITORY is non-NULL, process rcsinfo for that repository; if it
- * is NULL, use the CVSADM_TEMPLATE file instead.
+ * is NULL, use the CVSADM_TEMPLATE file instead. REPOSITORY should be
+ * NULL when running in client mode.
*/
void
do_editor (dir, messagep, repository, changes)
@@ -183,6 +195,9 @@ do_editor (dir, messagep, repository, changes)
struct stat pre_stbuf, post_stbuf;
int retcode = 0;
+ assert (current_parsed_root->isremote && !repository
+ || !current_parsed_root->isremote && repository);
+
if (noexec || reuse_log_message)
return;
@@ -305,7 +320,7 @@ do_editor (dir, messagep, repository, changes)
/* On NT, we might read less than st_size bytes, but we won't
read more. So this works. */
*messagep = (char *) xmalloc (post_stbuf.st_size + 1);
- *messagep[0] = '\0';
+ (*messagep)[0] = '\0';
}
line = NULL;
@@ -338,8 +353,14 @@ do_editor (dir, messagep, repository, changes)
if (pre_stbuf.st_mtime == post_stbuf.st_mtime ||
*messagep == NULL ||
+ (*messagep)[0] == '\0' ||
strcmp (*messagep, "\n") == 0)
{
+ if (*messagep)
+ {
+ free (*messagep);
+ *messagep = NULL;
+ }
for (;;)
{
(void) printf ("\nLog message unchanged or not specified\n");
@@ -387,14 +408,16 @@ do_editor (dir, messagep, repository, changes)
independant of the running of an editor for getting a message.
*/
void
-do_verify (message, repository)
- char *message;
+do_verify (messagep, repository)
+ char **messagep;
char *repository;
{
FILE *fp;
char *fname;
int retcode = 0;
+ struct stat pre_stbuf, post_stbuf;
+
#ifdef CLIENT_SUPPORT
if (current_parsed_root->isremote)
/* The verification will happen on the server. */
@@ -408,7 +431,7 @@ do_verify (message, repository)
/* If there's no message, then we have nothing to verify. Can this
case happen? And if so why would we print a message? */
- if (message == NULL)
+ if (*messagep == NULL)
{
cvs_output ("No message to verify\n", 0);
return;
@@ -419,46 +442,122 @@ do_verify (message, repository)
if ((fp = cvs_temp_file (&fname)) == NULL)
error (1, errno, "cannot create temporary file %s", fname);
- else
+
+ fprintf (fp, "%s", *messagep);
+ if ((*messagep)[0] == '\0' ||
+ (*messagep)[strlen (*messagep) - 1] != '\n')
+ (void) fprintf (fp, "%s", "\n");
+ if (fclose (fp) == EOF)
+ error (1, errno, "%s", fname);
+
+ if (RereadLogAfterVerify == LOGMSG_REREAD_STAT)
{
- fprintf (fp, "%s", message);
- if ((message)[0] == '\0' ||
- (message)[strlen (message) - 1] != '\n')
- (void) fprintf (fp, "%s", "\n");
- if (fclose (fp) == EOF)
- error (1, errno, "%s", fname);
+ /* Remember the status of the temp file for later */
+ if ( CVS_STAT (fname, &pre_stbuf) != 0 )
+ error (1, errno, "cannot stat temp file %s", fname);
+
+ /*
+ * See if we need to sleep before running the verification
+ * script to avoid time-stamp races.
+ */
+ sleep_past (pre_stbuf.st_mtime);
+ }
- /* Get the name of the verification script to run */
+ /* Get the name of the verification script to run */
- if (repository != NULL)
- (void) Parse_Info (CVSROOTADM_VERIFYMSG, repository,
- verifymsg_proc, 0);
+ if (repository != NULL)
+ (void) Parse_Info (CVSROOTADM_VERIFYMSG, repository,
+ verifymsg_proc, 0);
- /* Run the verification script */
+ /* Run the verification script */
- if (verifymsg_script)
+ if (verifymsg_script)
+ {
+ run_setup (verifymsg_script);
+ run_arg (fname);
+ if ((retcode = run_exec (RUN_TTY, RUN_TTY, RUN_TTY,
+ RUN_NORMAL | RUN_SIGIGNORE)) != 0)
{
- run_setup (verifymsg_script);
- run_arg (fname);
- if ((retcode = run_exec (RUN_TTY, RUN_TTY, RUN_TTY,
- RUN_NORMAL | RUN_SIGIGNORE)) != 0)
- {
- /* Since following error() exits, delete the temp file
- now. */
- if (unlink_file (fname) < 0)
- error (0, errno, "cannot remove %s", fname);
+ /* Since following error() exits, delete the temp file now. */
+ if (unlink_file (fname) < 0)
+ error (0, errno, "cannot remove %s", fname);
- error (1, retcode == -1 ? errno : 0,
- "Message verification failed");
- }
+ error (1, retcode == -1 ? errno : 0,
+ "Message verification failed");
+ }
+ }
+
+ /* Get the mod time and size of the possibly new log message
+ * in always and stat modes.
+ */
+ if (RereadLogAfterVerify == LOGMSG_REREAD_ALWAYS ||
+ RereadLogAfterVerify == LOGMSG_REREAD_STAT)
+ {
+ if ( CVS_STAT (fname, &post_stbuf) != 0 )
+ error (1, errno, "cannot find size of temp file %s", fname);
+ }
+
+ /* And reread the log message in `always' mode or in `stat' mode when it's
+ * changed
+ */
+ if (RereadLogAfterVerify == LOGMSG_REREAD_ALWAYS ||
+ (RereadLogAfterVerify == LOGMSG_REREAD_STAT &&
+ (pre_stbuf.st_mtime != post_stbuf.st_mtime ||
+ pre_stbuf.st_size != post_stbuf.st_size)))
+ {
+ /* put the entire message back into the *messagep variable */
+ if ( (fp = open_file (fname, "r")) == NULL )
+ error (1, errno, "cannot open temporary file %s", fname);
+
+ if (*messagep) free (*messagep);
+
+ if (post_stbuf.st_size == 0)
+ *messagep = NULL;
+ else
+ {
+ /* On NT, we might read less than st_size bytes,
+ but we won't read more. So this works. */
+ *messagep = (char *) xmalloc (post_stbuf.st_size + 1);
+ *messagep[0] = '\0';
}
- /* Delete the temp file */
+ if (*messagep)
+ {
+ char *line = NULL;
+ int line_length;
+ size_t line_chars_allocated = 0;
+ char *p = *messagep;
- if (unlink_file (fname) < 0)
- error (0, errno, "cannot remove %s", fname);
- free (fname);
+ while (1)
+ {
+ line_length = getline (&line,
+ &line_chars_allocated,
+ fp);
+ if (line_length == -1)
+ {
+ if (ferror (fp))
+ /* Fail in this case because otherwise we will have no
+ * log message
+ */
+ error (1, errno, "cannot read %s", fname);
+ break;
+ }
+ if (strncmp (line, CVSEDITPREFIX, CVSEDITPREFIXLEN) == 0)
+ continue;
+ (void) strcpy (p, line);
+ p += line_length;
+ }
+ if (line) free (line);
+ }
+ if (fclose (fp) < 0)
+ error (0, errno, "warning: cannot close %s", fname);
}
+
+ /* Delete the temp file */
+
+ if (unlink_file (fname) < 0)
+ error (0, errno, "cannot remove %s", fname);
+ free (fname);
}
/*
diff --git a/contrib/cvs/src/main.c b/contrib/cvs/src/main.c
index 3a21916969c3..6d7be2f01dde 100644
--- a/contrib/cvs/src/main.c
+++ b/contrib/cvs/src/main.c
@@ -152,7 +152,7 @@ static const char *const usg[] =
putting metavariables in uppercase. I don't know whether that
is a good convention or not, but if it changes it would have to
change in all the usage messages. For now, they consistently
- use lowercase, as far as I know. Puncutation is pretty funky,
+ use lowercase, as far as I know. Punctuation is pretty funky,
though. Sometimes they use none, as here. Sometimes they use
single quotes (not the TeX-ish `' stuff), as in --help-options.
Sometimes they use double quotes, as in cvs -H add.
@@ -332,6 +332,8 @@ lookup_command_attribute (cmd_name)
if (strcmp (cmd_name, cm->fullname) == 0)
break;
}
+ if (!cm->fullname)
+ error (1, 0, "unknown command: %s", cmd_name);
return cm->attr;
}
@@ -834,7 +836,7 @@ Copyright (c) 1989-2001 Brian Berliner, david d `zoo' zuhn, \n\
error (0, 0,
"CVSROOT is set but empty! Make sure that the");
error (0, 0,
- "specification of CVSROOT is legal, either via the");
+ "specification of CVSROOT is valid, either via the");
error (0, 0,
"`-d' option, the %s environment variable, or the",
CVSROOT_ENV);
@@ -894,7 +896,7 @@ Copyright (c) 1989-2001 Brian Berliner, david d `zoo' zuhn, \n\
if (current_parsed_root != NULL)
free_cvsroot_t (current_parsed_root);
if ((current_parsed_root = parse_cvsroot (current_root)) == NULL)
- error (1, 0, "Bad CVSROOT.");
+ error (1, 0, "Bad CVSROOT: `%s'.", current_root);
if (trace)
fprintf (stderr, "%s-> main loop with CVSROOT=%s\n",
diff --git a/contrib/cvs/src/mkmodules.c b/contrib/cvs/src/mkmodules.c
index d1f7ac7517af..df6fea11300b 100644
--- a/contrib/cvs/src/mkmodules.c
+++ b/contrib/cvs/src/mkmodules.c
@@ -206,10 +206,12 @@ static const char *const checkoutlist_contents[] = {
static const char *const cvswrappers_contents[] = {
"# This file affects handling of files based on their names.\n",
"#\n",
+#if 0 /* see comments in wrap_add in wrapper.c */
"# The -t/-f options allow one to treat directories of files\n",
"# as a single file, or to transform a file in other ways on\n",
"# its way in and out of CVS.\n",
"#\n",
+#endif
"# The -m option specifies whether CVS attempts to merge files.\n",
"#\n",
"# The -k option specifies keyword expansion (e.g. -kb for binary).\n",
@@ -242,7 +244,7 @@ static const char *const notify_contents[] = {
"# \"ALL\" or \"DEFAULT\" can be used in place of the regular expression.\n",
"#\n",
"# For example:\n",
- "#ALL mail %s -s \"CVS notification\"\n",
+ "#ALL mail -s \"CVS notification\" %s\n",
NULL
};
@@ -297,6 +299,14 @@ static const char *const config_contents[] = {
"# Set `LogHistory' to `all' or `TOFEWGCMAR' to log all transactions to the\n",
"# history file, or a subset as needed (ie `TMAR' logs all write operations)\n",
"#LogHistory=TOFEWGCMAR\n",
+ "\n",
+ "# Set `RereadLogAfterVerify' to `always' (the default) to allow the verifymsg\n",
+ "# script to change the log message. Set it to `stat' to force CVS to verify",
+ "# that the file has changed before reading it (this can take up to an extra\n",
+ "# second per directory being committed, so it is not recommended for large\n",
+ "# repositories. Set it to `never' (the previous CVS behavior) to prevent\n",
+ "# verifymsg scripts from changing the log message.\n",
+ "#RereadLogAfterVerify=always\n",
NULL
};
diff --git a/contrib/cvs/src/modules.c b/contrib/cvs/src/modules.c
index d349530a5f62..b161e947bcb8 100644
--- a/contrib/cvs/src/modules.c
+++ b/contrib/cvs/src/modules.c
@@ -657,19 +657,19 @@ module `%s' is a request for a file in a module which is not a directory",
}
#endif
- /* write out the checkin/update prog files if necessary */
-#ifdef SERVER_SUPPORT
- if (err == 0 && !noexec && m_type == CHECKOUT && server_expanding)
- {
- if (checkin_prog != NULL)
- server_prog (where ? where : mname, checkin_prog, PROG_CHECKIN);
- if (update_prog != NULL)
- server_prog (where ? where : mname, update_prog, PROG_UPDATE);
- }
- else
-#endif
+ /* run/write out the checkin/update prog files if necessary */
if (err == 0 && !noexec && m_type == CHECKOUT && run_module_prog)
{
+#ifdef SERVER_SUPPORT
+ if (server_active) {
+ if (checkin_prog != NULL)
+ server_prog (where ? where : mwhere ? mwhere : mname, checkin_prog, PROG_CHECKIN);
+ if (update_prog != NULL)
+ server_prog (where ? where : mwhere ? mwhere : mname, update_prog, PROG_UPDATE);
+ }
+ else
+ {
+#endif
FILE *fp;
if (checkin_prog != NULL)
@@ -686,6 +686,9 @@ module `%s' is a request for a file in a module which is not a directory",
if (fclose (fp) == EOF)
error (1, errno, "cannot close %s", CVSADM_UPROG);
}
+#ifdef SERVER_SUPPORT
+ }
+#endif
}
/* cd back to where we started */
diff --git a/contrib/cvs/src/myndbm.c b/contrib/cvs/src/myndbm.c
index 7795f6652cbb..600b3aaf75f5 100644
--- a/contrib/cvs/src/myndbm.c
+++ b/contrib/cvs/src/myndbm.c
@@ -19,7 +19,7 @@
#ifdef MY_NDBM
-static void mydbm_load_file PROTO ((FILE *, List *));
+static void mydbm_load_file PROTO ((FILE *, List *, char *));
/* Returns NULL on error in which case errno has been set to indicate
the error. Can also call error() itself. */
@@ -44,7 +44,7 @@ mydbm_open (file, flags, mode)
if (fp != NULL)
{
- mydbm_load_file (fp, db->dbm_list);
+ mydbm_load_file (fp, db->dbm_list, file);
if (fclose (fp) < 0)
error (0, errno, "cannot close %s", file);
}
@@ -195,9 +195,10 @@ mydbm_store (db, key, value, flags)
}
static void
-mydbm_load_file (fp, list)
+mydbm_load_file (fp, list, filename)
FILE *fp;
List *list;
+ char *filename; /* Used in error messages. */
{
char *line = NULL;
size_t line_size;
@@ -206,14 +207,17 @@ mydbm_load_file (fp, list)
char *cp, *vp;
int cont;
int line_length;
+ int line_num;
value_allocated = 1;
value = xmalloc (value_allocated);
cont = 0;
+ line_num=0;
while ((line_length =
getstr (&line, &line_size, fp, '\012', 0, GETLINE_NO_LIMIT)) >= 0)
{
+ line_num++;
if (line_length > 0 && line[line_length - 1] == '\012')
{
/* Strip the newline. */
@@ -280,21 +284,28 @@ mydbm_load_file (fp, list)
kp = vp;
while (*vp && !isspace ((unsigned char) *vp))
vp++;
- *vp++ = '\0'; /* NULL terminate the key */
+ if (*vp)
+ *vp++ = '\0'; /* NULL terminate the key */
p->type = NDBMNODE;
p->key = xstrdup (kp);
while (*vp && isspace ((unsigned char) *vp))
vp++; /* skip whitespace to value */
if (*vp == '\0')
{
- error (0, 0, "warning: NULL value for key `%s'", p->key);
+ if (!really_quiet)
+ error (0, 0,
+ "warning: NULL value for key `%s' at line %d of `%s'",
+ p->key, line_num, filename);
freenode (p);
continue;
}
p->data = xstrdup (vp);
if (addnode (list, p) == -1)
{
- error (0, 0, "duplicate key found for `%s'", p->key);
+ if (!really_quiet)
+ error (0, 0,
+ "duplicate key found for `%s' at line %d of `%s'",
+ p->key, line_num, filename);
freenode (p);
}
}
diff --git a/contrib/cvs/src/parseinfo.c b/contrib/cvs/src/parseinfo.c
index 7efd63835b8c..e0eb3a52e95d 100644
--- a/contrib/cvs/src/parseinfo.c
+++ b/contrib/cvs/src/parseinfo.c
@@ -65,7 +65,12 @@ Parse_Info (infofile, repository, callproc, all)
srepos = Short_Repository (repository);
if (trace)
- (void) fprintf (stderr, " -> ParseInfo(%s, %s, %s)\n",
+ (void) fprintf (stderr, "%s-> Parse_Info (%s, %s, %s)\n",
+#ifdef SERVER_SUPPORT
+ server_active ? "S" : " ",
+#else
+ "",
+#endif
infopath, srepos, all ? "ALL" : "not ALL");
/* search the info file for lines that match */
@@ -384,6 +389,15 @@ warning: this CVS does not support PreservePermissions");
strcpy (logHistory, p);
}
}
+ else if (strcmp (line, "RereadLogAfterVerify") == 0)
+ {
+ if (strcmp (p, "no") == 0 || strcmp (p, "never") == 0)
+ RereadLogAfterVerify = LOGMSG_REREAD_NEVER;
+ else if (strcmp (p, "yes") == 0 || strcmp (p, "always") == 0)
+ RereadLogAfterVerify = LOGMSG_REREAD_ALWAYS;
+ else if (strcmp (p, "stat") == 0)
+ RereadLogAfterVerify = LOGMSG_REREAD_STAT;
+ }
else
{
/* We may be dealing with a keyword which was added in a
diff --git a/contrib/cvs/src/patch.c b/contrib/cvs/src/patch.c
index 5a208776abc4..8852f3d3e0ab 100644
--- a/contrib/cvs/src/patch.c
+++ b/contrib/cvs/src/patch.c
@@ -28,7 +28,6 @@ static int patch_proc PROTO((int argc, char **argv, char *xwhere,
static int force_tag_match = 1;
static int patch_short = 0;
static int toptwo_diffs = 0;
-static int local = 0;
static char *options = NULL;
static char *rev1 = NULL;
static int rev1_validated = 0;
@@ -65,6 +64,7 @@ patch (argc, argv)
char **argv;
{
register int i;
+ int local = 0;
int c;
int err = 0;
DBM *db;
@@ -343,19 +343,19 @@ patch_proc (argc, argv, xwhere, mwhere, mfile, shorten, local_specified,
if (rev1 != NULL && !rev1_validated)
{
- tag_check_valid (rev1, argc - 1, argv + 1, local, 0, NULL);
+ tag_check_valid (rev1, argc - 1, argv + 1, local_specified, 0, NULL);
rev1_validated = 1;
}
if (rev2 != NULL && !rev2_validated)
{
- tag_check_valid (rev2, argc - 1, argv + 1, local, 0, NULL);
+ tag_check_valid (rev2, argc - 1, argv + 1, local_specified, 0, NULL);
rev2_validated = 1;
}
/* start the recursion processor */
err = start_recursion (patch_fileproc, (FILESDONEPROC) NULL, patch_dirproc,
(DIRLEAVEPROC) NULL, NULL,
- argc - 1, argv + 1, local,
+ argc - 1, argv + 1, local_specified,
which, 0, 1, where, 1);
free (where);
@@ -432,7 +432,7 @@ patch_fileproc (callerdat, finfo)
if (!date1)
date1 = xmalloc (MAXDATELEN);
*date1 = '\0';
- if (RCS_getrevtime (rcsfile, vers_head, date1, 1) == -1)
+ if (RCS_getrevtime (rcsfile, vers_head, date1, 1) == (time_t)-1)
{
if (!really_quiet)
error (0, 0, "cannot find date in rcs file %s revision %s",
diff --git a/contrib/cvs/src/rcs.c b/contrib/cvs/src/rcs.c
index 385eaf268dbf..f087187ca07e 100644
--- a/contrib/cvs/src/rcs.c
+++ b/contrib/cvs/src/rcs.c
@@ -13,6 +13,14 @@
#include "edit.h"
#include "hardlink.h"
+/* These need to be source after cvs.h or HAVE_MMAP won't be set... */
+#ifdef HAVE_MMAP
+# include <sys/mman.h>
+# ifndef HAVE_GETPAGESIZE
+# include "getpagesize.h"
+# endif
+#endif
+
int preserve_perms = 0;
/* The RCS -k options, and a set of enums that must match the array.
@@ -58,8 +66,10 @@ static void rcsbuf_close PROTO ((struct rcsbuffer *));
static int rcsbuf_getkey PROTO ((struct rcsbuffer *, char **keyp,
char **valp));
static int rcsbuf_getrevnum PROTO ((struct rcsbuffer *, char **revp));
+#ifndef HAVE_MMAP
static char *rcsbuf_fill PROTO ((struct rcsbuffer *, char *ptr, char **keyp,
char **valp));
+#endif
static int rcsbuf_valcmp PROTO ((struct rcsbuffer *));
static char *rcsbuf_valcopy PROTO ((struct rcsbuffer *, char *val, int polish,
size_t *lenp));
@@ -730,8 +740,8 @@ RCS_fully_parse (rcs)
vers = findnode (rcs->versions, key);
if (vers == NULL)
error (1, 0,
- "mismatch in rcs file %s between deltas and deltatexts",
- rcs->path);
+ "mismatch in rcs file %s between deltas and deltatexts (%s)",
+ rcs->path, key);
vnode = (RCSVers *) vers->data;
@@ -789,12 +799,12 @@ unrecognized operation '\\x%x' in %s",
op, rcs->path);
(void) strtoul (cp, (char **) &cp, 10);
if (*cp++ != ' ')
- error (1, 0, "space expected in %s",
- rcs->path);
+ error (1, 0, "space expected in %s revision %s",
+ rcs->path, vnode->version);
count = strtoul (cp, (char **) &cp, 10);
if (*cp++ != '\012')
- error (1, 0, "linefeed expected in %s",
- rcs->path);
+ error (1, 0, "linefeed expected in %s revision %s",
+ rcs->path, vnode->version);
if (op == 'd')
del += count;
@@ -809,8 +819,8 @@ unrecognized operation '\\x%x' in %s",
{
if (count != 1)
error (1, 0, "\
-invalid rcs file %s: premature end of value",
- rcs->path);
+premature end of value in %s revision %s",
+ rcs->path, vnode->version);
else
break;
}
@@ -987,14 +997,45 @@ rcsbuf_open (rcsbuf, fp, filename, pos)
error (1, 0, "rcsbuf_open: internal error");
rcsbuf_inuse = 1;
+#ifdef HAVE_MMAP
+ {
+ /* When we have mmap, it is much more efficient to let the system do the
+ * buffering and caching for us
+ */
+ struct stat fs;
+ size_t mmap_off = 0;
+
+ if ( fstat (fileno(fp), &fs) < 0 )
+ error ( 1, errno, "Could not stat RCS archive %s for mapping", filename );
+
+ if (pos)
+ {
+ size_t ps = getpagesize ();
+ mmap_off = ( pos / ps ) * ps;
+ }
+
+ /* Map private here since this particular buffer is read only */
+ rcsbuf_buffer = mmap ( NULL, fs.st_size - mmap_off,
+ PROT_READ | PROT_WRITE,
+ MAP_PRIVATE, fileno(fp), mmap_off );
+ if ( rcsbuf_buffer == NULL || rcsbuf_buffer == MAP_FAILED )
+ error ( 1, errno, "Could not map memory to RCS archive %s", filename );
+
+ rcsbuf_buffer_size = fs.st_size - mmap_off;
+ rcsbuf->ptr = rcsbuf_buffer + pos - mmap_off;
+ rcsbuf->ptrend = rcsbuf_buffer + fs.st_size - mmap_off;
+ rcsbuf->pos = mmap_off;
+ }
+#else /* HAVE_MMAP */
if (rcsbuf_buffer_size < RCSBUF_BUFSIZE)
expand_string (&rcsbuf_buffer, &rcsbuf_buffer_size, RCSBUF_BUFSIZE);
rcsbuf->ptr = rcsbuf_buffer;
rcsbuf->ptrend = rcsbuf_buffer;
+ rcsbuf->pos = pos;
+#endif /* HAVE_MMAP */
rcsbuf->fp = fp;
rcsbuf->filename = filename;
- rcsbuf->pos = pos;
rcsbuf->vlen = 0;
rcsbuf->at_string = 0;
rcsbuf->embedded_at = 0;
@@ -1008,6 +1049,9 @@ rcsbuf_close (rcsbuf)
{
if (! rcsbuf_inuse)
error (1, 0, "rcsbuf_close: internal error");
+#ifdef HAVE_MMAP
+ munmap ( rcsbuf_buffer, rcsbuf_buffer_size );
+#endif
rcsbuf_inuse = 0;
}
@@ -1048,9 +1092,9 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
ptrend = rcsbuf->ptrend;
/* Sanity check. */
- if (ptr < rcsbuf_buffer || ptr > rcsbuf_buffer + rcsbuf_buffer_size)
- abort ();
+ assert (ptr >= rcsbuf_buffer && ptr < rcsbuf_buffer + rcsbuf_buffer_size);
+#ifndef HAVE_MMAP
/* If the pointer is more than RCSBUF_BUFSIZE bytes into the
buffer, move back to the start of the buffer. This keeps the
buffer from growing indefinitely. */
@@ -1062,8 +1106,7 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
/* Sanity check: we don't read more than RCSBUF_BUFSIZE bytes
at a time, so we can't have more bytes than that past PTR. */
- if (len > RCSBUF_BUFSIZE)
- abort ();
+ assert (len <= RCSBUF_BUFSIZE);
/* Update the POS field, which holds the file offset of the
first byte in the RCSBUF_BUFFER buffer. */
@@ -1074,18 +1117,23 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
ptrend = ptr + len;
rcsbuf->ptrend = ptrend;
}
+#endif /* ndef HAVE_MMAP */
/* Skip leading whitespace. */
while (1)
{
if (ptr >= ptrend)
+#ifndef HAVE_MMAP
{
ptr = rcsbuf_fill (rcsbuf, ptr, (char **) NULL, (char **) NULL);
if (ptr == NULL)
+#endif
return 0;
+#ifndef HAVE_MMAP
ptrend = rcsbuf->ptrend;
}
+#endif
c = *ptr;
if (! my_whitespace (c))
@@ -1104,13 +1152,17 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
{
++ptr;
if (ptr >= ptrend)
+#ifndef HAVE_MMAP
{
ptr = rcsbuf_fill (rcsbuf, ptr, keyp, (char **) NULL);
if (ptr == NULL)
+#endif
error (1, 0, "EOF in key in RCS file %s",
rcsbuf->filename);
+#ifndef HAVE_MMAP
ptrend = rcsbuf->ptrend;
}
+#endif
c = *ptr;
if (c == ';' || my_whitespace (c))
break;
@@ -1139,13 +1191,17 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
while (1)
{
if (ptr >= ptrend)
+#ifndef HAVE_MMAP
{
ptr = rcsbuf_fill (rcsbuf, ptr, keyp, (char **) NULL);
if (ptr == NULL)
+#endif
error (1, 0, "EOF while looking for value in RCS file %s",
rcsbuf->filename);
+#ifndef HAVE_MMAP
ptrend = rcsbuf->ptrend;
}
+#endif
c = *ptr;
if (c == ';')
{
@@ -1180,6 +1236,7 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
while (1)
{
while ((pat = memchr (ptr, '@', ptrend - ptr)) == NULL)
+#ifndef HAVE_MMAP
{
/* Note that we pass PTREND as the PTR value to
rcsbuf_fill, so that we will wind up setting PTR to
@@ -1187,25 +1244,31 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
that we don't search the same bytes again. */
ptr = rcsbuf_fill (rcsbuf, ptrend, keyp, valp);
if (ptr == NULL)
+#endif
error (1, 0,
"EOF while looking for end of string in RCS file %s",
rcsbuf->filename);
+#ifndef HAVE_MMAP
ptrend = rcsbuf->ptrend;
}
+#endif
/* Handle the special case of an '@' right at the end of
the known bytes. */
if (pat + 1 >= ptrend)
+#ifndef HAVE_MMAP
{
/* Note that we pass PAT, not PTR, here. */
pat = rcsbuf_fill (rcsbuf, pat, keyp, valp);
if (pat == NULL)
{
+#endif
/* EOF here is OK; it just means that the last
character of the file was an '@' terminating a
value for a key type which does not require a
trailing ';'. */
pat = rcsbuf->ptrend - 1;
+#ifndef HAVE_MMAP
}
ptrend = rcsbuf->ptrend;
@@ -1213,6 +1276,7 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
/* Note that the value of PTR is bogus here. This is
OK, because we don't use it. */
}
+#endif
if (pat + 1 >= ptrend || pat[1] != '@')
break;
@@ -1262,13 +1326,17 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
char n;
if (ptr >= ptrend)
+#ifndef HAVE_MMAP
{
ptr = rcsbuf_fill (rcsbuf, ptr, keyp, valp);
if (ptr == NULL)
+#endif
error (1, 0, "EOF in value in RCS file %s",
rcsbuf->filename);
+#ifndef HAVE_MMAP
ptrend = rcsbuf->ptrend;
}
+#endif
n = *ptr;
if (n == ';')
{
@@ -1303,6 +1371,7 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
/* Find the ';' which must end the value. */
start = ptr;
while ((psemi = memchr (ptr, ';', ptrend - ptr)) == NULL)
+#ifndef HAVE_MMAP
{
int slen;
@@ -1313,10 +1382,13 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
slen = start - *valp;
ptr = rcsbuf_fill (rcsbuf, ptrend, keyp, valp);
if (ptr == NULL)
+#endif
error (1, 0, "EOF in value in RCS file %s", rcsbuf->filename);
+#ifndef HAVE_MMAP
start = *valp + slen;
ptrend = rcsbuf->ptrend;
}
+#endif
/* See if there are any '@' strings in the value. */
pat = memchr (start, '@', psemi - start);
@@ -1360,6 +1432,7 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
while (1)
{
while ((pat = memchr (ptr, '@', ptrend - ptr)) == NULL)
+#ifndef HAVE_MMAP
{
/* Note that we pass PTREND as the PTR value to
rcsbuff_fill, so that we will wind up setting PTR
@@ -1367,22 +1440,29 @@ rcsbuf_getkey (rcsbuf, keyp, valp)
that we don't search the same bytes again. */
ptr = rcsbuf_fill (rcsbuf, ptrend, keyp, valp);
if (ptr == NULL)
+#endif
error (1, 0,
"EOF while looking for end of string in RCS file %s",
rcsbuf->filename);
+#ifndef HAVE_MMAP
ptrend = rcsbuf->ptrend;
}
+#endif
/* Handle the special case of an '@' right at the end of
the known bytes. */
if (pat + 1 >= ptrend)
+#ifndef HAVE_MMAP
{
ptr = rcsbuf_fill (rcsbuf, ptr, keyp, valp);
if (ptr == NULL)
+#endif
error (1, 0, "EOF in value in RCS file %s",
rcsbuf->filename);
+#ifndef HAVE_MMAP
ptrend = rcsbuf->ptrend;
}
+#endif
if (pat[1] != '@')
break;
@@ -1425,12 +1505,16 @@ rcsbuf_getrevnum (rcsbuf, revp)
while (1)
{
if (ptr >= ptrend)
+#ifndef HAVE_MMAP
{
ptr = rcsbuf_fill (rcsbuf, ptr, (char **) NULL, (char **) NULL);
if (ptr == NULL)
+#endif
return 0;
+#ifndef HAVE_MMAP
ptrend = rcsbuf->ptrend;
}
+#endif
c = *ptr;
if (! whitespace (c))
@@ -1451,14 +1535,18 @@ unexpected '\\x%x' reading revision number in RCS file %s",
{
++ptr;
if (ptr >= ptrend)
+#ifndef HAVE_MMAP
{
ptr = rcsbuf_fill (rcsbuf, ptr, revp, (char **) NULL);
if (ptr == NULL)
+#endif
error (1, 0,
"unexpected EOF reading revision number in RCS file %s",
rcsbuf->filename);
+#ifndef HAVE_MMAP
ptrend = rcsbuf->ptrend;
}
+#endif
c = *ptr;
}
@@ -1476,6 +1564,7 @@ unexpected '\\x%x' reading revision number in RCS file %s",
return 1;
}
+#ifndef HAVE_MMAP
/* Fill RCSBUF_BUFFER with bytes from the file associated with RCSBUF,
updating PTR and the PTREND field. If KEYP and *KEYP are not NULL,
then *KEYP points into the buffer, and must be adjusted if the
@@ -1527,6 +1616,7 @@ rcsbuf_fill (rcsbuf, ptr, keyp, valp)
return ptr;
}
+#endif /* HAVE_MMAP */
/* Test whether the last value returned by rcsbuf_getkey is a composite
value or not. */
@@ -1683,7 +1773,19 @@ rcsbuf_valpolish_internal (rcsbuf, to, from, lenp)
{
++from;
- /* Sanity check. */
+ /* Sanity check.
+ *
+ * FIXME: I restored this to an abort from an assert based on
+ * advice from Larry Jones that asserts should not be used to
+ * confirm the validity of an RCS file... This leaves two
+ * issues here: 1) I am uncertain that the fact that we will
+ * only find double '@'s hasn't already been confirmed; and:
+ * 2) If this is the proper place to spot the error in the RCS
+ * file, then we should print a much clearer error here for the
+ * user!!!!!!!
+ *
+ * - DRP
+ */
if (*from != '@' || clen == 0)
abort ();
@@ -1707,11 +1809,8 @@ rcsbuf_valpolish_internal (rcsbuf, to, from, lenp)
}
/* Sanity check. */
- if (from != orig_from + len
- || to != orig_to + (len - rcsbuf->embedded_at))
- {
- abort ();
- }
+ assert (from == orig_from + len
+ && to == orig_to + (len - rcsbuf->embedded_at));
*to = '\0';
}
@@ -1732,7 +1831,7 @@ rcsbuf_valword (rcsbuf, valp)
register char *ptr, *pat;
char c;
-#define my_whitespace(c) (my_spacetab[(unsigned char)c] != 0)
+# define my_whitespace(c) (my_spacetab[(unsigned char)c] != 0)
if (*valp == NULL)
return NULL;
@@ -1790,7 +1889,7 @@ rcsbuf_valword (rcsbuf, valp)
or an id. Make sure it is not another special character. */
if (c == '$' || c == '.' || c == ',')
{
- error (1, 0, "illegal special character in RCS field in %s",
+ error (1, 0, "invalid special character in RCS field in %s",
rcsbuf->filename);
}
@@ -1810,7 +1909,7 @@ rcsbuf_valword (rcsbuf, valp)
the character in its memory cell. Check to make sure that it
is a legitimate word delimiter -- whitespace or end. */
if (c != '\0' && !my_whitespace (c))
- error (1, 0, "illegal special character in RCS field in %s",
+ error (1, 0, "invalid special character in RCS field in %s",
rcsbuf->filename);
*pat = '\0';
@@ -1818,7 +1917,7 @@ rcsbuf_valword (rcsbuf, valp)
*valp = pat;
return xstrdup (ptr);
-#undef my_whitespace
+# undef my_whitespace
}
#endif
@@ -1829,7 +1928,7 @@ static unsigned long
rcsbuf_ftell (rcsbuf)
struct rcsbuffer *rcsbuf;
{
- return rcsbuf->pos + (rcsbuf->ptr - rcsbuf_buffer);
+ return rcsbuf->pos + rcsbuf->ptr - rcsbuf_buffer;
}
/* Return a pointer to any data buffered for RCSBUF, along with the
@@ -1876,9 +1975,9 @@ rcsbuf_cache_close ()
{
if (cached_rcs != NULL)
{
+ rcsbuf_close (&cached_rcsbuf);
if (fclose (cached_rcsbuf.fp) != 0)
error (0, errno, "cannot close %s", cached_rcsbuf.filename);
- rcsbuf_close (&cached_rcsbuf);
freercsnode (&cached_rcs);
cached_rcs = NULL;
}
@@ -1895,6 +1994,7 @@ rcsbuf_cache_open (rcs, pos, pfp, prcsbuf)
FILE **pfp;
struct rcsbuffer *prcsbuf;
{
+#ifndef HAVE_MMAP
if (cached_rcs == rcs)
{
if (rcsbuf_ftell (&cached_rcsbuf) != pos)
@@ -1925,19 +2025,32 @@ rcsbuf_cache_open (rcs, pos, pfp, prcsbuf)
}
else
{
+#endif /* ifndef HAVE_MMAP */
+ /* FIXME: If these routines can be rewritten to not write to the
+ * rcs file buffer, there would be a considerably larger memory savings
+ * from using mmap since the shared file would never need be copied to
+ * process memory.
+ *
+ * If this happens, cached mmapped buffers would be usable, but don't
+ * forget to make sure rcs->pos < pos here...
+ */
if (cached_rcs != NULL)
rcsbuf_cache_close ();
*pfp = CVS_FOPEN (rcs->path, FOPEN_BINARY_READ);
if (*pfp == NULL)
error (1, 0, "unable to reopen `%s'", rcs->path);
+#ifndef HAVE_MMAP
if (pos != 0)
{
if (fseek (*pfp, pos, SEEK_SET) != 0)
error (1, 0, "cannot fseek RCS file %s", rcs->path);
}
+#endif /* ifndef HAVE_MMAP */
rcsbuf_open (prcsbuf, *pfp, rcs->path, pos);
+#ifndef HAVE_MMAP
}
+#endif /* ifndef HAVE_MMAP */
}
@@ -2235,7 +2348,7 @@ RCS_gettag (rcs, symtag, force_tag_match, simple_tag)
RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
/* If tag is "HEAD", special case to get head RCS revision */
- if (tag && (STREQ (tag, TAG_HEAD) || *tag == '\0'))
+ if (tag && STREQ (tag, TAG_HEAD))
#if 0 /* This #if 0 is only in the Cygnus code. Why? Death support? */
if (force_tag_match && (rcs->flags & VALID) && (rcs->flags & INATTIC))
return ((char *) NULL); /* head request for removed file */
@@ -2832,16 +2945,21 @@ RCS_getdate (rcs, date, force_tag_match)
/* if the head is on a branch, try the branch first */
if (rcs->branch != NULL)
+ {
retval = RCS_getdatebranch (rcs, date, rcs->branch);
-
- /* if we found a match, we are done */
- if (retval != NULL)
- return (retval);
+ if (retval != NULL)
+ return (retval);
+ }
/* otherwise if we have a trunk, try it */
if (rcs->head)
{
p = findnode (rcs->versions, rcs->head);
+ if (p == NULL)
+ {
+ error (0, 0, "%s: head revision %s doesn't exist", rcs->path,
+ rcs->head);
+ }
while (p != NULL)
{
/* if the date of this one is before date, take it */
@@ -2859,10 +2977,13 @@ RCS_getdate (rcs, date, force_tag_match)
p = (Node *) NULL;
}
}
+ else
+ error (0, 0, "%s: no head revision", rcs->path);
/*
* at this point, either we have the revision we want, or we have the
- * first revision on the trunk (1.1?) in our hands
+ * first revision on the trunk (1.1?) in our hands, or we've come up
+ * completely empty
*/
/* if we found what we're looking for, and it's not 1.1 return it */
@@ -2895,7 +3016,8 @@ RCS_getdate (rcs, date, force_tag_match)
if (retval != NULL)
return (retval);
- if (!force_tag_match || RCS_datecmp (vers->date, date) <= 0)
+ if (!force_tag_match ||
+ (vers != NULL && RCS_datecmp (vers->date, date) <= 0))
return (xstrdup (vers->version));
else
return (NULL);
@@ -3168,6 +3290,8 @@ translate_symtag (rcs, tag)
while (! whitespace (*cp) && *cp != '\0')
++cp;
+ if (*cp == '\0')
+ break;
}
}
@@ -4230,7 +4354,7 @@ RCS_checkout (rcs, workfile, rev, nametag, options, sout, pfn, callerdat)
/* If the size of `devtype' changes, fix the sscanf call also */
char devtype[16];
- if (sscanf (info->data, "%16s %lu",
+ if (sscanf (info->data, "%15s %lu",
devtype, &devnum_long) < 2)
error (1, 0, "%s:%s has bad `special' newphrase %s",
workfile, vers->version, info->data);
@@ -4295,7 +4419,7 @@ RCS_checkout (rcs, workfile, rev, nametag, options, sout, pfn, callerdat)
#ifdef PRESERVE_PERMISSIONS_SUPPORT
else if (special_file)
{
-#ifdef HAVE_MKNOD
+# ifdef HAVE_MKNOD
char *dest;
/* Can send either to WORKFILE or to SOUT, as long as SOUT is
@@ -4316,11 +4440,11 @@ RCS_checkout (rcs, workfile, rev, nametag, options, sout, pfn, callerdat)
if (mknod (dest, special_file, devnum) < 0)
error (1, errno, "could not create special file %s",
dest);
-#else
+# else
error (1, 0,
"cannot create %s: unable to create special files on this system",
workfile);
-#endif
+# endif
}
#endif
else
@@ -4923,7 +5047,7 @@ RCS_checkin (rcs, workfile, message, rev, flags)
case S_IFREG: break;
case S_IFCHR:
case S_IFBLK:
-#ifdef HAVE_ST_RDEV
+# ifdef HAVE_ST_RDEV
np = getnode();
np->type = RCSFIELD;
np->key = xstrdup ("special");
@@ -4933,11 +5057,11 @@ RCS_checkin (rcs, workfile, message, rev, flags)
(unsigned long) sb.st_rdev);
np->data = xstrdup (buf);
addnode (delta->other_delta, np);
-#else
+# else
error (0, 0,
"can't preserve %s: unable to save device files on this system",
workfile);
-#endif
+# endif
break;
default:
@@ -5788,7 +5912,9 @@ RCS_unlock (rcs, rev, unlock_quiet)
if (rcs->flags & PARTIAL)
RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
- /* If rev is NULL, unlock the latest revision (first in
+ /* If rev is NULL, unlock the revision held by the caller; if more
+ than one, make the user specify the revision explicitly. This
+ differs from RCS which unlocks the latest revision (first in
rcs->locks) held by the caller. */
if (rev == NULL)
{
@@ -5813,17 +5939,24 @@ RCS_unlock (rcs, rev, unlock_quiet)
lock = NULL;
for (p = locks->list->next; p != locks->list; p = p->next)
{
- if (lock != NULL)
+ if (STREQ (p->data, user))
{
- if (!unlock_quiet)
- error (0, 0, "\
+ if (lock != NULL)
+ {
+ if (!unlock_quiet)
+ error (0, 0, "\
%s: multiple revisions locked by %s; please specify one", rcs->path, user);
- return 1;
+ return 1;
+ }
+ lock = p;
}
- lock = p;
}
if (lock == NULL)
+ {
+ if (!unlock_quiet)
+ error (0, 0, "No locks are set for %s.\n", user);
return 0; /* no lock found, ergo nothing to do */
+ }
xrev = xstrdup (lock->key);
}
else
@@ -5851,6 +5984,9 @@ RCS_unlock (rcs, rev, unlock_quiet)
is called with a NULL revision, since that means "whatever
revision is currently locked by the caller." */
char *repos, *workfile;
+ if (!unlock_quiet)
+ error (0, 0, "\
+%s: revision %s locked by %s; breaking lock", rcs->path, xrev, lock->data);
repos = xstrdup (rcs->path);
workfile = strrchr (repos, '/');
*workfile++ = '\0';
@@ -7072,8 +7208,8 @@ RCS_deltas (rcs, fp, rcsbuf, version, op, text, len, log, loglen)
node = findnode (rcs->versions, key);
if (node == NULL)
error (1, 0,
- "mismatch in rcs file %s between deltas and deltatexts",
- rcs->path);
+ "mismatch in rcs file %s between deltas and deltatexts (%s)",
+ rcs->path, key);
/* Stash the previous version. */
prev_vers = vers;
@@ -7565,8 +7701,8 @@ RCS_getdeltatext (rcs, fp, rcsbuf)
p = findnode (rcs->versions, num);
if (p == NULL)
- error (1, 0, "mismatch in rcs file %s between deltas and deltatexts",
- rcs->path);
+ error (1, 0, "mismatch in rcs file %s between deltas and deltatexts (%s)",
+ rcs->path, num);
d = (Deltatext *) xmalloc (sizeof (Deltatext));
d->version = xstrdup (num);
@@ -7926,8 +8062,10 @@ RCS_copydeltas (rcs, fin, rcsbufin, fout, newdtext, insertpt)
char *bufrest;
int nls;
size_t buflen;
+#ifndef HAVE_MMAP
char buf[8192];
int got;
+#endif
/* Count the number of versions for which we have to do some
special operation. */
@@ -8036,7 +8174,12 @@ RCS_copydeltas (rcs, fin, rcsbufin, fout, newdtext, insertpt)
fwrite (bufrest, 1, buflen, fout);
}
-
+#ifndef HAVE_MMAP
+ /* This bit isn't necessary when using mmap since the entire file
+ * will already be available via the RCS buffer. Besides, the
+ * mmap code doesn't always keep the file pointer up to date, so
+ * this adds some data twice.
+ */
while ((got = fread (buf, 1, sizeof buf, fin)) != 0)
{
if (nls > 0
@@ -8053,6 +8196,7 @@ RCS_copydeltas (rcs, fin, rcsbufin, fout, newdtext, insertpt)
nls = 0;
}
+#endif /* HAVE_MMAP */
}
/* A helper procedure for RCS_copydeltas. This is called via walklist
@@ -8314,7 +8458,8 @@ RCS_rewrite (rcs, newdtext, insertpt)
/* Update delta_pos to the current position in the output file.
Do NOT move these statements: they must be done after fin has
been positioned at the old delta_pos, but before any delta
- texts have been written to fout. */
+ texts have been written to fout.
+ */
rcs->delta_pos = ftell (fout);
if (rcs->delta_pos == -1)
error (1, errno, "cannot ftell in RCS file %s", rcs->path);
@@ -8331,7 +8476,7 @@ RCS_rewrite (rcs, newdtext, insertpt)
fragile even if it happens to sometimes be true. The real
solution is to make sure that all the code which reads
from fin checks for errors itself (some does, some doesn't). */
- error (0, 0, "warning: when closing RCS file `%s'", rcs->path);
+ error (0, 0, "warning: ferror set while rewriting RCS file `%s'", rcs->path);
if (fclose (fin) < 0)
error (0, errno, "warning: closing RCS file `%s'", rcs->path);
diff --git a/contrib/cvs/src/recurse.c b/contrib/cvs/src/recurse.c
index 2235193d1cb3..200cbf68a83c 100644
--- a/contrib/cvs/src/recurse.c
+++ b/contrib/cvs/src/recurse.c
@@ -247,7 +247,10 @@ start_recursion (fileproc, filesdoneproc, direntproc, dirleaveproc, callerdat,
directories. */
if (!wrap_name_has (argv[i], WRAP_TOCVS) && isdir (argv[i]))
+ {
+ strip_trailing_slashes (argv[i]);
addlist (&dirlist, argv[i]);
+ }
else
{
/* otherwise, split argument into directory and component names. */
diff --git a/contrib/cvs/src/remove.c b/contrib/cvs/src/remove.c
index 63b61d3aff8b..691d141fb07c 100644
--- a/contrib/cvs/src/remove.c
+++ b/contrib/cvs/src/remove.c
@@ -235,6 +235,14 @@ remove_fileproc (callerdat, finfo)
cannot remove file `%s' which has a numeric sticky tag of `%s'",
finfo->fullname, vers->tag);
}
+ else if (vers->date != NULL)
+ {
+ /* Commit will just give an error, and so there seems to be
+ little reason to allow the remove. */
+ error (0, 0, "\
+cannot remove file `%s' which has a sticky date of `%s'",
+ finfo->fullname, vers->date);
+ }
else
{
char *fname;
diff --git a/contrib/cvs/src/root.c b/contrib/cvs/src/root.c
index 2d1261d2e83f..1a6d64899bff 100644
--- a/contrib/cvs/src/root.c
+++ b/contrib/cvs/src/root.c
@@ -387,7 +387,7 @@ parse_cvsroot (root_in)
if (! (p = strchr (method, ':')))
{
- error (0, 0, "bad CVSroot: %s", root_in);
+ error (0, 0, "No closing `:' on method in CVSROOT.");
free (cvsroot_save);
goto error_exit;
}
@@ -412,7 +412,7 @@ parse_cvsroot (root_in)
newroot->method = fork_method;
else
{
- error (0, 0, "unknown method in CVSroot: %s", root_in);
+ error (0, 0, "Unknown method (`%s') in CVSROOT.", method);
free (cvsroot_save);
goto error_exit;
}
@@ -420,7 +420,7 @@ parse_cvsroot (root_in)
else
{
/* If the method isn't specified, assume
- SERVER_METHOD/EXT_METHOD if the string contains a colon or
+ SERVER_METHOD/EXT_METHOD if the string looks like a relative path or
LOCAL_METHOD otherwise. */
newroot->method = ((*cvsroot_copy != '/' && strchr (cvsroot_copy, '/'))
@@ -447,8 +447,7 @@ parse_cvsroot (root_in)
*/
if ((p = strchr (cvsroot_copy, '/')) == NULL)
{
- error (0, 0, "CVSROOT (\"%s\")", root_in);
- error (0, 0, "requires a path spec");
+ error (0, 0, "CVSROOT requires a path spec:");
error (0, 0, ":(gserver|kserver|pserver):[[user][:password]@]host[:[port]]/path");
error (0, 0, "[:(ext|server):][[user]@]host[:]/path");
free (cvsroot_save);
@@ -497,20 +496,18 @@ parse_cvsroot (root_in)
{
if (!isdigit(*q++))
{
- error(0, 0, "CVSROOT (\"%s\")", root_in);
- error(0, 0, "may only specify a positive, non-zero, integer port (not \"%s\").",
+ error (0, 0, "CVSROOT may only specify a positive, non-zero, integer port (not `%s').",
p);
- error(0, 0, "perhaps you entered a relative pathname?");
+ error (0, 0, "Perhaps you entered a relative pathname?");
free (cvsroot_save);
goto error_exit;
}
}
if ((newroot->port = atoi (p)) <= 0)
{
- error (0, 0, "CVSROOT (\"%s\")", root_in);
- error(0, 0, "may only specify a positive, non-zero, integer port (not \"%s\").",
+ error (0, 0, "CVSROOT may only specify a positive, non-zero, integer port (not `%s').",
p);
- error(0, 0, "perhaps you entered a relative pathname?");
+ error (0, 0, "Perhaps you entered a relative pathname?");
free (cvsroot_save);
goto error_exit;
}
@@ -540,9 +537,8 @@ parse_cvsroot (root_in)
#if ! defined (CLIENT_SUPPORT) && ! defined (DEBUG)
if (newroot->method != local_method)
{
- error (0, 0, "CVSROOT \"%s\"", root_in);
- error (0, 0, "is set for a remote access method but your");
- error (0, 0, "CVS executable doesn't support it");
+ error (0, 0, "CVSROOT is set for a remote access method but your");
+ error (0, 0, "CVS executable doesn't support it.");
goto error_exit;
}
#endif
@@ -550,16 +546,15 @@ parse_cvsroot (root_in)
#if ! defined (SERVER_SUPPORT) && ! defined (DEBUG)
if (newroot->method == fork_method)
{
- error (0, 0, "CVSROOT \"%s\"", root_in);
- error (0, 0, "is set to use the :fork: access method but your");
- error (0, 0, "CVS executable doesn't support it");
+ error (0, 0, "CVSROOT is set to use the :fork: access method but your");
+ error (0, 0, "CVS executable doesn't support it.");
goto error_exit;
}
#endif
if (newroot->username && ! newroot->hostname)
{
- error (0, 0, "missing hostname in CVSROOT: \"%s\"", root_in);
+ error (0, 0, "Missing hostname in CVSROOT.");
goto error_exit;
}
@@ -571,9 +566,8 @@ parse_cvsroot (root_in)
case local_method:
if (newroot->username || newroot->hostname)
{
- error (0, 0, "can't specify hostname and username in CVSROOT");
- error (0, 0, "(\"%s\")", root_in);
- error (0, 0, "when using local access method");
+ error (0, 0, "Can't specify hostname and username in CVSROOT");
+ error (0, 0, "when using local access method.");
goto error_exit;
}
/* cvs.texinfo has always told people that CVSROOT must be an
@@ -583,8 +577,9 @@ parse_cvsroot (root_in)
error. */
if (!isabsolute (newroot->directory))
{
- error (0, 0, "CVSROOT \"%s\" must be an absolute pathname",
+ error (0, 0, "CVSROOT must be an absolute pathname (not `%s')",
newroot->directory);
+ error (0, 0, "when using local access method.");
goto error_exit;
}
no_port = 1;
@@ -596,15 +591,15 @@ parse_cvsroot (root_in)
name is absolute -- let the server do it. */
if (newroot->username || newroot->hostname)
{
- error (0, 0, "can't specify hostname and username in CVSROOT");
- error (0, 0, "(\"%s\")", root_in);
- error (0, 0, "when using fork access method");
+ error (0, 0, "Can't specify hostname and username in CVSROOT");
+ error (0, 0, "when using fork access method.");
goto error_exit;
}
if (!isabsolute (newroot->directory))
{
- error (0, 0, "CVSROOT \"%s\" must be an absolute pathname",
+ error (0, 0, "CVSROOT must be an absolute pathname (not `%s')",
newroot->directory);
+ error (0, 0, "when using fork access method.");
goto error_exit;
}
no_port = 1;
@@ -612,9 +607,8 @@ parse_cvsroot (root_in)
break;
case kserver_method:
#ifndef HAVE_KERBEROS
- error (0, 0, "CVSROOT \"%s\"", root_in);
- error (0, 0, "is set for a kerberos access method but your");
- error (0, 0, "CVS executable doesn't support it");
+ error (0, 0, "CVSROOT is set for a kerberos access method but your");
+ error (0, 0, "CVS executable doesn't support it.");
goto error_exit;
#else
check_hostname = 1;
@@ -622,9 +616,8 @@ parse_cvsroot (root_in)
#endif
case gserver_method:
#ifndef HAVE_GSSAPI
- error (0, 0, "CVSROOT \"%s\"", root_in);
- error (0, 0, "is set for a GSSAPI access method but your");
- error (0, 0, "CVS executable doesn't support it");
+ error (0, 0, "CVSROOT is set for a GSSAPI access method but your");
+ error (0, 0, "CVS executable doesn't support it.");
goto error_exit;
#else
check_hostname = 1;
@@ -639,6 +632,8 @@ parse_cvsroot (root_in)
case pserver_method:
check_hostname = 1;
break;
+ default:
+ error (1, 0, "Invalid method found in parse_cvsroot");
}
if (no_password && newroot->password)
@@ -650,7 +645,7 @@ parse_cvsroot (root_in)
if (check_hostname && !newroot->hostname)
{
- error (0, 0, "didn't specify hostname in CVSROOT: %s", root_in);
+ error (0, 0, "Didn't specify hostname in CVSROOT.");
goto error_exit;
}
@@ -663,7 +658,7 @@ parse_cvsroot (root_in)
if (*newroot->directory == '\0')
{
- error (0, 0, "missing directory in CVSROOT: %s", root_in);
+ error (0, 0, "Missing directory in CVSROOT.");
goto error_exit;
}
diff --git a/contrib/cvs/src/root.h b/contrib/cvs/src/root.h
new file mode 100644
index 000000000000..afe79b61289e
--- /dev/null
+++ b/contrib/cvs/src/root.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2001, Derek Price and others
+ * Copyright (c) 1992, Brian Berliner and Jeff Polk
+ * Copyright (c) 1989-1992, Brian Berliner
+ *
+ * You may distribute under the terms of the GNU General Public License as
+ * specified in the README file that comes with the CVS kit.
+ */
+
+/* CVSroot data structures */
+
+/* Access method specified in CVSroot. */
+typedef enum {
+ null_method,
+ local_method,
+ server_method,
+ pserver_method,
+ kserver_method,
+ gserver_method,
+ ext_method,
+ fork_method
+} CVSmethod;
+extern char *method_names[]; /* change this in root.c if you change
+ the enum above */
+
+typedef struct cvsroot_s {
+ char *original; /* the complete source CVSroot string */
+ CVSmethod method; /* one of the enum values above */
+ char *username; /* the username or NULL if method == local */
+ char *password; /* the username or NULL if method == local */
+ char *hostname; /* the hostname or NULL if method == local */
+ int port; /* the port or zero if method == local */
+ char *directory; /* the directory name */
+#ifdef CLIENT_SUPPORT
+ unsigned char isremote; /* nonzero if we are doing remote access */
+#endif /* CLIENT_SUPPORT */
+} cvsroot_t;
diff --git a/contrib/cvs/src/sanity.sh b/contrib/cvs/src/sanity.sh
index 727e33a5fa32..22c1a9830ad1 100755
--- a/contrib/cvs/src/sanity.sh
+++ b/contrib/cvs/src/sanity.sh
@@ -398,7 +398,7 @@ else
fi
# now make sure that tr works on NULs
-if $EXPR `echo "123" | ${TR} '2' '\0'` : "123" >/dev/null; then
+if $EXPR `echo "123" | ${TR} '2' '\0'` : "123" >/dev/null 2>&1; then
TR=`find_tool tr`
if test -z "$TR" ; then
echo 'Warning: you are using a version of tr which does not correctly'
@@ -674,9 +674,10 @@ if test x"$*" = x; then
tests="${tests} new newb conflicts conflicts2 conflicts3"
tests="${tests} clean"
# Checking out various places (modules, checkout -d, &c)
- tests="${tests} modules modules2 modules3 modules4 modules5"
+ tests="${tests} modules modules2 modules3 modules4 modules5 modules6"
tests="${tests} mkmodules-temp-file-removal"
tests="${tests} cvsadm emptydir abspath toplevel toplevel2"
+ tests="${tests} checkout_repository"
# Log messages, error messages.
tests="${tests} mflag editor errmsg1 errmsg2 adderrmsg"
# Watches, binary files, history browsing, &c.
@@ -1599,8 +1600,8 @@ Specify the --help option for further information about CVS'
if $remote; then
dotest version-2r "${testcvs} version" \
-'Client: Concurrent Versions System (CVS) [0-9.]* (client/server)
-Server: Concurrent Versions System (CVS) [0-9.]* (client/server)'
+'Client: Concurrent Versions System (CVS) [0-9p.]* (client/server)
+Server: Concurrent Versions System (CVS) [0-9p.]* (client/server)'
else
dotest version-2 "${testcvs} version" \
'Concurrent Versions System (CVS) [0-9.]*.*'
@@ -1633,6 +1634,8 @@ Server: Concurrent Versions System (CVS) [0-9.]* (client/server)'
dotest basica-1a0 "${testcvs} -q update" ''
dotest basica-1a1 "${testcvs} -q diff -c" ''
dotest basica-1a2 "${testcvs} -q status" ''
+ dotest basica-1a3 "${testcvs} -q update ." ''
+ dotest basica-1a4 "${testcvs} -q update ./" ''
mkdir sdir
# Remote CVS gives the "cannot open CVS/Entries" error, which is
@@ -1719,7 +1722,7 @@ done"
dotest_fail basica-nonexist "${testcvs} -q ci nonexist" \
"${PROG}"' [a-z]*: nothing known about `nonexist'\''
'"${PROG}"' \[[a-z]* aborted\]: correct above errors first!'
- dotest basica-8 "${testcvs} -q update" ''
+ dotest basica-8 "${testcvs} -q update ." ''
# Test the -f option to ci
cd sdir/ssdir
@@ -1754,7 +1757,7 @@ ${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile
new revision: 3\.1\.2\.1; previous revision: 3\.1
done"
# now get rid of the sticky tag and go back to the trunk
- dotest basica-8a5 "${testcvs} -q up -A" "[UP] ssfile"
+ dotest basica-8a5 "${testcvs} -q up -A ./" "[UP] ssfile"
cd ../..
dotest basica-8b "${testcvs} -q diff -r1.2 -r1.3" \
@@ -1784,7 +1787,8 @@ ${PROG} [a-z]*: invalid context length argument"
"${PROG} \[[a-z]* aborted\]: ${TESTDIR}/nonexist/CVSROOT: .*"
dotest basica-10 "${testcvs} annotate" \
-'Annotations for sdir/ssdir/ssfile
+'
+Annotations for sdir/ssdir/ssfile
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.1 .'"${username}"' *[0-9a-zA-Z-]*.: ssfile
1\.2 .'"${username}"' *[0-9a-zA-Z-]*.: ssfile line 2'
@@ -1799,7 +1803,7 @@ ${PROG} [a-z]*: use .${PROG} commit. to remove this file permanently"
${CVSROOT_DIRNAME}/first-dir/sdir/ssdir/ssfile,v <-- ssfile
new revision: delete; previous revision: 3\.1
done"
- dotest basica-r3 "${testcvs} -q up -p -r 3.1 ssfile >ssfile" ""
+ dotest basica-r3 "${testcvs} -q up -p -r 3.1 ./ssfile >ssfile" ""
dotest basica-r4 "${testcvs} add ssfile" \
"${PROG} [a-z]*: re-adding file ssfile (in place of dead revision 3\.2)
${PROG} [a-z]*: use .${PROG} commit. to add this file permanently"
@@ -1874,7 +1878,7 @@ revision 1\.1
date: [0-9/]* [0-9:]*; author: ${username}; state: Exp;
add-it
============================================================================="
- dotest basica-o8 "${testcvs} -q update -p -r 1.1 ssfile" "ssfile"
+ dotest basica-o8 "${testcvs} -q update -p -r 1.1 ./ssfile" "ssfile"
cd ../..
cd ..
@@ -2070,7 +2074,7 @@ sfile2 starts"
"U sub1/sub2/Emptydir/sfile1
U sub1/sub2/sdir2/sfile2"
cd sub1
- dotest basicb-12 "${testcvs} -q update" ''
+ dotest basicb-12 "${testcvs} -q update ./." ''
touch xx
dotest basicb-13 "${testcvs} add xx" fixme
cd ..
@@ -4641,7 +4645,7 @@ C file4"
file=x
echo >$file
dotest rm-update-message-setup-2 "$testcvs -q add $file" \
-"$PROG [a-z]*: use .cvs commit. to add this file permanently"
+"$PROG [a-z]*: use .$PROG commit. to add this file permanently"
dotest rm-update-message-setup-3 "$testcvs -q ci -mcreate $file" \
"RCS file: $CVSROOT_DIRNAME/rm-update-message/$file,v
done
@@ -4823,8 +4827,7 @@ done"
"Checking in file5;
${CVSROOT_DIRNAME}/first-dir/file5,v <-- file5
${PROG} [a-z]*: ${CVSROOT_DIRNAME}/first-dir/file5,v: revision 4\.8 too low; must be higher than 7\.1
-${PROG} [a-z]*: could not check in file5
-7\.1 unlocked"
+${PROG} [a-z]*: could not check in file5"
dotest rmadd-24a "${testcvs} -q ci -r 8.4 -m change file5" \
"Checking in file5;
${CVSROOT_DIRNAME}/first-dir/file5,v <-- file5
@@ -4842,6 +4845,69 @@ File: file5 Status: Up-to-date
Sticky Date: (none)
Sticky Options: (none)"
+ # now try forced revision with recursion
+ mkdir sub
+ dotest rmadd-26 "${testcvs} -q add sub" \
+"Directory ${CVSROOT_DIRNAME}/first-dir/sub added to the repository"
+ echo hello >sub/subfile
+ dotest rmadd-27 "${testcvs} -q add sub/subfile" \
+"${PROG} [a-z]*: use .$PROG commit. to add this file permanently"
+
+ dotest rmadd-28 "${testcvs} -q ci -m. sub" \
+"RCS file: ${CVSROOT_DIRNAME}/first-dir/sub/subfile,v
+done
+Checking in sub/subfile;
+${CVSROOT_DIRNAME}/first-dir/sub/subfile,v <-- subfile
+initial revision: 1\.1
+done"
+
+ # lose the branch
+ dotest rmadd-29 "${testcvs} -q up -A" \
+"${PROG} [a-z]*: file3 is no longer in the repository
+${PROG} [a-z]*: file4 is no longer in the repository"
+
+ # -f disables recursion
+ dotest rmadd-30 "${testcvs} -q ci -f -r9 -m." \
+"Checking in file1;
+${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
+new revision: 9\.1; previous revision: 7\.1
+done
+Checking in file2;
+${CVSROOT_DIRNAME}/first-dir/file2,v <-- file2
+new revision: 9\.1; previous revision: 7\.1
+done
+Checking in file5;
+${CVSROOT_DIRNAME}/first-dir/file5,v <-- file5
+new revision: 9\.1; previous revision: 8\.4
+done"
+
+ # add -R to force recursion
+ dotest rmadd-31 "${testcvs} -q ci -f -r9 -R -m." \
+"Checking in file1;
+${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
+new revision: 9\.2; previous revision: 9\.1
+done
+Checking in file2;
+${CVSROOT_DIRNAME}/first-dir/file2,v <-- file2
+new revision: 9\.2; previous revision: 9\.1
+done
+Checking in file5;
+${CVSROOT_DIRNAME}/first-dir/file5,v <-- file5
+new revision: 9\.2; previous revision: 9\.1
+done
+Checking in sub/subfile;
+${CVSROOT_DIRNAME}/first-dir/sub/subfile,v <-- subfile
+new revision: 9\.1; previous revision: 1\.1
+done"
+
+ if $remote; then
+ # as noted above, remote doesn't set a sticky tag
+ :
+ else
+ dotest rmadd-32 "cat CVS/Tag" "T9"
+ dotest rmadd-33 "cat sub/CVS/Tag" "T9"
+ fi
+
cd ../..
rm -r 1
rm -rf ${CVSROOT_DIRNAME}/first-dir
@@ -5685,7 +5751,7 @@ done"
;;
tagf)
- # More tagging tests, including using tag -F to convert a
+ # More tagging tests, including using tag -F -B to convert a
# branch tag to a regular tag and recovering thereof.
# Setup; check in first-dir/file1
@@ -5729,11 +5795,16 @@ Checking in file2;
${CVSROOT_DIRNAME}/first-dir/file2,v <-- file2
new revision: 1\.1\.2\.1; previous revision: 1\.1
done"
- # Here we make it a non-branch tag. Some think this should
- # be an error. But if -F means "I want to put this tag here,
- # never mind whether there was a tag of that name before", then
- # an error wouldn't fit.
- dotest tagf-8 "${testcvs} -q tag -F br" "T file1
+ # Here we try to make it a non-branch tag, but will
+ # succeed in getting only warnings, even with -F
+ # because converting a branch tag to non-branch
+ # is potentially catastrophic.
+ dotest tagf-8a "${testcvs} -q tag -F br" \
+"${PROG} [a-z]*: file1: Not moving branch tag .br. from 1\.1\.2\.1 to 1\.1\\.2\.1\.
+${PROG} [a-z]*: file2: Not moving branch tag .br. from 1\.1\.2\.1 to 1\.1\.2\.1\."
+ # however, if we *really* are sure we want to move a branch tag,
+ # "-F -B" will do the trick
+ dotest tagf-8 "${testcvs} -q tag -F -B br" "T file1
T file2"
echo moremod >> file1
echo moremod >> file2
@@ -5792,6 +5863,106 @@ Checking in file2;
${CVSROOT_DIRNAME}/first-dir/file2,v <-- file2
new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1
done"
+ # try accidentally deleting branch tag, "tag -d"
+ dotest_fail tagf-16 "${testcvs} tag -d br" \
+"${PROG} [a-z]*: Untagging \.
+${PROG} [a-z]*: Not removing branch tag .br. from .${CVSROOT_DIRNAME}/first-dir/file1,v.\.
+${PROG} [a-z]*: Not removing branch tag .br. from .${CVSROOT_DIRNAME}/first-dir/file2,v.\."
+ # try accidentally deleting branch tag, "rtag -d"
+ dotest_fail tagf-17 "${testcvs} rtag -d br first-dir" \
+"${PROG} [a-z]*: Untagging first-dir
+${PROG} [a-z]*: Not removing branch tag .br. from .${CVSROOT_DIRNAME}/first-dir/file1,v.\.
+${PROG} [a-z]*: Not removing branch tag .br. from .${CVSROOT_DIRNAME}/first-dir/file2,v.\."
+ # try accidentally converting branch tag to non-branch tag "tag -F"
+ dotest tagf-18 "${testcvs} tag -r1.1 -F br file1" \
+"${PROG} [a-z]*: file1: Not moving branch tag .br. from 1\.1\.4\.1 to 1\.1\."
+ # try accidentally converting branch tag to non-branch tag "rtag -F"
+ dotest tagf-19 "${testcvs} rtag -r1.1 -F br first-dir" \
+"${PROG} [a-z]*: Tagging first-dir
+${PROG} [a-z]*: first-dir/file1: Not moving branch tag .br. from 1\.1\.4\.1 to 1\.1\.
+${PROG} [a-z]*: first-dir/file2: Not moving branch tag .br. from 1\.1\.2\.2 to 1\.1\."
+ # create a non-branch tag
+ dotest tagf-20 "${testcvs} rtag regulartag first-dir" \
+"${PROG} [a-z]*: Tagging first-dir"
+ # try accidentally converting non-branch tag to branch tag (tag -F -B -b)
+ dotest tagf-21 "${testcvs} tag -F -B -b regulartag file1" \
+"${PROG} [a-z]*: file1: Not moving non-branch tag .regulartag. from 1\.1 to 1\.1\.4\.1\.0\.2 due to .-B. option\."
+ # try accidentally converting non-branch tag to branch rtag (rtag -F -B -b)
+ dotest tagf-22 "${testcvs} rtag -F -B -b regulartag first-dir" \
+"${PROG} [a-z]*: Tagging first-dir
+${PROG} [a-z]*: first-dir/file1: Not moving non-branch tag .regulartag. from 1\.1 to 1\.1\.0\.6 due to .-B. option\.
+${PROG} [a-z]*: first-dir/file2: Not moving non-branch tag .regulartag. from 1\.1 to 1\.1\.0\.4 due to .-B. option\."
+ # Try accidentally deleting non-branch: (tag -d -B)
+ dotest_fail tagf-23 "${testcvs} tag -d -B regulartag file1" \
+"${PROG} [a-z]*: Not removing non-branch tag .regulartag. from .${CVSROOT_DIRNAME}/first-dir/file1,v. due to .-B. option\."
+ # Try accidentally deleting non-branch: (rtag -d -B)
+ dotest_fail tagf-24 \
+ "${testcvs} rtag -d -B regulartag first-dir" \
+"${PROG} [a-z]*: Untagging first-dir
+${PROG} [a-z]*: Not removing non-branch tag .regulartag. from .${CVSROOT_DIRNAME}/first-dir/file1,v. due to .-B. option\.
+${PROG} [a-z]*: Not removing non-branch tag .regulartag. from .${CVSROOT_DIRNAME}/first-dir/file2,v. due to .-B. option\."
+
+ # the following tests (throught the next commit) keep moving the same
+ # tag back and forth between 1.1.6 & 1.1.8 in file1 and between
+ # 1.1.4 and 1.1.6 in file2 since nothing was checked in on some of
+ # these branches and CVS only tracks branches via tags unless they contain data.
+
+ # try intentionally converting non-branch tag to branch tag (tag -F -b)
+ dotest tagf-25a "${testcvs} tag -F -b regulartag file1" "T file1"
+ # try intentionally moving a branch tag to a newly created branch (tag -F -b -B)
+ dotest tagf-25b "${testcvs} tag -F -B -b -r1.1 regulartag file1" \
+"T file1"
+ # try intentionally converting mixed tags to branch tags (rtag -F -b)
+ dotest tagf-26a "${testcvs} rtag -F -b regulartag first-dir" \
+"${PROG} [a-z]*: Tagging first-dir
+${PROG} [a-z]*: first-dir/file1: Not moving branch tag .regulartag. from 1\.1 to 1\.1\.0\.8\."
+ # try intentionally converting a branch to a new branch tag (rtag -F -b -B)
+ dotest tagf-26b "${testcvs} rtag -F -B -b -r1.1 regulartag first-dir" \
+"${PROG} [a-z]*: Tagging first-dir"
+ # update to our new branch
+ dotest tagf-27 "${testcvs} update -r regulartag" \
+"${PROG} [a-z]*: Updating \.
+U file1
+U file2"
+ # commit some changes and see that all rev numbers look right
+ echo changes >> file1
+ echo changes >> file2
+ dotest tagf-28 "${testcvs} ci -m changes" \
+"${PROG} [a-z]*: Examining \.
+Checking in file1;
+${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
+new revision: 1\.1\.8\.1; previous revision: 1\.1
+done
+Checking in file2;
+${CVSROOT_DIRNAME}/first-dir/file2,v <-- file2
+new revision: 1\.1\.6\.1; previous revision: 1\.1
+done"
+ # try intentional branch to non-branch (tag -F -B)
+ dotest tagf-29 "${testcvs} tag -F -B -r1.1 regulartag file1" \
+"T file1"
+ # try non-branch to non-branch (tag -F -B)
+ dotest tagf-29a "${testcvs} tag -F -B -r br regulartag file1" \
+"${PROG} [a-z]*: file1: Not moving non-branch tag .regulartag. from 1\.1 to 1\.1\.4\.1 due to .-B. option\."
+ # try mixed-branch to non-branch (rtag -F -B )
+ dotest tagf-29b "${testcvs} rtag -F -B -r br regulartag first-dir" \
+"${PROG} [a-z]*: Tagging first-dir
+${PROG} [a-z]*: first-dir/file1: Not moving non-branch tag .regulartag. from 1\.1 to 1\.1\.4\.1 due to .-B. option\."
+ # at this point, regulartag is a regular tag within
+ # file1 and file2
+
+ # try intentional branch to non-branch (rtag -F -B)
+ dotest tagf-30 "${testcvs} rtag -F -B -r1.1 br first-dir" \
+"${PROG} [a-z]*: Tagging first-dir"
+ # create a branch tag so we can try to delete it.
+ dotest tagf-31 "${testcvs} rtag -b brtag first-dir" \
+"${PROG} [a-z]*: Tagging first-dir"
+
+ # try intentinal deletion of branch tag (tag -d -B)
+ dotest tagf-32 "${testcvs} tag -d -B brtag file1" "D file1"
+ # try intentinal deletion of branch tag (rtag -d -B)
+ dotest tagf-33 "${testcvs} rtag -d -B brtag first-dir" \
+"${PROG} [a-z]*: Untagging first-dir"
+
cd ../..
rm -r 1
@@ -6014,6 +6185,49 @@ new revision: 1\.1\.2\.2; previous revision: 1\.1\.2\.1
done"
dotest rcslib-symlink-4 "ls -l $CVSROOT_DIRNAME/first-dir/file2,v" \
".*$CVSROOT_DIRNAME/first-dir/file2,v -> file1,v"
+
+ # CVS was failing to check both the symlink and the file
+ # for timestamp changes for a while. Test that.
+ rm file1
+ if $remote; then
+ dotest rcslib-symlink-3ar "${testcvs} -q up file1" "U file1"
+ else
+ dotest rcslib-symlink-3a "${testcvs} -q up file1" \
+"${PROG} [a-z]*: warning: file1 was lost
+U file1"
+ fi
+ echo "This is a change" >> file1
+ dotest rcslib-symlink-3b "${testcvs} ci -m because file1" \
+"Checking in file1;
+${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
+new revision: 1\.1\.2\.[0-9]*; previous revision: 1\.1\.2\.[0-9]*
+done"
+ dotest rcslib-symlink-3c "${testcvs} update file2" "[UP] file2"
+
+ echo some new text >file3
+ dotest rcslib-symlink-3d "${testcvs} -Q add file3" ''
+ dotest rcslib-symlink-3e "${testcvs} -Q ci -mtest file3" \
+"RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file3,v
+done
+Checking in file3;
+${CVSROOT_DIRNAME}/first-dir/Attic/file3,v <-- file3
+new revision: 1\.1\.2\.1; previous revision: 1\.1
+done"
+ rm ${CVSROOT_DIRNAME}/first-dir/file2,v
+ dotest rcslib-symlink-3f "ln -s Attic/file3,v ${CVSROOT_DIRNAME}/first-dir/file2,v"
+ dotest rcslib-symlink-3g "${testcvs} update file2" "U file2"
+
+ # restore the link to file1 for the following tests
+ dotest rcslib-symlink-3i "${testcvs} -Q rm -f file3" ''
+ dotest rcslib-symlink-3j "${testcvs} -Q ci -mwhatever file3" \
+"Removing file3;
+${CVSROOT_DIRNAME}/first-dir/Attic/file3,v <-- file3
+new revision: delete; previous revision: 1\.1\.2\.1
+done"
+ rm ${CVSROOT_DIRNAME}/first-dir/file2,v
+ rm -f ${CVSROOT_DIRNAME}/first-dir/Attic/file3,v
+ dotest rcslib-symlink-3h "ln -s file1,v ${CVSROOT_DIRNAME}/first-dir/file2,v"
+
# Test 5 reveals a problem with having symlinks in the
# repository. CVS will try to tag both of the files
# separately. After processing one, it will do the same
@@ -6024,7 +6238,7 @@ done"
dotest rcslib-symlink-5 "${testcvs} tag the_tag" \
"${PROG} [a-z]*: Tagging .
T file1
-W file2 : the_tag already exists on version 1.1.2.1 : NOT MOVING tag to version 1.1.2.2"
+W file2 : the_tag already exists on version 1.1.2.3 : NOT MOVING tag to version 1.1.2.1"
dotest rcslib-symlink-6 "ls -l $CVSROOT_DIRNAME/first-dir/file2,v" \
".*$CVSROOT_DIRNAME/first-dir/file2,v -> file1,v"
@@ -6294,7 +6508,7 @@ done"
"
- ${PROG} checkout -jvendor-branch:yesterday -jvendor-branch first-dir
+ ${PROG} checkout -j<prev_rel_tag> -jjunk-2_0 first-dir
2 conflicts created by this import.
C first-dir/imported-f1
C first-dir/imported-f2
@@ -6404,7 +6618,7 @@ No conflicts created by this import"
"
- ${PROG} -d ${CVSROOT} checkout -jfreemunger:yesterday -jfreemunger first-dir
+ ${PROG} -d ${CVSROOT} checkout -j<prev_rel_tag> -jfreemunger-1_0 first-dir
2 conflicts created by this import.
C first-dir/file1
C first-dir/file2
@@ -6529,27 +6743,12 @@ ${PROG} [a-z]*: Updating bdir/subdir"
"${testcvs} -q rtag -b -r release wip_test first-dir" ""
dotest importc-6 "${testcvs} -q update -r wip_test" "M cdir/cfile"
- if $remote; then
- # Remote doesn't have the bug in the first place.
- dotest importc-7r "${testcvs} -q ci -m modify -r wip_test" \
+ # This used to fail in local mode
+ dotest importc-7 "${testcvs} -q ci -m modify -r wip_test" \
"Checking in cdir/cfile;
${CVSROOT_DIRNAME}/first-dir/cdir/cfile,v <-- cfile
new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1
done"
- else
- # This checkin should just succeed. That it doesn't is a
- # bug (CVS 1.9.16 through the present seem to have it; CVS
- # 1.9 did not).
- dotest_fail importc-7 "${testcvs} -q ci -m modify -r wip_test" \
-"${PROG} [a-z]*: in directory adir/sub1/ssdir:
-${PROG} \[[a-z]* aborted\]: there is no version here; do .${PROG} checkout. first"
- # The workaround is to leave off the "-r wip_test".
- dotest importc-7a "${testcvs} -q ci -m modify" \
-"Checking in cdir/cfile;
-${CVSROOT_DIRNAME}/first-dir/cdir/cfile,v <-- cfile
-new revision: 1\.1\.1\.1\.2\.1; previous revision: 1\.1\.1\.1
-done"
- fi
# TODO: should also be testing "import -d" when we update
# an existing file.
@@ -7091,7 +7290,7 @@ U first-dir/file2
U first-dir/file8'
cd first-dir
dotest join-twobranch-2 "${testcvs} -q update -rbr2 -jbranch" \
-"cvs [a-z]*: file1 is no longer in the repository
+"$PROG [a-z]*: file1 is no longer in the repository
U file1
U file2
RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v
@@ -8509,6 +8708,7 @@ fish"
# -d: modules, modules3, cvsadm
# -i, -o, -u, -e, -t: modules5
# slashes in module names: modules3
+ # invalid module definitions: modules6
############################################################
# These tests are to make sure that administrative files get
@@ -9440,9 +9640,13 @@ U CVSROOT/rcsinfo
U CVSROOT/taginfo
U CVSROOT/verifymsg"
+ # FIXCVS: The sleep in the following script helps avoid out of
+ # order messages, but we really need to figure out how to fix
+ # cvs to prevent them in the first place.
for i in checkin checkout update export tag; do
cat >> ${CVSROOT_DIRNAME}/$i.sh <<EOF
#! /bin/sh
+sleep 1
echo "$i script invoked in \`pwd\`"
echo "args: \$@"
EOF
@@ -9466,12 +9670,13 @@ ${PROG} [a-z]*: Rebuilding administrative file database"
cd ..
rm -rf first-dir
+
# Test that real modules check out to realmodule/a, not subdir/a.
if $remote; then
dotest modules5-8 "${testcvs} co realmodule" \
"U realmodule/a
${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .realmodule..
-checkout script invoked in .*
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
args: realmodule"
else
dotest modules5-8 "${testcvs} co realmodule" \
@@ -9484,11 +9689,11 @@ args: realmodule"
dotest_fail modules5-10 "test -f realmodule/b" ""
if $remote; then
dotest modules5-11 "${testcvs} -q co realmodule" \
-"checkout script invoked in .*
+"checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
args: realmodule"
dotest modules5-12 "${testcvs} -q update" \
"${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
-update script invoked in /.*/realmodule
+update script invoked in ${tmp}/cvs-serv[0-9a-z]*/realmodule
args: ${CVSROOT_DIRNAME}/first-dir/subdir"
echo "change" >>realmodule/a
dotest modules5-13 "${testcvs} -q ci -m." \
@@ -9497,7 +9702,7 @@ ${CVSROOT_DIRNAME}/first-dir/subdir/a,v <-- a
new revision: 1\.2; previous revision: 1\.1
done
${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkin\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
-checkin script invoked in /.*/realmodule
+checkin script invoked in ${tmp}/cvs-serv[0-9a-z]*/realmodule
args: ${CVSROOT_DIRNAME}/first-dir/subdir"
else
dotest modules5-11 "${testcvs} -q co realmodule" \
@@ -9523,12 +9728,12 @@ Are you sure you want to release (and delete) directory .realmodule.: "
dotest modules5-15 "${testcvs} -q rtag -Dnow MYTAG realmodule" \
"tag script invoked in ${TESTDIR}/1
args: realmodule MYTAG" \
-"tag script invoked in $tmp/cvs-serv[0-9a-z]*
+"tag script invoked in ${tmp}/cvs-serv[0-9a-z]*
args: realmodule MYTAG"
if $remote; then
dotest modules5-16 "${testcvs} -q export -r MYTAG realmodule" \
"U realmodule/a
-export script invoked in .*
+export script invoked in ${tmp}/cvs-serv[0-9a-z]*
args: realmodule"
else
dotest modules5-16 "${testcvs} -q export -r MYTAG realmodule" \
@@ -9536,57 +9741,87 @@ args: realmodule"
export script invoked in ${TESTDIR}/1
args: realmodule"
fi
+ rm -r realmodule
dotest_fail modules5-17 "${testcvs} co realmodule/a" \
"${PROG}"' [a-z]*: module `realmodule/a'\'' is a request for a file in a module which is not a directory' \
"${PROG}"' [a-z]*: module `realmodule/a'\'' is a request for a file in a module which is not a directory
'"${PROG}"' \[[a-z]* aborted\]: cannot expand modules'
- # FIXCVS: The client gets confused in these cases and tries to
- # store the scripts in the wrong places.
- if $remote; then :; else
- # Now test the ability to check out a single file from a directory
+ # Now test the ability to check out a single file from a directory
+ if $remote; then
+ dotest modules5-18 "${testcvs} co dirmodule/a" \
+"U dirmodule/a
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .dirmodule..
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: dirmodule"
+ else
dotest modules5-18 "${testcvs} co dirmodule/a" \
"U dirmodule/a
${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .dirmodule..
checkout script invoked in ${TESTDIR}/1
args: dirmodule"
- dotest modules5-19 "test -d dirmodule && test -f dirmodule/a" ""
- dotest_fail modules5-20 "test -f dirmodule/b" ""
- dotest modules5-21 "echo yes | ${testcvs} release -d dirmodule" \
+ fi
+ dotest modules5-19 "test -d dirmodule && test -f dirmodule/a" ""
+ dotest_fail modules5-20 "test -f dirmodule/b" ""
+ dotest modules5-21 "echo yes | ${testcvs} release -d dirmodule" \
"You have \[0\] altered files in this repository\.
Are you sure you want to release (and delete) directory .dirmodule.: "
- # Now test the ability to correctly reject a non-existent filename.
- # For maximum studliness we would check that an error message is
- # being output.
- # We accept a zero exit status because it is what CVS does
- # (Dec 95). Probably the exit status should be nonzero,
- # however.
+ # Now test the ability to correctly reject a non-existent filename.
+ # For maximum studliness we would check that an error message is
+ # being output.
+ # We accept a zero exit status because it is what CVS does
+ # (Dec 95). Probably the exit status should be nonzero,
+ # however.
+ if $remote; then
+ dotest modules5-22 "${testcvs} co dirmodule/nonexist" \
+"${PROG} [a-z]*: warning: new-born dirmodule/nonexist has disappeared
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .dirmodule..
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: dirmodule"
+ else
dotest modules5-22 "${testcvs} co dirmodule/nonexist" \
"${PROG} [a-z]*: warning: new-born dirmodule/nonexist has disappeared
${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .dirmodule..
checkout script invoked in ${TESTDIR}/1
args: dirmodule"
+ fi
+ # We tolerate the creation of the dirmodule directory, since that
+ # is what CVS does, not because we view that as preferable to not
+ # creating it.
+ dotest_fail modules5-23 "test -f dirmodule/a || test -f dirmodule/b" ""
+ rm -r dirmodule
- # We tolerate the creation of the dirmodule directory, since that
- # is what CVS does, not because we view that as preferable to not
- # creating it.
- dotest_fail modules5-23 "test -f dirmodule/a || test -f dirmodule/b" ""
- rm -r dirmodule
-
- # Now test that a module using -d checks out to the specified
- # directory.
+ # Now test that a module using -d checks out to the specified
+ # directory.
+ if $remote; then
+ dotest modules5-24 "${testcvs} -q co namedmodule" \
+"U nameddir/a
+U nameddir/b
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: nameddir"
+ else
dotest modules5-24 "${testcvs} -q co namedmodule" \
"U nameddir/a
U nameddir/b
checkout script invoked in ${TESTDIR}/1
args: nameddir"
- dotest modules5-25 "test -f nameddir/a && test -f nameddir/b" ""
- echo add line >>nameddir/a
- # This seems suspicious: when we checkout an existing directory,
- # the checkout script gets executed in addition to the update
- # script. Is that by design or accident?
+ fi
+ dotest modules5-25 "test -f nameddir/a && test -f nameddir/b" ""
+ echo add line >>nameddir/a
+ # This seems suspicious: when we checkout an existing directory,
+ # the checkout script gets executed in addition to the update
+ # script. Is that by design or accident?
+ if $remote; then
+ dotest modules5-26 "${testcvs} -q co namedmodule" \
+"M nameddir/a
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
+update script invoked in ${tmp}/cvs-serv[0-9a-z]*/nameddir
+args: ${CVSROOT_DIRNAME}/first-dir/subdir
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: nameddir"
+ else
dotest modules5-26 "${testcvs} -q co namedmodule" \
"M nameddir/a
${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
@@ -9594,7 +9829,18 @@ update script invoked in ${TESTDIR}/1/nameddir
args: ${CVSROOT_DIRNAME}/first-dir/subdir
checkout script invoked in ${TESTDIR}/1
args: nameddir"
- rm nameddir/a
+ fi
+ rm nameddir/a
+
+ if $remote; then
+ dotest modules5-27 "${testcvs} -q co namedmodule" \
+"U nameddir/a
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
+update script invoked in ${tmp}/cvs-serv[0-9a-z]*/nameddir
+args: ${CVSROOT_DIRNAME}/first-dir/subdir
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: nameddir"
+ else
dotest modules5-27 "${testcvs} -q co namedmodule" \
"U nameddir/a
${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
@@ -9602,15 +9848,248 @@ update script invoked in ${TESTDIR}/1/nameddir
args: ${CVSROOT_DIRNAME}/first-dir/subdir
checkout script invoked in ${TESTDIR}/1
args: nameddir"
- dotest modules5-28 "echo yes | ${testcvs} release -d nameddir" \
+ fi
+ dotest modules5-28 "echo yes | ${testcvs} release -d nameddir" \
"You have \[0\] altered files in this repository\.
Are you sure you want to release (and delete) directory .nameddir.: "
+
+ # Now try the same tests with -d on command line
+ # FIXCVS? The manual says the modules programs get the module name,
+ # but they really get the directory name.
+ if $remote; then
+ dotest modules5-29 "${testcvs} co -d mydir realmodule" \
+"U mydir/a
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir..
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: mydir"
+ else
+ dotest modules5-29 "${testcvs} co -d mydir realmodule" \
+"U mydir/a
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir..
+checkout script invoked in ${TESTDIR}/1
+args: mydir"
+ fi
+ dotest modules5-30 "test -d mydir && test -f mydir/a" ""
+ dotest_fail modules5-31 "test -d realmodule || test -f mydir/b" ""
+ if $remote; then
+ dotest modules5-32 "${testcvs} -q co -d mydir realmodule" \
+"checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: mydir"
+ dotest modules5-33 "${testcvs} -q update" \
+"${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
+update script invoked in ${tmp}/cvs-serv[0-9a-z]*/mydir
+args: ${CVSROOT_DIRNAME}/first-dir/subdir"
+ echo "change" >>mydir/a
+ dotest modules5-34 "${testcvs} -q ci -m." \
+"Checking in mydir/a;
+${CVSROOT_DIRNAME}/first-dir/subdir/a,v <-- a
+new revision: 1\.3; previous revision: 1\.2
+done
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkin\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
+checkin script invoked in ${tmp}/cvs-serv[0-9a-z]*/mydir
+args: ${CVSROOT_DIRNAME}/first-dir/subdir"
+ else
+ dotest modules5-32 "${testcvs} -q co -d mydir realmodule" \
+"checkout script invoked in ${TESTDIR}/1
+args: mydir"
+ dotest modules5-33 "${testcvs} -q update" \
+"${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
+update script invoked in ${TESTDIR}/1/mydir
+args: ${CVSROOT_DIRNAME}/first-dir/subdir"
+ echo "change" >>mydir/a
+ dotest modules5-34 "${testcvs} -q ci -m." \
+"Checking in mydir/a;
+${CVSROOT_DIRNAME}/first-dir/subdir/a,v <-- a
+new revision: 1\.3; previous revision: 1\.2
+done
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkin\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
+checkin script invoked in ${TESTDIR}/1/mydir
+args: ${CVSROOT_DIRNAME}/first-dir/subdir"
+ fi
+ dotest modules5-35 "echo yes | ${testcvs} release -d mydir" \
+"You have \[0\] altered files in this repository\.
+Are you sure you want to release (and delete) directory .mydir.: "
+ if $remote; then
+ dotest modules5-36 "${testcvs} -q rtag -Dnow MYTAG2 realmodule" \
+"tag script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: realmodule MYTAG2"
+ dotest modules5-37 "${testcvs} -q export -r MYTAG2 -d mydir realmodule" \
+"U mydir/a
+export script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: mydir"
+ else
+ dotest modules5-36 "${testcvs} -q rtag -Dnow MYTAG2 realmodule" \
+"tag script invoked in ${TESTDIR}/1
+args: realmodule MYTAG2"
+ dotest modules5-37 "${testcvs} -q export -r MYTAG2 -d mydir realmodule" \
+"U mydir/a
+export script invoked in ${TESTDIR}/1
+args: mydir"
+ fi
+ rm -r mydir
+
+ # Now test the ability to check out a single file from a directory
+ if $remote; then
+ dotest modules5-38 "${testcvs} co -d mydir dirmodule/a" \
+"U mydir/a
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir..
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: mydir"
+ else
+ dotest modules5-38 "${testcvs} co -d mydir dirmodule/a" \
+"U mydir/a
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir..
+checkout script invoked in ${TESTDIR}/1
+args: mydir"
+ fi
+ dotest modules5-39 "test -d mydir && test -f mydir/a" ""
+ dotest_fail modules5-40 "test -d dirmodule || test -f mydir/b" ""
+ dotest modules5-41 "echo yes | ${testcvs} release -d mydir" \
+"You have \[0\] altered files in this repository\.
+Are you sure you want to release (and delete) directory .mydir.: "
+
+ # Now test the ability to correctly reject a non-existent filename.
+ # For maximum studliness we would check that an error message is
+ # being output.
+ # We accept a zero exit status because it is what CVS does
+ # (Dec 95). Probably the exit status should be nonzero,
+ # however.
+ if $remote; then
+ dotest modules5-42 "${testcvs} co -d mydir dirmodule/nonexist" \
+"${PROG} [a-z]*: warning: new-born mydir/nonexist has disappeared
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir..
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: mydir"
+ else
+ dotest modules5-42 "${testcvs} co -d mydir dirmodule/nonexist" \
+"${PROG} [a-z]*: warning: new-born mydir/nonexist has disappeared
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/checkout\.sh. .mydir..
+checkout script invoked in ${TESTDIR}/1
+args: mydir"
+ fi
+ # We tolerate the creation of the mydir directory, since that
+ # is what CVS does, not because we view that as preferable to not
+ # creating it.
+ dotest_fail modules5-43 "test -f mydir/a || test -f mydir/b" ""
+ rm -r mydir
+
+ if $remote; then
+ dotest modules5-44 "${testcvs} -q co -d mydir namedmodule" \
+"U mydir/a
+U mydir/b
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: mydir"
+ else
+ dotest modules5-44 "${testcvs} -q co -d mydir namedmodule" \
+"U mydir/a
+U mydir/b
+checkout script invoked in ${TESTDIR}/1
+args: mydir"
+ fi
+ dotest modules5-45 "test -f mydir/a && test -f mydir/b" ""
+ dotest_fail modules5-46 "test -d namedir"
+ echo add line >>mydir/a
+ # This seems suspicious: when we checkout an existing directory,
+ # the checkout script gets executed in addition to the update
+ # script. Is that by design or accident?
+ if $remote; then
+ dotest modules5-47 "${testcvs} -q co -d mydir namedmodule" \
+"M mydir/a
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
+update script invoked in ${tmp}/cvs-serv[0-9a-z]*/mydir
+args: ${CVSROOT_DIRNAME}/first-dir/subdir
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: mydir"
+ else
+ dotest modules5-47 "${testcvs} -q co -d mydir namedmodule" \
+"M mydir/a
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
+update script invoked in ${TESTDIR}/1/mydir
+args: ${CVSROOT_DIRNAME}/first-dir/subdir
+checkout script invoked in ${TESTDIR}/1
+args: mydir"
fi
+ rm mydir/a
+
+ if $remote; then
+ dotest modules5-48 "${testcvs} -q co -d mydir namedmodule" \
+"U mydir/a
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
+update script invoked in ${tmp}/cvs-serv[0-9a-z]*/mydir
+args: ${CVSROOT_DIRNAME}/first-dir/subdir
+checkout script invoked in ${tmp}/cvs-serv[0-9a-z]*
+args: mydir"
+ else
+ dotest modules5-48 "${testcvs} -q co -d mydir namedmodule" \
+"U mydir/a
+${PROG} [a-z]*: Executing ..${CVSROOT_DIRNAME}/update\.sh. .${CVSROOT_DIRNAME}/first-dir/subdir..
+update script invoked in ${TESTDIR}/1/mydir
+args: ${CVSROOT_DIRNAME}/first-dir/subdir
+checkout script invoked in ${TESTDIR}/1
+args: mydir"
+ fi
+ dotest modules5-49 "echo yes | ${testcvs} release -d mydir" \
+"You have \[0\] altered files in this repository\.
+Are you sure you want to release (and delete) directory .mydir.: "
cd ..
rm -rf 1 ${CVSROOT_DIRNAME}/first-dir ${CVSROOT_DIRNAME}/*.sh
;;
+ modules6)
+ #
+ # Test invalid module definitions
+ #
+ # See the header comment for the `modules' test for an index of
+ # the complete suite of modules tests.
+ #
+
+ #
+ # There was a bug in CVS through 1.11.1p1 where a bad module name
+ # would cause the previous line to be parsed as the module
+ # definition. This test proves this doesn't happen anymore.
+ #
+ mkdir modules6
+ cd modules6
+ dotest module6-setup-1 "${testcvs} -Q co CVSROOT" ""
+ cd CVSROOT
+ echo "longmodulename who cares" >modules
+ echo "badname" >>modules
+ # This test almost isn't setup since it generates the error message
+ # we are looking for if `-Q' isn't specified, but I want to test the
+ # filename in the message later.
+ dotest modules6-setup-2 "${testcvs} -Q ci -mbad-modules" \
+"Checking in modules;
+${CVSROOT_DIRNAME}/CVSROOT/modules,v <-- modules
+new revision: [0-9.]*; previous revision: [0-9.]*
+done
+${PROG} [a-z]*: Rebuilding administrative file database"
+
+ # Here's where CVS would report not being able to find `lename'
+ cd ..
+ dotest_fail modules6-1 "${testcvs} -q co badname" \
+"${PROG} [a-z]*: warning: NULL value for key .badname. at line 2 of .${CVSROOT_DIRNAME}/CVSROOT/modules.
+${PROG} [a-z]*: cannot find module .badname. - ignored" \
+"${PROG} [a-z]*: warning: NULL value for key .badname. at line 2 of .${CVSROOT_DIRNAME}/CVSROOT/modules.
+${PROG} [a-z]*: cannot find module .badname. - ignored
+${PROG} \[checkout aborted\]: cannot expand modules"
+
+ # cleanup
+ cd CVSROOT
+ echo "# empty modules file" >modules
+ dotest modules6-cleanup-1 "${testcvs} -Q ci -mempty-modules" \
+"Checking in modules;
+${CVSROOT_DIRNAME}/CVSROOT/modules,v <-- modules
+new revision: [0-9.]*; previous revision: [0-9.]*
+done
+${PROG} [a-z]*: Rebuilding administrative file database"
+ cd ../..
+
+ if $keep; then :; else
+ rm -r modules6
+ fi
+ ;;
+
mkmodules-temp-file-removal)
# When a file listed in checkoutlist doesn't exist, cvs-1.10.4
# would fail to remove the CVSROOT/.#[0-9]* temporary file it
@@ -10759,8 +11238,7 @@ U dir/dir2d2-2/sub2d2-2/file2-2"
##################################################
dotest_fail cvsadm-2d3-1 "${testcvs} co -d dir/dir2 1mod" \
-"${PROG} [a-z]*: cannot chdir to dir: No such file or directory
-${PROG} [a-z]*: ignoring module 1mod"
+"${PROG} \[checkout aborted\]: could not change directory to requested checkout directory .dir.: No such file or directory"
if $remote; then :; else
# Remote can't handle this, even with the "mkdir dir".
@@ -11269,12 +11747,11 @@ U ${TESTDIR}/1/file1"
# this is the behavior of CVS 1.9 and earlier.
if $remote; then :; else
dotest_fail abspath-3.1 "${testcvs} co -d ${TESTDIR}/1/2 mod1" \
-"${PROG} [a-z]*: cannot chdir to 1: No such file or directory
-${PROG} [a-z]*: ignoring module mod1"
+"${PROG} \[checkout aborted\]: could not change directory to requested checkout directory .${TESTDIR}/1.: No such file or directory"
fi
dotest_fail abspath-3.2 "${testcvs} co -d 1/2 mod1" \
-"${PROG} [a-z]*: cannot chdir to 1: No such file or directory
-${PROG} [a-z]*: ignoring module mod1"
+"${PROG} \[checkout aborted\]: could not change directory to requested checkout directory .1.: No such file or directory"
+
mkdir 1
if $remote; then
@@ -11282,8 +11759,7 @@ ${PROG} [a-z]*: ignoring module mod1"
# a bug, it should only need to exist on the client side.
# See also cvsadm-2d3.
dotest_fail abspath-3a "${testcvs} co -d 1/2 mod1" \
-"${PROG} [a-z]*: cannot chdir to 1: No such file or directory
-${PROG} [a-z]*: ignoring module mod1"
+"${PROG} \[server aborted\]: could not change directory to requested checkout directory .1.: No such file or directory"
cd 1
dotest abspath-3a-try2 "${testcvs} co -d 2 mod1" \
"${PROG} [a-z]*: Updating 2
@@ -11652,6 +12128,21 @@ ${PROG} [a-z]*: Rebuilding administrative file database"
rm -rf ${CVSROOT_DIRNAME}/top-dir ${CVSROOT_DIRNAME}/second-dir
;;
+ checkout_repository)
+ dotest_fail check_repository-1 "${testcvs} co -d ${CVSROOT_DIRNAME} CVSROOT" \
+"${PROG} \[checkout aborted\]: Cannot check out files into the repository itself"
+ cd ${CVSROOT_DIRNAME}
+ dotest_fail check_repository-2 "${testcvs} co CVSROOT" \
+"${PROG} \[checkout aborted\]: Cannot check out files into the repository itself"
+ dotest check_repository-3 "${testcvs} co -p CVSROOT/modules >/dev/null" \
+"===================================================================
+Checking out CVSROOT/modules
+RCS: ${CVSROOT_DIRNAME}/CVSROOT/modules,v
+VERS: 1\.[0-9]*
+\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*"
+ cd ${TESTDIR}
+ ;;
+
mflag)
for message in '' ' ' '
' ' test' ; do
@@ -11874,6 +12365,63 @@ xCVS: Tag: br
xCVS: file2
xCVS: ----------------------------------------------------------------------
============================================================================="
+
+ # Test CVS's response to an unchanged log message
+ cat >${TESTDIR}/editme <<EOF
+#!${TESTSHELL}
+sleep 1
+exit 0
+EOF
+ chmod +x ${TESTDIR}/editme
+ dotest_fail editor-emptylog-1 "echo a |${testcvs} -e ${TESTDIR}/editme ci -f file1" \
+"
+Log message unchanged or not specified
+a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs
+Action: (continue) ${PROG} \[[a-z]* aborted\]: aborted by user"
+
+ # Test CVS's response to an empty log message
+ cat >${TESTDIR}/editme <<EOF
+#!${TESTSHELL}
+sleep 1
+cat /dev/null >\$1
+exit 0
+EOF
+ chmod +x ${TESTDIR}/editme
+ dotest_fail editor-emptylog-1 "echo a |${testcvs} -e ${TESTDIR}/editme ci -f file1" \
+"
+Log message unchanged or not specified
+a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs
+Action: (continue) ${PROG} \[[a-z]* aborted\]: aborted by user"
+
+ # Test CVS's response to a log message with one blank line
+ cat >${TESTDIR}/editme <<EOF
+#!${TESTSHELL}
+sleep 1
+echo >\$1
+exit 0
+EOF
+ chmod +x ${TESTDIR}/editme
+ dotest_fail editor-emptylog-1 "echo a |${testcvs} -e ${TESTDIR}/editme ci -f file1" \
+"
+Log message unchanged or not specified
+a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs
+Action: (continue) ${PROG} \[[a-z]* aborted\]: aborted by user"
+
+ # Test CVS's response to a log message with only comments
+ cat >${TESTDIR}/editme <<EOF
+#!${TESTSHELL}
+sleep 1
+cat \$1 >${TESTDIR}/edit.new
+mv ${TESTDIR}/edit.new \$1
+exit 0
+EOF
+ chmod +x ${TESTDIR}/editme
+ dotest_fail editor-emptylog-1 "echo a |${testcvs} -e ${TESTDIR}/editme ci -f file1" \
+"
+Log message unchanged or not specified
+a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs
+Action: (continue) ${PROG} \[[a-z]* aborted\]: aborted by user"
+
cd ../..
rm -r 1
rm ${TESTDIR}/editme
@@ -12931,7 +13479,7 @@ Are you sure you want to release (and delete) directory .second-dir': "
cd setup
echo file1 >file1
dotest ignore-on-branch-setup-2 "$testcvs -q add file1" \
-"$PROG [a-z]*: use .cvs commit. to add this file permanently"
+"$PROG [a-z]*: use .$PROG commit. to add this file permanently"
dotest ignore-on-branch-setup-3 "$testcvs -q ci -mfile1 file1" \
"RCS file: $CVSROOT_DIRNAME/ignore-on-branch/file1,v
done
@@ -12942,7 +13490,7 @@ done"
dotest ignore-on-branch-setup-4 "$testcvs -q tag -b branch" 'T file1'
echo file2 >file2
dotest ignore-on-branch-setup-5 "$testcvs -q add file2" \
-"$PROG [a-z]*: use .cvs commit. to add this file permanently"
+"$PROG [a-z]*: use .$PROG commit. to add this file permanently"
dotest ignore-on-branch-setup-6 "$testcvs -q ci -mtrunk file2" \
"RCS file: $CVSROOT_DIRNAME/ignore-on-branch/file2,v
done
@@ -12973,7 +13521,7 @@ T file1'
dotest ignore-on-branch-3 "$testcvs -q tag -b branch2" 'T file1'
fi
dotest ignore-on-branch-4 "$testcvs -q add file2" \
-"$PROG [a-z]*: use .cvs commit. to add this file permanently"
+"$PROG [a-z]*: use .$PROG commit. to add this file permanently"
dotest ignore-on-branch-5 "$testcvs -q ci -mbranch file2" \
"Checking in file2;
$CVSROOT_DIRNAME/ignore-on-branch/file2,v <-- file2
@@ -13830,33 +14378,45 @@ File: foo\.exe Status: Up-to-date
mkdir binwrap3/sub2
mkdir binwrap3/sub2/subsub
- echo "*.c0 -k 'b'" > binwrap3/.cvswrappers
+ echo "bar*" > binwrap3/.cvswrappers
+ echo "*.c0 -k 'b'" >> binwrap3/.cvswrappers
echo "whatever -k 'b'" >> binwrap3/.cvswrappers
echo ${binwrap3_text} > binwrap3/foo-b.c0
+ echo ${binwrap3_text} > binwrap3/bar-t.c0
echo ${binwrap3_text} > binwrap3/foo-b.sb
+ echo ${binwrap3_text} > binwrap3/foo-t.sb
echo ${binwrap3_text} > binwrap3/foo-t.c1
echo ${binwrap3_text} > binwrap3/foo-t.st
- echo "*.c1 -k 'b'" > binwrap3/sub1/.cvswrappers
+ echo "bar* -k 'kv'" > binwrap3/sub1/.cvswrappers
+ echo "*.c1 -k 'b'" >> binwrap3/sub1/.cvswrappers
echo "whatever -k 'b'" >> binwrap3/sub1/.cvswrappers
echo ${binwrap3_text} > binwrap3/sub1/foo-b.c1
+ echo ${binwrap3_text} > binwrap3/sub1/bar-t.c1
echo ${binwrap3_text} > binwrap3/sub1/foo-b.sb
+ echo ${binwrap3_text} > binwrap3/sub1/foo-t.sb
echo ${binwrap3_text} > binwrap3/sub1/foo-t.c0
echo ${binwrap3_text} > binwrap3/sub1/foo-t.st
- echo "*.st -k 'b'" > binwrap3/sub2/.cvswrappers
+ echo "bar*" > binwrap3/sub2/.cvswrappers
+ echo "*.st -k 'b'" >> binwrap3/sub2/.cvswrappers
echo ${binwrap3_text} > binwrap3/sub2/foo-b.sb
+ echo ${binwrap3_text} > binwrap3/sub2/foo-t.sb
echo ${binwrap3_text} > binwrap3/sub2/foo-b.st
+ echo ${binwrap3_text} > binwrap3/sub2/bar-t.st
echo ${binwrap3_text} > binwrap3/sub2/foo-t.c0
echo ${binwrap3_text} > binwrap3/sub2/foo-t.c1
echo ${binwrap3_text} > binwrap3/sub2/foo-t.c2
echo ${binwrap3_text} > binwrap3/sub2/foo-t.c3
- echo "*.c3 -k 'b'" > binwrap3/sub2/subsub/.cvswrappers
+ echo "bar* -k 'kv'" > binwrap3/sub2/subsub/.cvswrappers
+ echo "*.c3 -k 'b'" >> binwrap3/sub2/subsub/.cvswrappers
echo "foo -k 'b'" >> binwrap3/sub2/subsub/.cvswrappers
echo "c0* -k 'b'" >> binwrap3/sub2/subsub/.cvswrappers
echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-b.c3
+ echo ${binwrap3_text} > binwrap3/sub2/subsub/bar-t.c3
echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-b.sb
+ echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-t.sb
echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-t.c0
echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-t.c1
echo ${binwrap3_text} > binwrap3/sub2/subsub/foo-t.c2
@@ -13868,7 +14428,8 @@ File: foo\.exe Status: Up-to-date
# This destroys anything currently in cvswrappers, but
# presumably other tests will take care of it themselves if
# they use cvswrappers:
- echo "foo*.sb -k 'b'" > cvswrappers
+ echo "foo-t.sb" > cvswrappers
+ echo "foo*.sb -k 'b'" >> cvswrappers
dotest binwrap3-2 "${testcvs} -q ci -m cvswrappers-mod" \
"Checking in cvswrappers;
${CVSROOT_DIRNAME}/CVSROOT/cvswrappers,v <-- cvswrappers
@@ -13941,6 +14502,12 @@ done"
dotest binwrap3-top4 "grep foo-t.st ./CVS/Entries" \
"/foo-t.st/1.1.1.1/[A-Za-z0-9 :]*//"
+ dotest binwrap3-top5 "grep foo-t.sb ./CVS/Entries" \
+ "/foo-t.sb/1.1.1.1/[A-Za-z0-9 :]*//"
+
+ dotest binwrap3-top6 "grep bar-t.c0 ./CVS/Entries" \
+ "/bar-t.c0/1.1.1.1/[A-Za-z0-9 :]*//"
+
dotest binwrap3-sub1-1 "grep foo-b.c1 sub1/CVS/Entries" \
"/foo-b.c1/1.1.1.1/[A-Za-z0-9 :]*/-kb/"
@@ -13953,6 +14520,12 @@ done"
dotest binwrap3-sub1-4 "grep foo-t.st sub1/CVS/Entries" \
"/foo-t.st/1.1.1.1/[A-Za-z0-9 :]*//"
+ dotest binwrap3-sub1-5 "grep foo-t.sb sub1/CVS/Entries" \
+ "/foo-t.sb/1.1.1.1/[A-Za-z0-9 :]*//"
+
+ dotest binwrap3-sub1-6 "grep bar-t.c1 sub1/CVS/Entries" \
+ "/bar-t.c1/1.1.1.1/[A-Za-z0-9 :]*//"
+
dotest binwrap3-sub2-1 "grep foo-b.sb sub2/CVS/Entries" \
"/foo-b.sb/1.1.1.1/[A-Za-z0-9 :]*/-kb/"
@@ -13971,6 +14544,12 @@ done"
dotest binwrap3-sub2-6 "grep foo-t.c3 sub2/CVS/Entries" \
"/foo-t.c3/1.1.1.1/[A-Za-z0-9 :]*//"
+ dotest binwrap3-sub2-7 "grep foo-t.sb sub2/CVS/Entries" \
+ "/foo-t.sb/1.1.1.1/[A-Za-z0-9 :]*//"
+
+ dotest binwrap3-sub2-8 "grep bar-t.st sub2/CVS/Entries" \
+ "/bar-t.st/1.1.1.1/[A-Za-z0-9 :]*//"
+
dotest binwrap3-subsub1 "grep foo-b.c3 sub2/subsub/CVS/Entries" \
"/foo-b.c3/1.1.1.1/[A-Za-z0-9 :]*/-kb/"
@@ -13989,6 +14568,12 @@ done"
dotest binwrap3-subsub6 "grep foo-t.st sub2/subsub/CVS/Entries" \
"/foo-t.st/1.1.1.1/[A-Za-z0-9 :]*//"
+ dotest binwrap3-subsub7 "grep foo-t.sb sub2/subsub/CVS/Entries" \
+ "/foo-t.sb/1.1.1.1/[A-Za-z0-9 :]*//"
+
+ dotest binwrap3-subsub8 "grep bar-t.c3 sub2/subsub/CVS/Entries" \
+ "/bar-t.c3/1.1.1.1/[A-Za-z0-9 :]*//"
+
dotest binwrap3-sub2-add1 "grep file1.newbin sub2/CVS/Entries" \
"/file1.newbin/1.1/[A-Za-z0-9 :]*/-kb/"
dotest binwrap3-sub2-add2 "grep file1.txt sub2/CVS/Entries" \
@@ -14212,14 +14797,33 @@ ${PROG} [a-z]*: Rebuilding administrative file database"
#!${TESTSHELL}
if head -1 < \$1 | grep '^BugId:[ ]*[0-9][0-9]*$' > /dev/null; then
exit 0
+elif head -1 < \$1 | grep '^BugId:[ ]*new$' > /dev/null; then
+ echo A new bugid was found. >> \$1
+ exit 0
else
echo "No BugId found."
sleep 1
exit 1
fi
EOF
- chmod +x ${TESTDIR}/vscript
- echo "^first-dir ${TESTDIR}/vscript" >>verifymsg
+ cat >${TESTDIR}/vscript2 <<EOF
+#!${TESTSHELL}
+if test -f CVS/Repository; then
+ repo=\`cat CVS/Repository\`
+else
+ repo=\`pwd\`
+fi
+echo \$repo
+if echo "\$repo" |grep yet-another/ >/dev/null 2>&1; then
+ exit 1
+else
+ exit 0
+fi
+EOF
+ chmod +x ${TESTDIR}/vscript*
+ echo "^first-dir/yet-another\\(/\\|\$\\) ${TESTDIR}/vscript2" >>verifymsg
+ echo "^first-dir\\(/\\|\$\\) ${TESTDIR}/vscript" >>verifymsg
+ # first test the directory independant verifymsg
dotest info-v1 "${testcvs} -q ci -m add-verification" \
"Checking in verifymsg;
${CVSROOT_DIRNAME}/CVSROOT/verifymsg,v <-- verifymsg
@@ -14242,6 +14846,8 @@ EOF
${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
new revision: 1\.4; previous revision: 1\.3
done"
+ rm ${TESTDIR}/comment.tmp
+
cd ..
mkdir another-dir
cd another-dir
@@ -14250,18 +14856,142 @@ done"
"${testcvs} import -m bogus first-dir/another x y" \
"No BugId found\.
${PROG} \[[a-z]* aborted\]: Message verification failed"
+
+ # now verify that directory dependent verifymsgs work
+ dotest info-v5 \
+ "${testcvs} import -m bogus first-dir/yet-another x y" \
+"${TESTDIR}/wnt/another-dir
+N first-dir/yet-another/file2
+
+No conflicts created by this import" \
+"${CVSROOT_DIRNAME}/first-dir/yet-another
+N first-dir/yet-another/file2
+
+No conflicts created by this import"
+
+ # FIXMECVS
+ #
+ # note that in the local case the error message is the same as
+ # info-v5
+ #
+ # This means that the verifymsg scripts cannot reliably and
+ # consistantly obtain information on which directory is being
+ # committed to. Thus it is currently useless for them to be
+ # running in every dir. They should either be run once or
+ # directory information should be passed.
+ if $remote; then
+ dotest_fail info-v6r \
+ "${testcvs} import -m bogus first-dir/yet-another/and-another x y" \
+"${CVSROOT_DIRNAME}/first-dir/yet-another/and-another
+${PROG} \[[a-z]* aborted\]: Message verification failed"
+ else
+ dotest info-v6 \
+ "${testcvs} import -m bogus first-dir/yet-another/and-another x y" \
+"${TESTDIR}/wnt/another-dir
+N first-dir/yet-another/and-another/file2
+
+No conflicts created by this import"
+ fi
rm file2
cd ..
rmdir another-dir
cd CVSROOT
+ echo "RereadLogAfterVerify=always" >>config
+ dotest info-rereadlog-1 "${testcvs} -q ci -m add-RereadLogAfterVerify=always" \
+"Checking in config;
+${CVSROOT_DIRNAME}/CVSROOT/config,v <-- config
+new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
+done
+${PROG} [a-z]*: Rebuilding administrative file database"
+ cd ../first-dir
+ echo line3 >>file1
+ cat >${TESTDIR}/comment.tmp <<EOF
+BugId: new
+See what happens next.
+EOF
+ dotest info-reread-2 "${testcvs} -q ci -F ${TESTDIR}/comment.tmp" \
+"Checking in file1;
+${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
+new revision: 1\.5; previous revision: 1\.4
+done"
+ dotest info-reread-3 "${testcvs} -q log -N -r1.5 file1" "
+.*
+BugId: new
+See what happens next.
+A new bugid was found.
+============================================================================="
+
+ cd ../CVSROOT
+ grep -v "RereadLogAfterVerify" config > config.new
+ mv config.new config
+ echo "RereadLogAfterVerify=stat" >>config
+ dotest info-reread-4 "${testcvs} -q ci -m add-RereadLogAfterVerify=stat" \
+"Checking in config;
+${CVSROOT_DIRNAME}/CVSROOT/config,v <-- config
+new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
+done
+${PROG} [a-z]*: Rebuilding administrative file database"
+ cd ../first-dir
+ echo line4 >>file1
+ cat >${TESTDIR}/comment.tmp <<EOF
+BugId: new
+See what happens next with stat.
+EOF
+ dotest info-reread-5 "${testcvs} -q ci -F ${TESTDIR}/comment.tmp" \
+"Checking in file1;
+${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
+new revision: 1\.6; previous revision: 1\.5
+done"
+ dotest info-reread-6 "${testcvs} -q log -N -r1.6 file1" "
+.*
+BugId: new
+See what happens next with stat.
+A new bugid was found.
+============================================================================="
+
+ cd ../CVSROOT
+ grep -v "RereadLogAfterVerify" config > config.new
+ mv config.new config
+ echo "RereadLogAfterVerify=never" >>config
+ dotest info-reread-7 "${testcvs} -q ci -m add-RereadLogAfterVerify=never" \
+"Checking in config;
+${CVSROOT_DIRNAME}/CVSROOT/config,v <-- config
+new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
+done
+${PROG} [a-z]*: Rebuilding administrative file database"
+ cd ../first-dir
+ echo line5 >>file1
+ cat >${TESTDIR}/comment.tmp <<EOF
+BugId: new
+See what happens next.
+EOF
+ dotest info-reread-8 "${testcvs} -q ci -F ${TESTDIR}/comment.tmp" \
+"Checking in file1;
+${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
+new revision: 1\.7; previous revision: 1\.6
+done"
+ dotest info-reread-6 "${testcvs} -q log -N -r1.7 file1" "
+.*
+BugId: new
+See what happens next.
+============================================================================="
+ cd ..
+
+ cd CVSROOT
echo '# do nothing' >verifymsg
+ echo '# defaults' >config
dotest info-cleanup-verifymsg "${testcvs} -q ci -m nuke-verifymsg" \
-"Checking in verifymsg;
+"Checking in config;
+${CVSROOT_DIRNAME}/CVSROOT/config,v <-- config
+new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
+done
+Checking in verifymsg;
${CVSROOT_DIRNAME}/CVSROOT/verifymsg,v <-- verifymsg
new revision: 1\.[0-9]*; previous revision: 1\.[0-9]*
done
${PROG} [a-z]*: Rebuilding administrative file database"
+ rm ${TESTDIR}/vscript*
cd ..
dotest_fail info-cleanup-0 "${testcvs} -n release -d CVSROOT" \
@@ -14531,9 +15261,11 @@ U file1'
dotest log-1 "${testcvs} -q co first-dir" ''
cd first-dir
echo 'first revision' > file1
- dotest log-2 "${testcvs} add file1" \
-"${PROG}"' [a-z]*: scheduling file `file1'\'' for addition
-'"${PROG}"' [a-z]*: use .'"${PROG}"' commit. to add this file permanently'
+ echo 'first revision' > file2
+ dotest log-2 "${testcvs} add file1 file2" \
+"${PROG} [a-z]*: scheduling file .file1. for addition
+${PROG} [a-z]*: scheduling file .file2. for addition
+${PROG} [a-z]*: use .${PROG} commit. to add these files permanently"
# While we're at it, check multi-line comments, input from file,
# and trailing whitespace trimming
@@ -14548,26 +15280,47 @@ done
Checking in file1;
${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
initial revision: 1\.1
+done
+RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v
+done
+Checking in file2;
+${CVSROOT_DIRNAME}/first-dir/file2,v <-- file2
+initial revision: 1\.1
done"
rm -f ${TESTDIR}/comment.tmp
echo 'second revision' > file1
- dotest log-4 "${testcvs} -q ci -m2 file1" \
+ echo 'second revision' > file2
+ dotest log-4 "${testcvs} -q ci -m2 file1 file2" \
"Checking in file1;
${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
new revision: 1\.2; previous revision: 1\.1
+done
+Checking in file2;
+${CVSROOT_DIRNAME}/first-dir/file2,v <-- file2
+new revision: 1\.2; previous revision: 1\.1
done"
dotest log-5 "${testcvs} -q tag -b branch file1" 'T file1'
+ dotest log-5a "${testcvs} -q tag tag1 file2" 'T file2'
echo 'third revision' > file1
- dotest log-6 "${testcvs} -q ci -m3 file1" \
+ echo 'third revision' > file2
+ dotest log-6 "${testcvs} -q ci -m3 file1 file2" \
"Checking in file1;
${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
new revision: 1\.3; previous revision: 1\.2
+done
+Checking in file2;
+${CVSROOT_DIRNAME}/first-dir/file2,v <-- file2
+new revision: 1\.3; previous revision: 1\.2
done"
- dotest log-7 "${testcvs} -q update -r branch" '[UP] file1'
+ dotest log-6a "${testcvs} -q tag tag2 file2" 'T file2'
+
+ dotest log-7 "${testcvs} -q update -r branch" \
+"[UP] file1
+${PROG} [a-z]*: file2 is no longer in the repository"
echo 'first branch revision' > file1
dotest log-8 "${testcvs} -q ci -m1b file1" \
@@ -14587,23 +15340,23 @@ done"
# Set up a bunch of shell variables to make the later tests
# easier to describe.=
- log_header="
+ log_header1="
RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v
Working file: file1
head: 1\.3
branch:
locks: strict
access list:"
- rlog_header="
+ rlog_header1="
RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v
head: 1\.3
branch:
locks: strict
access list:"
- log_tags='symbolic names:
+ log_tags1='symbolic names:
tag: 1\.2\.2\.1
branch: 1\.2\.0\.2'
- log_header2='keyword substitution: kv'
+ log_keyword='keyword substitution: kv'
log_dash='----------------------------
revision'
log_date="date: [0-9/]* [0-9:]*; author: ${username}; state: Exp;"
@@ -14631,9 +15384,9 @@ ${log_date}${log_lines}
# Now, finally, test the log output.
dotest log-11 "${testcvs} log file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 5
description:
${log_rev3}
@@ -14644,8 +15397,8 @@ ${log_rev1b}
${log_trailer}"
dotest log-12 "${testcvs} log -N file1" \
-"${log_header}
-${log_header2}
+"${log_header1}
+${log_keyword}
total revisions: 5; selected revisions: 5
description:
${log_rev3}
@@ -14656,9 +15409,9 @@ ${log_rev1b}
${log_trailer}"
dotest log-13 "${testcvs} log -b file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 3
description:
${log_rev3}
@@ -14667,18 +15420,18 @@ ${log_rev1}
${log_trailer}"
dotest log-14 "${testcvs} log -r file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
${log_trailer}"
dotest log-14a "${testcvs} log -rHEAD file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
@@ -14689,9 +15442,9 @@ ${log_trailer}"
# might be confusing itself).
dotest_fail log-14b "${testcvs} log -r HEAD file1" \
"${PROG} [a-z]*: nothing known about HEAD
-${log_header}
-${log_tags}
-${log_header2}
+${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
@@ -14700,50 +15453,50 @@ ${log_trailer}"
# Check that unusual syntax works correctly.
dotest log-14c "${testcvs} log -r: file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
${log_trailer}"
dotest log-14d "${testcvs} log -r, file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
${log_trailer}"
dotest log-14e "${testcvs} log -r. file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
${log_trailer}"
dotest log-14f "${testcvs} log -r:: file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 0
description:
${log_trailer}"
dotest log-15 "${testcvs} log -r1.2 file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev2}
${log_trailer}"
dotest log-16 "${testcvs} log -r1.2.2 file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev2b}
@@ -14753,9 +15506,9 @@ ${log_trailer}"
# This test would fail with the old invocation of rlog, but it
# works with the builtin log support.
dotest log-17 "${testcvs} log -rbranch file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev2b}
@@ -14763,9 +15516,9 @@ ${log_rev1b}
${log_trailer}"
dotest log-18 "${testcvs} log -r1.2.2. file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev2b}
@@ -14774,9 +15527,9 @@ ${log_trailer}"
# Multiple -r options are undocumented; see comments in
# cvs.texinfo about whether they should be deprecated.
dotest log-18a "${testcvs} log -r1.2.2.2 -r1.3:1.3 file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev3}
@@ -14786,18 +15539,18 @@ ${log_trailer}"
# This test would fail with the old invocation of rlog, but it
# works with the builtin log support.
dotest log-19 "${testcvs} log -rbranch. file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev2b}
${log_trailer}"
dotest log-20 "${testcvs} log -r1.2: file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev3}
@@ -14805,18 +15558,18 @@ ${log_rev2}
${log_trailer}"
dotest log-20a "${testcvs} log -r1.2:: file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
${log_trailer}"
dotest log-21 "${testcvs} log -r:1.2 file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev2}
@@ -14824,18 +15577,19 @@ ${log_rev1}
${log_trailer}"
dotest log-21a "${testcvs} log -r::1.2 file1" \
-"${log_header}
-${log_tags}
-${log_header2}
-total revisions: 5; selected revisions: 1
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 5; selected revisions: 2
description:
+${log_rev2}
${log_rev1}
${log_trailer}"
dotest log-22 "${testcvs} log -r1.1:1.2 file1" \
-"${log_header}
-${log_tags}
-${log_header2}
+"${log_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev2}
@@ -14843,28 +15597,30 @@ ${log_rev1}
${log_trailer}"
dotest log-22a "${testcvs} log -r1.1::1.2 file1" \
-"${log_header}
-${log_tags}
-${log_header2}
-total revisions: 5; selected revisions: 0
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 5; selected revisions: 1
description:
+${log_rev2}
${log_trailer}"
dotest log-22b "${testcvs} log -r1.1::1.3 file1" \
-"${log_header}
-${log_tags}
-${log_header2}
-total revisions: 5; selected revisions: 1
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 5; selected revisions: 2
description:
+${log_rev3}
${log_rev2}
${log_trailer}"
# Now the same tests but with rlog
dotest log-r11 "${testcvs} rlog first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 5
description:
${log_rev3}
@@ -14875,8 +15631,8 @@ ${log_rev1b}
${log_trailer}"
dotest log-r12 "${testcvs} rlog -N first-dir/file1" \
-"${rlog_header}
-${log_header2}
+"${rlog_header1}
+${log_keyword}
total revisions: 5; selected revisions: 5
description:
${log_rev3}
@@ -14887,9 +15643,9 @@ ${log_rev1b}
${log_trailer}"
dotest log-r13 "${testcvs} rlog -b first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 3
description:
${log_rev3}
@@ -14898,18 +15654,18 @@ ${log_rev1}
${log_trailer}"
dotest log-r14 "${testcvs} rlog -r first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
${log_trailer}"
dotest log-r14a "${testcvs} rlog -rHEAD first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
@@ -14917,59 +15673,59 @@ ${log_trailer}"
dotest_fail log-r14b "${testcvs} rlog -r HEAD first-dir/file1" \
"${PROG} [a-z]*: cannot find module .HEAD. - ignored
-${rlog_header}
-${log_tags}
-${log_header2}
+${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
${log_trailer}"
dotest log-r14c "${testcvs} rlog -r: first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
${log_trailer}"
dotest log-r14d "${testcvs} rlog -r, first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
${log_trailer}"
dotest log-r14e "${testcvs} rlog -r. first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
${log_trailer}"
dotest log-r14f "${testcvs} rlog -r:: first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 0
description:
${log_trailer}"
dotest log-r15 "${testcvs} rlog -r1.2 first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev2}
${log_trailer}"
dotest log-r16 "${testcvs} rlog -r1.2.2 first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev2b}
@@ -14977,9 +15733,9 @@ ${log_rev1b}
${log_trailer}"
dotest log-r17 "${testcvs} rlog -rbranch first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev2b}
@@ -14987,18 +15743,18 @@ ${log_rev1b}
${log_trailer}"
dotest log-r18 "${testcvs} rlog -r1.2.2. first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev2b}
${log_trailer}"
dotest log-r18a "${testcvs} rlog -r1.2.2.2 -r1.3:1.3 first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev3}
@@ -15006,18 +15762,18 @@ ${log_rev2b}
${log_trailer}"
dotest log-r19 "${testcvs} rlog -rbranch. first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev2b}
${log_trailer}"
dotest log-r20 "${testcvs} rlog -r1.2: first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev3}
@@ -15025,18 +15781,18 @@ ${log_rev2}
${log_trailer}"
dotest log-r20a "${testcvs} rlog -r1.2:: first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 1
description:
${log_rev3}
${log_trailer}"
dotest log-r21 "${testcvs} rlog -r:1.2 first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev2}
@@ -15044,18 +15800,19 @@ ${log_rev1}
${log_trailer}"
dotest log-r21a "${testcvs} rlog -r::1.2 first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
-total revisions: 5; selected revisions: 1
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 5; selected revisions: 2
description:
+${log_rev2}
${log_rev1}
${log_trailer}"
dotest log-r22 "${testcvs} rlog -r1.1:1.2 first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
total revisions: 5; selected revisions: 2
description:
${log_rev2}
@@ -15063,51 +15820,375 @@ ${log_rev1}
${log_trailer}"
dotest log-r22a "${testcvs} rlog -r1.1::1.2 first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
-total revisions: 5; selected revisions: 0
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 5; selected revisions: 1
description:
+${log_rev2}
${log_trailer}"
dotest log-r22b "${testcvs} rlog -r1.1::1.3 first-dir/file1" \
-"${rlog_header}
-${log_tags}
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 5; selected revisions: 2
+description:
+${log_rev3}
+${log_rev2}
+${log_trailer}"
+
+ # Test when head is dead
+
+ dotest log-d0 "${testcvs} -q up -A" \
+"[UP] file1
+U file2"
+ dotest log-d1 "${testcvs} -q rm -f file1" \
+"${PROG} [a-z]*: use .${PROG} commit. to remove this file permanently"
+ dotest log-d2 "${testcvs} -q ci -m4" \
+"Removing file1;
+${CVSROOT_DIRNAME}/first-dir/file1,v <-- file1
+new revision: delete; previous revision: 1\.3
+done"
+
+ log_header1="
+RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v
+Working file: file1
+head: 1\.4
+branch:
+locks: strict
+access list:"
+ rlog_header1="
+RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v
+head: 1\.4
+branch:
+locks: strict
+access list:"
+ log_header2="
+RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v
+Working file: file2
+head: 1\.3
+branch:
+locks: strict
+access list:"
+ rlog_header2="
+RCS file: ${CVSROOT_DIRNAME}/first-dir/file2,v
+head: 1\.3
+branch:
+locks: strict
+access list:"
+ log_tags2='symbolic names:
+ tag2: 1\.3
+ tag1: 1\.2'
+ log_rev4="${log_dash} 1\.4
+date: [0-9/]* [0-9:]*; author: ${username}; state: dead; lines: ${PLUS}0 -0
+4"
+ log_rev22="${log_dash} 1\.2
+${log_date}${log_lines}
+2"
+
+ dotest log-d3 "${testcvs} log -rbranch file1" \
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+description:
+${log_rev2b}
+${log_rev1b}
+${log_trailer}"
+ dotest log-rd3 "${testcvs} rlog -rbranch first-dir/file1" \
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+description:
+${log_rev2b}
+${log_rev1b}
+${log_trailer}"
+ dotest log-d4 "${testcvs} -q log -rbranch" \
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+description:
+${log_rev2b}
+${log_rev1b}
+${log_trailer}
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v.
${log_header2}
-total revisions: 5; selected revisions: 1
+${log_tags2}
+${log_keyword}
+total revisions: 3; selected revisions: 0
+description:
+${log_trailer}"
+ dotest log-d4a "${testcvs} -q log -t -rbranch" \
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6
+description:
+${log_trailer}
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v.
+${log_header2}
+${log_tags2}
+${log_keyword}
+total revisions: 3
+description:
+${log_trailer}"
+ dotest log-d4b "${testcvs} -q log -tS -rbranch" \
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
description:
+${log_trailer}
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v."
+ dotest log-d4c "${testcvs} -q log -h -rbranch" \
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6
+${log_trailer}
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v.
+${log_header2}
+${log_tags2}
+${log_keyword}
+total revisions: 3
+${log_trailer}"
+ dotest log-d4d "${testcvs} -q log -hS -rbranch" \
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+${log_trailer}
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v."
+ dotest log-d4e "${testcvs} -q log -R -rbranch" \
+"${CVSROOT_DIRNAME}/first-dir/Attic/file1,v
+${CVSROOT_DIRNAME}/first-dir/file2,v"
+ dotest log-d4f "${testcvs} -q log -R -S -rbranch" \
+"${CVSROOT_DIRNAME}/first-dir/Attic/file1,v
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v."
+ dotest log-rd4 "${testcvs} -q rlog -rbranch first-dir" \
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+description:
+${log_rev2b}
+${log_rev1b}
+${log_trailer}
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v.
+${rlog_header2}
+${log_tags2}
+${log_keyword}
+total revisions: 3; selected revisions: 0
+description:
+${log_trailer}"
+ dotest log-rd4a "${testcvs} -q rlog -t -rbranch first-dir" \
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6
+description:
+${log_trailer}
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v.
+${rlog_header2}
+${log_tags2}
+${log_keyword}
+total revisions: 3
+description:
+${log_trailer}"
+ dotest log-rd4b "${testcvs} -q rlog -St -rbranch first-dir" \
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+description:
+${log_trailer}
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v."
+ dotest log-rd4c "${testcvs} -q rlog -h -rbranch first-dir" \
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6
+${log_trailer}
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v.
+${rlog_header2}
+${log_tags2}
+${log_keyword}
+total revisions: 3
+${log_trailer}"
+ dotest log-rd4d "${testcvs} -q rlog -Sh -rbranch first-dir" \
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+${log_trailer}
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v."
+ dotest log-rd4e "${testcvs} -q rlog -R -rbranch first-dir" \
+"${CVSROOT_DIRNAME}/first-dir/Attic/file1,v
+${CVSROOT_DIRNAME}/first-dir/file2,v"
+ dotest log-rd4f "${testcvs} -q rlog -R -S -rbranch first-dir" \
+"${CVSROOT_DIRNAME}/first-dir/Attic/file1,v
+${PROG} [a-z]*: warning: no revision .branch. in .${CVSROOT_DIRNAME}/first-dir/file2,v."
+ dotest log-d5 "${testcvs} log -r1.2.2.1:1.2.2.2 file1" \
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+description:
+${log_rev2b}
+${log_rev1b}
+${log_trailer}"
+ dotest log-rd5 "${testcvs} rlog -r1.2.2.1:1.2.2.2 first-dir/file1" \
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+description:
+${log_rev2b}
+${log_rev1b}
+${log_trailer}"
+ dotest log-d6 "${testcvs} -q log -r1.2.2.1:1.2.2.2" \
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+description:
+${log_rev2b}
+${log_rev1b}
+${log_trailer}
+${log_header2}
+${log_tags2}
+${log_keyword}
+total revisions: 3; selected revisions: 0
+description:
+${log_trailer}"
+ dotest log-rd6 "${testcvs} -q rlog -r1.2.2.1:1.2.2.2 first-dir" \
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+description:
+${log_rev2b}
+${log_rev1b}
+${log_trailer}
+${rlog_header2}
+${log_tags2}
+${log_keyword}
+total revisions: 3; selected revisions: 0
+description:
+${log_trailer}"
+ dotest log-d7 "${testcvs} log -r1.2:1.3 file1" \
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+description:
+${log_rev3}
+${log_rev2}
+${log_trailer}"
+ dotest log-rd7 "${testcvs} -q rlog -r1.2:1.3 first-dir/file1" \
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 2
+description:
+${log_rev3}
${log_rev2}
${log_trailer}"
+ dotest log-d8 "${testcvs} -q log -rtag1:tag2" \
+"${PROG} [a-z]*: warning: no revision .tag1. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v.
+${PROG} [a-z]*: warning: no revision .tag2. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v.
+${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 0
+description:
+${log_trailer}
+${log_header2}
+${log_tags2}
+${log_keyword}
+total revisions: 3; selected revisions: 2
+description:
+${log_rev3}
+${log_rev22}
+${log_trailer}"
+ dotest log-d8a "${testcvs} -q log -rtag1:tag2 -S" \
+"${PROG} [a-z]*: warning: no revision .tag1. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v.
+${PROG} [a-z]*: warning: no revision .tag2. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v.
+${log_header2}
+${log_tags2}
+${log_keyword}
+total revisions: 3; selected revisions: 2
+description:
+${log_rev3}
+${log_rev22}
+${log_trailer}"
+ dotest log-rd8 "${testcvs} -q rlog -rtag1:tag2 first-dir" \
+"${PROG} [a-z]*: warning: no revision .tag1. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v.
+${PROG} [a-z]*: warning: no revision .tag2. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v.
+${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 6; selected revisions: 0
+description:
+${log_trailer}
+${rlog_header2}
+${log_tags2}
+${log_keyword}
+total revisions: 3; selected revisions: 2
+description:
+${log_rev3}
+${log_rev22}
+${log_trailer}"
+ dotest log-rd8a "${testcvs} -q rlog -rtag1:tag2 -S first-dir" \
+"${PROG} [a-z]*: warning: no revision .tag1. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v.
+${PROG} [a-z]*: warning: no revision .tag2. in .${CVSROOT_DIRNAME}/first-dir/Attic/file1,v.
+${rlog_header2}
+${log_tags2}
+${log_keyword}
+total revisions: 3; selected revisions: 2
+description:
+${log_rev3}
+${log_rev22}
+${log_trailer}"
+
+ dotest log-d99 "${testcvs} -q up -rbranch" \
+"[UP] file1
+${PROG} [a-z]*: file2 is no longer in the repository"
# Now test outdating revisions
dotest log-o0 "${testcvs} admin -o 1.2.2.2:: file1" \
-"RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v
+"RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v
done"
dotest log-o1 "${testcvs} admin -o ::1.2.2.1 file1" \
-"RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v
+"RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v
done"
dotest log-o2 "${testcvs} admin -o 1.2.2.1:: file1" \
-"RCS file: ${CVSROOT_DIRNAME}/first-dir/file1,v
+"RCS file: ${CVSROOT_DIRNAME}/first-dir/Attic/file1,v
deleting revision 1\.2\.2\.2
done"
dotest log-o3 "${testcvs} log file1" \
-"${log_header}
-${log_tags}
-${log_header2}
-total revisions: 4; selected revisions: 4
+"${log_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 5; selected revisions: 5
description:
+${log_rev4}
${log_rev3}
${log_rev2}
${log_rev1}
${log_rev1b}
${log_trailer}"
dotest log-ro3 "${testcvs} rlog first-dir/file1" \
-"${rlog_header}
-${log_tags}
-${log_header2}
-total revisions: 4; selected revisions: 4
+"${rlog_header1}
+${log_tags1}
+${log_keyword}
+total revisions: 5; selected revisions: 5
description:
+${log_rev4}
${log_rev3}
${log_rev2}
${log_rev1}
@@ -15115,6 +16196,7 @@ ${log_rev1b}
${log_trailer}"
dotest log-o4 "${testcvs} -q update -p -r 1.2.2.1 file1" \
"first branch revision"
+
cd ..
rm -r first-dir
rm -rf ${CVSROOT_DIRNAME}/first-dir
@@ -15364,7 +16446,8 @@ done"
# fairly bogus, but it is the longstanding behavior for
# whatever that is worth.
dotest ann-10 "${testcvs} ann" \
-"Annotations for file1
+"
+Annotations for file1
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.1 (${username} *[0-9a-zA-Z-]*): this
1\.1 (${username} *[0-9a-zA-Z-]*): is
@@ -15376,7 +16459,8 @@ done"
1\.2 (${username} *[0-9a-zA-Z-]*): blank
1\.2 (${username} *[0-9a-zA-Z-]*): line"
dotest ann-11 "${testcvs} ann -r br" \
-"Annotations for file1
+"
+Annotations for file1
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.1 (${username} *[0-9a-zA-Z-]*): this
1\.1 (${username} *[0-9a-zA-Z-]*): is
@@ -15392,7 +16476,8 @@ done"
# FIXCVS: shouldn't "-r 1.2.0.2" be the same as "-r br"?
dotest ann-12 "${testcvs} ann -r 1.2.0.2 file1" ""
dotest ann-13 "${testcvs} ann -r 1.2.2 file1" \
-"Annotations for file1
+"
+Annotations for file1
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.1 (${username} *[0-9a-zA-Z-]*): this
1\.1 (${username} *[0-9a-zA-Z-]*): is
@@ -15413,7 +16498,8 @@ done"
cd ../..
rm -r 1
dotest ann-r10 "${testcvs} rann first-dir" \
-"Annotations for first-dir/file1
+"
+Annotations for first-dir/file1
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.1 (${username} *[0-9a-zA-Z-]*): this
1\.1 (${username} *[0-9a-zA-Z-]*): is
@@ -15425,7 +16511,8 @@ done"
1\.2 (${username} *[0-9a-zA-Z-]*): blank
1\.2 (${username} *[0-9a-zA-Z-]*): line"
dotest ann-r11 "${testcvs} rann -r br first-dir" \
-"Annotations for first-dir/file1
+"
+Annotations for first-dir/file1
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.1 (${username} *[0-9a-zA-Z-]*): this
1\.1 (${username} *[0-9a-zA-Z-]*): is
@@ -15440,7 +16527,8 @@ done"
1\.2\.2\.1 (${username} *[0-9a-zA-Z-]*): branched content"
dotest ann-r12 "${testcvs} rann -r 1.2.0.2 first-dir/file1" ""
dotest ann-r13 "${testcvs} rann -r 1.2.2 first-dir/file1" \
-"Annotations for first-dir/file1
+"
+Annotations for first-dir/file1
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.1 (${username} *[0-9a-zA-Z-]*): this
1\.1 (${username} *[0-9a-zA-Z-]*): is
@@ -15496,7 +16584,8 @@ done"
# The version number after $file,v should be `1.2'.
# 1.9.28.1 puts `1.1' there.
dotest ann-id-6 "$testcvs -Q ann $file" \
-"Annotations for $file
+"
+Annotations for $file
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1.2 ($username *[0-9a-zA-Z-]*): "'\$'"Id: $file,v 1.1 [0-9/]* [0-9:]* $username Exp "'\$'"
1.2 ($username *[0-9a-zA-Z-]*): line2"
@@ -15594,36 +16683,41 @@ ${testcvs} -d ${TESTDIR}/crerepos release -d CVSROOT >>${LOGFILE}; then
# manner of things and the server better protect itself.
dotest_fail crerepos-6a-r \
"${testcvs} -q -d :ext:`hostname`:../crerepos get ." \
-"${PROG} [a-z]*: CVSROOT (\":ext:${hostname}:\.\./crerepos\")
-${PROG} [a-z]*: may only specify a positive, non-zero, integer port (not \"\.\.\")\.
-${PROG} [a-z]*: perhaps you entered a relative pathname${QUESTION}
-${PROG} \[[a-z]* aborted\]: Bad CVSROOT\."
+"${PROG} [a-z]*: CVSROOT may only specify a positive, non-zero, integer port (not .\.\..)\.
+${PROG} [a-z]*: Perhaps you entered a relative pathname${QUESTION}
+${PROG} \[[a-z]* aborted\]: Bad CVSROOT: .:ext:${hostname}:\.\./crerepos.\."
cd ..
rm -r 1
mkdir 1; cd 1
dotest_fail crerepos-6b-r \
"${testcvs} -d :ext:`hostname`:crerepos init" \
-"${PROG} [a-z]*: CVSROOT (\":ext:${hostname}:crerepos\")
-${PROG} [a-z]*: requires a path spec
+"${PROG} [a-z]*: CVSROOT requires a path spec:
${PROG} [a-z]*: :(gserver|kserver|pserver):\[\[user\]\[:password\]@\]host\[:\[port\]\]/path
${PROG} [a-z]*: \[:(ext|server):\]\[\[user\]@\]host\[:\]/path
-${PROG} \[[a-z]* aborted\]: Bad CVSROOT\."
+${PROG} \[[a-z]* aborted\]: Bad CVSROOT: .:ext:${hostname}:crerepos.\."
cd ..
rm -r 1
else # local
# Test that CVS rejects a relative path in CVSROOT.
+
mkdir 1; cd 1
- # piping the output of this test to /dev/null since we have no way of knowing
- # what error messages different rsh implementations will output.
- dotest_fail crerepos-6a "${testcvs} -q -d ../crerepos get . >/dev/null 2>&1" ""
+ # Set CVS_RSH=false since ocassionally (e.g. when CVS_RSH=ssh on
+ # some systems) some rsh implementations will block because they
+ # can look up '..' and want to ask the user about the unknown host
+ # key or somesuch. Which error message we get depends on whether
+ # false finishes running before we try to talk to it or not.
+ dotest_fail crerepos-6a "CVS_RSH=false ${testcvs} -q -d ../crerepos get ." \
+"$PROG \[[a-z]* aborted\]: end of file from server (consult above messages if any)" \
+"$PROG \[[a-z]* aborted\]: received broken pipe signal"
cd ..
rm -r 1
mkdir 1; cd 1
dotest_fail crerepos-6b "${testcvs} -d crerepos init" \
-"${PROG} [a-z]*: CVSROOT \"crerepos\" must be an absolute pathname
-${PROG} \[[a-z]* aborted\]: Bad CVSROOT\."
+"${PROG} [a-z]*: CVSROOT must be an absolute pathname (not .crerepos.)
+${PROG} [a-z]*: when using local access method\.
+${PROG} \[[a-z]* aborted\]: Bad CVSROOT: .crerepos.\."
cd ..
rm -r 1
fi # end of tests to be skipped for remote
@@ -15877,7 +16971,8 @@ add file1
# last two digits of the year. Make sure it does that rather
# than some bogosity like "100".
dotest rcs-4a "${testcvs} annotate file1" \
-"Annotations for file1
+"
+Annotations for file1
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.1 (kingdon 24-Nov-96): This is the first line
1\.2 (kingdon 24-Nov-96): This is the third line
@@ -16255,7 +17350,7 @@ EOF
#
# Hmm, if this test is run on the 31st of the month, and 100
# months from now is a month with only 30 days (e.g. run on
- # 31 May 1999), it seems to fail.
+ # 31 May 1999, 31 May 2001), it seems to fail.
#
# Sigh.
dotest rcs2-7 "${testcvs} -q update -p -D '100 months' file1" \
@@ -17518,8 +18613,7 @@ U file2"
# Now try with a numeric revision.
dotest sticky-21 "${testcvs} -q update -r 1.1 file1" "U file1"
- rm file1
- dotest sticky-22 "${testcvs} rm file1" \
+ dotest sticky-22 "${testcvs} rm -f file1" \
"${PROG} [a-z]*: cannot remove file .file1. which has a numeric sticky tag of .1\.1."
# The old behavior was that remove allowed this and then commit
# gave an error, which was somewhat hard to clear. I mean, you
@@ -17528,11 +18622,19 @@ U file2"
# why CVS should have a concept of conflict that arises, not from
# parallel development, but from CVS's own sticky tags.
+ # Ditto with a sticky date.
+ #
# I'm kind of surprised that the "file1 was lost" doesn't crop
# up elsewhere in the testsuite. It is a long-standing
# discrepency between local and remote CVS and should probably
# be cleaned up at some point.
- dotest sticky-23 "${testcvs} -q update -A" \
+ dotest sticky-23 "${testcvs} -q update -Dnow file1" \
+"${PROG} [a-z]*: warning: file1 was lost
+U file1" "U file1"
+ dotest sticky-24 "${testcvs} rm -f file1" \
+"${PROG} [a-z]*: cannot remove file .file1. which has a sticky date of .[0-9.]*."
+
+ dotest sticky-25 "${testcvs} -q update -A" \
"${PROG} [a-z]*: warning: file1 was lost
U file1" "U file1"
@@ -17923,7 +19025,8 @@ xx"
# The same issue occurs with annotate and other keywords,
# I think, although it is particularly noticeable for $Log.
dotest keywordlog-22 "${testcvs} ann -r br file1" \
-"Annotations for file1
+"
+Annotations for file1
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.3 (${username} *[0-9a-zA-Z-]*): initial
1\.4\.2\.1 (${username} *[0-9a-zA-Z-]*): xx "'\$'"Log: file1,v "'\$'"
@@ -17933,7 +19036,8 @@ xx"
1\.4\.2\.1 (${username} *[0-9a-zA-Z-]*): xx
1\.4\.2\.1 (${username} *[0-9a-zA-Z-]*): br-change"
dotest keywordlog-23 "${testcvs} ann -r HEAD file1" \
-"Annotations for file1
+"
+Annotations for file1
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.3 (${username} *[0-9a-zA-Z-]*): initial
1\.5 (${username} *[0-9a-zA-Z-]*): xx "'\$'"Log: file1,v "'\$'"
@@ -18396,12 +19500,14 @@ done"
# Now for annotate
cd ../1/first-dir
dotest tagdate-16 "${testcvs} annotate -rbr2 -D'1 minute ago'" \
-"Annotations for file1
+"
+Annotations for file1
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.1\.4\.1 (${username} *[0-9a-zA-Z-]*): br2-1"
dotest tagdate-17 "${testcvs} annotate -rbr2 -Dnow" \
-"Annotations for file1
+"
+Annotations for file1
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
1\.1\.4\.2 (${username} *[0-9a-zA-Z-]*): br2-2"
@@ -19601,6 +20707,7 @@ ${PROG} \[[a-z]* aborted\]: Revision 1\.1 is already locked by fred"
dotest reserved-14 "${testcvs} admin -u1.1 a-lock" \
"RCS file: ${CVSROOT_DIRNAME}/first-dir/a-lock,v
+${PROG} [a-z]*: ${CVSROOT_DIRNAME}/first-dir/a-lock,v: revision 1\.1 locked by fred; breaking lock
1\.1 unlocked
done"
dotest reserved-15 "${testcvs} -q ci -m success a-lock" \
@@ -21856,13 +22963,22 @@ ${PROG} server: Updating dir1/sdir/ssdir"
# messages are subject to out-of-order bugs (this one is hard
# to work around).
if $remote; then :; else
- dotest multiroot2-9 "${testcvs} -t update" \
-" -> main loop with CVSROOT=${TESTDIR}/root1
+ dotest multiroot2-9a "${testcvs} -t update" \
+" *-> main loop with CVSROOT=${TESTDIR}/root1
${PROG} update: Updating \.
+ *-> Reader_Lock(${TESTDIR}/root1)
+ *-> Lock_Cleanup()
${PROG} update: Updating dir1
- -> main loop with CVSROOT=${TESTDIR}/root2
+ *-> Reader_Lock(${TESTDIR}/root1/dir1)
+ *-> Lock_Cleanup()
+ *-> main loop with CVSROOT=${TESTDIR}/root2
${PROG} update: Updating dir1/sdir
-${PROG} update: Updating dir1/sdir/ssdir"
+ *-> Reader_Lock(${TESTDIR}/root2/sdir)
+ *-> Lock_Cleanup()
+${PROG} update: Updating dir1/sdir/ssdir
+ *-> Reader_Lock(${TESTDIR}/root2/sdir/ssdir)
+ *-> Lock_Cleanup()
+ *-> Lock_Cleanup()"
fi
dotest multiroot2-9 "${testcvs} -q tag tag1" \
@@ -22340,6 +23456,32 @@ Root ${TESTDIR}/1
noop
EOF
+ dotest pserver-5a "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+E Protocol error: init says \"${TESTDIR}/2\" but pserver says \"${CVSROOT_DIRNAME}\"
+error " <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+testme
+Ay::'d
+END AUTH REQUEST
+init ${TESTDIR}/2
+EOF
+ dotest_fail pserver-5b "test -d ${TESTDIR}/2" ''
+
+ dotest pserver-5c "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+E init xxx must be an absolute pathname
+error " <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+testme
+Ay::'d
+END AUTH REQUEST
+init xxx
+EOF
+ dotest_fail pserver-5d "test -d xxx" ''
+
dotest_fail pserver-6 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
"I HATE YOU" <<EOF
BEGIN AUTH REQUEST
@@ -22419,6 +23561,251 @@ Amquiteunabletocomeupwithinterestingpasswordsanymore
END AUTH REQUEST
EOF
+ # The following tests are for read-only access
+
+ # Check that readers can only read, everyone else can write
+
+ cat >${CVSROOT_DIRNAME}/CVSROOT/readers <<EOF
+anonymous
+EOF
+
+ dotest pserver-14 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+M Concurrent Versions System (CVS) .*
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+anonymous
+Ay::'d
+END AUTH REQUEST
+Root ${CVSROOT_DIRNAME}
+version
+EOF
+
+ dotest pserver-15 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+E ${PROG} \\[server aborted\\]: .init. requires write access to the repository
+error " <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+anonymous
+Ay::'d
+END AUTH REQUEST
+init ${CVSROOT_DIRNAME}
+EOF
+
+ dotest pserver-16 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+M Concurrent Versions System (CVS) .*
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+testme
+Ay::'d
+END AUTH REQUEST
+Root ${CVSROOT_DIRNAME}
+version
+EOF
+
+ dotest pserver-17 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+testme
+Ay::'d
+END AUTH REQUEST
+init ${CVSROOT_DIRNAME}
+EOF
+
+ dotest pserver-18 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+M Concurrent Versions System (CVS) .*
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+${username}
+Ay::'d
+END AUTH REQUEST
+Root ${CVSROOT_DIRNAME}
+version
+EOF
+
+ dotest pserver-19 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+${username}
+Anything
+END AUTH REQUEST
+init ${CVSROOT_DIRNAME}
+EOF
+
+ # Check that writers can write, everyone else can only read
+ # even if not listed in readers
+
+ cat >${CVSROOT_DIRNAME}/CVSROOT/writers <<EOF
+testme
+EOF
+
+ dotest pserver-20 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+M Concurrent Versions System (CVS) .*
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+anonymous
+Ay::'d
+END AUTH REQUEST
+Root ${CVSROOT_DIRNAME}
+version
+EOF
+
+ dotest pserver-21 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+E ${PROG} \\[server aborted\\]: .init. requires write access to the repository
+error " <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+anonymous
+Ay::'d
+END AUTH REQUEST
+init ${CVSROOT_DIRNAME}
+EOF
+
+ dotest pserver-22 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+M Concurrent Versions System (CVS) .*
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+testme
+Ay::'d
+END AUTH REQUEST
+Root ${CVSROOT_DIRNAME}
+version
+EOF
+
+ dotest pserver-23 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+testme
+Ay::'d
+END AUTH REQUEST
+init ${CVSROOT_DIRNAME}
+EOF
+
+ dotest pserver-24 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+M Concurrent Versions System (CVS) .*
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+${username}
+Ay::'d
+END AUTH REQUEST
+Root ${CVSROOT_DIRNAME}
+version
+EOF
+
+ dotest pserver-25 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+E ${PROG} \\[server aborted\\]: .init. requires write access to the repository
+error " <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+${username}
+Anything
+END AUTH REQUEST
+init ${CVSROOT_DIRNAME}
+EOF
+
+ # Should work the same without readers
+
+ rm ${CVSROOT_DIRNAME}/CVSROOT/readers
+
+ dotest pserver-26 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+M Concurrent Versions System (CVS) .*
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+anonymous
+Ay::'d
+END AUTH REQUEST
+Root ${CVSROOT_DIRNAME}
+version
+EOF
+
+ dotest pserver-27 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+E ${PROG} \\[server aborted\\]: .init. requires write access to the repository
+error " <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+anonymous
+Ay::'d
+END AUTH REQUEST
+init ${CVSROOT_DIRNAME}
+EOF
+
+ dotest pserver-28 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+M Concurrent Versions System (CVS) .*
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+testme
+Ay::'d
+END AUTH REQUEST
+Root ${CVSROOT_DIRNAME}
+version
+EOF
+
+ dotest pserver-29 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+testme
+Ay::'d
+END AUTH REQUEST
+init ${CVSROOT_DIRNAME}
+EOF
+
+ dotest pserver-30 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+M Concurrent Versions System (CVS) .*
+ok" <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+${username}
+Ay::'d
+END AUTH REQUEST
+Root ${CVSROOT_DIRNAME}
+version
+EOF
+
+ dotest pserver-31 "${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
+"${DOTSTAR} LOVE YOU
+E ${PROG} \\[server aborted\\]: .init. requires write access to the repository
+error " <<EOF
+BEGIN AUTH REQUEST
+${CVSROOT_DIRNAME}
+${username}
+Anything
+END AUTH REQUEST
+init ${CVSROOT_DIRNAME}
+EOF
+
+ # pserver used to try and print from the NULL pointer
+ # in this error message in this case
+ dotest_fail pserver-bufinit "${testcvs} pserver" \
+"$PROG \[pserver aborted\]: bad auth protocol start: EOF" </dev/null
+
# Clean up.
echo "# comments only" >config
dotest pserver-cleanup-1 "${testcvs} -q ci -m config-it" \
@@ -22429,7 +23816,7 @@ done
${PROG} [a-z]*: Rebuilding administrative file database"
cd ../..
rm -r 1
- rm ${CVSROOT_DIRNAME}/CVSROOT/passwd
+ rm ${CVSROOT_DIRNAME}/CVSROOT/passwd ${CVSROOT_DIRNAME}/CVSROOT/writers
fi # skip the whole thing for local
;;
diff --git a/contrib/cvs/src/server.c b/contrib/cvs/src/server.c
index bb38f4d41d06..76b50084ed14 100644
--- a/contrib/cvs/src/server.c
+++ b/contrib/cvs/src/server.c
@@ -59,7 +59,10 @@ int cvs_gssapi_encrypt;
#endif
#ifdef HAVE_SYSLOG_H
-#include <syslog.h>
+# include <syslog.h>
+# ifndef LOG_DAEMON /* for ancient syslogs */
+# define LOG_DAEMON 0
+# endif
#endif
#ifdef HAVE_KERBEROS
@@ -159,7 +162,7 @@ static int fd_buffer_input PROTO((void *, char *, int, int, int *));
static int fd_buffer_output PROTO((void *, const char *, int, int *));
static int fd_buffer_flush PROTO((void *));
static int fd_buffer_block PROTO((void *, int));
-static int fd_buffer_shutdown PROTO((void *));
+static int fd_buffer_shutdown PROTO((struct buffer *));
/* Initialize a buffer built on a file descriptor. FD is the file
descriptor. INPUT is nonzero if this is for input, zero if this is
@@ -321,10 +324,10 @@ fd_buffer_block (closure, block)
/* The buffer shutdown function for a buffer built on a file descriptor. */
static int
-fd_buffer_shutdown (closure)
- void *closure;
+fd_buffer_shutdown (buf)
+ struct buffer *buf;
{
- free (closure);
+ free (buf->closure);
return 0;
}
@@ -360,7 +363,7 @@ create_adm_p (base_dir, dir)
if (tmp == NULL)
return ENOMEM;
-
+
/* We make several passes through this loop. On the first pass,
we simply create the CVSADM directory in the deepest directory.
For each subsequent pass, we try to remove the last path
@@ -423,8 +426,7 @@ create_adm_p (base_dir, dir)
}
(void) umask (omask);
}
-
-
+
f = CVS_FOPEN (tmp, "w");
if (f == NULL)
{
@@ -731,7 +733,7 @@ serve_root (arg)
{
char *env;
char *path;
-
+
if (error_pending()) return;
if (!isabsolute (arg))
@@ -769,12 +771,11 @@ serve_root (arg)
sprintf (pending_error_text, "\
E Protocol error: Root says \"%s\" but pserver says \"%s\"",
arg, Pserver_Repos);
+ return;
}
}
#endif
- if (current_parsed_root != NULL)
- free_cvsroot_t (current_parsed_root);
current_parsed_root = local_cvsroot (arg);
/* For pserver, this will already have happened, and the call will do
@@ -912,7 +913,7 @@ E protocol error: directory '%s' not within current directory",
}
return 0;
}
-
+
/*
* Add as many directories to the temp directory as the client tells us it
* will use "..", so we never try to access something outside the temp
@@ -1001,7 +1002,7 @@ dirswitch (dir, repos)
pending_error = ENOMEM;
return;
}
-
+
strcpy (dir_name, server_temp_dir);
strcat (dir_name, "/");
strcat (dir_name, dir);
@@ -2118,9 +2119,9 @@ serve_argument (arg)
char *arg;
{
char *p;
-
+
if (error_pending()) return;
-
+
if (argument_vector_size <= argument_count)
{
argument_vector_size *= 2;
@@ -2148,9 +2149,9 @@ serve_argumentx (arg)
char *arg;
{
char *p;
-
+
if (error_pending()) return;
-
+
p = argument_vector[argument_count - 1];
p = realloc (p, strlen (p) + 1 + strlen (arg) + 1);
if (p == NULL)
@@ -2472,7 +2473,7 @@ check_command_legal_p (cmd_name)
size_t flen;
FILE *fp;
int found_it = 0;
-
+
/* else */
flen = strlen (current_parsed_root->directory)
+ strlen (CVSROOTADM)
@@ -2564,7 +2565,7 @@ check_command_legal_p (cmd_name)
/* Chop newline by hand, for strcmp()'s sake. */
if (linebuf[num_red - 1] == '\n')
linebuf[num_red - 1] = '\0';
-
+
if (strcmp (linebuf, CVS_Username) == 0)
{
found_it = 1;
@@ -2631,7 +2632,7 @@ do_cvs_command (cmd_name, command)
* interleaved with data from stdout_pipe or stderr_pipe).
*/
int protocol_pipe[2];
-
+
int dev_null_fd = -1;
int errs;
@@ -3010,7 +3011,7 @@ error \n");
{
int status;
int count_read;
-
+
status = buf_input_data (protocol_inbuf, &count_read);
if (status == -1)
@@ -3168,7 +3169,7 @@ error \n");
*/
continue;
}
-
+
if (WIFEXITED (status))
errs += WEXITSTATUS (status);
else
@@ -3295,7 +3296,7 @@ server_pause_check()
FD_ZERO (&fds);
FD_SET (flowcontrol_pipe[0], &fds);
numtocheck = flowcontrol_pipe[0] + 1;
-
+
do {
numfds = select (numtocheck, &fds, (fd_set *)0,
(fd_set *)0, (struct timeval *)NULL);
@@ -3307,7 +3308,7 @@ server_pause_check()
return;
}
} while (numfds < 0);
-
+
if (FD_ISSET (flowcontrol_pipe[0], &fds))
{
int got;
@@ -3430,7 +3431,7 @@ server_register (name, version, timestamp, options, tag, date, conflict)
len += strlen (tag);
if (date)
len += strlen (date);
-
+
entries_line = xmalloc (len);
sprintf (entries_line, "/%s/%s/", name, version);
if (conflict != NULL)
@@ -3665,7 +3666,7 @@ static void
serve_tag (arg)
char *arg;
{
- do_cvs_command ("cvstag", cvstag);
+ do_cvs_command ("tag", cvstag);
}
static void
@@ -3790,20 +3791,38 @@ static void
serve_init (arg)
char *arg;
{
+ cvsroot_t *saved_parsed_root;
+
if (!isabsolute (arg))
{
if (alloc_pending (80 + strlen (arg)))
sprintf (pending_error_text,
- "E Root %s must be an absolute pathname", arg);
- /* Fall through to do_cvs_command which will return the
- actual error. */
+ "E init %s must be an absolute pathname", arg);
+ }
+#ifdef AUTH_SERVER_SUPPORT
+ else if (Pserver_Repos != NULL)
+ {
+ if (strcmp (Pserver_Repos, arg) != 0)
+ {
+ if (alloc_pending (80 + strlen (Pserver_Repos) + strlen (arg)))
+ /* The explicitness is to aid people who are writing clients.
+ I don't see how this information could help an
+ attacker. */
+ sprintf (pending_error_text, "\
+E Protocol error: init says \"%s\" but pserver says \"%s\"",
+ arg, Pserver_Repos);
+ }
}
+#endif
- if (current_parsed_root != NULL)
- free_cvsroot_t (current_parsed_root);
- current_parsed_root = local_cvsroot (arg);
+ if (print_pending_error ())
+ return;
+ saved_parsed_root = current_parsed_root;
+ current_parsed_root = local_cvsroot (arg);
do_cvs_command ("init", init);
+ free_cvsroot_t (current_parsed_root);
+ current_parsed_root = saved_parsed_root;
}
static void serve_annotate PROTO ((char *));
@@ -4567,7 +4586,6 @@ serve_expand_modules (arg)
DBM *db;
err = 0;
- server_expanding = 1;
db = open_module ();
for (i = 1; i < argument_count; i++)
err += do_module (db, argument_vector[i],
@@ -4575,7 +4593,6 @@ serve_expand_modules (arg)
NULL, 0, 0, 0, 0,
(char *) NULL);
close_module (db);
- server_expanding = 0;
{
/* argument_vector[0] is a dummy argument, we don't mess with it. */
char **cp;
@@ -4605,23 +4622,24 @@ server_prog (dir, name, which)
{
if (!supported_response ("Set-checkin-prog"))
{
- buf_output0 (buf_to_net, "E \
+ buf_output0 (protocol, "E \
warning: this client does not support -i or -u flags in the modules file.\n");
return;
}
switch (which)
{
case PROG_CHECKIN:
- buf_output0 (buf_to_net, "Set-checkin-prog ");
+ buf_output0 (protocol, "Set-checkin-prog ");
break;
case PROG_UPDATE:
- buf_output0 (buf_to_net, "Set-update-prog ");
+ buf_output0 (protocol, "Set-update-prog ");
break;
}
- buf_output0 (buf_to_net, dir);
- buf_append_char (buf_to_net, '\n');
- buf_output0 (buf_to_net, name);
- buf_append_char (buf_to_net, '\n');
+ buf_output0 (protocol, dir);
+ buf_append_char (protocol, '\n');
+ buf_output0 (protocol, name);
+ buf_append_char (protocol, '\n');
+ buf_send_counted (protocol);
}
static void
@@ -4855,32 +4873,33 @@ server_cleanup (sig)
if (buf_to_net != NULL)
{
- /* FIXME: If this is not the final call from server, this
- could deadlock, because the client might be blocked writing
- to us. This should not be a problem in practice, because
- we do not generate much output when the client is not
- waiting for it. */
+ /* Since we're done, go ahead and put BUF_TO_NET back into blocking
+ * mode and send any pending output. In the usual case there won't
+ * won't be any, but there might be if an error occured.
+ */
+
set_block (buf_to_net);
buf_flush (buf_to_net, 1);
- /* The calls to buf_shutdown are currently only meaningful
- when we are using compression. First we shut down
- BUF_FROM_NET. That will pick up the checksum generated
- when the client shuts down its buffer. Then, after we have
- generated any final output, we shut down BUF_TO_NET. */
+ /* Next we shut down BUF_FROM_NET. That will pick up the checksum
+ * generated when the client shuts down its buffer. Then, after we
+ * have generated any final output, we shut down BUF_TO_NET.
+ */
status = buf_shutdown (buf_from_net);
if (status != 0)
{
error (0, status, "shutting down buffer from client");
- buf_flush (buf_to_net, 1);
}
}
if (dont_delete_temp)
{
if (buf_to_net != NULL)
+ {
+ (void) buf_flush (buf_to_net, 1);
(void) buf_shutdown (buf_to_net);
+ }
return;
}
@@ -4978,11 +4997,13 @@ server_cleanup (sig)
noexec = save_noexec;
if (buf_to_net != NULL)
+ {
+ (void) buf_flush (buf_to_net, 1);
(void) buf_shutdown (buf_to_net);
+ }
}
int server_active = 0;
-int server_expanding = 0;
int
server (argc, argv)
@@ -5003,7 +5024,7 @@ server (argc, argv)
buf_to_net = fd_buffer_initialize (STDOUT_FILENO, 0,
outbuf_memory_error);
- buf_from_net = stdio_buffer_initialize (stdin, 1, outbuf_memory_error);
+ buf_from_net = stdio_buffer_initialize (stdin, 0, 1, outbuf_memory_error);
saved_output = buf_nonio_initialize (outbuf_memory_error);
saved_outerr = buf_nonio_initialize (outbuf_memory_error);
@@ -5183,7 +5204,7 @@ error ENOMEM Virtual memory exhausted.\n");
char *cmd, *orig_cmd;
struct request *rq;
int status;
-
+
status = buf_read_line (buf_from_net, &cmd, (int *) NULL);
if (status == -2)
{
@@ -5320,7 +5341,7 @@ error 0 %s: no such user\n", username);
error_exit ();
}
}
-
+
if (setuid (pw->pw_uid) < 0)
{
/* Note that this means that if run as a non-root user,
@@ -5344,12 +5365,12 @@ error 0 %s: no such user\n", username);
if (CVS_Username == NULL)
CVS_Username = xstrdup (username);
#endif
-
+
#if HAVE_PUTENV
/* Set LOGNAME, USER and CVS_USER in the environment, in case they
are already set to something else. */
{
- char *env, *cvs_user;
+ char *env;
env = xmalloc (sizeof "LOGNAME=" + strlen (username));
(void) sprintf (env, "LOGNAME=%s", username);
@@ -5359,10 +5380,11 @@ error 0 %s: no such user\n", username);
(void) sprintf (env, "USER=%s", username);
(void) putenv (env);
- cvs_user = NULL != CVS_Username ? CVS_Username : "";
- env = xmalloc (sizeof "CVS_USER=" + strlen (cvs_user));
- (void) sprintf (env, "CVS_USER=%s", cvs_user);
+#ifdef AUTH_SERVER_SUPPORT
+ env = xmalloc (sizeof "CVS_USER=" + strlen (CVS_Username));
+ (void) sprintf (env, "CVS_USER=%s", CVS_Username);
(void) putenv (env);
+#endif
}
#endif /* HAVE_PUTENV */
}
@@ -5373,7 +5395,7 @@ error 0 %s: no such user\n", username);
extern char *crypt PROTO((const char *, const char *));
-/*
+/*
* 0 means no entry found for this user.
* 1 means entry found and password matches (or found password is empty)
* 2 means entry found, but password does not match.
@@ -5442,7 +5464,7 @@ check_repository_password (username, password, repository, host_user_ptr)
char *found_password, *host_user_tmp;
char *non_cvsuser_portion;
- /* We need to make sure lines such as
+ /* We need to make sure lines such as
*
* "username::sysuser\n"
* "username:\n"
@@ -5572,7 +5594,7 @@ check_password (username, password, repository)
{
found_passwd = pw->pw_passwd;
}
-
+
if (found_passwd == NULL)
{
printf ("E Fatal error, aborting.\n\
@@ -5590,7 +5612,7 @@ error 0 %s: no such user\n", username);
exit (EXIT_FAILURE);
}
-
+
if (*found_passwd)
{
/* user exists and has a password */
@@ -5645,7 +5667,7 @@ error 0 %s: no such user\n", username);
handle_return:
if (host_user)
{
- /* Set CVS_Username here, in allocated space.
+ /* Set CVS_Username here, in allocated space.
It might or might not be the same as host_user. */
CVS_Username = xmalloc (strlen (username) + 1);
strcpy (CVS_Username, username);
@@ -5739,10 +5761,12 @@ pserver_authenticate_connection ()
/* Make sure the protocol starts off on the right foot... */
if (getline_safe (&tmp, &tmp_allocated, stdin, PATH_MAX) < 0)
- /* FIXME: what? We could try writing error/eof, but chances
- are the network connection is dead bidirectionally. log it
- somewhere? */
- ;
+ {
+#ifdef HAVE_SYSLOG_H
+ syslog (LOG_DAEMON | LOG_NOTICE, "bad auth protocol start: EOF");
+#endif
+ error (1, 0, "bad auth protocol start: EOF");
+ }
if (strcmp (tmp, "BEGIN VERIFICATION REQUEST\n") == 0)
verify_and_exit = 1;
@@ -5773,7 +5797,7 @@ pserver_authenticate_connection ()
getline_safe (&username, &username_allocated, stdin, PATH_MAX);
getline_safe (&password, &password_allocated, stdin, PATH_MAX);
- /* Make them pure. */
+ /* Make them pure. */
strip_trailing_newlines (repository);
strip_trailing_newlines (username);
strip_trailing_newlines (password);
@@ -5807,8 +5831,6 @@ pserver_authenticate_connection ()
/* We need the real cleartext before we hash it. */
descrambled_password = descramble (password);
host_user = check_password (username, descrambled_password, repository);
- memset (descrambled_password, 0, strlen (descrambled_password));
- free (descrambled_password);
if (host_user == NULL)
{
#ifdef HAVE_SYSLOG_H
@@ -5818,6 +5840,8 @@ pserver_authenticate_connection ()
username, descrambled_password, repository);
#endif
#endif
+ memset (descrambled_password, 0, strlen (descrambled_password));
+ free (descrambled_password);
i_hate_you:
printf ("I HATE YOU\n");
fflush (stdout);
@@ -5826,6 +5850,8 @@ pserver_authenticate_connection ()
yet. */
error_exit ();
}
+ memset (descrambled_password, 0, strlen (descrambled_password));
+ free (descrambled_password);
/* Don't go any farther if we're just responding to "cvs login". */
if (verify_and_exit)
@@ -6511,7 +6537,7 @@ cvs_flusherr ()
{
/* make sure stderr is flushed before we send the flush count on the
* protocol pipe
- */
+ */
fflush (stderr);
/* Send a special count to tell the parent to flush. */
buf_send_special_count (protocol, -2);
@@ -6541,7 +6567,7 @@ cvs_flushout ()
main.c, didn't get called in the server child process. But
in the future it is quite plausible that we'll want to make
this case work analogously to cvs_flusherr.
-
+
FIXME - DRP - I tried to implement this and triggered the following
error: "Protocol error: uncounted data discarded". I don't need
this feature right now, so I'm not going to bother with it yet.
diff --git a/contrib/cvs/src/server.h b/contrib/cvs/src/server.h
index caeff8a7ccc5..31f23d519e42 100644
--- a/contrib/cvs/src/server.h
+++ b/contrib/cvs/src/server.h
@@ -24,7 +24,6 @@
* server-specific functions.
*/
extern int server_active;
-extern int server_expanding;
/* Server functions exported to the rest of CVS. */
diff --git a/contrib/cvs/src/subr.c b/contrib/cvs/src/subr.c
index 8211a77788ed..75f26cb7bbd0 100644
--- a/contrib/cvs/src/subr.c
+++ b/contrib/cvs/src/subr.c
@@ -123,7 +123,7 @@ expand_string (strptr, n, newsize)
/* *STR is a pointer to a malloc'd string. *LENP is its allocated
length. Add SRC to the end of it, reallocating if necessary. */
void
-allocate_and_strcat (str, lenp, src)
+xrealloc_and_strcat (str, lenp, src)
char **str;
size_t *lenp;
const char *src;
@@ -742,9 +742,6 @@ resolve_symlink (filename)
But that would require editing each filesubr.c and so the
expedient hack seems to be looking at HAVE_READLINK. */
newname = xreadlink (*filename);
-#else
- error (1, 0, "internal error: islink doesn't like readlink");
-#endif
if (isabsolute (newname))
{
@@ -762,6 +759,9 @@ resolve_symlink (filename)
free (*filename);
*filename = fullnewname;
}
+#else
+ error (1, 0, "internal error: islink doesn't like readlink");
+#endif
}
}
diff --git a/contrib/cvs/src/tag.c b/contrib/cvs/src/tag.c
index a2883c8e1b47..0b93e09dd096 100644
--- a/contrib/cvs/src/tag.c
+++ b/contrib/cvs/src/tag.c
@@ -40,7 +40,7 @@ static char *date = NULL;
static char *symtag; /* tag to add or delete */
static int delete_flag; /* adding a tag by default */
static int branch_mode; /* make an automagic "branch" tag */
-static int local; /* recursive by default */
+static int disturb_branch_tags = 0; /* allow -F,-d to disturb branch tags */
static int force_tag_match = 1; /* force tag to match by default */
static int force_tag_move; /* don't force tag to move by default */
static int check_uptodate; /* no uptodate-check by default */
@@ -63,12 +63,13 @@ struct master_lists
static List *mtlist;
static List *tlist;
-static const char rtag_opts[] = "+abdFflnQqRr:D:";
+static const char rtag_opts[] = "+aBbdFflnQqRr:D:";
static const char *const rtag_usage[] =
{
"Usage: %s %s [-abdFflnR] [-r rev|-D date] tag modules...\n",
"\t-a\tClear tag from removed files that would not otherwise be tagged.\n",
"\t-b\tMake the tag a \"branch\" tag, allowing concurrent development.\n",
+ "\t-B\tAllows -F and -d to disturb branch tags. Use with extreme care.\n",
"\t-d\tDelete the given tag.\n",
"\t-F\tMove tag if it already exists.\n",
"\t-f\tForce a head revision match if tag/date not found.\n",
@@ -81,11 +82,12 @@ static const char *const rtag_usage[] =
NULL
};
-static const char tag_opts[] = "+bcdFflQqRr:D:";
+static const char tag_opts[] = "+BbcdFflQqRr:D:";
static const char *const tag_usage[] =
{
"Usage: %s %s [-bcdFflR] [-r rev|-D date] tag [files...]\n",
"\t-b\tMake the tag a \"branch\" tag, allowing concurrent development.\n",
+ "\t-B\tAllows -F and -d to disturb branch tags. Use with extreme care.\n",
"\t-c\tCheck that working files are unmodified.\n",
"\t-d\tDelete the given tag.\n",
"\t-F\tMove tag if it already exists.\n",
@@ -103,6 +105,7 @@ cvstag (argc, argv)
int argc;
char **argv;
{
+ int local = 0; /* recursive by default */
int c;
int err = 0;
int run_module_prog = 1;
@@ -123,6 +126,9 @@ cvstag (argc, argv)
case 'b':
branch_mode = 1;
break;
+ case 'B':
+ disturb_branch_tags = 1;
+ break;
case 'c':
check_uptodate = 1;
break;
@@ -196,6 +202,8 @@ cvstag (argc, argv)
send_arg("-a");
if (branch_mode)
send_arg("-b");
+ if (disturb_branch_tags)
+ send_arg("-B");
if (check_uptodate)
send_arg("-c");
if (delete_flag)
@@ -252,14 +260,14 @@ cvstag (argc, argv)
(date ? date : "A"))), symtag, argv[i], "");
err += do_module (db, argv[i], TAG,
delete_flag ? "Untagging" : "Tagging",
- rtag_proc, (char *) NULL, 0, 0, run_module_prog,
+ rtag_proc, (char *) NULL, 0, local, run_module_prog,
0, symtag);
}
close_module (db);
}
else
{
- err = rtag_proc (argc + 1, argv - 1, NULL, NULL, NULL, 0, 0, NULL,
+ err = rtag_proc (argc + 1, argv - 1, NULL, NULL, NULL, 0, local, NULL,
NULL);
}
@@ -362,7 +370,7 @@ rtag_proc (argc, argv, xwhere, mwhere, mfile, shorten, local_specified,
if (numtag != NULL && !numtag_validated)
{
- tag_check_valid (numtag, argc - 1, argv + 1, local, 0, repository);
+ tag_check_valid (numtag, argc - 1, argv + 1, local_specified, 0, repository);
numtag_validated = 1;
}
@@ -372,7 +380,7 @@ rtag_proc (argc, argv, xwhere, mwhere, mfile, shorten, local_specified,
mtlist = getlist();
err = start_recursion (check_fileproc, check_filesdoneproc,
(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
- argc - 1, argv + 1, local, which, 0, 1,
+ argc - 1, argv + 1, local_specified, which, 0, 1,
where, 1);
if (err)
@@ -387,13 +395,13 @@ rtag_proc (argc, argv, xwhere, mwhere, mfile, shorten, local_specified,
cached in do_recursion isn't stale by the time we get around
to using it to rewrite the RCS file in the callback, and this
is the easiest way to accomplish that. */
- lock_tree_for_write (argc - 1, argv + 1, local, which, 0);
+ lock_tree_for_write (argc - 1, argv + 1, local_specified, which, 0);
/* start the recursion processor */
err = start_recursion (is_rtag ? rtag_fileproc : tag_fileproc,
(FILESDONEPROC) NULL, tag_dirproc,
(DIRLEAVEPROC) NULL, NULL, argc - 1, argv + 1,
- local, which, 0, 0, where, 1);
+ local_specified, which, 0, 0, where, 1);
Lock_Cleanup ();
dellist (&mtlist);
if (where != NULL)
@@ -738,6 +746,21 @@ rtag_fileproc (callerdat, finfo)
branch_mode ? "branch" : "version", rev);
free (oversion);
free (version);
+ if (branch_mode) free(rev);
+ return (0);
+ }
+ else /* force_tag_move is set and... */
+ if ((isbranch && !disturb_branch_tags) ||
+ (!isbranch && disturb_branch_tags))
+ {
+ error(0,0, "%s: Not moving %s tag `%s' from %s to %s%s.",
+ finfo->fullname,
+ isbranch ? "branch" : "non-branch",
+ symtag, oversion, rev,
+ isbranch ? "" : " due to `-B' option");
+ if (branch_mode) free(rev);
+ free (oversion);
+ free (version);
return (0);
}
free (oversion);
@@ -779,7 +802,7 @@ rtag_delete (rcsfile)
RCSNode *rcsfile;
{
char *version;
- int retcode;
+ int retcode, isbranch;
if (numtag)
{
@@ -796,6 +819,20 @@ rtag_delete (rcsfile)
return (0);
free (version);
+
+ isbranch = RCS_nodeisbranch (rcsfile, symtag);
+ if ((isbranch && !disturb_branch_tags) ||
+ (!isbranch && disturb_branch_tags))
+ {
+ if (!quiet)
+ error(0, 0,
+ "Not removing %s tag `%s' from `%s'%s.",
+ isbranch ? "branch" : "non-branch",
+ symtag, rcsfile->path,
+ isbranch ? "" : " due to `-B' option");
+ return (1);
+ }
+
if ((retcode = RCS_deltag(rcsfile, symtag)) != 0)
{
if (!quiet)
@@ -843,6 +880,7 @@ tag_fileproc (callerdat, finfo)
if (delete_flag)
{
+ int isbranch;
/*
* If -d is specified, "force_tag_match" is set, so that this call to
* RCS_getversion() will return a NULL version string if the symbolic
@@ -861,6 +899,20 @@ tag_fileproc (callerdat, finfo)
}
free (version);
+ isbranch = RCS_nodeisbranch (finfo->rcs, symtag);
+ if ((isbranch && !disturb_branch_tags) ||
+ (!isbranch && disturb_branch_tags))
+ {
+ if (!quiet)
+ error(0, 0,
+ "Not removing %s tag `%s' from `%s'%s.",
+ isbranch ? "branch" : "non-branch",
+ symtag, vers->srcfile->path,
+ isbranch ? "" : " due to `-B' option");
+ freevers_ts (&vers);
+ return (1);
+ }
+
if ((retcode = RCS_deltag(vers->srcfile, symtag)) != 0)
{
if (!quiet)
@@ -973,6 +1025,20 @@ tag_fileproc (callerdat, finfo)
freevers_ts (&vers);
return (0);
}
+ else /* force_tag_move == 1 and... */
+ if ((isbranch && !disturb_branch_tags) ||
+ (!isbranch && disturb_branch_tags))
+ {
+ error(0,0, "%s: Not moving %s tag `%s' from %s to %s%s.",
+ finfo->fullname,
+ isbranch ? "branch" : "non-branch",
+ symtag, oversion, rev,
+ isbranch ? "" : " due to `-B' option");
+ free (oversion);
+ if (branch_mode) free(rev);
+ freevers_ts (&vers);
+ return (0);
+ }
free (oversion);
}
diff --git a/contrib/cvs/src/update.c b/contrib/cvs/src/update.c
index f4b919f7a726..3dbe26d30681 100644
--- a/contrib/cvs/src/update.c
+++ b/contrib/cvs/src/update.c
@@ -36,7 +36,7 @@
#include "cvs.h"
#include "savecwd.h"
#ifdef SERVER_SUPPORT
-#include "md5.h"
+# include "md5.h"
#endif
#include "watch.h"
#include "fileattr.h"
@@ -1779,7 +1779,7 @@ patch_file (finfo, vers_ts, docheckout, file_info, checksum)
}
else
{
-#define BINARY "Binary"
+# define BINARY "Binary"
char buf[sizeof BINARY];
unsigned int c;
@@ -2675,7 +2675,7 @@ special_file_mismatch (finfo, rev1, rev2)
rev1_symlink = xreadlink (finfo->file);
else
{
-#ifdef HAVE_ST_RDEV
+# ifdef HAVE_ST_RDEV
if (CVS_LSTAT (finfo->file, &sb) < 0)
error (1, errno, "could not get file information for %s",
finfo->file);
@@ -2684,10 +2684,10 @@ special_file_mismatch (finfo, rev1, rev2)
rev1_mode = sb.st_mode;
if (S_ISBLK (rev1_mode) || S_ISCHR (rev1_mode))
rev1_dev = sb.st_rdev;
-#else
+# else
error (1, 0, "cannot handle device files on this system (%s)",
finfo->file);
-#endif
+# endif
}
rev1_hardlinks = list_linked_files_on_disk (finfo->file);
}
@@ -2726,7 +2726,7 @@ special_file_mismatch (finfo, rev1, rev2)
{
/* If the size of `ftype' changes, fix the sscanf call also */
char ftype[16];
- if (sscanf (n->data, "%16s %lu", ftype,
+ if (sscanf (n->data, "%15s %lu", ftype,
&dev_long) < 2)
error (1, 0, "%s:%s has bad `special' newphrase %s",
finfo->file, rev1, n->data);
@@ -2753,7 +2753,7 @@ special_file_mismatch (finfo, rev1, rev2)
rev2_symlink = xreadlink (finfo->file);
else
{
-#ifdef HAVE_ST_RDEV
+# ifdef HAVE_ST_RDEV
if (CVS_LSTAT (finfo->file, &sb) < 0)
error (1, errno, "could not get file information for %s",
finfo->file);
@@ -2762,10 +2762,10 @@ special_file_mismatch (finfo, rev1, rev2)
rev2_mode = sb.st_mode;
if (S_ISBLK (rev2_mode) || S_ISCHR (rev2_mode))
rev2_dev = sb.st_rdev;
-#else
+# else
error (1, 0, "cannot handle device files on this system (%s)",
finfo->file);
-#endif
+# endif
}
rev2_hardlinks = list_linked_files_on_disk (finfo->file);
}
@@ -2804,7 +2804,7 @@ special_file_mismatch (finfo, rev1, rev2)
{
/* If the size of `ftype' changes, fix the sscanf call also */
char ftype[16];
- if (sscanf (n->data, "%16s %lu", ftype,
+ if (sscanf (n->data, "%15s %lu", ftype,
&dev_long) < 2)
error (1, 0, "%s:%s has bad `special' newphrase %s",
finfo->file, rev2, n->data);
diff --git a/contrib/cvs/src/vers_ts.c b/contrib/cvs/src/vers_ts.c
index 5524babfb4a1..c41affdb6168 100644
--- a/contrib/cvs/src/vers_ts.c
+++ b/contrib/cvs/src/vers_ts.c
@@ -339,13 +339,22 @@ time_stamp (file)
{
struct stat sb;
char *cp;
- char *ts;
+ char *ts = NULL;
+ time_t mtime = 0L;
- if (CVS_LSTAT (file, &sb) < 0)
+ if (!CVS_LSTAT (file, &sb))
{
- ts = NULL;
+ mtime = sb.st_mtime;
}
- else
+ /* If it's a symlink, return whichever is the newest mtime of
+ the link and its target, for safety.
+ */
+ if (!CVS_STAT (file, &sb))
+ {
+ if (mtime < sb.st_mtime)
+ mtime = sb.st_mtime;
+ }
+ if (mtime)
{
struct tm *tm_p;
struct tm local_tm;
diff --git a/contrib/cvs/src/version.c b/contrib/cvs/src/version.c
new file mode 100644
index 000000000000..aba91ae074fa
--- /dev/null
+++ b/contrib/cvs/src/version.c
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 1994 david d `zoo' zuhn
+ * Copyright (c) 1994 Free Software Foundation, Inc.
+ * Copyright (c) 1992, Brian Berliner and Jeff Polk
+ * Copyright (c) 1989-1992, Brian Berliner
+ *
+ * You may distribute under the terms of the GNU General Public License as
+ * specified in the README file that comes with this CVS source distribution.
+ *
+ * version.c - the CVS version number
+ */
+
+#include "cvs.h"
+#include "version.h"
+
+#ifdef CLIENT_SUPPORT
+#ifdef SERVER_SUPPORT
+char *config_string = " (client/server)\n";
+#else
+char *config_string = " (client)\n";
+#endif
+#else
+#ifdef SERVER_SUPPORT
+char *config_string = " (server)\n";
+#else
+char *config_string = "\n";
+#endif
+#endif
+
+
+
+static const char *const version_usage[] =
+{
+ "Usage: %s %s\n",
+ NULL
+};
+
+
+
+/*
+ * Output a version string for the client and server.
+ *
+ * This function will output the simple version number (for the '--version'
+ * option) or the version numbers of the client and server (using the 'version'
+ * command).
+ */
+int
+version (argc, argv)
+ int argc;
+ char **argv;
+{
+ int err = 0;
+
+ if (argc == -1)
+ usage (version_usage);
+
+#ifdef CLIENT_SUPPORT
+ if (current_parsed_root && current_parsed_root->isremote)
+ (void) fputs ("Client: ", stdout);
+#endif
+
+ /* Having the year here is a good idea, so people have
+ some idea of how long ago their version of CVS was
+ released. */
+ (void) fputs (version_string, stdout);
+ (void) fputs (config_string, stdout);
+
+#ifdef CLIENT_SUPPORT
+ if (current_parsed_root && current_parsed_root->isremote)
+ {
+ (void) fputs ("Server: ", stdout);
+ start_server ();
+ if (supported_request ("version"))
+ send_to_server ("version\012", 0);
+ else
+ {
+ send_to_server ("noop\012", 0);
+ fputs ("(unknown)\n", stdout);
+ }
+ err = get_responses_and_close ();
+ }
+#endif
+ return err;
+}
+
diff --git a/contrib/cvs/src/version.h.in b/contrib/cvs/src/version.h.in
new file mode 100644
index 000000000000..48580cb8005b
--- /dev/null
+++ b/contrib/cvs/src/version.h.in
@@ -0,0 +1,15 @@
+/* -*- c -*-
+ *
+ * Copyright (c) 1992, Brian Berliner and Jeff Polk
+ * Copyright (c) 1989-1992, Brian Berliner
+ *
+ * You may distribute under the terms of the GNU General Public License as
+ * specified in the README file that comes with the CVS kit.
+ */
+
+#ifndef VERSION_H
+#define VERSION_H 1
+
+#define version_string "Concurrent Versions System (CVS) @VERSION@"
+
+#endif /* VERSION_H */
diff --git a/contrib/cvs/src/wrapper.c b/contrib/cvs/src/wrapper.c
index 039590ad269f..bb071b1b5537 100644
--- a/contrib/cvs/src/wrapper.c
+++ b/contrib/cvs/src/wrapper.c
@@ -178,14 +178,14 @@ wrap_send ()
and (more importantly) where we found it. */
error (0, 0, "\
-m wrapper option is not supported remotely; ignored");
+ send_to_server ("Argument -W\012Argument ", 0);
+ send_to_server (wrap_list[i]->wildCard, 0);
+ send_to_server (" -k '", 0);
if (wrap_list[i]->rcsOption != NULL)
- {
- send_to_server ("Argument -W\012Argument ", 0);
- send_to_server (wrap_list[i]->wildCard, 0);
- send_to_server (" -k '", 0);
send_to_server (wrap_list[i]->rcsOption, 0);
- send_to_server ("'\012", 0);
- }
+ else
+ send_to_server ("kv", 0);
+ send_to_server ("'\012", 0);
}
}
#endif /* CLIENT_SUPPORT */
@@ -216,32 +216,28 @@ wrap_unparse_rcs_options (line, first_call_p)
if (first_call_p)
i = 0;
- for (; i < wrap_count + wrap_tempcount; ++i)
- {
- if (wrap_list[i]->rcsOption != NULL)
- {
- *line = xmalloc (strlen (wrap_list[i]->wildCard)
- + strlen ("\t")
- + strlen (" -k '")
- + strlen (wrap_list[i]->rcsOption)
- + strlen ("'")
- + 1); /* leave room for '\0' */
-
- strcpy (*line, wrap_list[i]->wildCard);
- strcat (*line, " -k '");
- strcat (*line, wrap_list[i]->rcsOption);
- strcat (*line, "'");
-
- /* We're going to miss the increment because we return, so
- do it by hand. */
- ++i;
-
- return;
- }
+ if (i >= wrap_count + wrap_tempcount) {
+ *line = NULL;
+ return;
}
- *line = NULL;
- return;
+ *line = xmalloc (strlen (wrap_list[i]->wildCard)
+ + strlen ("\t")
+ + strlen (" -k '")
+ + (wrap_list[i]->rcsOption != NULL ?
+ strlen (wrap_list[i]->rcsOption) : 2)
+ + strlen ("'")
+ + 1); /* leave room for '\0' */
+
+ strcpy (*line, wrap_list[i]->wildCard);
+ strcat (*line, " -k '");
+ if (wrap_list[i]->rcsOption != NULL)
+ strcat (*line, wrap_list[i]->rcsOption);
+ else
+ strcat (*line, "kv");
+ strcat (*line, "'");
+
+ ++i;
}
#endif /* SERVER_SUPPORT || CLIENT_SUPPORT */
@@ -438,7 +434,7 @@ wrap_add (line, isTemp)
case 'k':
if (e.rcsOption)
free (e.rcsOption);
- e.rcsOption = xstrdup (temp);
+ e.rcsOption = strcmp (temp, "kv") ? xstrdup (temp) : NULL;
break;
default:
break;
@@ -471,11 +467,7 @@ wrap_add_entry(e, temp)
x=(temp ? wrap_count+(wrap_tempcount++):(wrap_count++));
wrap_list[x]=(WrapperEntry *)xmalloc(sizeof(WrapperEntry));
- wrap_list[x]->wildCard=e->wildCard;
- wrap_list[x]->fromcvsFilter=e->fromcvsFilter;
- wrap_list[x]->tocvsFilter=e->tocvsFilter;
- wrap_list[x]->mergeMethod=e->mergeMethod;
- wrap_list[x]->rcsOption = e->rcsOption;
+ *wrap_list[x]=*e;
}
/* Return 1 if the given filename is a wrapper filename */
diff --git a/contrib/cvs/src/zlib.c b/contrib/cvs/src/zlib.c
index 3bfc542f84bf..1fc7a724ff4b 100644
--- a/contrib/cvs/src/zlib.c
+++ b/contrib/cvs/src/zlib.c
@@ -51,8 +51,8 @@ static int compress_buffer_input PROTO((void *, char *, int, int, int *));
static int compress_buffer_output PROTO((void *, const char *, int, int *));
static int compress_buffer_flush PROTO((void *));
static int compress_buffer_block PROTO((void *, int));
-static int compress_buffer_shutdown_input PROTO((void *));
-static int compress_buffer_shutdown_output PROTO((void *));
+static int compress_buffer_shutdown_input PROTO((struct buffer *));
+static int compress_buffer_shutdown_output PROTO((struct buffer *));
/* Report an error from one of the zlib functions. */
@@ -355,10 +355,10 @@ compress_buffer_block (closure, block)
/* Shut down an input buffer. */
static int
-compress_buffer_shutdown_input (closure)
- void *closure;
+compress_buffer_shutdown_input (buf)
+ struct buffer *buf;
{
- struct compress_buffer *cb = (struct compress_buffer *) closure;
+ struct compress_buffer *cb = (struct compress_buffer *) buf->closure;
int zstatus;
/* Pick up any trailing data, such as the checksum. */
@@ -387,10 +387,10 @@ compress_buffer_shutdown_input (closure)
/* Shut down an output buffer. */
static int
-compress_buffer_shutdown_output (closure)
- void *closure;
+compress_buffer_shutdown_output (buf)
+ struct buffer *buf;
{
- struct compress_buffer *cb = (struct compress_buffer *) closure;
+ struct compress_buffer *cb = (struct compress_buffer *) buf->closure;
int zstatus, status;
do
diff --git a/contrib/cvs/tools/ChangeLog b/contrib/cvs/tools/ChangeLog
index d83619cc76f3..a232b03e4c73 100644
--- a/contrib/cvs/tools/ChangeLog
+++ b/contrib/cvs/tools/ChangeLog
@@ -1,3 +1,23 @@
+2002-04-17 Derek Price <oberon@umich.edu>
+
+ * README: Replace cyclic.com with cvshome.org.
+
+2001-09-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with automake 1.5.
+
+2001-08-06 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated.
+
+2001-07-04 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new Automake release candidate 1.4h.
+
+2001-06-28 Derek Price <dprice@collab.net>
+
+ * Makefile.in: Regenerated with new version of Automake.
+
2001-04-25 Derek Price <dprice@collab.net>
* Makefile.in: Regenerated using AM 1.4e as of today at 18:10 -0400.
diff --git a/contrib/cvs/tools/Makefile.in b/contrib/cvs/tools/Makefile.in
index 2e333f7d0c46..d52658fb2521 100644
--- a/contrib/cvs/tools/Makefile.in
+++ b/contrib/cvs/tools/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4e from Makefile.am.
+# Makefile.in generated automatically by automake 1.5 from Makefile.am.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
@@ -27,7 +27,6 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-
SHELL = @SHELL@
srcdir = @srcdir@
@@ -48,11 +47,9 @@ infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
-
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-
top_builddir = ..
ACLOCAL = @ACLOCAL@
@@ -66,7 +63,6 @@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
-
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
@@ -78,33 +74,28 @@ AWK = @AWK@
CC = @CC@
CSH = @CSH@
DEPDIR = @DEPDIR@
-ETAGS = @ETAGS@
-ETAGS_INCLUDE_OPTION = @ETAGS_INCLUDE_OPTION@
+EXEEXT = @EXEEXT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INSTALL_STRIP_PROGRAM_ENV = @INSTALL_STRIP_PROGRAM_ENV@
KRB4 = @KRB4@
LN_S = @LN_S@
-MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PERL = @PERL@
PR = @PR@
PS2PDF = @PS2PDF@
RANLIB = @RANLIB@
ROFF = @ROFF@
-STRIP = @STRIP@
TEXI2DVI = @TEXI2DVI@
VERSION = @VERSION@
YACC = @YACC@
-_am_include = @_am_include@
-_am_quote = @_am_quote@
+am__include = @am__include@
+am__quote = @am__quote@
includeopt = @includeopt@
install_sh = @install_sh@
EXTRA_DIST = \
README .cvsignore
-EXEEXT =
-OBJEXT = o
subdir = tools
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h $(top_builddir)/src/options.h
@@ -114,15 +105,14 @@ DIST_COMMON = README ChangeLog Makefile.am Makefile.in
all: all-am
.SUFFIXES:
-
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu tools/Makefile
-
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
+uninstall-info-am:
tags: TAGS
TAGS:
@@ -134,7 +124,11 @@ distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
- d=$(srcdir); \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ $(mkinstalldirs) "$(distdir)/$$dir"; \
+ fi; \
if test -d $$d/$$file; then \
cp -pR $$d/$$file $(distdir) \
|| exit 1; \
@@ -159,23 +153,20 @@ install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
-
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- INSTALL_PROGRAM_ENV='$(INSTALL_STRIP_PROGRAM_ENV)' install
-
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
- -rm -f Makefile.in
clean: clean-am
clean-am: clean-generic mostlyclean-am
@@ -184,11 +175,11 @@ distclean: distclean-am
distclean-am: clean-am distclean-generic
-dvi:
+dvi: dvi-am
dvi-am:
-info:
+info: info-am
info-am:
@@ -196,7 +187,7 @@ install-data-am:
install-exec-am:
-install-info:
+install-info: install-info-am
install-man:
@@ -210,19 +201,20 @@ mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
+uninstall-am: uninstall-info-am
+
.PHONY: all all-am check check-am clean clean-generic distclean \
distclean-generic distdir dvi dvi-am info info-am install \
install-am install-data install-data-am install-exec \
- install-exec-am install-info install-man install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-generic \
- uninstall uninstall-am
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic uninstall uninstall-am uninstall-info-am
# for backwards compatibility with the old makefiles
realclean: maintainer-clean
.PHONY: realclean
-
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/contrib/cvs/tools/README b/contrib/cvs/tools/README
index e8e73b365fdb..edc0d78d02ce 100644
--- a/contrib/cvs/tools/README
+++ b/contrib/cvs/tools/README
@@ -7,5 +7,5 @@ If you are looking for pcl-cvs, we'd suggest pcl-cvs version 2.x, at:
Both of the following CVS sites have a page about pcl-cvs:
http://www.loria.fr/~molli/cvs-index.html
- http://www.cyclic.com/
+ http://cvshome.org/
They also have much information about CVS tools more generally.