Merge templates for Tests Guidelines (http://developer.symbian.org/wiki/index.php/Guidelines_for_Package_Test_Organisation) created by TWG.
authorArnaud Lenoir
Tue, 10 Aug 2010 19:43:50 +0100
changeset 1207 cc6f08463c98
parent 1206 4518bca1baf0 (diff)
parent 1187 67aec47e519a (current diff)
Merge templates for Tests Guidelines (http://developer.symbian.org/wiki/index.php/Guidelines_for_Package_Test_Organisation) created by TWG.
--- a/common/build.postbuild.xml	Tue Jul 20 23:33:58 2010 +0100
+++ b/common/build.postbuild.xml	Tue Aug 10 19:43:50 2010 +0100
@@ -335,7 +335,11 @@
                     <arg value="-x!epoc32\gcc_mingw"/>
                     <arg value="-x!epoc32\tools"/>
                     <arg value="-x!epoc32\data\buildinfo.txt"/>
+                    <!-- Feature database artifacts released as part of the tools zip -->
                     <arg value="-x!epoc32\data\config\features.dat"/>
+                    <arg value="-x!epoc32\include\featureuids.h"/>
+                    <arg value="-x!epoc32\rom\include\feature.iby"/>
+                    <arg value="-x!epoc32\rom\include\featuredatabase.xml"/>
                     <arg value="-x!epoc32\data\media"/> <!-- Files created when emulator is used to create comms database - not worth releasing-->
                     <arg value="-x!epoc32\build"/>
                     <arg value="-x!epoc32\release\armv5"/>
@@ -356,6 +360,7 @@
                         <arg value="-x@${build.log.dir}/rnd_excludefile.txt"/>
                         <arg value="-x@output/temp_build_files/manifest_excludelist.txt"/>
                         <arg value="-x@${sf.spec.prebuilt.excludelist}"/>
+                        <arg value="-x!epoc32/include/featureuids.h"/> <!-- This needs to come from the tools zip instead -->
                         <arg value="${build.drive}/output/zips/release/binaries_epoc_sdk.zip"/>
                     </exec>
                     <!-- Check that all the files we want in the SDK are zipped -->
@@ -470,6 +475,9 @@
             <arg value="epoc32/gcc_mingw"/>
             <arg value="epoc32/data/buildinfo.txt"/>
             <arg value="epoc32/data/config/features.dat"/>
+            <arg value="epoc32/include/featureuids.h"/>
+            <arg value="epoc32/rom/include/feature.iby"/>
+            <arg value="epoc32/rom/include/featuredatabase.xml"/>
         </exec>
         <antcall target="sf-zip-content">
             <param name="zip.config.file" value="${temp.build.dir}/zip.cfg.xml.ftl"/>
@@ -890,28 +898,28 @@
                 </zip>
                 <!-- workaround for the time when when 'sf-run-analysis-raptor' has not been run -->
                 <mkdir dir="${build.drive}/output/logs/releaseables"/>
-				<if>
-	                <available file="${build.drive}/output/logs/package_definitions" type="dir"/>
-	                <then>
-		                <zip destfile="${build.output.dir}/zips/release/build_BOM.zip">
-	            	        <zipfileset dir="${build.drive}/output/logs/BOM" prefix="build_info/logs/BOM"/>
-	        	            <zipfileset dir="${build.drive}/output/logs/releaseables" prefix="build_info/logs/releaseables"/>
-	    	                <zipfileset dir="${build.drive}/output/logs" prefix="build_info/logs/BOM">
-		                        <include name="envinfo.txt"/>
-	                    	</zipfileset>
-	                    	<zipfileset dir="${build.drive}/output/logs/package_definitions" prefix="build_info/package_definitions"/>
-	                	</zip>
-	                </then>
-	                <else>
-	                	<zip destfile="${build.output.dir}/zips/release/build_BOM.zip">
-	            	        <zipfileset dir="${build.drive}/output/logs/BOM" prefix="build_info/logs/BOM"/>
-	        	            <zipfileset dir="${build.drive}/output/logs/releaseables" prefix="build_info/logs/releaseables"/>
-	    	                <zipfileset dir="${build.drive}/output/logs" prefix="build_info/logs/BOM">
-		                        <include name="envinfo.txt"/>
-	                    	</zipfileset>
-	                	</zip>
-	                </else>
-	            </if>
+                <if>
+                    <available file="${build.drive}/output/logs/package_definitions" type="dir"/>
+                    <then>
+                        <zip destfile="${build.output.dir}/zips/release/build_BOM.zip">
+                            <zipfileset dir="${build.drive}/output/logs/BOM" prefix="build_info/logs/BOM"/>
+                            <zipfileset dir="${build.drive}/output/logs/releaseables" prefix="build_info/logs/releaseables"/>
+                            <zipfileset dir="${build.drive}/output/logs" prefix="build_info/logs/BOM">
+                                <include name="envinfo.txt"/>
+                            </zipfileset>
+                            <zipfileset dir="${build.drive}/output/logs/package_definitions" prefix="build_info/package_definitions"/>
+                        </zip>
+                    </then>
+                    <else>
+                        <zip destfile="${build.output.dir}/zips/release/build_BOM.zip">
+                            <zipfileset dir="${build.drive}/output/logs/BOM" prefix="build_info/logs/BOM"/>
+                            <zipfileset dir="${build.drive}/output/logs/releaseables" prefix="build_info/logs/releaseables"/>
+                            <zipfileset dir="${build.drive}/output/logs" prefix="build_info/logs/BOM">
+                                <include name="envinfo.txt"/>
+                            </zipfileset>
+                        </zip>
+                    </else>
+                </if>
                 <antcall target="sf-zip-content">
                     <param name="zip.config.file" value="${temp.build.dir}/zip.cfg.xml.ftl"/>
                     <param name="zip.target.name" value="info-just-metadata" />
@@ -1060,13 +1068,27 @@
     </target>
 
     <target name="sf-build-roms">
-        <if>
-            <istrue value="${sf.spec.referenceroms.createimages.enable}" />
-            <then>
-                <echo message="INFO Building iMaker configurations"/>
-                <runtarget target="build-roms"/>
-            </then>
-        </if>    
+        <!-- find out if this is an arm build, if it is, then build roms -->
+        <propertyregex property="sf.is.arm.build"  override="true" input="${sf.spec.sbs.config}" regexp="(arm.*)" replace="true" casesensitive="false"/>
+    
+        <if><isset property="sf.is.arm.build"/> 
+        <then>
+            <mkdir dir="${roms.log.dir}"/>
+            <echo message="INFO Building Syborg MiniGUI stripped ROM"/>
+            <exec executable="cmd" dir="${build.drive}/epoc32/rom" failonerror="false">
+                <arg value="/c"/>
+                <arg value="buildrom syborg minigui-stripped"/>
+            </exec>
+            <if>
+                <!-- is iMaker rom building enabled? -->
+                <istrue value="${sf.spec.referenceroms.createimages.enable}" />
+                <then>
+                    <echo message="INFO Building iMaker configurations"/>
+                    <runtarget target="build-roms"/>
+                </then>
+            </if>
+        </then>
+        </if>        
     </target>
 
     <!-- Transform BRAG xslt and display status at the end of the build -->
@@ -1074,21 +1096,21 @@
     <delete dir="${build.drive}/output/logs/summary/">
       <include name="**/*.html"/>
     </delete>
-     <xslt basedir="${build.drive}/output/logs/summary" destdir="${temp.build.dir}" extension=".html" style="brag.xsl"/>	
+     <xslt basedir="${build.drive}/output/logs/summary" destdir="${temp.build.dir}" extension=".html" style="brag.xsl"/>    
     <loadfile srcFile="${temp.build.dir}/_BRAG.html" property="sf.brag.status">
     <filterchain>
       <linecontainsregexp>
         <regexp pattern="(BLACK|RED|AMBER|GREEN)"/>
       </linecontainsregexp>
-	  <trim/>
+      <trim/>
       <striplinebreaks/>
       <deletecharacters chars="\&gt;\&lt;\h2\h1\/"/>
     </filterchain>
-    </loadfile>	
+    </loadfile>    
     <echo message="BRAG STATUS: [${sf.brag.status}] - full build details available at ${build.drive}\output\logs\summary\_BRAG.xml"/>
     
     <!-- record brag information in BIT file -->
     <echo message="build_brag&#x0009;${sf.brag.status}${line.separator}" file="${build.log.dir}/bitinfo.txt" append="true"/>
-	</target>
+    </target>
 
 </project>
--- a/common/build.xml	Tue Jul 20 23:33:58 2010 +0100
+++ b/common/build.xml	Tue Aug 10 19:43:50 2010 +0100
@@ -128,8 +128,9 @@
           <!-- configure stages -->
           <hlm:stage id="preparation" starttarget="sf-prebuild" endtarget="sf-prebuild"/>
           <hlm:stage id="compilation" starttarget="sf-compile" endtarget="sf-compile"/>
+          <hlm:stage id="romcreation" starttarget="sf-build-roms" endtarget="sf-build-roms"/>
           <hlm:stage id="postbuild" starttarget="sf-postbuild" endtarget="sf-postbuild"/>
-
+          
       </then>
     </if>
     
@@ -475,24 +476,28 @@
     
     <target name="sf-get-source" depends="sf-generate-source-spec">
         <stopwatch name="sf-get-source"/>
-        <!-- Get test manifest, and move resolved csv so that it doesnt conflict with source-spec.ant.xml -->
         <if>
-            <istrue value="${sf.spec.smoketest.enable}"/>
+            <istrue value="${sf.spec.sourcesync.enable}"/>
             <then>
-                <ant antfile="${temp.build.dir}/source-test-spec.ant.xml" />
-                <move file="${build.drive}/output/logs/BOM/sources.csv" tofile="${build.drive}/output/logs/BOM/sources_test.csv"/>
+                <!-- Get test manifest, and move resolved csv so that it doesnt conflict with source-spec.ant.xml -->
+                <if>
+                    <available file="${temp.build.dir}/source-test-spec.ant.xml"/>
+                    <then>
+                        <ant antfile="${temp.build.dir}/source-test-spec.ant.xml" />
+                        <move file="${build.drive}/output/logs/BOM/sources.csv" tofile="${build.drive}/output/logs/BOM/sources_test.csv"/>
+                    </then>
+                </if>
+        
+                <if><available file="${temp.build.dir}/source-rnd-spec.ant.xml"/>
+                    <then>
+                        <ant antfile="${temp.build.dir}/source-rnd-spec.ant.xml" />
+                        <move file="${build.drive}/output/logs/BOM/sources.csv" tofile="${build.drive}/output/logs/BOM/sources_rnd.csv"/>
+                    </then>
+                </if>
+                
+                <ant antfile="${temp.build.dir}/source-spec.ant.xml" />
             </then>
         </if>
-
-
-        <if><available file="${temp.build.dir}/source-rnd-spec.ant.xml"/>
-          <then>
-              <ant antfile="${temp.build.dir}/source-rnd-spec.ant.xml" />
-              <move file="${build.drive}/output/logs/BOM/sources.csv" tofile="${build.drive}/output/logs/BOM/sources_rnd.csv"/>
-          </then>
-        </if>
-        
-        <ant antfile="${temp.build.dir}/source-spec.ant.xml" />
         <stopwatch name="sf-get-source" action="elapsed"/>
     </target>
     
@@ -534,29 +539,23 @@
         <!-- TODO: 2. Change fmpp data to be a full property rather than relative path -->
         <delete file="${temp.build.dir}/source-spec.ant.xml"/>
         
-        <property name="sf.test.csv.file" value="nul:"/>
-        
-        <if>
-            <istrue value="${sf.spec.sourcesync.enable}" />
+        <property name="sf.source.csv.file" value="${sf.spec.sourcesync.sourcespecdir}/${sf.spec.sourcesync.sourcespecfile}"/>
+        <if><available file="${sf.source.csv.file}"/>
             <then>
-                <property name="sf.source.csv.file" value="${sf.spec.sourcesync.sourcespecdir}/${sf.spec.sourcesync.sourcespecfile}"/>
-                <property name="sf.source_rnd.csv.file" value="${sf.spec.sourcesync.sourcespecdir}/${sf.spec.sourcesync.sourcespecfile.rnd}"/>
+                <fmpp sourceFile="${sf.common.config.dir}/templates/source-spec.ant.xml.ftl"
+                      outputFile="${temp.build.dir}/source-spec.ant.xml">
+                    <data expandProperties="yes">
+                        ant: antProperties()
+                        data: [
+                            csv(${sf.source.csv.file}, {separator:','})
+                        ]
+                    </data>
+                </fmpp>
             </then>
         </if>
-        <property name="sf.source.csv.file"     value="nul:"/>
-        <property name="sf.source_rnd.csv.file" value="nul:"/>
 
-        <fmpp sourceFile="${sf.common.config.dir}/templates/source-spec.ant.xml.ftl"
-              outputFile="${temp.build.dir}/source-spec.ant.xml">
-              <data expandProperties="yes">
-                    ant: antProperties()
-                    data: [
-                        csv(${sf.source.csv.file}, {separator:','})
-                    ]
-              </data>
-        </fmpp>
-		
-        <if><available file="${sf.spec.sourcesync.sourcespecdir}/${sf.spec.sourcesync.sourcespecfile.rnd}"/>
+        <property name="sf.source_rnd.csv.file" value="${sf.spec.sourcesync.sourcespecdir}/${sf.spec.sourcesync.sourcespecfile.rnd}"/>
+        <if><available file="${sf.source_rnd.csv.file}"/>
           <then>
             <fmpp sourceFile="${sf.common.config.dir}/templates/source-spec.ant.xml.ftl"
                   outputFile="${temp.build.dir}/source-rnd-spec.ant.xml">
@@ -569,8 +568,10 @@
             </fmpp>
           </then>
         </if>
+
+        <property name="sf.test.csv.file" value="nul:"/>
         <if>
-            <istrue value="${sf.spec.smoketest.enable}"/>
+            <available file="${sf.test.csv.file}"/>
             <then>
             <fmpp sourceFile="${sf.common.config.dir}/templates/source-spec.ant.xml.ftl"
                   outputFile="${temp.build.dir}/source-test-spec.ant.xml">
@@ -713,21 +714,21 @@
     </target>
 
     <target name="sf-preprocess-package-config">
-	<!-- preprocess by stripping the header of the rnd source and concat with sources.csv -->
-    <loadfile srcfile="${sf.spec.sourcesync.sourcespecdir}/${sf.spec.sourcesync.sourcespecfile.rnd}" property="rnd.source.no.header" failonerror="false">
-    <filterchain>
-      <headfilter skip="1"/>
-    </filterchain>
-    </loadfile>
-    <echo message="${rnd.source.no.header}" file="${temp.build.dir}/sources_rnd_no_header.csv"/>
-    
-    <!-- order is important as the rnd source now has no header -->
-    <concat destfile="${temp.build.dir}/sources.csv" force="yes">
-       <file file="${sf.spec.sourcesync.sourcespecdir}/${sf.spec.sourcesync.sourcespecfile}"/>
-       <file file="${temp.build.dir}/sources_rnd_no_header.csv"/>
-    </concat>
+        <!-- preprocess by stripping the header of the rnd source and concat with sources.csv -->
+        <loadfile srcfile="${sf.spec.sourcesync.sourcespecdir}/${sf.spec.sourcesync.sourcespecfile.rnd}" property="rnd.source.no.header" failonerror="false">
+            <filterchain>
+                <headfilter skip="1"/>
+            </filterchain>
+        </loadfile>
+        <echo message="${rnd.source.no.header}" file="${temp.build.dir}/sources_rnd_no_header.csv"/>
 
-    <echo message="${sf.spec.sourcesync.sourcespecdir}/${sf.spec.sourcesync.sourcespecfile}"/>
+        <!-- order is important as the rnd source now has no header -->
+        <concat destfile="${temp.build.dir}/sources.csv" force="yes">
+           <file file="${sf.spec.sourcesync.sourcespecdir}/${sf.spec.sourcesync.sourcespecfile}"/>
+           <file file="${temp.build.dir}/sources_rnd_no_header.csv"/>
+        </concat>
+
+        <echo message="${sf.spec.sourcesync.sourcespecdir}/${sf.spec.sourcesync.sourcespecfile}"/>
         <exec executable="perl" dir="${build.drive}/" failonerror="false" output="${build.log.dir}/zipconfig.log">
             <arg value="${sf.common.config.dir}/tools/populateziptemplate.pl"/>
             <arg value="${temp.build.dir}/sources.csv"/>
@@ -821,7 +822,7 @@
     <!-- Unpack the rnd zips ready to be used in the build -->
     <target name="sf-unpack-rnd">
         <echo message="INFO Unpacking any available RnD binaries"/>
-		<mkdir dir="${build.drive}/output/zips/"/>
+        <mkdir dir="${build.drive}/output/zips/"/>
         <for param="rndZip">
             <fileset dir="${build.drive}/output/zips/">
                 <include name="binaries_*.zip"/> <!-- Internal rnd bins -->
--- a/common/templates/run-qmake.ant.xml.ftl	Tue Jul 20 23:33:58 2010 +0100
+++ b/common/templates/run-qmake.ant.xml.ftl	Tue Aug 10 19:43:50 2010 +0100
@@ -1,116 +1,107 @@
 <?xml version="1.0"?>
 <project name="run-qmake" default="all">
 
-    <target name="all">
+    <target name="all" depends="sf-build-qmake,sf-build-qtextension-tools,sf-configure-orbit,sd-qmake-all-profiles"/>
 
     <!-- Qmake needs to have been built in this environment, to generate bld.infs to built Qt itself.  
          Qmake.exe only exists in the source tree if its been built  -->
-
-    <if><not><available file="${r'$'}{build.drive}/sf/mw/qt/bin/qmake.exe" type="file"/></not>
-    <then>
-	        <sequential>
-	<#list data["//unit/@bldFile/.."] as unit>
-          <#if (unit.@bldFile=="/sf/mw/qt/src/s60installs/deviceconfiguration")>
-                <echo>INFO: Building and configuring qmake for ${unit.@bldFile}</echo>
-                <if>
-                    <available file="${r'$'}{build.drive}/${unit.@bldFile}" type="dir"/>
-                    <then>
-                        <exec executable="cmd" dir="${r'$'}{build.drive}/${unit.@bldFile}" failonerror="false">
-                            <arg value="/C"/>
-                            <arg line="sbs -c tools2 -j 4 --logfile=${r'$'}{build.drive}/output/logs/${ant['build.id']}_compile_qmake.log"/>
-                        </exec>
-                    </then>
-                    <else>
-                       <echo message="ERROR: Directory ${r'$'}{build.drive}/${unit.@bldFile} doesn't exist."/>
-                       <fail message="Unit /sf/mw/qt/src/s60installs/deviceconfiguration is in the model, but not present on disk. Cannot build qmake!"/>
-                    </else>
-                </if>          
-	      </#if>
-    </#list>			
-			</sequential>
-    </then>
-    </if>
-	        <sequential>
+    <target name="sf-build-qmake">
+        <if><not><available file="${r'$'}{build.drive}/sf/mw/qt/bin/qmake.exe" type="file"/></not>
+            <then>
+                <sequential>
+  <#list data["//unit[@bldFile = '/sf/mw/qt/src/s60installs/deviceconfiguration']"] as unit>
+                    <echo>INFO: Building and configuring qmake for ${unit.@bldFile}</echo>
+                    <if>
+                        <available file="${r'$'}{build.drive}${unit.@bldFile}" type="dir"/>
+                        <then>
+                            <exec executable="cmd" dir="${r'$'}{build.drive}${unit.@bldFile}" failonerror="false">
+                                <arg value="/C"/>
+                                <arg line="sbs -c tools2 -j 4 --logfile=${r'$'}{build.drive}/output/logs/${ant['build.id']}_compile_qmake.log"/>
+                            </exec>
+                        </then>
+                        <else>
+                           <echo message="ERROR: Directory ${r'$'}{build.drive}${unit.@bldFile} doesn't exist."/>
+                           <fail message="Unit /sf/mw/qt/src/s60installs/deviceconfiguration is in the model, but not present on disk. Cannot build qmake!"/>
+                        </else>
+                    </if>          
+  </#list>
+                </sequential>
+            </then>
+        </if>
+    </target>
 
-	<#list data["//unit/@bldFile/.."] as unit>
-          <#if (unit.@bldFile=="/sf/mw/qtextensions/group")>
-                <echo>INFO: Configuring qtextensions for ${unit.@bldFile}</echo>
-                <if>
-                    <available file="${r'$'}{build.drive}/${unit.@bldFile}" type="dir"/>
-                    <then>
-                        <exec executable="cmd" dir="${r'$'}{build.drive}/${unit.@bldFile}" failonerror="false">
-                            <arg value="/C"/>
-                            <arg line="sbs -c tools2 -j 4 --logfile=${r'$'}{build.drive}/output/logs/${ant['build.id']}_compile_qtextensions.log"/>
-                        </exec>
-                    </then>
-                    <else>
-                       <echo message="ERROR: Directory ${r'$'}{build.drive}/${unit.@bldFile} doesn't exist."/>
-                    </else>
-                </if>          
-	      </#if>
-    </#list>			
-			</sequential>
-			
+    <target name="sf-build-qtextension-tools">
+        <sequential>
+  <#list data["//unit[@bldFile = '/sf/mw/qtextensions/group']"] as unit>
+            <echo>INFO: Configuring qtextensions for ${unit.@bldFile}</echo>
+            <if>
+                <available file="${r'$'}{build.drive}${unit.@bldFile}" type="dir"/>
+                <then>
+                    <exec executable="cmd" dir="${r'$'}{build.drive}${unit.@bldFile}" failonerror="false">
+                        <arg value="/C"/>
+                        <arg line="sbs -c tools2 -j 4 --logfile=${r'$'}{build.drive}/output/logs/${ant['build.id']}_compile_qtextensions.log"/>
+                    </exec>
+                </then>
+                <else>
+                    <echo message="ERROR: Directory ${r'$'}{build.drive}${unit.@bldFile} doesn't exist."/>
+                </else>
+            </if>          
+  </#list>
+        </sequential>
+    </target>
+
+    <target name="sf-configure-orbit">
+        <sequential>
+  <#list data["//unit[@proFile = 'hb.pro']"] as unit>
+            <echo>Running configure.py for ${unit.@bldFile}/${unit.@proFile}</echo>
+            <if>
+                <available file="${r'$'}{build.drive}${unit.@bldFile}" type="dir"/>
+                <then>
+                    <exec executable="cmd" dir="${r'$'}{build.drive}${unit.@bldFile}" failonerror="false" output="${r'$'}{build.drive}/output/logs/${ant['build.id']}_compile_hb_configure.log">
+                        <arg value="/C"/>
+                        <arg value="python"/>
+                        <arg line ="configure.py --qmake-spec=symbian-sbsv2 --platform=symbian --qmake-options=MMP_RULES+=EXPORTUNFROZEN CONFIG+=sgimagelite_support DEFINES+=HB_EFFECTS_OPENVG DEFINES+=HB_FILTER_EFFECTS"/>
+                    </exec>
+                        
+                    <echo>INFO: Exporting Orbit mkspecs to epoc32\tools for ${unit.@bldFile}/${unit.@proFile}</echo>
+                    <echo>INFO: Running Orbit theme installer, make install step</echo>
+                    <exec executable="cmd" dir="${r'$'}{build.drive}${unit.@bldFile}" failonerror="false" output="${r'$'}{build.drive}/output/logs/${ant['build.id']}_install_hb_configure.log">
+                        <arg value="/C"/>
+                        <arg value="make install"/>
+                    </exec>
+                </then>
+                <else>
+                    <echo message="ERROR: Directory ${r'$'}{build.drive}${unit.@bldFile} doesn't exist."/>
+                </else>
+            </if>
+  </#list>
+        </sequential>
+    </target>
+
+    <target name="sd-qmake-all-profiles">
+        <parallel threadCount="${r'$'}{number.of.threads}">
+  <#list data["//unit[@proFile != 'hb.pro']"] as unit>
             <sequential>
-    <#list data["//unit/@proFile/.."] as unit>
-          <#if (unit.@proFile=="hb.pro")>
-                <echo>Running configure.py for ${unit.@bldFile}/${unit.@proFile}</echo>
-                <if>
-                    <available file="${r'$'}{build.drive}/${unit.@bldFile}" type="dir"/>
-                    <then>
-                        <exec executable="cmd" dir="${r'$'}{build.drive}/${unit.@bldFile}" failonerror="false" output="${r'$'}{build.drive}/output/logs/${ant['build.id']}_compile_hb_configure.log">
-                            <arg value="/C"/>
-                            <arg value="python"/>
-                            <arg line ="configure.py --qmake-spec=symbian-sbsv2 --platform=symbian --qmake-options=MMP_RULES+=EXPORTUNFROZEN CONFIG+=sgimagelite_support DEFINES+=HB_EFFECTS_OPENVG DEFINES+=HB_FILTER_EFFECTS"/>
-                        </exec>
-                        
-                        <echo>INFO: Exporting Orbit mkspecs to epoc32\tools for ${unit.@bldFile}/${unit.@proFile}</echo>
-                        <echo>INFO: Running Orbit theme installer, make install step</echo>
-                        <exec executable="cmd" dir="${r'$'}{build.drive}/${unit.@bldFile}" failonerror="false" output="${r'$'}{build.drive}/output/logs/${ant['build.id']}_install_hb_configure.log">
-                            <arg value="/C"/>
-                            <arg value="make install"/>
-                        </exec>
-                    </then>
-                    <else>
-                       <echo message="ERROR: Directory ${r'$'}{build.drive}/${unit.@bldFile} doesn't exist."/>
-                    </else>
-                </if>
-	  </#if>
-    </#list>
-
-            </sequential>
-
-        <parallel threadCount="${r'$'}{number.of.threads}">
-    <#list data["//unit/@proFile/.."] as unit>
-            <sequential>
-
-          <#if (unit.@proFile!="hb.pro")>
-
                 <echo>Running qmake for ${unit.@bldFile}/${unit.@proFile}</echo>
                 <if>
-                    <available file="${r'$'}{build.drive}/${unit.@bldFile}" type="dir"/>
+                    <available file="${r'$'}{build.drive}${unit.@bldFile}" type="dir"/>
                     <then>
-                        <exec executable="cmd" dir="${r'$'}{build.drive}/${unit.@bldFile}" failonerror="false">
+                        <exec executable="cmd" dir="${r'$'}{build.drive}${unit.@bldFile}" failonerror="false">
                             <arg value="/C"/>
                             <arg value="qmake"/>
                             <!-- arg value="-listgen"/ -->
-                            <#if unit.@qmakeArgs[0]??>
-                            <arg line="${unit.@qmakeArgs?xml}"/>
-                            <#else>
-                            <arg line="${ant['qt.qmake.default.args']?xml}"/>
-                            </#if>
+      <#escape x as x?xml>
+                            <arg line="${unit.@qmakeArgs[0]!ant['qt.qmake.default.args']}"/>
+      </#escape>
                             <arg value="${unit.@proFile?xml}"/>
                         </exec>
                     </then>
                     <else>
-                       <echo message="ERROR: Directory ${r'$'}{build.drive}/${unit.@bldFile} doesn't exist."/>
+                       <echo message="ERROR: Directory ${r'$'}{build.drive}${unit.@bldFile} doesn't exist."/>
                     </else>
                 </if>          
-	  </#if>
-
-
             </sequential>
-    </#list>
+  </#list>
         </parallel>
     </target>
     
--- a/common/templates/source-spec.ant.xml.ftl	Tue Jul 20 23:33:58 2010 +0100
+++ b/common/templates/source-spec.ant.xml.ftl	Tue Aug 10 19:43:50 2010 +0100
@@ -17,19 +17,19 @@
 <#list data as csv_file>
   <#list csv_file as pkg_detail>
     <target name="sf-prebuild-${count}">
-    	
-    	<!-- if defined the revision override take that as revision and change the url to point to FCL -->
-    	<if>
-    		<not><equals arg1="${ant['sf.spec.sources.revision']}" arg2="" trim="true"/></not>
-    		<then>
-    			<property name="sources.${count}.revision" value="${ant['sf.spec.sources.revision']}"/>
-    			<propertyregex property="sources.${count}.URL" input="${pkg_detail.source}" regexp="/MCL/" casesensitive="false" replace="/FCL/" defaultValue="${pkg_detail.source}"/>
-    		</then>
-    		<else>
-    			<property name="sources.${count}.revision" value="${pkg_detail.pattern}"/>
-    			<property name="sources.${count}.URL" value="${pkg_detail.source}"/>
-    		</else>
-    	</if>
+        
+        <!-- if defined the revision override take that as revision and change the url to point to FCL -->
+        <if>
+            <not><equals arg1="${ant['sf.spec.sources.revision']}" arg2="" trim="true"/></not>
+            <then>
+                <property name="sources.${count}.revision" value="${ant['sf.spec.sources.revision']}"/>
+                <propertyregex property="sources.${count}.URL" input="${pkg_detail.source}" regexp="/MCL/" casesensitive="false" replace="/FCL/" defaultValue="${pkg_detail.source}"/>
+            </then>
+            <else>
+                <property name="sources.${count}.revision" value="${pkg_detail.pattern}"/>
+                <property name="sources.${count}.URL" value="${pkg_detail.source}"/>
+            </else>
+        </if>
         
         <!-- Create sf\layer dir on build dir -->
         <mkdir dir="${ant['build.drive']}${pkg_detail.dst}"/>
@@ -45,7 +45,7 @@
         </if>
         
         <!-- Convert source tag/branch to to changeset hash, in case it's a local tag on the server -->
-        <retry tries="10" uniquename="${count}">
+        <retry tries="10" uniquename="${count}" failonerror="false">
             <sequential>
                 <exec executable="hg" failonerror="true" output="${ant['temp.build.dir']}/sf.sourcesync.${count}.checksum" error="nul:">
                     <arg value="id"/>
@@ -58,6 +58,7 @@
                 <propertyregex property="sf.sourcesync.${count}.checksum" override="true" input="${dollar}{sf.sourcesync.${count}.checksum}" regexp="(\S{12})" select="\1"/>
             </sequential>
         </retry>
+        <fail unless="sf.sourcesync.${count}.checksum" message="Failed to get changeset ID for revision '${dollar}{sources.${count}.revision}' for repo ${dollar}{sources.${count}.URL}"/>
 
         <if>
             <and>
@@ -104,7 +105,7 @@
                             </if>
                         </forget>
                         <!-- In the meantime, by-pass it for this build -->
-                        <retry tries="30" uniquename="${count}">
+                        <retry tries="30" uniquename="${count}" failonerror="false">
                             <sequential>
                                 <echo message="Clone from ${dollar}{sources.${count}.URL} to ${ant['build.drive']}${pkg_detail.dst}"/>
                                 <exec executable="hg" dir="${ant['build.drive']}/" failonerror="true">
@@ -113,11 +114,13 @@
                                     <arg value="${dollar}{sources.${count}.URL}"/>
                                     <arg value="${ant['build.drive']}${pkg_detail.dst}"/>
                                 </exec>
+                                <property name="sf.spec.sourcesync.cache.clone.succeeded.${count}" value="1"/>
                             </sequential>
                             <cleanup>
                                 <delete dir="${ant['build.drive']}${pkg_detail.dst}"/>
                             </cleanup>
                         </retry>
+                        <fail unless="sf.spec.sourcesync.cache.clone.succeeded.${count}" message="ERROR: Failed to clone ${dollar}{sources.${count}.URL} to ${ant['build.drive']}${pkg_detail.dst}"/>
                     </else>
                 </if>
                 <!-- Update to required revision -->
@@ -129,7 +132,7 @@
             </then>
             <else>
                 <!-- Package not in cache, or cache not in use -->
-                <retry tries="10" uniquename="${count}">
+                <retry tries="10" uniquename="${count}" failonerror="false">
                     <sequential>
                         <echo message="Clone from ${dollar}{sources.${count}.URL} to ${ant['build.drive']}${pkg_detail.dst}"/>
                         <exec executable="hg" dir="${ant['build.drive']}/" failonerror="true">
@@ -138,11 +141,13 @@
                             <arg value="${dollar}{sources.${count}.URL}"/>
                             <arg value="${ant['build.drive']}${pkg_detail.dst}"/>
                         </exec>
+                        <property name="sf.spec.sourcesync.cache.clone.succeeded.${count}" value="1"/>
                     </sequential>
                     <cleanup>
                         <delete dir="${ant['build.drive']}${pkg_detail.dst}"/>
                     </cleanup>
                 </retry>
+                <fail unless="sf.spec.sourcesync.cache.clone.succeeded.${count}" message="ERROR: Failed to clone ${dollar}{sources.${count}.URL} to ${ant['build.drive']}${pkg_detail.dst}"/>
                 <!-- Update to required version -->
                 <exec executable="hg" dir="${ant['build.drive']}${pkg_detail.dst}" failonerror="true">
                     <arg value="update"/>
@@ -152,25 +157,24 @@
                 <if>
                     <isset property="sf.spec.sourcesync.cachelocation.${count}"/>
                     <then>
+                        <!-- Init cache -->
+                        <mkdir dir="${dollar}{sf.spec.sourcesync.cachelocation.${count}}"/>
+                        <delete dir="${dollar}{sf.spec.sourcesync.cachelocation.${count}}" failonerror="true" />
+                        <echo message="Initialise cache at ${dollar}{sf.spec.sourcesync.cachelocation.${count}}"/>
+                        <!-- Initialise an empty repo -->
+                        <exec executable="hg" dir="${ant['build.drive']}/" failonerror="false">
+                            <arg value="init"/>
+                            <arg value="${dollar}{sf.spec.sourcesync.cachelocation.${count}}"/>
+                        </exec>
+                        <!-- Configure the paths and the speed-up flag on the cache repo -->
+                        <echo file="${dollar}{sf.spec.sourcesync.cachelocation.${count}}/.hg/hgrc" append="false" message="[paths]${dollar}{line.separator}"/>
+                        <echo file="${dollar}{sf.spec.sourcesync.cachelocation.${count}}/.hg/hgrc" append="true" message="default = ${dollar}{sources.${count}.URL}${dollar}{line.separator}"/>
+                        <echo file="${dollar}{sf.spec.sourcesync.cachelocation.${count}}/.hg/hgrc" append="true" message="${dollar}{line.separator}"/>
+                        <echo file="${dollar}{sf.spec.sourcesync.cachelocation.${count}}/.hg/hgrc" append="true" message="[server]${dollar}{line.separator}"/>
+                        <echo file="${dollar}{sf.spec.sourcesync.cachelocation.${count}}/.hg/hgrc" append="true" message="uncompressed=True${dollar}{line.separator}"/>
+                        <echo message="(Push from ${ant['build.drive']}${pkg_detail.dst} to ${dollar}{sf.spec.sourcesync.cachelocation.${count}} in background)"/>
                         <forget>
                             <nice newpriority="1"/>
-                            <!-- Init cache -->
-                            <mkdir dir="${dollar}{sf.spec.sourcesync.cachelocation.${count}}"/>
-                            <delete dir="${dollar}{sf.spec.sourcesync.cachelocation.${count}}" failonerror="true" />
-                            <echo message="Initialise cache at ${dollar}{sf.spec.sourcesync.cachelocation.${count}}"/>
-                            <!-- Clone source to get the right default repo -->
-                            <exec executable="hg" dir="${ant['build.drive']}/" failonerror="false">
-                                <arg value="clone"/>
-                                <arg value="-r"/>
-                                <arg value="null"/>
-                                <arg value="${dollar}{sources.${count}.URL}"/>
-                                <arg value="${dollar}{sf.spec.sourcesync.cachelocation.${count}}"/>
-                            </exec>
-                            <!-- Set the speed-up flag on the cache repo -->
-                            <echo file="${dollar}{sf.spec.sourcesync.cachelocation.${count}}/.hg/hgrc" append="true" message="${dollar}{line.separator}"/>
-                            <echo file="${dollar}{sf.spec.sourcesync.cachelocation.${count}}/.hg/hgrc" append="true" message="[server]${dollar}{line.separator}"/>
-                            <echo file="${dollar}{sf.spec.sourcesync.cachelocation.${count}}/.hg/hgrc" append="true" message="uncompressed=True${dollar}{line.separator}"/>
-                            <echo message="Push from ${ant['build.drive']}${pkg_detail.dst} to ${dollar}{sf.spec.sourcesync.cachelocation.${count}} in background"/>
                             <exec executable="hg" dir="${ant['build.drive']}${pkg_detail.dst}" failonerror="false">
                                 <arg value="push"/>
                                 <arg value="-f"/>
--- a/common/tools/generate_package_defs.pl	Tue Jul 20 23:33:58 2010 +0100
+++ b/common/tools/generate_package_defs.pl	Tue Aug 10 19:43:50 2010 +0100
@@ -52,6 +52,15 @@
 		print "$splitmodel2_cmd\n";
 		system($splitmodel2_cmd);
 	}
+	if ($codeline eq 'symbian4') # also update tip_pbc (package based contribution) branch
+	{
+		my $rmdir3_cmd = "del /S  packages\\tip_pbc\\package_definition.xml >nul";
+		print "$rmdir3_cmd\n";
+		system($rmdir3_cmd);
+		my $splitmodel3_cmd = "perl ..\\split_sysdef.pl -s platforms\\$codeline\\single\\sysdefs\\system_model.xml -o packages\\tip_pbc";
+		print "$splitmodel3_cmd\n";
+		system($splitmodel3_cmd);
+	}
 	my $addremove_cmd = "hg -R packages addremove";
 	print "$addremove_cmd\n";
 	system($addremove_cmd);
@@ -65,7 +74,7 @@
 		system($commit_cmd);
 		my $push_cmd = "hg -R packages push http://darios:symbian696b\@developer.symbian.org/oss/MCL/sftools/fbf/projects/packages";
 		print "$push_cmd\n";
-		system($push_cmd);
+		#system($push_cmd);
 	}
 }
 
--- a/sf-package/symbian3_props.ant.xml	Tue Jul 20 23:33:58 2010 +0100
+++ b/sf-package/symbian3_props.ant.xml	Tue Aug 10 19:43:50 2010 +0100
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 
 <project name="SYMBIAN3-PROPS">
-  <property name="sf.spec.baseline.location" value="\\v800020\releases\PDK_3.0.0"/>
+  <property name="sf.spec.baseline.location" value="\\v800020\releases\PDK_3.0.1"/>
 </project>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sf-package/tip_pbc_props.ant.xml	Tue Aug 10 19:43:50 2010 +0100
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+
+<project name="COMPILERCOMPATIBILITY-PROPS">
+  <property name="sf.spec.baseline.location" value="\\v800020\Candidates\symbian4_FCL.single.725"/>
+</project>
+