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.