• Home
  • History
  • Annotate
  • only in /external/eclipse-basebuilder/basebuilder-3.6.2/org.eclipse.releng.basebuilder/
NameDateSize

..14-Feb-20134 KiB

.classpath14-Feb-20133.2 KiB

.eclipseproduct14-Feb-201359

.project14-Feb-2013389

.settings/14-Feb-20134 KiB

about.html14-Feb-201313.5 KiB

about_files/14-Feb-20134 KiB

builderTemplate/14-Feb-20134 KiB

configuration/14-Feb-20134 KiB

eclipse14-Feb-201361.5 KiB

eclipse.ini14-Feb-2013279

epl-v10.html14-Feb-201316.1 KiB

libcairo-swt.so14-Feb-2013259.9 KiB

libXm.so.214-Feb-20131.8 MiB

notice.html14-Feb-20136.4 KiB

p2/14-Feb-20134 KiB

plugins/14-Feb-201312 KiB

readme/14-Feb-20134 KiB

readme.html14-Feb-201331.5 KiB

readme.html

1<HTML>
2<HEAD>
3<TITLE>Automating Product Builds with PDE BUILD</TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> 
4</HEAD>
5
6<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
7<P><FONT SIZE="+3"> Automating Builds with PDE BUILD</FONT><BR></P><P>Last Updated: 
8June16, 2005</P><P><FONT SIZE="+1"><A HREF="#intro">Introduction</A></FONT></P><P><FONT SIZE="+1"><A HREF="#preparation">Preparing 
9the infrastrucure</A></FONT></P><UL><LI><A HREF="#commit">Commit feature and plug-in 
10projects to CVS repository</A></LI><LI><A HREF="#createmap">Create map file project</A></LI><LI><A HREF="#gensource">Set 
11up auto-generation of source features and plug-ins</A></LI></UL><P><FONT SIZE="+1"><A HREF="#buildconfigfiles">Preparing 
12Build Configuration Files</A> </FONT></P><UL> <LI><A HREF="#build.properties">Write 
13build.properties</A></LI><LI><A HREF="#customTargets.xml">Write customTargets.xml</A></LI></UL><P><FONT SIZE="+1"><A HREF="#buildexec"> 
14Build Execution</A></FONT></P><UL> <LI><A HREF="#buildmachinesetup">Set up build 
15machine</A></LI><LI><A HREF="#runbuild">Running the build</A></LI></UL><P>&nbsp;</P><HR><P><FONT SIZE="+2"><B><A NAME="intro"></A>Introduction</B></FONT></P><P>This 
16document describes how to automate the building of Eclipse-based features and 
17their plug-ins using script generators in the org.eclipse.pde.build plug-in in 
18Eclipse 3.2 stream SDK.<BR> </P><P>Either an existing Eclipse 3.2 stream SDK or 
19the org.eclipse.releng.basebuilder project on dev.eclipse.org:/home/eclipse can 
20be used in this automated build process. The org.eclipse.releng.basebuilder project 
21contains the minimal set of plug-ins extracted from the latest stable Eclipse 
223.2 stream SDK build (a milestone or release) needed to run applications and custom 
23Ant tasks in org.eclipse.ant.core, org.eclipse.pde.build, org.eclipse.pde, and 
24org.eclipse.help.base. This project is used by the Eclipse release engineering 
25team to build Eclipse itself. <P>It is assumed the reader is starting with a set 
26of pre-existing features and plug-ins, their build.properties, and has a working 
27knowledge of Apache Ant. In this document, features, plug-ins and fragments are 
28also referred to as &quot;elements&quot;. The word &quot;distribution&quot; is 
29used to describe the end result of building a feature, a functional unit comprised 
30of one or more groupings of plug-ins. The result of building a feature results 
31in a zip or tar.gz file which contains the binary version of the feature and it's 
32plug-ins. If the feature contains nested features (i.e. &lt;includes&gt; elements), 
33the nested features will be built recursively and included in the distribution.<br> 
34<br> For example, the Eclipse SDK distributions are built from the <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.sdk-feature/feature.xml?rev=1.7" target="extra">org.eclipse.sdk 
35feature</a> which is comprised of features org.eclipse.rcp, org.eclipse.rcp.source, 
36org.eclipse.platform, org.eclipse.platform.source, org.eclipse.jdt, org.eclipse.jdt.source, 
37org.eclipse.pde, org.eclipse.pde.source and the org.eclipse.sdk plug-in. The distribution 
38built from the org.eclipse.sdk feature will therefore contain the binary version 
39of the org.eclipse.sdk feature and its one plug-in plus the binary versions of 
40its eight nested features and all their plug-ins.<br> <br> <HR><P><FONT SIZE="+2"><B><A NAME="preparation"></A>Preparing 
41the infrastructure</B></FONT></P><P><B><FONT SIZE="+1" COLOR="#000000"><A NAME="commit"></A>Commit 
42feature and plug-in projects to CVS repository</FONT></B></P><P>Since Eclipse 
433.0, PDE Build allows a very flexible organization of feature, plug-in and fragment 
44projects in a CVS repository where:</P><UL> <LI> the directory containing the 
45source for an element can exist as a root level CVS module or in any subdirectory 
46in the repository.</LI><LI>the directory name containing the element's source 
47does not have to match the id attribute in it's manifest (feature.xml, plugin.xml, 
48fragment.xml).</LI></UL><P>This flexibility was not present for the Eclipse process 
49prior to version 3.0 which is one reason for the very flat organization of projects 
50in the dev.eclipse.org:/home/eclipse repository. It is recommended that this flat 
51structure <B>not</B> be used as an example. Rather, using a structure similar 
52to the one used for the <A HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.equinox/?cvsroot=Technology_Project" target="extra">Equinox</A> 
53or <A HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.stellation/?cvsroot=Technology_Project" target="extra" >Stellation</A> 
54project should be considered where all files and directories for a given product 
55are stored under a single directory or module at the cvs root level:<BR><BR>&lt;cvs 
56root&gt;<BR><BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/org.eclipse.equinox<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/plugins<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/all 
57plug-ins at this level<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P><P>Once 
58the source for all elements is committed to a repository, the next step consists 
59of recording the location and access method for each feature, plug-in and fragment 
60in one or more <A HREF="#createmap">map files</A>.</P><P>&nbsp;</P><P><B><FONT SIZE="+1"><A NAME="createmap"></A>Create 
61map file project</FONT></B></P><P>A .map file is a java property file which contains 
62mappings of elements to their CVS locations and access methods. Map files are 
63used by PDE Build early in the build process to generate Ant scripts which use 
64the Ant &lt;cvs&gt; task to export source to a directory. This is described further 
65<A HREF="#getmaps">below</A>.<BR> <BR>Map file entries use the following format:<BR><BR> 
66<B>feature|fragment|plugin@element.Id=&lt;cvs tag&gt;,&lt;access method&gt;:&lt;cvs 
67user&gt;@&lt;cvs repository&gt;,&lt;cvs password&gt;[,&lt;repository path&gt; 
68(no starting slash) ]</B><BR> </P><P>The &lt;repository path&gt; is only required 
69when the module (or directory) containing the source for the element does not 
70match the element.Id or if the directory is not at the root of the repository.<BR> 
71<BR>A map file entry must exist for each feature being built, it's &lt;plugin&gt; 
72elements and it's &lt;includes&gt; elements (ie. nested features and their plug-ins). 
73Adding a plug-in or fragment to a feature therefore requires updating the map 
74files with the new element.<BR><BR><BR><B>Map File Entry Examples</B></P><UL><LI>The 
75org.eclipse.platform plug-in source is located at the root of the <A HREF="http://dev.eclipse.org/viewcvs/" target="extra">dev.eclipse.org:/home/eclipse</A> 
76repository. It is contained in a directory with the name &quot;org.eclipse.platform&quot;. 
77The resulting map file entry for this plug-in is:<BR><BR>plugin@org.eclipse.platform=v20031121,:pserver:anonymous@dev.eclipse.org:/home/eclipse,<BR><BR></LI><LI>The 
78org.eclipse.platform feature source is located at the root of the <A HREF="http://dev.eclipse.org/viewcvs/" target="extra">dev.eclipse.org:/home/eclipse</A> 
79repository in a directory with the name &quot;org.eclipse.platform-feature&quot;. 
80The resulting map file entry for this feature is:<BR><BR>feature@org.eclipse.platform=v20031128,:pserver:anonymous@dev.eclipse.org:/home/eclipse,,org.eclipse.platform-feature<BR><BR></LI><LI>The 
81org.eclipse.gef.sdk feature source is located in directory in the <A HREF="http://dev.eclipse.org/viewcvs/?cvsroot=Tools_Project" target="extra">dev.eclipse.org:/home/tools</A> 
82repository in a subdirectory called &quot;org.eclipse.gef.sdk&quot; of &quot;org.eclipse-gef 
83feature&quot;. The resulting map file entry for this feature is:<BR><BR>feature@org.eclipse.gef.sdk=I_20031117, 
84:pserver:anonymous@dev.eclipse.org:/home/tools,,org.eclipse.gef-feature/org.eclipse.gef.sdk<BR></LI></UL><P>One 
85or more map files can be used to list the elements. The map files can be kept 
86under version control. Some examples of map file projects include <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng/">org.eclipse.releng</A>, 
87<A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.gef.releng/?cvsroot=Tools_Project">org.eclipse.gef.releng</A>, 
88<A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ve.releng/?cvsroot=Tools_Project">org.eclipse.ve.releng</A>.<BR> 
89<BR></P><P><B><FONT SIZE="+1"><A NAME="gensource"></A>Generating source features 
90and plug-ins at build time</FONT></B></P><P>Source features and plug-ins can be 
91generated at build time by PDE Build. Source features and associated source plug-ins 
92are typically generated for a development kit distributions (i.e. SDK). It is 
93also possible to generate a source plug-in only. This is typically the case for 
94example features or JUnit testing features.<BR> <BR>To generate a <B>source feature 
95and associated source plug-in</B> at build time, you will need to do the following:</P><OL> 
96<LI> Add an entry to the build.properties file in the feature project for which 
97you wish to include the source feature and plug-in. The generated source feature 
98should also be listed in the feature.xml as an &lt;includes&gt; element.<BR> <BR> 
99The build.properties entry should use the following format:<BR> <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;generate.feature@&lt;source.feature.id 
100to generate&gt;=&lt;feature.id from which to which to collect source&gt;, plugin@&lt;plugin.id&gt;<BR> 
101<BR> Example taken from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.sdk-feature/build.properties?rev=1.4">org.eclipse.sdk-feature/build.properties</A>: 
102<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;generate.feature@org.eclipse.jdt.source=org.eclipse.jdt, 
103plugin@org.eclipse.jdt.doc.isv<BR> <BR> In this example, a source feature and 
104a plug-in, both with id &quot;org.eclipse.jdt.source&quot; will be generated and 
105will contain source from plug-ins listed in the org.eclipse.jdt feature and will 
106also include the plug-in org.eclipse.jdt.doc.isv. The generated org.eclipse.jdt.source 
107plug-in will be automatically listed in the org.eclipse.jdt.source feature.xml. 
108<BR> <BR> <BR> </LI><LI>In the feature project from which the source feature will 
109be generated, a directory called &quot;<B>sourceTemplateFeature</B>&quot; and 
110a directory called &quot;<B>sourceTemplatePlugin</B>&quot; will be required. These 
111directories should contain the files that are included in the root of the generated 
112source feature and plug-in. The feature.xml and plugin.xml files are not required 
113since these are generated. A build.properties is required in the sourceTemplatePlugin 
114directory. This should contain a &quot;bin.includes&quot; setting as well as the 
115entry &quot;sourcePlugin = true&quot;. The plugin.xml file and src/ directory 
116should be listed in the bin.includes.<BR> <BR> See <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt-feature/">org.eclipse.jdt-feature</A> 
117and <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.platform-feature/">org.eclipse.platform-feature</A> 
118for examples.<BR> <BR> </LI></OL><P>To generate a <B>source plug-in only</B> at 
119build time, you will need to do the following:</P><OL> <LI> Add an entry to the 
120build.properties file in the feature project for which you wish to include the 
121source plug-in. The generated source plug-in should also be listed in the feature.xml 
122as a &lt;plugin&gt; element.. <BR> <BR> The build.properties entry should use 
123the following format:<BR> <BR> generate.plugin@&lt;source.plugin.id to generate&gt;=&lt;feature.id 
124from which to which to collect source&gt;, plugin@&lt;plugin.id&gt;<BR> <BR> Example 
125taken from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.ve.tests-feature/build.properties?rev=1.2&cvsroot=Tools_Project">org.eclipse.ve.tests-feature/build.properties</A>: 
126<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;generate.plugin@org.eclipse.ve.tests.source=org.eclipse.ve.tests<BR> 
127<BR> <BR> </LI><LI>In the runtime feature project from which the source plug-in 
128will be generated, create a directory called &quot;sourceTemplatePlugin&quot; 
129which must contain a build.properties with a &quot;bin.includes&quot; setting 
130and &quot;sourcePlugin=true&quot;. The plugin.xml file and src/ directory should 
131be listed in the bin.includes.<BR> <BR> See <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ve.examples-feature/sourceTemplatePlugin/?cvsroot=Tools_Project">org.eclipse.ve.examples-feature/sourceTemplatePlugin</A> 
132for an example.<BR> </LI></OL><HR><P><FONT SIZE="+2"><A NAME="buildconfigfiles"></A><B>Preparing 
133Build Configuration Files</B></FONT></P><P>The distilled build process consists 
134of the following four steps:</P><OL><LI>build environment setup</LI><LI>check 
135out source from one or more CVS repositories</LI><LI>compilation</LI><LI> assembly 
136of distribution<BR></LI></OL><P>The script which controls the build sequence is 
137the build.xml Ant script in org.eclipse.pde.build. However this script requires 
138two user-implemented build configuration files,<A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.pde.build/templates/build.properties?rev=HEAD&content-type=text/vnd.viewcvs-markup">build.properties</A> 
139and <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.pde.build/templates/customTargets.xml?rev=HEAD&content-type=text/vnd.viewcvs-markup">customTargets.xml</A>. 
140These two files provide the information on the &quot;where and how&quot; to build 
141specific elements. </P><P>Templates of these files are provided in the <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.pde.build/templates/">org.eclipse.pde.build/templates</A> 
142directory and examples are available in <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng.eclipsebuilder/">org.eclipse.releng.eclipsebuilder</A>, 
143<A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng.gefbuilder/?cvsroot=Tools_Project">org.eclipse.releng.gefbuilder</A> 
144and <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.ve.releng.builder/?cvsroot=Tools_Project">org.eclipse.ve.releng.builder</A> 
145for building Eclipse, GEF and VE runtimes, respectively.</P><P><B><FONT SIZE="+1"><A NAME="build.properties"></A>build.properties</FONT></B></P><P>The 
146build.properties file defines a number of properties that are used as Ant properties 
147at build time and as arguments to script generators in org.eclipse.pde.build to 
148describe how and where to execute the build. The values for properties listed 
149in this file override any values set in the generated build.xml files. See &quot;Generating 
150Ant scripts from the command line&quot; in the PDE Guide in Eclipse 3.2 stream 
151Help for a description of required and optional properties.</P><P><B><FONT SIZE="+1"><A NAME="customTargets.xml"></A>customTargets.xml</FONT></B></P><P>customTargets.xml 
152is an Ant script containing targets called by PDE Build scripts to provide the 
153following information:</P><OL><LI>the list of elements for which to generate scripts</LI><LI>instruction 
154on retrieval of map file projects</LI><LI>steps to execute before and after the 
155following: retrieving map files, checking out source, generating build.xml scripts, 
156executing build.xml scripts, and assembling the binary distributions.</LI><LI>instruction 
157on things to do after the build is done.</LI></OL><P>The table below lists the 
158targets that are used to provide this information.<BR><BR></P><TABLE WIDTH="100%" BORDER="1"><TR><TD WIDTH="24%">Target</TD><TD WIDTH="76%">Description</TD></TR><TR><TD WIDTH="24%">allElements</TD><TD WIDTH="76%"><P>This 
159target lists all features that will be packaged into a binary distribution where 
160each listing comes in the form of an &lt;ant&gt; call to org.eclipse.pde.build/scripts/genericTargets.xml:<BR><BR><B>&lt;ant 
161antfile=&quot;${genericTargets}&quot; target=&quot;${target}&quot; &gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property 
162name=&quot;type&quot; value=&quot;feature&quot; /&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property 
163name=&quot;id&quot; value=&quot;&lt;element.id&gt;&quot; /&gt;<BR> &lt;/ant&gt;<BR></B><BR> 
164The user is only required to specify a value for properties &quot;type&quot; and 
165id (the value for the id attribute in the feature.xml) for each listing. At this 
166time, only the type &quot;feature&quot; is supported.<BR></P><P>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.eclipsebuilder/jdt/customTargets.xml?rev=HEAD&content-type=text/xml">org.eclipse.releng.eclipsebuilder/jdt/customTargets.xml</A>:</P><P><B>&lt;target 
167name=&quot;allElements&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ant antfile=&quot;${genericTargets}&quot; 
168target=&quot;${target}&quot; &gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property 
169name=&quot;type&quot; value=&quot;feature&quot; /&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property 
170name=&quot;id&quot; value=&quot;org.eclipse.jdt&quot; /&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ant&gt;<BR>&lt;/target&gt;</B></P><P>The 
171<A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.pde.build/scripts/genericTargets.xml?rev=HEAD&content-type=text/xml">genericTargets.xml 
172</A>script is an Ant script in the org.eclipse.pde.build plug-in containing targets 
173which call PDE Build custom Ant tasks to generate scripts for the specified elements 
174at various stages of the build. This script also executes the generated scripts 
175at various build stages. The target property is set by it's calling script, org.eclipse.pde.build/scripts/build.xml.<BR><BR>For 
176example, the fetch target in the build.xml calls allElements and sets the target 
177to property to &quot;fetchElement&quot;:<BR><BR> &lt;ant antfile=&quot;${customTargets}&quot; 
178target=&quot;allElements&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property 
179name=&quot;target&quot; value=&quot;fetchElement&quot; /&gt;<BR> &lt;/ant&gt;<BR><BR>The 
180result of this is that the fetchElement target in genericTargets.xml is executed 
181using arguments type and id set in allElements.<BR></P></TD></TR><TR><TD WIDTH="24%">assemble.&lt;element.id&gt;[.config.spec]</TD><TD WIDTH="76%"><P>For 
182every configuration specified in the build.properties for the distribution (see 
183<A HREF="#configs">configs</A> above), a target named &quot;assemble.&lt;element.id&gt;.&lt;config.spec&gt;&quot; 
184is required. If the distribution is not platform-specific, the &quot;.&lt;config.spec&gt;&quot; 
185section of the target name is not required. </P><P>Providing the target name should 
186be all that is required unless you wish to give the produced binary distributable 
187file a name different from the default &quot;&lt;elment-id&gt;-&lt;buildid&gt;-&lt;config.spec&gt;.zip&quot;. 
188In this case, an explicit value for the property &quot;archiveName&quot; should 
189be specified at the beginning of the target.<BR><BR>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.eclipsebuilder/jdt/customTargets.xml?rev=HEAD&content-type=text/xml">org.eclipse.releng.eclipsebuilder/jdt/customTargets.xml</A>:<BR><BR> 
190Since two configurations for building the org.eclipse.jdt distribution are specified 
191in it's build.properties &quot;configs=*,*,* &amp; macosx,carbon,ppc&quot;, the 
192following two targets are provided in the customTargets.xml script.</P><P><FONT COLOR="#000000"><B>&lt;target 
193name=&quot;assemble.org.eclipse.jdt&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property 
194name=&quot;archiveName&quot; value=&quot;eclipse-JDT-${buildId}.zip&quot;/&gt;<BR> 
195&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ant antfile=&quot;${assembleScriptName}&quot;/&gt;<BR>&lt;/target&gt;</B></FONT></P><P><B><FONT COLOR="#000000">&lt;target 
196name=&quot;assemble.org.eclipse.jdt.macosx.carbon.ppc&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property 
197name=&quot;archiveName&quot; value=&quot;eclipse-JDT-${buildId}-macosx-carbon.tar.gz&quot;/&gt;<BR> 
198&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ant antfile=&quot;${assembleScriptName}&quot;/&gt;<BR>&lt;/target&gt;</FONT></B><BR></P></TD></TR><TR><TD WIDTH="24%"><A NAME="getmaps"></A>getMapFiles</TD><TD WIDTH="76%"><P>The 
199result of executing this target should be to place *.map files in any directory 
200or subdirectory under ${buildDirectory}/maps. All .map files found here are concatenated 
201into a single file ${buildDirectory}/directory.txt. Map file projects are typically 
202kept under version control in a CVS repository. <BR><BR>In the following example 
203from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.eclipsebuilder/sdk/customTargets.xml?rev=HEAD&content-type=text/xml">org.eclipse.releng.eclipsebuilder/sdk/customTargets.xml</A>, 
204the implementation of this target and it's helper targets are provided to illustrate 
205how map files for Eclipse builds are checked out from a CVS repository and then 
206tagged with the build timestamp to capture the versions of all projects used in 
207the build.<BR><BR><B>&lt;target name=&quot;getMapFiles&quot; depends=&quot;checkLocal&quot; 
208unless=&quot;mapsLocal&quot;&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property 
209name=&quot;mapCvsRoot&quot; value=&quot;:pserver:anonymous@dev.eclipse.org:/home/eclipse&quot; 
210/&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=&quot;mapVersionTag&quot; 
211value=&quot;HEAD&quot; /&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cvs cvsRoot=&quot;${mapCvsRoot}&quot;<BR> 
212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;package=&quot;org.eclipse.releng&quot;<BR> 
213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dest=&quot;${buildDirectory}/maps&quot;<BR> 
214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tag=&quot;${mapVersionTag}&quot;<BR> 
215&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall target=&quot;tagMapFiles&quot; 
216/&gt;<BR>&lt;/target&gt;</B></P><P><B><FONT COLOR="#008000">&lt;!--helper targets---&gt;</FONT><BR></B><B><BR>&lt;target 
217name=&quot;checkLocal&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;available 
218property=&quot;mapsLocal&quot; file=&quot;${buildDirectory}/maps/org.eclipse.releng&quot; 
219/&gt;<BR>&lt;/target&gt;<BR></B></P><P><B>&lt;target name=&quot;tagMapFiles&quot; 
220if=&quot;tagMaps&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cvs dest=&quot;${buildDirectory}/maps/org.eclipse.releng&quot; 
221command=&quot;tag v${timestamp}&quot; /&gt;<BR>&lt;/target&gt;</B><BR><BR></P></TD></TR><TR><TD WIDTH="24%" HEIGHT="24">preSetup 
222and postSetup</TD><TD WIDTH="76%" HEIGHT="24"><P>Used to run operations before 
223and after retrieving the map files.<BR><BR>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.gefbuilder/sdk/customTargets.xml?rev=HEAD&content-type=text/xml&cvsroot=Tools_Project">org.eclipse.releng.gefbuilder/sdk</A>. 
224This example demonstrates how the postSetup target (and a helper target) is used 
225to download and install an Eclipse SDK to compile against.</P><P><B>&lt;target 
226name=&quot;postSetup&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;available 
227file=&quot;${buildDirectory}/eclipse-SDK.zip&quot; property=&quot;baseExists&quot; 
228/&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall target=&quot;getBaseEclipse&quot; 
229/&gt; <BR> &lt;/target&gt;<BR></B></P><P><B>&lt;target name=&quot;getBaseEclipse&quot; 
230unless=&quot;baseExists&quot;&gt;</B></P><P><B><FONT COLOR="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--this 
231task definition is available in org.eclipse.releng.basebuilder/plugins/org.eclipse.build.tools. 
232It removes the &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;&lt;version&gt; 
233from all directories specified as a value for the directory attribute. </FONT></B><FONT COLOR="#008000"><B>Not 
234really necessary, but helpful in &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this 
235case to avoid having/needing hard-coded versions in GEF javadoc scripts.--&gt;</B></FONT><B></B><B><BR></B><B>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taskdef 
236name=&quot;stripVersions&quot; classname=&quot;org.eclipse.releng.VersionNumberStripper&quot; 
237/&gt; <BR> <BR><FONT COLOR="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--this 
238property file contains the values for ${eclipseURL} and ${eclipseBuildID}--&gt;</FONT><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property 
239file=&quot;${buildDirectory}/maps/org.eclipse.gef.releng/maps/build.cfg&quot; 
240/&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;get src=&quot;${eclipseURL}/eclipse-SDK-${eclipseBuildID}-win32.zip&quot; 
241dest=&quot;${buildDirectory}/eclipse-SDK.zip&quot; /&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exec 
242dir=&quot;${buildDirectory}/..&quot; executable=&quot;unzip&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg 
243line=&quot;-o -qq eclipse-SDK.zip&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/exec&gt;<BR> 
244&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;stripVersions 
245directory=&quot;${buildDirectory}/plugins&quot; /&gt; <BR><BR><FONT COLOR="#008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- 
246Extract doc.zip so we can create links in GEF java doc --&gt; </FONT><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exec 
247dir=&quot;${buildDirectory}/plugins/org.eclipse.platform.doc.isv&quot; executable=&quot;unzip&quot;&gt;<BR> 
248&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arg line=&quot;-o 
249-qq doc.zip&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/exec&gt;<BR> &lt;/target&gt;</B><BR><BR></P></TD></TR><TR><TD WIDTH="24%">preFetch 
250and postFetch </TD><TD WIDTH="76%"><P>Used to run operations before and after 
251fetching source for the build.<BR></P><P>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.gefbuilder/sdk/customTargets.xml?rev=HEAD&content-type=text/xml&cvsroot=Tools_Project">org.eclipse.releng.gefbuilder/sdk</A>. 
252This example demonstrates how the postFetch target can be used to set the build 
253timestamp as a value for &quot;0&quot; in about.mappings files.<BR><BR><B>&lt;target 
254name=&quot;postFetch&quot;&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;replace dir=&quot;${buildDirectory}/plugins&quot; 
255value=&quot;${timestamp}&quot; token=&quot;@buildid@&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;include 
256name=&quot;**/about.mappings&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/replace&gt;<BR> 
257&lt;/target&gt;</B></P></TD></TR><TR><TD WIDTH="24%">preGenerate and postGenerate</TD><TD WIDTH="76%"><P>Used 
258to run operations before and after generating build.xml files for features, plug-ins 
259and fragments.<BR><BR>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.gefbuilder/sdk/customTargets.xml?rev=HEAD&content-type=text/xml&cvsroot=Tools_Project">org.eclipse.releng.gefbuilder/sdk</A>. 
260This example demonstrates how the postGenerate target (and a helper target) is 
261used to run the build.xml scripts to clean the source of any stale, pre-compiled 
262jars that might exist in the source directories. jars are not recompiled if they 
263already exist in plug-in or fragment directories.<BR></P><P> <B>&lt;target name=&quot;postGenerate&quot;&gt;<BR> 
264&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall target=&quot;clean&quot; /&gt; <BR> 
265&lt;/target&gt;</B></P><P><B>&lt;target name=&quot;clean&quot; unless=&quot;noclean&quot;&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall 
266target=&quot;allElements&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param 
267name=&quot;target&quot; value=&quot;cleanElement&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/antcall&gt;<BR> 
268&lt;/target&gt;<BR></B></P></TD></TR><TR><TD WIDTH="24%">preProcess and postProcess</TD><TD WIDTH="76%"> 
269Used to run operations before and after compiling the source.</TD></TR><TR><TD WIDTH="24%">preAssemble 
270and postAssemble</TD><TD WIDTH="76%">Used to run operations before and after assembling 
271the binary distributables.</TD></TR><TR><TD WIDTH="24%">postBuild</TD><TD WIDTH="76%"><P>Used 
272to run operations at the end of the build.<BR></P><P>Example from <A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.releng.gefbuilder/sdk/customTargets.xml?rev=HEAD&content-type=text/xml&cvsroot=Tools_Project">org.eclipse.releng.gefbuilder/sdk</A>. 
273This example demonstrates how the postBuild target (and a helper target) is used 
274to gather and place the compile logs in the ${buildLabel} directory. These files 
275are used in the publishing of the GEF build (see below under Publishing the Build 
276section).<BR></P><P><B>&lt;target name=&quot;postBuild&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall 
277target=&quot;gatherLogs&quot; /&gt; <BR> &lt;/target&gt;<BR><BR>&lt;target name=&quot;gatherLogs&quot;&gt;<BR> 
278&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mkdir dir=&quot;${buildDirectory}/${buildLabel}/compilelogs&quot; 
279/&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;antcall 
280target=&quot;allElements&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param 
281name=&quot;target&quot; value=&quot;gatherLogs&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/antcall&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;unzip 
282dest=&quot;${buildDirectory}/${buildLabel}/compilelogs&quot; overwrite=&quot;true&quot;&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;fileset 
283dir=&quot;${buildDirectory}/features/org.eclipse.gef.sdk&quot;&gt;<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;include 
284name=&quot;*.log.zip&quot; /&gt; <BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/fileset&gt;<BR> 
285&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/unzip&gt;<BR> &lt;/target&gt;</B><BR><BR></P></TD></TR></TABLE><P>&nbsp;</P><HR><P><BR><FONT SIZE="+2"><B><A NAME="buildexec"></A>Build 
286Execution </B></FONT></P><P><FONT SIZE="+1"><A NAME="buildmachinesetup"></A><B>Build 
287machine setup</B></FONT><BR><BR>This build process can be executed on any of the 
288<A target="extra" HREF="http://www.eclipse.org/eclipse/development/eclipse_project_plan_3_2.html#TargetOperatingEnvironments">Eclipse 
2893.2 Reference Platforms</A> plus the following:</P><UL><LI><A target="extra" HREF="http://www.cvshome.org/">CVS</A> 
290client version 1.10 or higher on system path. </LI><LI><A target="extra" HREF="http://www.info-zip.org/pub/infozip/">Info-Zip</A> 
291zip and unzip executables on system path.</LI><LI><A target="extra" HREF="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng.basebuilder/">org.eclipse.releng.basebuilder</A> 
292from dev.eclipse.org or any Eclipse 3.2 stream SDK install. Please note that the 
293Mailer java class in this project require a j2ee.jar on the classpath to compile 
294and run. This class is not used in the mechanism described in this document.</LI></UL><P>The 
295cvs, zip and unzip executables should be placed on the system path.</P><P> On 
296Windows systems, the HOME environement variable should be set to &quot;c:&quot; 
297(no slash) for CVS operations.</P><P>The org.eclipse.releng.basebuilder project 
298can be placed in any directory.</P><P><BR><B><FONT SIZE="+1"><A NAME="runbuild"></A>Running 
299the Build</FONT></B></P><P>To run the build, execute the following command from 
300/plugins/org.eclipse.pde.build/scripts to <B>build a single distribution</B>:<BR><BR><B>java 
301-jar &lt;path&gt;/startup.jar -application org.eclipse.ant.core.antRunner [-buildfile 
302build.xml] -Dbuilder=&lt;path to directory containing build.properties and customTargets.xml&gt; 
303[Ant property settings to override those in <A HREF="#build.properties" TARGET="_blank">build.properties</A>]</B><B><BR></B></P><P>&nbsp;</P>
304</BODY>
305</HTML>
306