

This build process works from an SSH console on build.eclipse.org. 

The following is required setup on the committers login $HOME directory. 

	Eclipse installed: 
	
		<$HOME>/eclipse-ppc-33M1
	
	Java 1.5 installed
	
		<$HOME>/ibm-java2-ppc-50
	
	Java 1.4 installed
	
		<$HOME>/IBMJava2-ppc-142
	
	OSGI Indexer (optional - need to be OSGI member to get a copy)

		<$HOME>/osgiIndexer/bindex.jar
	
	
The process can then be "boot strapped" by executing the following script. 
(This just deletes any exising copies, and gets fresh copies of scripts 
and property files from HEAD). 

getCallistoToolsFromCVS.sh 

A copy of this script is constained in 
org.eclipse.callisto.tools\build-home\getCallistoToolsFromCVS.sh
but, that copy should be moved to <$HOME> for execution. 
That script itself constains some instructions on what to do next, the main 
part of which 

then 
cd org.eclipse.callisto.tools/build-home/

and finally -- the part that actually does the work -- something similar to 
screen -R ./runUpdateAllProjects.sh -clean | tee out.txt

NOTE: if you are doing a "local, developers test" of the runUpdateAllProjects 
sript, you should grep through all scripts, and change the 'staging' 
directory to your own test directory. 

When done (about 20 minutes) be sure to check the console output 
for 'error', 'exception', and 'failed'. 

Final steps to "releases"

Two more scripts need to be executed to move the 'staging' files 
to the 'releases' directory. 

copyToRelease-plugins.sh
copyToRelease-SiteFiles.sh 

Finally, (optionally) change to the releases directory and execute 
runIndexer.sh to create the OSGI index. 





