Contents: MAINTAINING A VARIANT OF EiC via CVS BUILDING A BINARY DISTRIBUTION COMMITTING EiC to CVS -------------------------------------------------------------------- MAINTAINING A VARIANT OF EiC via CVS If you have or intend to be modifying EiC's source distribution for your own personal needs, but also want your distribution to be kept up to date with EiC's public distribution, then one way to do this is to use CVS. With CVS you can keep track of several versions of EiC simultaneously and it will allow you to merge different versions together. Thereby, incorporating changes from one version into another. For details on using CVS please refer to: Version Management with CVS by Per Cederqvist http://www.loria.fr/~molli/cvs/doc/cvs_toc.html Most Linux distribution come with CVS, but if you need to install CVS, it can be obtained from: http://www.cyclic.com/cyclic-pages/cvsdev.html The following will show you how to maintain your personal distribution of EiC so that you can easily incorporate new features or bug fixes from the latest official release of EiC into your own version. Also, you are advised to read all of the this section prior to starting. In the following it will be assumed that your EiC source directory contains only EiC source files. Therefore, before starting make sure your EiC directory has been clobbered: % cd $HOMEofEiC // PATH_TO_THE_EiC_DIRECTORY % cd doc; make clobber; cd .. ; make clobber The clobber directive is more severe than a clean, as it removes everything that clean does plus targets and installed files. First place a copy of the public version of EiC under CVS control using the following cvs command: cvs import -m"Message" Message A string that specifies some information about the current operation. If you do not give it, CVS will prompt you by opening up an editor according to $CVSEDITOR or $EDITOR and which can be quite slow and annoying at times. Dir The directory where the current source will be stored in the CVS repository. Vendor-Tag The tag for the entire branch. This tag will be used to identify the Vendor's copy of the source (the public version of EiC), rather than your personal version. Release-Tag The Release-Tag is used to identify the files at the leaves, of the Vendor's branch, created each time you execute an import. For example, lets say you are starting from EiC version 3.7: % cvs import -m"import of EiC 3.7" EiC EiC_dist V_3_7 This command will create a branch with number 1.1.1, and which is the CVS branch number for the Vendor's branch. The above command will also place a copy of EiC's source distribution in the directory $CVSROOT/EiC. It will label the Vendor's branch as `EiC_dist' and assign it the release tag `V_3_7'. Before you start working with any code in the repository you must first check out a working copy from the repository. To make sure everything worked and to check out the latest version from the repository do the following: % cd .. % mv EiC EiC.orig % cvs checkout EiC % ls -R EiC Note: you have checked out the latest revision on the `main trunk' of the EiC repository and not the code on the Vendor's branch `EiC_dist', although at this stage they are identical. This means you should have a copy of the main trunk of the EiC repository, and all commits will be committed to the main trunk and not to the Vendor's branch. Now, examine the status of a file, such as the starteic.c file, by using the CVS status subcommand: % cd EiC/src % cvs status -v starteic.c =================================================================== File: starteic.c Status: Up-to-date Working revision: 1.1.1.1 Sat Jun 20 07:37:46 1998 Repository revision: 1.1.1.1 /usr/local/cvsroot/EiC/src/starteic.c,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none) Existing Tags: V_3_7 (revision: 1.1.1.1) EiC_dist (branch: 1.1.1) This tells us that we are working with revision 1.1.1.1, which also coincides with the revision version 1.1.1.1 with tag V_3_7. While it it is not clear from the above information, but this is also revision 1.1 on the main trunk. If you already have a modified copy of EiC then just copy your files over the top of the files in this EiC directory. However, to simulate changes that you may make to the EiC source files, and for this example, I will just edit `starteic.c' and change: "EiC V3.7 - Copyright (c) 1995 to 1998," to "myEiC V3.7 - Copyright (c) 1995 to 1998," Next, commit the changes via: % cvs commit -m"update of EiC" starteic.c Checking in starteic.c; /usr/local/cvsroot/EiC/src/starteic.c,v <-- starteic.c new revision: 1.2; previous revision: 1.1 done If I had not specified the file `starteic.c', then the commit command would have worked recursively on all files within this directory and its subdirectories. It is also a good idea to use `cvs -n update' before making a commit, as this will inform you, without making any changes, what changes will occur, and will give you the opportunity to make appropriate changes as needed; such as adding any new files and directories. Now the CVS repository for EiC will look something like this: +-----+ +-----+ main trunk --> | 1.1 |--->| 1.2 | (1) +-----+ +-----+ \ \+---------+ Vendor's branch --> | 1.1.1.1 | (1.1.1) +---------+ EiC_dist . / \ | tag V_3_7 Note, only file starteic.c will have the revision number 1.2, all the rest will have revision number 1.1.1.1, which is also 1.1. When a new version of EiC is released, and for this example I will use version 3.7.1, the first thing to do is to make sure you have committed your working revision of EiC to CVS (see examples above). Then untar the new release of EiC into some temporary directory: % cd /tmp % tar xvzf EiCsrc_3_7_1.tgz % cd EiC % cvs import -m"update EiC V3.7.1" EiC EiC_dist V_3_7_1 The above import command is almost identical to the previous import command, with the only difference being that a new release tag is being specified, V_3_7_1. After the above, the repository will look like: +-----+ +-----+ main trunk --> | 1.1 |--->| 1.2 | (1) +-----+ +-----+ \ \+---------+ +---------+ Vendor's branch --> | 1.1.1.1 | --->| 1.1.1.2 | (1.1.1) +---------+ +---------+ EiC_dist . . / \ / \ | | tag V_3_7 tag V_3_7_1 Any files in the Vendor's branch that have changed between version 3.7 and 3.7.1 will have the revision number 1.1.1.2 else their revision number will remain at 1.1.1.1. If there are any files in the main trunk that have local changes then CVS will warn that you must merge the changes into the main trunk, and for this example, CVS reports: 1 conflicts created by this import. Use the following command to help the merge: cvs checkout -jEiC_dist:yesterday -jEiC_dist EiC The above report is warning that not only are changes detected between the main trunk and the Vendor's branch, but some of these changes also conflict. This means that the same lines of code have been altered between the Vendor's source and the main trunk source. To resolve these difference first change to your local working EiC directory: % cd $HOMEofEiC After you have commited your working version to the main trunk of the repository for EiC, you may also want to tag your current revision: % cvs tag TAGNAME This will allow you to retrieve this revision via: % cvs checkout -r TAGNAME EiC Next, you must merge all changes on the Vendor's branch into your local working copy of EiC (this command only affects the working copy): % cvs update -d -j EiC_dist Any conflicts that result from the merge must now be resolved. To find all the files with conflicts use the command: % cvs -n commit The only conflict in this example is with file starteic.c (note, the original working copy will be saved in file `.#starteic.c.1.2') and within starteic.c the conflict is revealed as: <<<<<<< starteic.c "myEiC V3.7 - Copyright (c) 1995 to 1998," ======= "EiC V3.7.1 - Copyright (c) 1995 to 1998," >>>>>>> 1.1.1.2 CVS delimits conflicting sections with <<<<<<<<, ===== and >>>>>>. Thus, preventing code with conflicts from being compiled. To resolve this conflict, change the above 5 lines into: "my" "EiC V3.7.1 - Copyright (c) 1995 to 1998," This will also prevent future conflicts with this section of code. Now, from the EiC home directory commit the whole source tree: % cvs commit -m"merged with EiC V3.7.1" The EiC repository will now look like: +-----+ +-----+ +-----+ main trunk --> | 1.1 |--->| 1.2 |--->| 1.3 | (1) +-----+ +-----+ +-----+ \ \+---------+ +---------+ Vendor's branch --> | 1.1.1.1 | --->| 1.1.1.2 | (1.1.1) +---------+ +---------+ EiC_dist . . / \ / \ | | tag V_3_7 tag V_3_7_1 At this stage you should have the latest changes of EiC incorporated into your local version of EiC. TIPS: Keep a backup of your CVS repository. This way, if you get confused and stuff up your CVS repository you can always replace it with the backed up version. Use CVS tags to keep track of various revisions of your local source. Work methodically with CVS. If need be, create a check list that you work through. Below in section `COMMITTING EiC to CVS' are the steps that I go through each time I make a new commit of EiC. More CVS information can be found at: http://www.loria.fr/~molli/cvs-index.html -------------------------------------------------------------------- BUILDING THE BINARY DISTRIBUTION (*) Change to EiC's top directory and run % config/makeconfig This ensures that the appropriate platform information has been set. (*) Edit the main Makefile to set EiC's version number, EiC_NUM, to that obtained from % eic -v If adding a new module to the binary source distribution update the variables MODULES BINTREE and possibly PUB_DIRS in the top Makefile. (*) Edit the README.BIN file to reflect the appropriate version and any new platforms. (*) Change to the documentation directory and make install % cd doc % make install % cd .. (*) To construct the binary distribution: % make binary (*) Now test the binary distribution: % tar xvzf EiC_PLATFORM.#.#.tgz Inspect the README file % more EiC/README Follow the instruction for installing EiC. If needed repeat previous steps until all is okay. Then % cd EiC/main % make -n installBinary % make installBinary % cd ../.. Test it: % cd test/EiCtests % eictester t*.c Clean up: % cd ../../EiC/main % make clobber % cd ../.. % rm -rf EiC (*) % make install (*) Also, up date EiC's web page to reflect the new distributions. ------------------------------------------------------------------ COMMITTING EIC to CVS (1) Change directory to EiC's home directory (2) make clobber (3) make install // Fix code, so that gcc // does not give any warnings (4) cd test // run test procedures (5) test.sh // make sure all tests modules pass // if not understand why (5a) cd EiCtests (6) ../runsent *.c // check manually all the *.snt files // and that they are correct (7) rm *.snt (8) cd .. (9) make clobber // check that Lib and include directories // are empty. If not, find out why. (10) cvs -n update > /tmp/list * from the information that goes to screen check for errors * now check the contents of the file /tmp/list and if needed, take the appropriate actions * repeat step 10 until no warnings exist etc (11) cvs commit -m"UPDATE of EiC " (12) If needed now add a tag: * cvs tag V3_0