README for ivmkcm 0.9

This directory contains release 0.9 of the ivmkcm distribution of Perl
CVS scripts.  You should read the rest of this file for information on
what ivmkcm is and instructions on how to install it.

If you have a question about this software, desire to contribute code,
found a bug, or wonder how to get further assistance, please contact
info@vectaport.com.

The overall copyright and permission notice for ivmkcm can be found
in the COPYRIGHT file in this directory (it's GPL).
 
0. What is ivmkcm?:

ivmkcm is a collection of Perl scripts written on top of cvs that
simplifies the management of directories checked into a cvs
repository, and facilitates the generation of patch files to share
between remote sites with separate repositories.

ivmkcm also contains make rules (and imake templates) that can be used
to integrate these Perl scripts into imake'ified source trees (like
the X distribution), particularily InterViews or source trees derived
from InterViews.  These make rules (documented in Appendix A) allow
for recursive execution of the individual scripts, so one "make" can
check in; or commit changes; or update with other's changes for an an
entire source tree.

Follow these instructions to configure, build, and install ivmkcm

1. Configuring ivtools:

1.a. You no longer need to set your CPU environment variable to build
and install ivmkcm, but you still need a CPU specific configuration file.
Ready-made configurations that have been known to work exist for
LINUX, SUN4 (and Solaris), SGI, HP800 (HPUX), ALPHA, NETSBD, and now
CYGWIN (for Windows NT).

Use "make CPU" from the top directory to see the symbol ivtools will
use for your OS (grep config/arch.def for ArchitectureName to get a
complete list of possible OS'es).  Then look for a matching
config/site.def.<CPU> file, where <CPU> is the value returned by "make
CPU".  If it is there proceed to step 1.b.

Other variants of Unix can be attempted by creating the corresponding
config/site.def.<CPU>, i.e. site.def.AIX or site.def.MIPS.

Use SUN4 for Solaris as well as SunOS.  Although SUN5 would be more
correct, the config files automatically determine the difference
between the two OS'es by checking for SVR4'ness.

1.b Run the configure script in the top-level directory, by entering
"./configure" followed by any of the following arguments (--with
arguments are recognized as --enable as well):

  --enable-install-relative[=ARG]  install relative to source tree
  --enable-install-subdir[=ARG]    install in ivtools sub-directory
  --prefix=DIR			   to use when install-relative is false
				   (default is /usr/local)

ARG can be 0 or 1, default is 1 when not specified.  The configure
script is usually able to automatically determine --x-includes and
--x-libraries (except on DEC Alpha). If the arguments for ACE,
clippoly, or IUE are not supplied, the configure script prints a
reminder, then proceeds to set up to build ivtools without these
libraries.

If you want to run the executables without installing them, use
--enable-use-rpath to embed the shared library pathnames into the
executables at link time.

Here is an example of using the configure script for relative install:
libraries:

./configure --enable-install-relative

Running the configure script generates two files, a config/config.mk
that gets included into each Makefile when used, and a
config/config-<os>-gcc.defs that gets used by "make Makefiles"
described below.  <os> is something like linux.  The last line of
output from the configure script shows this pathname.  Verify that
this is the same as the file included at the end of the
config/site.def.<CPU> file.  Change the site.def.<CPU> file if
necessary.

Also you may want to review the rest of the entries in the
site.def.<CPU> file to see if they are good defaults for your system.

** See http://www.vectaport.com/ivtools/faq.html for more info.

2. Building ivmkcm:

2.a. cd to the ivmkcm-0.9/ directory (you'd already be in this
directory after running the configure script).

2.b. Built with a "make" command.  The first time it is run it
does all these individual steps (the equivalent of "make World"):

	- regenerates the top-level Makefile to snap it to 
	  the current directory ("make Makefile").

	- runs through the source tree and generates all 
	  the other Makefile's ("make Makefiles").

	- prepares everything for installation ("make -k").
	
** Subsequent use of "make" will only do the "make -k" phase described
** above.  To redo everything, either do a "make World", or do a "make
** clean" followed by a "make".  The "make clean" deletes the files
** that suppress the make stateges, make.makefile, make.makefiles,
** make.depend, and make.make.

3. Installing ivmkcm:

Type "make install".  Become super-user to install in a system
directory.  Finally, if you installed the scripts somewhere other than
where perl resides, establish a symbolic link from that directory for
perl:

	ln -s `which perl`

4. After building and installing ivmkcm:

Take a look at the ivmkcm manual page (man ivmkcm) to see what its all
about and get a summary of commands. Manual pages exist for all
commands.  Or browse the web pages (which replicate the man pages) in
the src/html directory.  To incorporate the ivmkcm imake rules into a
source tree derived from InterViews or ivtools, replace the
config/rules.def with the ivmkcm (or ivtools) version.

To test the package by building its own repository, go to the top of the
source tree and type:

	make cmchkin

5. Acknowledgements/History:

An earlier version of ivmkcm was created by Scott Johnston
(johnston@vectaport.com) and Brian Hogencamp (brian@ciderpress.com)
while at Advanced Decision Systems in Mt. View.  It got started by
evolving the checkin csh script that came with cvs-1.2 from Brian
Berliner, in an attempt to add configuration management make rules to
source trees built on top of InterViews.  Subsequently Brian Hogencamp
rewrote all the scripts in Perl, revised the man pages, and crafted
the web pages.  Now Vectaport Inc. maintains and distributes the
package.

Appendix A:  Makefile targets supported by ivmkmf

make cmchkin

Create a cm repository under the top-level directory (if none exists)
and check in this directory and each sub-directory as its own package.
The package name is defined by a PACKAGE makefile variable in the
Imakefile.  Make sure to add the appropriate cm pathname to your
CMPATH environment variable.  See the cmchkin man page for further
details.

make cmadd

Add any new files in this directory (and each sub-directory) to the
repository.  The list of supported RepositoryFiles is defined in
config/params.def and can be extended in config/local.def.  See the
cmadd man page for further details.

make cmupdate

Check the status of this directory (and each sub-directory) relative
to the repository.  See the cmupdate man page for further details.

make cmcommit [CMMSG=message] [CMFLAGS=-q]

Commit the changes in any files in this directory (and each
sub-directory) to the repository.  Creates a numbered commit file
under cm/Patches in a directory of the same name.  These files can be
concatenated together to create external patches.  See the cmcommit
man page for further details.

make cmtag CMARGS=tag

Tag the repository files associated with this directory (and each
sub-directory) with an arbitrary symbol.